| Decision | Value | Consequence in build |
|---|---|---|
| Route | A — additive native layout logo-left-menu-inline | Stock layouts untouched; new code dead unless selected |
| Collapse-on-scroll | OFF — no desktop hamburger, nav always exposed | Simplifies build: no collapse CSS adaptation needed at activation; Hyper's native collapse remains a settings-level revert |
| Search v1 | A — persistent compact field | rs_compact_search_style select ships with both values from day one |
| Search v1.1 reserve | B — icon that expands | Now confirmed ≈ zero-JS (see finding below); switching = flip the select |
| Utility links | Stay in topbar | Topbar untouched entirely |
| Width policy | Design gate, not truncation | Fails at 1024px ⇒ stop for decision (tracking / fewer items / icon search / reserve two-row fallback) |
search.js opens the search on input
focus (onFocus → body.search-open) and closes on .header__search-close
or overlay click. The icon variant therefore needs only an icon control that focuses the existing input —
native code does everything else. The A→B switch is CSS + at most a 3-line focus shim. Confirmed from the live file.These are the assertions each phase's QA gate re-runs. Any failure stops the phase.
rs_enable_compact_single_row unticked, rendered DOM + screenshots match the Phase-0 baseline exactly.theme.css, header.js, search.js, and all menu/drawer/search snippets never change — verified by hash each phase.<nav> (desktop), one predictive-search form, one #MenuDrawer, one .header__bottom, one .header-section, one fixed overlay..header__bottom and .toggle-navigation-button selectors resolve; setHeight() runs without error; all 5 CSS vars publish sane values.Verbatim live copies of all 7 touch-files + MANIFEST with restore commands. Code baseline: settings snapshot,
menu structure (4 top levels + children via Admin API), full variable-consumer inventory, architecture citations in
work/header_audit/{claude_plan,codex_plan}.md.
Through the Shopify share-preview link: screenshots + computed values (panel rects via
getBoundingClientRect, the 5 header vars, class states) at 1024 / 1280 / 1440 / 1920 and mobile 375 / 768,
EN + FR, top/scrolled, dropdown open, search open, drawer open. Stored under work/header_audit/baseline/.
Add to the header schema, each with RevShift - 2026-07-XX wording in its info:
header_layout option 4: logo-left-menu-inline — label “Logo left · menu inline (RevShift)”rs_enable_compact_single_row checkbox, default false — the master kill-switch; info text explains off = exact current headerrs_compact_search_style select: field (default) | iconrs_compact_vertical_padding range, default 12px (8–24)rs_compact_search_width range, default 190px (140–320)Create the preview theme: pull live → shopify theme push --path theme --unpublished (“RS DEV — compact header”).
Then, all inside {%- if rs_compact_inline -%} branches:
rs_compact_inline = (layout is logo-left-menu-inline AND checkbox true);
if the layout is selected but the checkbox is off, render layout logo-left-search-center — the one-checkbox revert mapping.header--rs-compact-inline when active..header__top, after the logo: the existing
.header__bottom → .header__navigation → {% render 'desktop-menu' %} block, with an added
modifier class header__bottom--rs-inline. Identical hooks, one render. The stock sibling row at the bottom renders
only when NOT compact.field → predictive-search render as-is in the compact grid area;
icon → same render + icon control that focuses the input (label-for or 3-line shim), field visually collapsed until
body.search-open..toggle-navigation-button
(collapse is OFF per Sean; the native two-row branch keeps its behaviour for revert)..header__top--logo-left-menu-inline → areas
logo navigation search icons, columns auto minmax(0,1fr) minmax(14rem, var(--rs-compact-search-width)) auto; vertical padding from the range setting..header__bottom--rs-inline{ position:static } (makes
.header__top the panels' containing block) · zero row paddings · suppress its ::after ·
.header__menu ul{ flex-wrap:nowrap }..mega-menu / .dropdown at inset-block-start:100% and
.mega-menu__container / .dropdown padding-block-start: 0 (kills the measured
--header-navigation-height padding that would double the offset). Nested .dropdown .dropdown untouched.body.search-open expands it across the search+navigation areas (pure CSS on existing classes).These compute sticky offsets as --header-height − --header-navigation-height (they assume the collapsed
two-row header). In compact, gate the subtraction on the header NOT being compact — e.g. offset =
--header-height alone when .header--rs-compact-inline exists (CSS :has() or a body-level class
emitted by the compact branch; JS mirror in rs-section-nav.js).
| Axis | Coverage |
|---|---|
| Widths | 375 · 768 · 1023 · 1024 · 1280 · 1440 · 1920 |
| Locales | EN + FR (menu fit gate lives here) |
| States | top · scrolled-down (unpinned) · scrolled-up (pinned) · search open · dropdown open · drawer open |
| Interactions | hover open/close timing · click-through on data-link · Escape · outside click · focus-in/out · Tab order |
| Search styles | field AND icon (flip the select both ways) |
| Templates | home · collection · PDP (sticky ATC + section-nav) · search page · a policy page |
| Editor | settings save · section reload/reorder · block select (mega capability probe with a test block, then removed) |
| Degradations | no-JS (details fallback + no-js anchor rule) · reduced motion · 200% zoom · touch emulation |
| Revert | checkbox off → baseline identity; on again → compact returns with settings intact |
work/header_audit/qa/ ·
Sean reviews the preview theme link and signs off visually.logo-left-menu-inline + checkbox on + approved ranges.docs/shopify_code_changes/: dated entries for header.liquid, rs-soft-modern.css, header-group.json, the four RS component files (original + final per convention).PROJECT.md §Decision Log + §Change Log → mirrored to progress.html → deployed (lockstep rule).Re-verify after: any Hyper theme update (hash-check the byte-identical core list), any menu edit by Jessar (FR fit gate), and Michael's v9 class update landing (re-run the width stress against the real new menu before it ships).
| Tier | When | Action | Time |
|---|---|---|---|
| 1 · Checkbox | Anything looks wrong post-activation | Editor → Header → untick RS · Compact single-row. Liquid maps back to stock layout; compact CSS inert. | < 1 min, no deploy |
| 2 · Settings file | Editor unavailable | Restore header-group.json from backup, push --only. | ~5 min |
| 3 · Nuclear | Broken Hyper update, section replaced, B2C pivot | backups/2026-07-22-compact-header-prechange/ → verify SHA256 → restore all 7 files per MANIFEST. | ~15 min |
| Risk | Sev | Killed in |
|---|---|---|
| Panel inherits nav-cell width | Critical | Phase 3.2 (static cell) + Phase 3 gate (numeric rect) |
| Double/missing panel offset | Critical | Phase 3.3 (anchor + padding pair) + gate |
| header.js null crash | High | Phase 2.3 (hooks preserved, one render) + invariant 4 |
| RS components stick under header | High | Phase 4 (dedicated phase) |
| FR menu overflow (now or v9) | High | Phase 5 locale axis + Phase 8 v9 re-gate; icon search = 150px relief valve |
| Hyper update collision | Med | Phase 7 docs + Phase 8 hash watch + Tier-3 backup |
| Editor/mega capability regression | Med | Phase 5 editor axis (test mega block probe) |