Commit Graph

1901 Commits

Author SHA1 Message Date
admin 5aeb36b5bd website: fix the phone menu and the footer column - both live defects
gates / gates (push) Successful in 6m42s
Reported from a real phone. Both were mine, both shipped in the switch.

1. THE PHONE MENU WAS EMPTY. The drawer slid open correctly but had no items in
   it. site.css's OLD mobile nav was still reaching the shell's sidebar: under
   @media (max-width: 900px) it sets .nav-links to position:fixed; right:-100%,
   which parked the menu off-canvas INSIDE the drawer. Measured at 390px and
   860px: position fixed, right -280px.

   The cause is a hole in my own check. At STOP 1 I diffed the two stylesheets'
   declaration sets and found "exactly six" leaking declarations - but that diff
   EXCLUDED @media blocks. Re-run media-aware, the real number is FORTY, and the
   worst of them only apply below 900px, which is why desktop looked right and a
   phone did not. A check that silently skips part of its subject is not a check;
   this one reported a confident, wrong number.

   Fixed at the source rather than per-property: every selector belonging to the
   website's OLD chrome (nav, .nav-links*, .mobile-overlay, .hamburger, .logo*,
   .lang-globe-li - 29 occurrences) is now scoped `body:not(.shell)`. Scoped, not
   deleted, so a future non-shell page still works. .hamburger-box and
   .hamburger-line are deliberately left unscoped: the shell's burger uses them.
   Leaks after the fix: 40 -> 0.

2. THE FOOTER RENDERED AS A SECOND COLUMN at the top right on 16 pages. body is a
   flex row on a shell page, and my insert only moved the footer inside <main>
   when the page ENDED with </main>; pages with scripts after it fell through and
   left the footer as a direct child of body, i.e. a flex sibling of the sidebar.
   Moved inside <main> on all 16, each move asserted to have landed inside.

Both are now gated: gate 3b requires every shell page's footer to be INSIDE
<main class="content">, red-proofed by putting one outside and watching it convict.

site.css?v=23 / shell.css?v=23.
2026-10-11 16:25:01 +02:00
admin f92e81ee14 gates: re-anchor four site decoys to the shell markup
gates / gates (push) Successful in 6m33s
The decoys plant a known defect and assert the gate convicts, so when the markup
they anchor on changes they must be rebuilt rather than deleted - which is exactly
what test_gate_decoys.py refused to let pass ('the decoy's anchor is gone or
ambiguous').

  en-nav-drift          drifts a SIDEBAR entry now, and expects gate 3b's message
                        rather than gate 3's - the website's <nav> is gone
  leftover-text-switch  anchors on <details class=lang-globe>; the old nav's
                        <li class=lang-globe-li> wrapper no longer exists
  lang-attr             <html lang=en class=no-js>, the progressive-enhancement hook
  ascii-hungarian-text  anchors on the new English home's own link text; its old
                        'Contact form' link went when the page became a real twin

The other decoys in that section still anchor correctly and were left alone -
checked each one against the new files rather than rewriting the lot.
2026-10-11 16:05:14 +02:00
admin bd708b3593 report: M3 live - the changelog, the session report and the operator's screen
gates / gates (push) Failing after 3m58s
Records what shipped, the two operator decisions as answered, what the website and
the controller now share and how a change flows between them, and the five faults
that measurement caught before the switch rather than after.

head-before.json / head-after.json are kept as the evidence that the switch changed
no SEO-bearing tag: the only difference across 19 pages is the dash substitution
inside the two FAQ pages' JSON-LD.
2026-10-11 16:00:57 +02:00
admin 6059505216 website: M3 goes live - the whole site switches to the controller's shell at once
gates / gates (push) Failing after 13m11s
Part D. Every public page now wears the controller's frame around the website's
own content. One commit, as asked: never half old, half new.

  20 pages switched (12 Hungarian incl. the hidden prices page, 8 English)
  website/preview/ deleted entirely - A, M1, M2 and M3 studies all gone
  robots.txt: the Disallow: /preview/ line removed with them
  site.css?v=22 / shell.css?v=22 on every page

PROVED before pushing, not after:
  * HEAD TAGS: title, meta description, keywords, author, robots, canonical, every
    hreflang, all seven Open Graph tags, all four Twitter tags and the JSON-LD
    captured on all 19 pages before the switch and compared after. The ONLY
    difference anywhere is the dash substitution inside the two FAQ pages'
    FAQPage JSON-LD - verified by applying the same substitution to the "before"
    copy and getting an exact match. Nothing else moved.
  * VISIBLE TEXT: identical to the live pages word for word, legal texts identical
    with no substitution permitted at all.
  * No page is left noindex (the two download pages' noindex,follow is their own,
    pre-existing and unchanged), no page mentions /preview/, every page has a
    footer, no page overflows at 390px.

THE HEAD-TAG DIFF EARNED ITS PLACE. The home page was about to ship carrying
`noindex, nofollow` from the preview, and had lost meta keywords, meta author, all
seven Open Graph tags, all four Twitter tags and the LocalBusiness JSON-LD -
because its head was hand-built while every other page carried its live one over.
The diff caught it; nothing on the rendered page would have. The generator now
uses the live head for EVERY page including the home one.

szolgaltatasok-nonpublic.html was converted too. It is in no menu and was not in
the brief's list, but leaving one page on the old chrome would have left the site
half-switched - which is the one thing part D was not allowed to do.

scripts/site_gates.py: SHELL is now the real page set; MOCKUPS is empty; gate 3's
old nav/footer loop keeps working for any page added later WITHOUT the shell, and
skips the ones that have it.
2026-10-11 15:57:35 +02:00
admin 58e308352f website: the shell keeps the footer - it is the only route to the legal pages
gates / gates (push) Failing after 11m54s
Caught BEFORE the switch, not after. Stripping the website's chrome also stripped
<footer>, and the shell has none of its own. Every one of the 19 pages had lost:
the link to the Adatkezelesi tajekoztato and the Feltetelek, the operator's name,
info@felhom.eu, and the copyright line. The legal pages are in no menu, so they
would have become unreachable from navigation entirely.

The footer is now carried VERBATIM from each live page into the bottom of the
content column. Verified on all 19: footer present, legal link present, e-mail
present, and the footer sits INSIDE <main class=content> rather than becoming a
flex sibling of the sidebar.

Gate 3b now checks the footer as well as the sidebar across the shell set, so the
guarantee gate 3 used to give is not lost in the move. Red-proofed: removing one
page's footer convicts.
2026-10-11 15:53:49 +02:00
admin d5199ca634 website: the English home page is now a true twin of the Hungarian one
gates / gates (push) Failing after 14m13s
Operator's decision at STOP 2: mirror it first, then switch. It was the old design
reframed - 10 786px tall against the Hungarian home's 4 186px - because the
/preview/ round never produced an English twin.

Every string is either lifted VERBATIM from the live English home (the ten
capability cards, the four dashboard captions, the five steps, both sides of the
cloud comparison, the three closed-test cards, the apps count line) or is one of
twelve entries in a TRANSLATED table - faithful translations of Hungarian
sentences the /preview/ round introduced, which therefore have no English original.
Nothing is invented, and the English promises nothing the Hungarian does not.

The generator ASSERTS that each string it lifts is still present upstream, so if
the live English page changes shape the build fails rather than silently shipping
a page with holes in it.

Its <head> is still the live page's, so title, description, canonical, hreflang,
Open Graph and JSON-LD survive untouched. 35.8 KB -> 25.4 KB.

Gate 16 (no Hungarian on an English page) passes, which matters here because this
is the one page where I wrote English prose rather than moving it.
2026-10-11 15:51:30 +02:00
admin 7b6bcd2416 audit: M3 STOP 2 - the page table and what was checked on all 19
gates / gates (push) Failing after 13m34s
Records the three faults that measurement found and looking would not have:
168 words silently deleted by the first page-header transform, the contact pages'
header sliding under the sidebar (content column at x=642 instead of 240), and two
pages that already scrolled sideways on a phone BEFORE M3.

Also raises the one thing needing an operator decision: the English home page is
the old design in the new frame, because the /preview/ round never produced an
English twin. 4 186px tall in Hungarian, 10 786px in English.
2026-10-11 14:25:07 +02:00
admin 91ba50ea2c website: the sidebar button fits when the apps group is open
gates / gates (push) Failing after 13m42s
On /alkalmazasok the Alkalmazasok group renders expanded, which gives the sidebar
a 16px scrollbar and narrows it from 239 to 224. At .95rem the Hungarian label
wrapped to two lines there (the English one still fitted, which is why it showed
on one page and not its twin). Sized to the narrow case, measured not guessed.
2026-10-11 14:23:16 +02:00
admin 9b90a02bb4 website: the contact pages' header no longer slides under the sidebar
gates / gates (push) Successful in 8m20s
kapcsolat.html and en/contact.html keep their page header OUTSIDE <main>. Left
there, the converted header became a FLEX SIBLING of the sidebar: measured, it
took 401px and pushed .content from x=240 to x=642, so the header sat behind the
sidebar and the form rendered at two thirds width.

Anything before <main> now moves inside it. Checked structurally across all 19
pages rather than by looking at two: no page has stray top-level content, and
every .content starts at x=240 with the full 1185px column.

Found by measuring where elements actually sit, after a screenshot looked wrong -
the same check also confirmed the two elements at x=-9999 on those pages are the
form's intentional spam honeypot, not a layout fault.
2026-10-11 14:21:24 +02:00
admin f6044dc0a7 website: long checksums and URLs no longer scroll a phone sideways
gates / gates (push) Successful in 8m15s
Measured at 390px on the LIVE pages, so this is pre-existing and not something the
shell introduced:
  /letoltes    scrollWidth 609 - the 64-character SHA-256 inside <code>
  /adatkezeles scrollWidth 478 - a long facebook.com legal URL used as link text
and the same on their English twins.

overflow-wrap: anywhere changes only where the line breaks; selecting and copying
still yields the whole unbroken string, which matters for a checksum. The legal
pages' words are untouched - this is CSS.

Small enough to fix in the session rather than file.
2026-10-11 14:16:59 +02:00
admin 0b34be8449 website: M3 part C - all 18 remaining pages moved into the shell
gates / gates (push) Successful in 8m50s
Staged under /preview/m3/. Nothing live. 19 shell pages in total with the home.

Each page keeps its own <head> byte-for-byte apart from two additions (shell.css
and the no-js/js hook), so title, meta description, canonical, hreflang, Open Graph
and JSON-LD all survive the move untouched. The body loses the website's
<nav>/<footer> and the old hamburger script, and gains the shell.

PROVED, not assumed - a word-level diff of every page's visible text, live vs
shell, with the nav and footer removed from both:
  * 18 of 18 pages: visible text IDENTICAL after the one allowed substitution
  * adatkezeles and feltetelek: identical with NO substitution permitted at all.
    The legal texts are reviewed documents; the frame changed, the words did not.

That check earned itself immediately. The first version of the page-header
transform rebuilt the block from its <h1> and first <p> and SILENTLY DROPPED the
rest: the "Fontos tudnivalok" / "Good to know" disclaimer banner on both apps
pages and the 404's English line - 168 words across three pages. Nothing looked
wrong on the page. The diff found it.

Em dashes: 318 replaced with the Hungarian gondolatjel across 16 pages (gyik and
en/faq 104 each). The FAQ pages' JSON-LD is swept with the SAME substitution, so
gate 17's equality with the visible answers still holds - it does, on both.

scripts/site_gates.py:
  * SHELL now holds all 19 pages.
  * is_en(): a page is English if it is a TWINS value OR lives under an en/
    directory. Without the second half the dash-language, <html lang> and
    no-Hungarian gates all judged preview/m3/en/* as Hungarian - 30 false fails.
  * norm_block() also drops `is-open` and `aria-expanded`, because the shell
    renders the nav group containing the active page open, exactly as the
    controller does, and that legitimately differs per page.

The last change LOOSENS a check, so it was red-proofed BOTH ways: a one-character
difference in one menu label still convicts, and a state-only difference (the
active marker moving to another item) correctly does not.

One generator now owns the shell. The home page's content comes from m3.py and its
shell from the same function every other page uses, so the two cannot drift - which
they already had, and gate 3b caught it.
2026-10-11 14:14:37 +02:00
admin 698ec9b561 audit: M3 STOP 1 - the shell, the home page, and the six leaking declarations
gates / gates (push) Successful in 6m30s
Measured on the deployed page: 21 requests / 285 KB, 4 181 px at 1440 and 7 530 px
at 390 - less than half the live home page's height - zero third-party hosts, no
overflow, and no contrast failures after two fixes.

Records three things worth keeping beyond this session:
  * the six declarations that leak from site.css into the shell, because later-wins
    is per PROPERTY not per rule. Only one was visible; the rest were found by
    diffing declaration sets.
  * R-930 arriving a second time by another route: fixing the website's .cta-button
    did not fix the controller's .btn-primary, which the shell imports.
  * a measurement trap: a background tab freezes CSS transitions AND rAF, so the
    drawer read as permanently shut when it was fine. Setting transition:none
    before measuring gives the real end state; an rAF await froze a probe for 45s.
2026-10-11 14:00:32 +02:00
admin 11242c5110 website: AA on the shell's copied button and group label
gates / gates (push) Successful in 6m58s
Measured on the deployed M3 page: .btn-primary 4.01:1 (white on --blue, 13.6px/600)
and .nav-group-label 3.14:1 (--text-3), both under the 4.5 floor.

This is R-930 arriving a second time by a different route: fixing .cta-button on
the website did not fix the CONTROLLER's button, and the shell imports it. Same
remedy the operator already chose - 1.2rem/700 puts the label in WCAG's large-text
band where 3:1 applies - so --blue stays untouched.

The sidebar's own CTA becomes an OUTLINE button rather than a filled one: blue on
transparent passes comfortably, and a 19.2px filled button does not fit a 240px
sidebar without wrapping. Measured both ways rather than guessed.

The controller has both defects on its own surface. Not fixed here - that repo is
read-only this session - so it is going to the register.
2026-10-11 13:58:07 +02:00
admin cada79e990 website: M3 home page has one heading, not two
gates / gates (push) Successful in 7m21s
The page header and the hero both carried a title, which read as two headings
stacked. The brief's shape is one: .page-header holds the h1 - and it holds
today's indexed headline, 'Sajat felhod, sajat szabalyaid', unchanged - and the
hero row below is the lede sentence plus the button beside the dashboard window.
2026-10-11 13:52:48 +02:00
admin 71df90f9fc website: neutralise the six declarations that leak into the shell
gates / gates (push) Successful in 7m3s
shell.css loads after site.css, but later-wins is per PROPERTY, not per rule.
Where site.css declares something the controller's rule does not, the website's
value survives inside the shell. Measured: exactly six declarations, three
selectors, and the first one was visibly broken on the deployed page -

  .nav-links        display:flex + gap:32px -> the sidebar menu rendered as a
                    HORIZONTAL row spilling across the content column
  .lang-globe-menu  top + right -> fought the controller's bottom/left
  .page-header      padding + text-align -> the website's centred subpage header
                    fought the controller's left-aligned flex row

Reset in site.css, the website's own file, so shell.css stays a verbatim copy.
Found by diffing the two files' declaration sets per selector rather than by
spotting the one that happened to be visible.
2026-10-11 13:51:23 +02:00
admin 80659232bc website: M3 part A - the controller's shell, and the home page inside it
gates / gates (push) Successful in 6m58s
The direction the operator chose: the controller's FRAME around the website's own
content. Staged at /preview/m3/, noindex, nothing live.

website/assets/shell.css - 117 rules COPIED VERBATIM from felhom-controller
  style.css @ dcd89364a4 (sidebar, mobile top bar, off-canvas drawer, and the
  component atoms the restyled pages use: btn, alert, app-info-card, launch-*,
  stack-detail-card, form-*). Exactly ONE rule is not verbatim and says so:
  body.shell { display:flex; min-height:100vh }, which lives in the controller's
  base rather than in a component, scoped to .shell so other pages are untouched.

  The generator NAMES every rule it copies and REFUSES to write the file if one has
  disappeared upstream. That is not ceremony: it already caught two things this
  session. It refused because .sidebar::-webkit-scrollbar does not exist (only the
  -track override does), and because prefers-reduced-motion is split across FIVE
  separate blocks in the controller - reading only the first would have silently
  lost four rules. The M1 round lost a rule exactly this way.

  The bare `body { flex-direction: column }` that broke M1's phone layout is copied
  this time, by name, as are body.nav-open and the no-js/js pair.

  Load order is deliberate: shell.css AFTER site.css. Thirteen selectors exist in
  both files with different meanings (.nav-links, .page-header, .lang-globe*, .ico)
  - a horizontal site nav there, a vertical sidebar here. Later wins, and a page
  that does not load shell.css is completely unaffected.

website/preview/m3/index.html - the home page in the shell. Content is /preview/'s
  cleaned text; body carries `shell page-index` so the existing .page-index content
  rules (caps, flow, vs, band, who-mini) are reused rather than duplicated. Six
  sections, left-aligned headers, the controller's cards. Head tags (title, meta
  description, canonical, hreflang) are already the FINAL values, so the switch in
  part D needs no head edit.

  Four changes from the operator's mockup, each with its reason in the generator:
    1. the active item follows the page (the mockups show Inditopult active on all)
    2. Teszteles is ALSO a primary button at the top of the lower group - it is the
       one action we want and the mockup buries it at the bottom
    3. the Alkalmazasok categories are anchors on /alkalmazasok: real URLs, no
       JS-only state
    4. ADDED GYIK. It is in today's nav; dropping it silently would take a page out
       of navigation, which is not a change a restyle gets to make.

scripts/site_gates.py - gate 3 extended rather than duplicated, as asked: a SHELL
  set whose pages must carry an IDENTICAL <nav class="sidebar"> after the active
  marker is normalised. RED-PROOFED: a one-character change to one menu label on a
  second shell page convicts. It also prints "DIFFER" rather than a reassuring
  "identical" count when it fails - a false reassurance printed beside a conviction
  is the exact defect this repo files rows about.

documentation/design/design-system.md - new "Shell" section: what is shared (tokens
  + shell + atoms), what each side owns, how a change flows (controller first, the
  website's copy the same week), and that the cross-repo gate is deliberately NOT
  built yet.
2026-10-11 13:48:50 +02:00
admin d5f00b7115 context: operator ruling 2026-10-11 - none of the three directions; M3 follows
gates / gates (push) Successful in 7m2s
Recorded in CONTEXT.md as a dated ruling and at the top of the comparison.

Nothing deleted: /preview/, /preview/m1/ and /preview/m2/ all stay up, hidden, so
the next direction can be compared against them. Nothing built: SHARED-DESIGN.md
recommended the canonical-stylesheet-plus-gate mechanism only once a direction
exists, and none does, so it stays unbuilt.

The measured case for a mechanism rather than a convention survives the ruling and
is kept in the audit folder: a component copy between the repos silently dropped a
bare body rule and broke the phone layout in four measurable ways.
2026-10-11 13:38:08 +02:00
admin e2b9e7d9e9 R-899 closed: the night after a daytime press still took its whole-guest backup (Tester 1, 2026-10-11 04:33)
gates / gates (push) Successful in 7m9s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-11 13:35:47 +02:00
admin 7413e0dfab audit: the mockup comparison, the shared-design answer, and two register moves
gates / gates (push) Failing after 11m45s
documentation/audits/mockups-2026-10-11/
  COMPARE.md        the three directions side by side, measured the same way:
                      A  current preview   12 req /  270 KB
                      M1 dashboard         68 req / 1012 KB  (front page 1 660 px)
                      M2 hybrid            16 req /  150 KB  (phone 3 057 px, the shortest)
                    plus three sentences each (good / risk / cost) and the risk I
                    think is real: a non-technical visitor may read M1 as somebody
                    else's account and look for a login.
  SHARED-DESIGN.md  REPORT ONLY, nothing built. M1 needed 260 CSS rules: 188 (72%)
                    copied from the controller UNCHANGED, 8 adapted, 64 new. It used
                    188 of the controller's 826 rules (23%). The 18 tokens are
                    already identical - verified by parsing both :root blocks, zero
                    differing values.
                    Recommends (a) a canonical felhom-ui.css plus a copy-drift gate,
                    over (b) serving the controller's stylesheet to the website -
                    and recommends NOT building it until a direction is chosen.
  shots/            desktop and phone captures of all three, from the deployed pages

The finding that outranks the percentage, and the reason for the recommendation: a
component-level copy silently drops the element-level rules those components depend
on. The extractor copied every .sidebar/.content/.mobile-topbar rule and missed
"@media(max-width:768px){ body { flex-direction: column } }". Everything LOOKED
copied; the phone layout was broken in four measurable ways. Invisible to a diff,
invisible to review. A second instance the same evening: the drawer is gated on a
'js' class set by an inline script that was not copied either.

Register 129 -> 129 (one closed, one opened):
  R-929 CLOSED - NOT A DEFECT. Measured from the catalog: 60 templates, minus
        plant-it (abandoned) and wger (hidden) = 58 offered, exactly what the prose
        says; the page's 59th card is FileBrowser carrying the single "Beepitett"
        badge. Set difference both ways is empty. The premise was wrong on BOTH
        halves. Rule kept: before filing a count disagreement, check whether the
        counts are counting the same set.
  R-932 OPEN - 8 catalog strings across 5 apps carry an em dash, and they render in
        the controller's app page on every real box. Found because the mockups are
        the first thing to show catalog copy on a website page. Lives in a repo this
        session did not have in scope, so it is a row, not a fix.
2026-10-11 12:26:46 +02:00
admin 3129d99b04 website: M2's top-bar button no longer wraps on a phone
gates / gates (push) Failing after 7m7s
It broke to two lines at 390px. Hidden below 900px; the hero carries the same
call to action three lines lower, so nothing is lost.
2026-10-11 12:22:46 +02:00
admin 4dc1631570 website: the mockup stacks on a phone (the controller's bare body rule)
gates / gates (push) Failing after 6m51s
The controller's mobile layout depends on '@media(max-width:768px){ body {
flex-direction: column } }'. My extractor keys on CLASS names, so it copied every
.sidebar/.content/.mobile-topbar rule and silently dropped that one - and a bare
element rule is invisible to that kind of copy.

The symptom was not subtle once measured: the sticky topbar stayed a ROW flex item,
pushed .content 135px right, and the launcher grid fell to ONE column, making the
front page 15 597px tall on a phone and overflowing mentesek/kapcsolat to a
scrollWidth of 467 in a 375 viewport.

This is a real data point for the shared-design question, not just a mockup bug: a
component-level copy between the two repos misses the element-level rules the
components silently depend on.
2026-10-11 12:20:16 +02:00
admin dd89e1bf99 website: the mockup shell flips no-js -> js like the controller does
gates / gates (push) Failing after 6m48s
Measured at 390px: the sidebar stayed an in-flow flex child and squeezed the
content column to ~208px, so the launcher grid collapsed to ONE column and the
front page became 15 597px tall on a phone; the contact page overflowed
horizontally (scrollWidth 467 in a 375 viewport).

The cause was not missing CSS - the controller's off-canvas rules were all copied.
They are gated on a 'js' class that layout.html sets in an inline head script and
the mockup shell did not. Copied that hook verbatim, so the drawer engages only
where the drawer script can open it, and the no-js path (sidebar static and full
width, burger hidden) is the controller's own.
2026-10-11 12:18:17 +02:00
admin 8eb321213b website: the mockups substitute DOMAIN like the controller does
gates / gates (push) Failing after 7m11s
The catalog writes the customer's domain as the literal DOMAIN and the controller
replaces it at render time, so the panels were showing 'photos.DOMAIN'. The mockup
now substitutes the same sample domain the rest of the page already uses.
2026-10-11 12:16:20 +02:00
admin 063ba83e41 website: two hidden mockups - M1 "the site is the dashboard", M2 hybrid
gates / gates (push) Failing after 7m1s
Design studies only. Nothing live changes, nothing is linked from a live page, both
carry noindex and /preview/ is already Disallow-ed in robots.txt. felhom-controller
was read ONLY (baseline dcd89364a4); nothing in it was touched.

M1  website/preview/m1/  - the website wearing the controller's shell
    index (Indítópult)   welcome card + all 58 launcher tiles
    alkalmazasok         the catalog in the site's own five buckets, vanilla search
    mentesek             the three backup levels, every number marked "minta"
    hogyan / teszteles / kapcsolat   today's copy inside the dashboard shell
M2  website/preview/m2/  - short hero beside a window holding a clickable launcher

Real data, not invented:
  * 58 apps from app-catalog-felhom.eu @ 8ea72aa: real names, logos, Hungarian
    taglines, use cases and first steps out of each .felhom.yml app_info.
  * Tile colours reproduce the controller's OWN tileColor (funcmap.go): FNV-1a 32
    of the slug -> hue, 45% 38%. No brand_color exists in the catalog, so every
    tile here is the colour a real launcher would paint.
  * Page copy is today's live website only.
  * Category labels are the five buckets alkalmazasok.html already uses. None invented.

The 58 is now measured, not quoted: 60 templates minus plant-it (abandoned) and
wger (hidden) = 58 offered, which is exactly what the site's prose says. See the
R-929 note in the audit folder.

Mockup rules honoured:
  * No value pretends to be live - every sample wears a "minta" badge.
  * No control does nothing: the disabled sidebar entries (Tárhely, Megosztás,
    Rendszermonitor, Beállítások) say "a saját dobozodon működik" rather than
    404-ing, and the contact form's submit is disabled with the same kind of hint.
    The consent text is the live one, unchanged.
  * App panels open with :target, so they work with JavaScript switched OFF and
    their text is real HTML a crawler can read - not JS-built content.
  * No login form anywhere. No external request, no AI or stock image.

CSS: website/preview/mockup.css is three labelled blocks so the shared-design
report can count them - adapted base (font URLs repointed /static -> /assets),
188 rules copied VERBATIM from the controller, and the mockup-only rules. The
burger is the website's own three-span control, copied rather than hand-rolling an
SVG: the shared sprite carries no i-menu.

scripts/site_gates.py gains a MOCKUPS set, with the reasoning in a comment. The
mockups keep every correctness check (BOM, emoji, banned strings and CDN hosts, no
<style>, cache-busting, <html lang>, clean tail, dashboard-picture language, the
picture-viewer rules) and are excluded from exactly the three chrome-consistency
checks a dashboard-shell study must fail by construction: nav/footer identical to
index.html, the NO_TWIN language globe, and analytics - the last deliberately, so a
hidden mockup cannot pollute the real stats. Delete the set with the directories.

site_gates.py green.
2026-10-11 12:13:23 +02:00
admin 0c86e698b0 docs: record the placement change and re-measure after it
gates / gates (push) Failing after 5m58s
Every document that described the biography as a home-page section would now be
wrong, so each is corrected rather than left:

  ki-all-mogotte.md  gains 'Where it ended up' with the operator's reasoning, the
                     rejected /rolam option, and why the home page keeps a trace
  AUDIT.md           lever 2 carries a dated revision note (the audit itself is a
                     record of what was found, so it is annotated, not rewritten)
  PREFLIGHT.md       re-measured on the deployed page after the move:
                       1440: 6 780 -> 6 385 px  (42% shorter than the old page)
                        390: 10 865 -> 10 145 px (49% shorter, 23.6 -> 12.0 screens)
                       sections 10 -> 9, layout families 10 -> 9, still no repeat
                       eyebrow allowance 4 -> 3, still 0 used
  website/CHANGELOG  the live change, with the layout bug that the deployed page
                     revealed and the markup did not
  REPORT + STATUS    what is live vs what is still waiting on the operator

The numbers moved because a whole section left the page; leaving the old ones in
place would have been a quiet overclaim in the other direction.
2026-10-11 09:29:47 +02:00
admin bb88e73f9e website: the home page's who-mini row sits under the button, not beside it
gates / gates (push) Failing after 6m44s
.close-cta is text-align:center, so an inline-flex row flowed onto the same line
as the CTA button and pushed the whole group off-centre. flex + max-width 34rem +
margin auto puts it under the button as a centred block, with the hairline above
it spanning the row rather than the section.

Caught by looking at the deployed page rather than trusting the markup.
site.css?v= -> 14.
2026-10-11 09:24:53 +02:00
admin 3b3a926b39 audit: the preview's source body, matching fb9fe080
gates / gates (push) Failing after 6m24s
The preview page is generated from this file, so fb9fe080 changed the generated
page without its source. Same change: the 'Ki all mogotte' section removed, the
compact who-mini row added to the closing call to action.
2026-10-11 09:22:43 +02:00
admin fb9fe0808d website: "Ki all mogotte" moves to the contact pages; the home page keeps a trace
Operator's call after seeing the preview: the biography sat between the dashboard
gallery and "Hogyan mukodik?", interrupting "what it does" -> "how you get it"
with a life story. And its last sentence, "Ha irsz, en valaszolok", is a contact-
page sentence - it belongs next to "Valaszido", not mid-product-story.

  /kapcsolat + /en/contact  gain the full block (photo + the five approved
      sentences). These are LIVE pages, so the bio and the photograph are public
      from this commit. Both halves of the twin move together, as the twin rule
      requires; the English promises nothing the Hungarian does not, and uses the
      site's established "the box" rather than a new term.

  /preview/  loses the section and gains a compact row in the closing call to
      action: a 56x70 portrait, one line, and a link to the full block. This is
      deliberate, not a compromise - the audit's R-11 finding was "nobody is
      behind it" on the HOME page, and deleting every human trace from it would
      re-open exactly that. The trace now sits where someone decides to write.

  A dedicated /rolam page was considered and rejected: five sentences cannot
      carry a page, and the alternative was inventing biography to fill one.

The .who* rules are now UNSCOPED (were .page-index .who*), because the block
lives on two pages and will live on the home page's twin later. Following
69035f4af5's lesson: a genuinely shared pattern goes site-wide rather than being
duplicated per page scope. No existing page uses .who, so nothing else moves.

assets/operator-portrait-small.webp - 160x200, 8.4 KB, cropped from the same
original outside the repo, metadata stripped and verified by read-back (0 EXIF
tags, 0 GPS entries, none of the phone's byte sequences present).

site.css?v= -> 13 on all 21 files.

The preview builder asserted a hardcoded "site.css?v=10" and broke the moment the
site moved to 12. It now follows whatever index.html pins and prints it.

site_gates.py green.
2026-10-11 09:22:27 +02:00
admin 56c357c074 report + plan: the redesign session's record, and the order for the other pages
gates / gates (push) Successful in 6m31s
REPORT-redesign-2026-10-10.md (not REPORT.md: that file belongs to the kernel
night session de4a8d20 and is overwritten per session).

NEXT.md - the other pages in order with what each needs, and the traps:
  teszteles/en/testing first (the destination of every CTA, newest page)
  gyik/en/faq second, with the warning that gate 17 requires the FAQPage JSON-LD
    to EQUAL the visible answers, so every copy edit there is a two-place edit
  technologiak third ("Ipari szintu megoldasok" is the exact language the home
    page just removed)
  alkalmazasok is BLOCKED on R-929 - prose 58, page 59 cards, catalog 60
  adatkezeles/feltetelek are reviewed legal texts; a dash sweep there needs the
    operator's word separately and is not ours to take

  It also records the per-page em-dash count: 300 across 19 pages, the preview
  being the only page at zero.

STATUS.md - the operator's one screen, in plain language: the preview is waiting
on him, the two fixes that DID go live, and the two new decisions (R-931 the
missing compression, R-929 the app count).

website/CHANGELOG.md - the footer sweep and R-930, both with their measurements
and with the scope stated rather than implied.

Register 127 -> 129 (R-930, R-931 opened; none closed).
2026-10-11 00:31:14 +02:00
admin 43b67283c3 website: the footer dash swept site-wide, and the primary CTA meets WCAG AA
gates / gates (push) Failing after 14m58s
Two operator decisions from STOP 3, both independent of the home-page switch,
which was NOT approved and has NOT happened. index.html still serves the old
design; only the footer line and the button change on it.

1. The footer em dash, on all 21 page files (12 HU + 8 EN + the preview).
   "(c) 2026 felhom.eu - Sajat felhod..." now uses the spaced en dash, which is
   the correct Hungarian gondolatjel. Done as one sweep because site_gates.py
   gate 3 requires every page in a language set to carry an IDENTICAL footer, so
   this could never have been a one-page edit. Gate green: all 14 still match.

   Scope, stated honestly: this clears the footer only. 300 em dashes remain in
   the BODIES of the other 19 pages (gyik 53, en/faq 53, adatkezeles 33,
   szolgaltatasok-nonpublic 27, testing 24, teszteles 23, index 17/19, ...). The
   preview page is the only page at zero. The rest is NEXT.md work, page by page.

2. R-930, the operator's choice of the three offered: white on --blue measures
   4.01:1, under WCAG AA's 4.5:1 for body text. .cta-button goes to 1.2rem/700,
   which is >=18.66px at >=700 weight, so WCAG counts it as LARGE text and the
   floor becomes 3:1 - which 4.01 clears without touching --blue. Darkening the
   token was rejected because --blue is shared with the hub and controller UIs.
   Horizontal padding trimmed 32->26px to protect the one-line rule for the
   longest label; verified in the browser at 390px, not assumed.
   .cta-button-secondary is unchanged: it already measures 7.17:1.

   This reaches the primary button on 16 pages, which is the point - the defect
   was never the home page's.

site.css?v= bumped to 12 on all 21 files. The pages sat at v=10 and the preview
at v=11; leaving them split would have served a returning visitor the old
stylesheet and the change would have looked like it did not deploy.

site_gates.py green.
2026-10-11 00:25:43 +02:00
admin 94ac6afbe8 audit: the preview's pre-flight, before/after shots, and two filed rows
gates / gates (push) Failing after 12m59s
PREFLIGHT.md - taste-skill §14 plus the Felhom additions, run in writing against
the DEPLOYED preview, Pass/Fail per line. Measured, not assumed:

  page height 1440: 10 922 -> 6 780 px (38% shorter)
  page height  390: 19 913 -> 10 865 px (45%, 23.6 -> 12.9 phone screens)
  initial load:     13 req / 308 KB -> 11 req / 260 KB   (same conditions)
  fully loaded:     16 req / ~540 KB -> 15 req / ~545 KB (ESSENTIALLY UNCHANGED -
                    the 93 KB portrait is paid for by dropping the 49 KB hero logo
                    and the 31 KB mono font; stated rather than spun)
  third-party hosts: 0 -> 0
  em dashes in our copy: 18 -> 0
  layout families: 8 for 11 sections (3 repeats) -> 10 for 10 (none)
  no horizontal scroll: clientWidth == scrollWidth at 390 and at 1440

Contrast: three NEW styles measured 3.88 / 3.14 / 3.57 on the first pass, all under
WCAG AA. Fixed to --text-2 and re-measured on the deployed file: 7.56 / 6.12 / 6.96.

A measurement that lied, recorded because it nearly shipped a false verdict: the
first helper reported .limits p at 1.17:1 by treating the translucent --warn-dim
as opaque. Compositing the whole ancestor stack gives the true 5.67:1, a pass. The
three real failures in the same run were real. An instrument that can report a
wrong number silently is not a measurement.

Two rows filed, both needing something this session may not do alone:
  R-930 (Business & legal, P3) the primary CTA is 4.01:1, under AA. MEASURED
        IDENTICAL ON THE LIVE PAGE, so pre-existing and site-wide, not a regression
        of this redesign. Three fixes offered, each touching brand, so it goes to
        the operator rather than being changed unilaterally.
  R-931 (Process & tooling, P4) felhom.eu serves NO compression at all - site.css
        goes over the wire as 94 310 raw bytes with no Content-Encoding even when
        gzip is offered. An nginx setting in manifests/, not a website change.
        Worth more than anything on this page.

Register: 127 -> 129 rows, 2 opened, 0 closed. register_shape_gate.py OK.
2026-10-10 22:12:47 +02:00
admin 6f58c00fe7 website: the comparison column and the hero caption meet WCAG AA
gates / gates (push) Failing after 11m58s
Measured on the live preview, not assumed. --text-3 gave 3.14:1 (comparison
header), 3.57:1 (comparison rows) and 3.88:1 (hero caption) against their own
backgrounds, all under the 4.5:1 floor for body text. The audit's own rule was
that the existing 7.56:1 body contrast is an accessibility win to protect, so
dimming a column below AA to make it read as 'the quieter half' is a regression,
not a style. All three move to --text-2; the two halves of the comparison are
still told apart by the accent colour and the bold lead on the right.
2026-10-10 22:08:47 +02:00
admin a818b9c576 website: the redesigned home page, staged at /preview/ (noindex)
gates / gates (push) Failing after 14m33s
Part C. The live home page is NOT touched: every CSS rule added is a new class
under .page-index, so index.html renders byte-for-byte as before.

website/preview/index.html  (BOM + CRLF, noindex, Disallow: /preview/)
  Ten sections, ten different layout families. The three repeats the audit found
  are gone: why-grid ran 3x and apps-showcase 2x.
    - hero: a real dashboard screenshot instead of the logo, sized by its content
      instead of a forced 100vh band, no infinite float animation, and a sentence
      made of four facts instead of "Professzionalis ... telepites es uzemeltetes".
    - the ten capability cards become three labelled clusters. Their TEXT is
      verbatim: the audit's own finding was that the writing is right and the
      layout is wrong, so only the layout moved. Every hedge ("ha van") survives.
    - NEW "Ki all mogotte" with the operator's photo and five approved sentences.
    - the 3 cloud-problem cards + the 4 own-server cards merge into ONE two-column
      comparison. No new claim about any competitor: all four left-hand sentences
      already existed on the page.
    - the two tile walls (10 + 7 tiles duplicating pages that already exist) shrink
      to a two-item band that keeps the app names and the links.
    - section headers are left-aligned and varied, not 11x centred-two-words-plus-
      one-blue-word.

  Em dashes in the page's own copy: 18 -> 0. Deliberately kept: the 6 in <title>,
  meta description, OG, Twitter and JSON-LD (operator decision at STOP 1 - indexed
  strings deserve their own pass), and 1 in the shared footer, which gate 3 requires
  to be identical across all 14 pages. Both stated, neither swept silently.

  JetBrains Mono is no longer fetched. Exactly 13 characters were loading 31 KB:
  the 1..5 process badges, the 01..05 service numbers, and - the audit missed this
  at first and it is corrected in the file - the 3/2/1 of the backup rule.

assets/operator-portrait.webp  720x900, 93 KB
  Cropped from an original that stays OUTSIDE this public repo. All metadata
  stripped and VERIFIED BY READ-BACK: 0 EXIF tags, 0 GPS IFD entries, and none of
  EXIF/XMP/ICCP/samsung/SM-A705FN/2023:10:18 appear anywhere in the bytes. Built by
  re-writing the pixels into a fresh image, so the source info dict cannot travel.
  Honest correction to the brief's premise: this photo had NO GPS tag to begin with.

scripts/site_gates.py
  preview/index.html registered in NO_TWIN, with the reason. It cannot go in TWINS:
  gate 3 wants its nav identical to index.html's (globe -> / and /en/) while the
  twin check wants a pair's globe pointing at the pair's own URLs. The English twin
  is written in the same commit as the switch, as a real twin. Everything else still
  runs on the preview - BOM, emoji, nav/footer, globe, analytics, CDN, tokens,
  cache-busting, dash-language, viewer, tail.

site_gates.py green. The builder (kept in the session scratchpad) writes BOM + CRLF
and asserts both: it first wrote LF and turned the nav/footer gate red for the
preview, which is exactly the trap this CHANGELOG's morning entry records.
2026-10-10 22:01:12 +02:00
admin fc52e3865e skills + audit: vendor taste-skill, add the Felhom override, audit the home page
gates / gates (push) Successful in 6m30s
Part 0 and Part A of the home-page redesign. Nothing under website/ is touched.

skills/
  - design-taste-frontend installed to ~/.claude/skills/ as a VERBATIM copy of
    github.com/Leonxlnx/taste-skill @ 717446e07a (2026-10-09, MIT). Body verified
    byte-identical line by line; the only addition is a provenance block. The repo
    holds scripts (skill.sh, scripts/*.mjs) but the SKILL FOLDER holds only SKILL.md,
    so no script was copied and none was run. Not installed via npx or skill.sh.
  - skills/felhom-web-design/SKILL.md is the override layer and names every conflict:
    the static-HTML stack fence (no React/Tailwind/Motion/npm), nothing fetched from
    another server (kills taste-skill's picsum/Unsplash/SimpleIcons ladder and its
    npm icon libraries, since we have a self-hosted sprite), real images only, the
    Hungarian gondolatjel surviving the en-dash ban, the claim rule, and the SEO-keep
    list. 137 lines, check_skills.py PASS.
  - SOURCES.md records the provenance and the kept/overridden table.

documentation/audits/redesign-2026-10-10/AUDIT.md
  Measured against the LIVE site, not the file. 12 patterns to retire (R1-R12), each
  naming the taste-skill rule it breaks; 7 to keep; dial reading 3/2/4 -> 6/3/4;
  8 levers in priority order for the operator to approve at STOP 1.

  Headline measurements: 10 922 px tall at 1440 and 19 913 px at 390 (23.6 phone
  screens); 11 sections but only 8 layout families, why-grid used 3x and
  apps-showcase 2x; 18 em dashes; 16 requests / 533 KB from exactly two hosts.
  Contrast measures 7.56:1 body and 16.67:1 headings - AAA, and an accessibility win
  to preserve rather than a thing to fix.

  Method note: resize_window does not move window.innerWidth on this workstation and
  DevTools device mode could not be driven, so the page was rendered in a same-origin
  iframe at each width. Faithful, with two positive observables: the hamburger
  computes to display:block at 390, and clientWidth == scrollWidth == 375.

Gates: site, hostinstall, hub-confirm, register and the rest green. instructions and
script-tests fail on this Windows workstation for environment reasons that predate
this change (E:\git\CLAUDE.md is the deliberate Windows adaptation the gate wants
identical; fcntl missing; relpath across C:/E:; the cp1250 console trap). Re-run on
DooPlex follows.
2026-10-10 21:32:40 +02:00
admin 7ff64f40ed STATUS + REPORT: the design round, the sitemap BOM, and that there are no testers
gates / gates (push) Failing after 12m27s
Records what your screenshots turned up: the per-page scoping that left the
tester pages unstyled, the site-wide missing base link rule (which also
affected gyik/technologiak/biztonsagimentes), the sitemap BOM, and the
correction that nobody is testing today so all five places are open.
2026-10-10 20:45:18 +02:00
admin 88200cffd7 website: the waiting-list sentence follows from 'all 5 places are open'
gates / gates (push) Successful in 6m22s
'Ha most nincs szabad hely' read oddly directly after saying every place is
free. It now talks about what happens when the test fills up, which is the
case the sentence is actually for.
2026-10-10 20:43:37 +02:00
admin 69035f4af5 website: the tester pages get the design system, and content links stop turning purple
gates / gates (push) Successful in 6m34s
Root cause of "no formatting for the points": .info-card and .highlight-box are
scoped per page (.page-technologiak / .page-biztonsagimentes) and the new pages
carry .page-teszteles, so NONE of the card chrome applied - the sections were
unstyled text runs. The tester pages now join the technologiak scope, whose h3
is a flex row (these headings carry an icon).

Three more gaps the new pages exposed, all fixed site-wide rather than patched:
  - There was no base `a` rule at all, so an inline link in body copy fell back
    to the browser default and changed colour once visited. .legal was the only
    place this had been fixed. /gyik, /technologiak and /biztonsagimentes each
    carry such links and had the same bug.
  - `code` was styled only under .legal.
  - A <ul> inside an info-card was unstyled: wrong colour, wrong indent.

Justified body copy on the tester pages, as asked. NOTE: no other page
justifies today, so this is deliberately scoped to .page-teszteles and can be
rolled out site-wide or dropped in one edit. hyphens:auto, because Hungarian
sets badly when justified without it.

site.css -> v=10 on all 20 pages.

sitemap.xml: BOM removed. Search Console shows the freshly submitted clean
sitemap as "Sikertelen lekeres" with an empty last-read, and a BOM before the
XML declaration is a known irritant for its parser. The file is otherwise valid
(18 <url>, parses, served 200 as application/xml). No gate covers sitemap.xml
and the BOM rule is for website/*.html only.

Facts corrected - there are NO testers (operator, this evening): "Tester 1" is a
disposable virtual box and "Tester 2" is a friend whose machine is unassembled
and switched off. The page said "Nehany hely mar betoltve", which was untrue; it
now says the test is starting and all 5 places are open. Same correction in
OUTREACH.md (five people needed, not three), CONTEXT.md, and the terms-1.1 mail,
which in practice has one recipient, not two. No scheduled post claimed a
filled place, so none needed editing.
2026-10-10 20:40:43 +02:00
admin 8ef7c3a7e2 R-784 narrowed: the SparkyFitness author agreed (official images, EUR 1/household/month quarterly, 90 days' notice); closes when the operator's e-mail is sent
gates / gates (push) Successful in 6m18s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-10 20:36:56 +02:00
admin ca69e35335 REPORT-testers: say plainly that CI's conclusion could not be read, and what stands instead
gates / gates (push) Successful in 6m3s
Both credential attempts against the Gitea jobs endpoint returned 401 and the
store holds no Gitea API key, so no green is claimed. The positive observable
is the DooPlex run of the same gate entry point at this HEAD: 19/19 green.
2026-10-10 16:28:48 +02:00
admin 86361a79c8 testers: the outreach kit, R-929 (the app count disagrees), STATUS and the report
gates / gates (push) Successful in 6m6s
OUTREACH.md: a personal message, a Facebook group post with a shorter variant,
a forum post, and a table of 15 places with the rules quoted where they are
published. Nothing was posted and no group was joined; the group data was read
from each group's public About page on 2026-10-10.

The rules that matter, measured rather than assumed: Magyar Linux Felhasznalok
(11970, public) has no advertising ban and Felhom is on topic; DIY Smart Home
forbids ads and names an e-mail route; HUP forbids unlicensed advertising; the
prohardver family forbids "tagok, vasarlok gyujtese ... felhivas" without the
operator's permission, which is literally what recruiting testers is.

R-929 (P4): the website's prose says 58 apps, the apps page renders 59 cards,
the catalog holds 60 template directories. Gate 15 cannot catch it because it
compares the two language sets to each other, never to the catalog. Not fixed
here - it needs the catalog skill's exclusion rules. The campaign posts say 58,
matching every prose claim on the site.
2026-10-10 16:25:25 +02:00
admin 3631f26f39 hub 0.146.0 live: STATUS + REPORT-hub-system-page (release and live read-back)
gates / gates (push) Successful in 6m27s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-10 16:21:01 +02:00
admin 2db785daf4 manifests: hub 0.146.0
gates / gates (push) Successful in 6m8s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-10 16:16:48 +02:00
admin 9fbdee83d9 hub v0.146.0: the System page layout (release)
gates / gates (push) Successful in 6m3s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-10 16:13:58 +02:00
admin 5bea5f2ebf marketing + seo: the three-week tester campaign, schedule-post --link, the not-indexed audit
gates / gates (push) Successful in 6m15s
COPY.md section 7: five Hungarian posts for Tue/Thu 19:00 over three weeks, each
with a source comment per claim and one link. The Monday post (2026-10-12, 6.2)
is untouched and no slot shares its day.

fb_probe.py gains --link (default unchanged). Every scheduled post used to
attach the home page's preview card whatever its text said, so a post about
/teszteles would have sent the people who clicked its card to the home page.
build_parser() split out of main() so a test can parse argv. Red-proved: both
new tests fail with "Namespace object has no attribute link" without the flag.

Search Console audit (seo-2026-10-10/not-indexed.md): all seven not-indexed
URLs with a verdict each - four expected by design, two waiting on Google's
crawl queue, one fault on our side. That one is /api/contact, the contact
form's POST endpoint crawled as a page; robots.txt now disallows /api/. The
performance baseline (0 clicks, 47 impressions, position 73, nine queries) is
recorded there to compare against in a month.
2026-10-10 16:13:23 +02:00
admin 9d530b8f4a R-928 filed: concurrent gate runs in the shared clone see each other's decoy plants; register 126
gates / gates (push) Successful in 6m13s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-10 15:59:31 +02:00
admin a263061183 STATUS: the 2026-10-10 decision sheet (S1-S38, T1-T19) and the register-shrink report; R-903 live read-back
gates / gates (push) Successful in 5m55s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-10 15:57:06 +02:00
admin b8db1383bf REPORT-hub-system-page: CI job 1643 green for cf6fec8d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-10 15:47:58 +02:00
admin 92dc41638a website: a tester recruitment page, and test terms 1.1 (the domain)
gates / gates (push) Failing after 13m28s
New page pair /teszteles + /en/testing: who the closed test is for, what a
tester needs (machine + internet quoted verbatim from the FAQ, plus a domain),
what they get (terms section 3, nothing new), what we ask for, and how many
places there are. Every "Jelentkezem tesztelonek" button now goes there.

Operator rulings 2026-10-10, recorded in CONTEXT.md:
  D1 - the tester's domain is in the TESTER'S OWN name; Felhom pays its fee for
       two years and the tester keeps it when the test ends or they leave; DNS
       is managed with a token scoped to that one zone only.
  D2 - the closed test runs with at most 5 households.

Terms 1.1 adds section 4 (the domain) with the D1 text; old sections 4-11 are
renumbered 5-12 and nothing else changed. Section 11 promises the testers an
e-mail before a change, so one is drafted for the operator to send.

Registered in site_gates.py TWINS/URL and listed in sitemap.xml.
2026-10-10 15:47:15 +02:00
admin cf6fec8d87 hub (unreleased): the System page answers 'is anything wrong?' and 'is anything waiting for me?' first
gates / gates (push) Successful in 6m17s
Needs attention, Waiting for you (one card per kernel/Docker/Proxmox set the button may approve), a
7-column Boxes table whose rows open to every old value, and a closed Details (release ids, cancelled
approvals, ring-0 counts, floors, crash guard and root files, Approve now - which now asks first).
Same data, buttons, routes and CSRF field. No deploy. Screenshots in audits/hub-system-page-2026-10-10/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-10 15:38:25 +02:00
admin ec5605d42c register shrink 2026-10-10: 13 rows closed with live evidence (138 -> 125); R-903 phone menu without JS; R-910 pictures; R-912 site gate 21
gates / gates (push) Successful in 6m4s
Closed: R-906 R-907 R-909 R-910 R-911 R-815 R-756 R-570 R-896 R-912 R-903 R-338 R-916.
Updated: R-899 (press set up, dated check 2026-10-11), R-243 (the mail is due 2026-10-11 ~16:06Z, dated check),
R-782 (homepage live; glance question to the operator), R-904 (the TLS sentence is in 01 s7).
Website: site.css v=9 (scripting:none menu), eight dashboard pictures retaken. Evidence: audits/register-shrink-2026-10-10/.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-10 15:27:59 +02:00