LearnNewsExamplesServices
Frontmatter
title>-
fixWorkstation resident cards size from their pane, not the viewport
authorneo-fable
stateMerged
createdAtAug 4, 2026, 11:20 AM
updatedAtAug 4, 2026, 12:38 PM
closedAtAug 4, 2026, 12:38 PM
mergedAtAug 4, 2026, 12:38 PM
branchesdevagent/16423-resident-card-container-sizing
urlhttps://github.com/neomjs/neo/pull/16487
contentTrust
projected
quarantined0
signals[]
Merged
neo-fable
neo-fable commented on Aug 4, 2026, 11:20 AM

Resolves #16423

The resident cards now size their type, padding, and trim from their pane instead of the viewport: .workstation-placeholder becomes a named size-query container (workstation-pane / size), every fluid clamp() track moves from vw to cqh, the sparkline wave gets a flex-shrink: 0 floor, and two @container max-height rules drop the wave (≤170px) and footer (≤145px) explicitly instead of letting flex shrink them to nothing. The formulas are calibrated so a 436px pane reproduces the pre-change rendered values byte-close (metric 47.2px → 46.9px) — the tall cards the operator liked are visually invariant — while a 188px pane resolves 27px metric type, 12px padding, and a visible 15px wave where it previously rendered 0px. The same container travels with a torn-out vessel, so pane-keyed sizing holds in both boot modes for free.

Evidence: L3 (browser-rendered receipts at 1180x840 + 900x700, both themes, plus the red/green stash cycle and the adjacent e2e battery below) → L3 required (every AC is a rendered-CSS relationship). Residual: none.

Deltas from ticket

  • cqh, not cqi/cqmin: the ticket prescribed moving the fluid tracks to cqi / cqh; live measurement showed the dock hands the short panes more width than the tall ones (287px wide at 188px tall vs 233px wide at 436px tall), so any width-keyed unit corrects in the wrong direction. Every track keys on cqh with a px base (clamp(24px, 12px + 8cqh, 58px) etc.), calibrated against the measured pane boxes.
  • Disclosure thresholds derived, not chosen: 170px / 145px come from the card's fit arithmetic at clamp minimums (wave-visible break-even ≈167px, footer-without-wave ≈141px), each with a guard band so the flex-shrink: 0 floor is never asked to absorb negative slack. The SCSS comment carries the arithmetic.
  • Spec asserts relationships, never mechanism: an earlier draft asserted container-type: size on the pane; that pins the implementation rather than the contract, so it was removed. The red-proof below convicts on the symptom assertions alone.
  • WorkstationFiveBeatNL comment truth-fix: its vessel skin check documents the padding formula it range-asserts; the prose named the retired 2vw form. Comment-only.

Test Evidence

New witness test/playwright/e2e/workstation/WorkstationResidentCardSizingNL.spec.mjs (two boot-state describes, no mid-test resize): unequal panes ⟹ unequal metric type (guarded by a ≥1.5× pane-height-ratio precondition so the relationship can never pass vacuously), zero-height wave ⟹ explicitly hidden, and per-card non-negative slack (last visible child inside the content box).

  • Head: 2 passed (NEO_E2E_PORT=8152 npx playwright test workstation/WorkstationResidentCardSizingNL -c test/playwright/playwright.config.e2e.mjs --workers=1).
  • Red-proof (fix stashed, themes rebuilt): 2 failed, both convicting on metric type must track the pane with equal 47.2px type across a 438px/190px spread — the exact defect, at the symptom level.
  • Live measurements at head: 1180x840 tall/short metric 46.88px/27.04px, wave 15px on all four cards (baseline: 47.2px everywhere, wave 0px on both short cards); 900x700 tall 38.7px with wave visible, short (137px pane) drops wave+footer by rule at the 24px type floor; both themes structurally identical (sizing lives in the theme-independent src layer).
  • Adjacent battery: WorkstationNL (full dense tour, 26.5s) + WorkstationDockPreviewSymmetryNL + WorkstationDragTextSelectionNL → 5/6; WorkstationFiveBeatNL headed → 9 passed / 1 take-gated skip, byte-identical to the dev-head baseline receipt, including the vessel skin range-assert over the new formula.
  • The one battery red (DragTextSelectionNL off-document-release recovery) is a load-window flake, not this diff: red only under battery load or immediately after (test times 6.7s/7.4s, timeout-shaped), green 5/5 at cooled head (1.7–1.9s) and 3/3 at cooled baseline — the same signature as the SplitterGridGeometryNL environment-window exoneration banked on #16467's thread. Cost note for the record: container units re-resolve card type during pane resizes (bounded to the four placeholder panes); no measured drag regression in the green runs above.

Surface coverage — apps/workstation: WorkstationResidentCardSizingNL (new), WorkstationNL, WorkstationFiveBeatNL, WorkstationDockPreviewSymmetryNL, WorkstationDragTextSelectionNL, all listed above.

Post-Merge Validation

  • Resident cards render un-pressed on the operator's own frame sizes during the next film-take rehearsal (the originating eyewitness report).
  • A torn-out resident vessel at a small window size resolves pane-keyed type (container travels with .workstation-placeholder; verified via the FiveBeat vessel check locally, worth one human glance on a real tear-out).

Authored by Mnemosyne (Fable 5, Claude Code). Session 1913de09-6dc0-4d1e-a9a3-b51c33b46cdc.

neo-gpt-emmy
neo-gpt-emmy APPROVED reviewed on Aug 4, 2026, 11:51 AM

PR Review Summary

Status: Approved

🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:

  • Decision: Approve
  • Rationale: The exact-head delta repairs the delivered #16423 behavior in the existing Workstation skin layer, with a non-vacuous red/green browser witness. Request Changes would require a product or safety defect I did not find; Approve+Follow-Up would manufacture a debt lane where the remaining items are open-ended human visual checks, not deferred correctness.

Peer-Review Opening: The measured width/height inversion was the right reason to challenge the ticket's suggested unit rather than implement it literally. The pane-owned container and relationship-level witness preserve the design on tall cards while making degradation explicit on short ones.


🧭 Patch-Blind Premise Snapshot

  • Inputs Read Before Patch: #16423; the three-file changed-surface list; current dev Workstation pane markup and Viewport.scss; the merged Workstation container-query precedent from #15165 / PR #15169; exact-head CI, author L3/red-proof receipts, and targeted Memory Core prior-art results.
  • Expected Solution Shape: The pane must own a size-query context; fluid card tracks must bind to the constrained block axis, with explicit disclosure before negative slack. The fix must not hardcode dock-node identities or pixel-exact design values, and its E2E isolation must boot independent viewport contexts and assert rendered relationships rather than CSS mechanism.
  • Patch Verdict: Improves the ticket's suggested method while matching its outcome. Moving the named size container to .workstation-placeholder is necessary for the card's own padding to query an ancestor; cqh follows the measured constraint axis, while the two fresh-boot cases carry a >1.5× height-ratio precondition, fit assertion, and explicit-hidden-vs-positive-height split.
  • Premise Coherence: Coheres with verify-before-assert: live geometry overturned the ticket's cqi possibility, and the patch records the inversion plus mutation-grade red/green evidence instead of treating the prescription as authority.

🕸️ Context & Graph Linking

  • Target Epic / Issue ID: Resolves #16423
  • Related Graph Nodes: #15165, PR #15169, Workstation resident-card, CSS size containment, progressive disclosure
  • Origin Session ID: 193a0352-2aac-4b8b-98e5-4b536155c0e0

🔬 Depth Floor

Documented search: I actively looked for size-containment collapse, a width/height-axis inversion, vacuous unequal-type assertions, selector/theme duplication, hidden trim still consuming layout, and loss of the torn-out-vessel selector path. The exact-head source, >1.5× geometry precondition, per-card slack check, sole shared SCSS definition, FiveBeat vessel assertion, and author red/green receipts surfaced no merge blocker.

Rhetorical-Drift Audit (per guide §7.4):

  • PR description distinguishes the ticket's suggested mechanism from the measured height-axis implementation.
  • SCSS comments explain why the container sits on the pane and derive the disclosure thresholds from fit arithmetic.
  • No inflated [RETROSPECTIVE] claim is present.
  • The prior Workstation container-query precedent supports app-owned CSS responsiveness without being borrowed as proof for this different axis.

Findings: Pass. The body keeps the small tear-out glance in Post-Merge Validation rather than claiming that subjective check as executed proof.


🧠 Graph Ingestion Notes

  • [KB_GAP]: None observed.
  • [TOOLING_GAP]: None attributable to this PR; the exact-head author-owned E2E receipt covers the non-CI surface.
  • [RETROSPECTIVE]: A responsive unit is only correct relative to the constrained geometry. When live pane width and height move in opposite directions, the ticket's unit suggestion remains a hypothesis and the rendered box decides.

N/A Audits — 📑 📡 🔗

N/A across listed dimensions: this app-local SCSS and E2E repair changes no public/consumed API ledger, MCP description, workflow convention, skill, wire format, or cross-substrate primitive.


🎯 Close-Target Audit

  • Close-target identified: #16423
  • #16423 is a bug leaf and is not epic-labeled.
  • Exact-head commit and PR body contain the same single close target; after refreshing origin/dev, the branch carries one #16423 commit and only the three declared files.
  • All five ACs map to the SCSS delta plus the exact-head L3 receipt: pane-relative sizing, non-zero-or-hidden wave, non-negative slack, two viewport sizes/both themes, and SCSS-only placement.

Findings: Pass. The two Post-Merge Validation checks are open-ended human verification, not deferred authoring or an expiring AC.


🪜 Evidence Audit

  • PR body declares Evidence: L3 (...) → L3 required.
  • Author receipt is exact-head appropriate: two independent viewport boots pass, the stashed-fix red run fails both on equal metric type, and both themes were measured on the shared source layer.
  • The visual/runtime ACs are not promoted from static evidence; the browser CSSOM receipt is the stated proof.
  • Post-merge items are explicitly separated from merge evidence.

Findings: Pass. Achieved L3 matches the rendered-CSS acceptance surface.


🧪 Test-Evidence & Location Audit

  • Execution evidence: all 11 required checks are green at ee3fa9624ce9340f449d5c003e3e83275bb19446; author non-CI receipt reports 2/2 exact-head E2E passes plus a 2/2 red proof with the fix stashed.
  • Reviewer falsifier: N/A — no unresolved behavioral concern after checking containment ownership, formula direction, threshold ordering, and the symptom-level red proof.
  • Test location: pass — the new witness lives in the existing Workstation E2E shard, uses the custom Neo config, and isolates viewport states into separate boot contexts.

Findings: Pass. The assertions bind pane-height/type direction, rendered-or-hidden trim, and content-box fit rather than implementation tokens or exact pixels.


📋 Required Actions

No required actions — eligible for human merge.


📊 Evaluation Metrics

Verdict weights: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity. These are importance-to-verdict weights, not effort budgets.

  • [ARCH_ALIGNMENT]: 98/100 - The pane is the correct container owner, the constrained axis is evidence-selected, and the change stays in the shared Workstation SCSS layer; the two points retain ordinary caution for arbitrary future tear-out aspect ratios outside the measured ticket states.
  • [CONTENT_COMPLETENESS]: 98/100 - The body truth-folds the ticket-method inversion, carries exact receipts, and the SCSS/spec explain ownership and fit arithmetic; only subjective post-merge glances remain.
  • [EXECUTION_QUALITY]: 96/100 - Exact-head CI, relationship assertions, a geometry precondition, per-card fit checks, and the stashed-fix red proof cover the named failures; four points reflect that the behavioral shard is author-owned non-CI evidence rather than a required emitted check.
  • [PRODUCTIVITY]: 100/100 - Every #16423 AC is delivered without widening into dock-layout or tab-overflow work.
  • [IMPACT]: 68/100 - This is an operator-visible Workstation presentation defect affecting compact panes and film readiness, but it is contained to one app's resident cards.
  • [COMPLEXITY]: 58/100 - Three files and a small selector surface, with moderate reasoning load in 2D container semantics, threshold arithmetic, and rendered relationship coverage.
  • [EFFORT_PROFILE]: Quick Win - A contained SCSS correction plus a focused L3 witness removes a visible defect without changing the dock document or runtime component model.

Exact head is merge-safe; human merge authority remains with @tobiu.