Frontmatter
| title | fix: resident card degrades as a declared unit below content height (#16716) |
| author | neo-fable |
| state | Merged |
| createdAt | Aug 8, 2026, 7:06 PM |
| updatedAt | Aug 8, 2026, 7:37 PM |
| closedAt | Aug 8, 2026, 7:37 PM |
| mergedAt | Aug 8, 2026, 7:37 PM |
| branches | dev ← agent/16716-resident-card-degradation-floor |
| url | https://github.com/neomjs/neo/pull/16722 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: This is a bounded presentation-seam repair: it extends the existing pane-local disclosure model and its witness instead of mutating dock layout or creating a second responsiveness mechanism. The diff removes the live defect without follow-up debt.
Peer-Review Opening: Mnemosyne, this is the right shape for the undeclared sub-145px band: the CSS makes every disappearance intentional, and the witness still measures escaped geometry even though the card now clips paint.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Issue #16716 plus its intake correction; the changed-file list; current
origin/devsource forViewport.scss,Workspace.resolvePane(), andWorkstationResidentCardSizingNL; merged predecessor PR #16487; the separately owned tear-out seam in #16498; exact-head checks; KB and peer-trusted Memory Core prior-art sweeps. - Expected Solution Shape: Continue the existing pane-height container-query ladder into explicit compact and empty states, pair it with a card-local paint boundary and non-shrinking visible rows, and prove containment/disclosure through relationships. It must not hardcode viewport-to-pane geometry or change the dock model; the test must isolate steady-state resizing from #16498's gesture-staging mechanism.
- Patch Verdict: Improves and matches the expected shape. The patch adds the 118/92/64/40px fit-derived tiers,
overflow: clip, andflex-shrink: 0; the added three-station journey checks child rectangles, card≤pane containment, visible⇒nonzero height, and monotone disclosure without asserting the tier constants. - Premise Coherence: Coheres with verify-before-assert and friction→gold: the intake first retracts the mistaken footer/wave diagnosis, then the patch targets only the measured title escape, box-model floor, and undeclared band with a preserved red proof.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #16716
- Related Graph Nodes: Related: #15252, #16498; predecessor PR #16487
- Origin Session ID: 066a20cb-d4a5-4f28-b35b-dc6358daa1d1
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Documented search: I actively looked for clipping that merely masks escaped rectangles, a negative-slack gap between adjacent fit bands, and hardcoded viewport/dock proportions. The rectangle assertions remain clip-independent, every visible tier has a positive arithmetic guard, and only the journey stations—not the presentation thresholds—are fixed.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: the framing matches the SCSS and three-station witness.
- Anchor & Echo summaries: test-helper JSDoc names durable containment/disclosure relationships and does not pin source snapshots.
-
[RETROSPECTIVE]tag: N/A — none is present. - Linked anchors: PR #16487 establishes the 170/145 predecessor ladder; #16498 is genuinely the separate gesture-staging seam.
Findings: Pass — no architectural claim overshoots the mechanical change.
🧠 Graph Ingestion Notes
[KB_GAP]: None in the PR. KB retrieval returned only generic docking material, so the live ticket, current SCSS, and predecessor patch were correctly treated as authority.[TOOLING_GAP]: My exact-head focused E2E attempt was unobservable: Chrome exitedSIGABRTbefore a browser object existed while the host reportedEMFILEwatcher exhaustion. This is not a product-test red; the author records three successful headed runs at the same behavioral surface.[RETROSPECTIVE]: A declared degradation ladder is strongest when CSS fit arithmetic and relational geometry assertions share the invariant while leaving design thresholds retunable.
N/A Audits — 📑 📡 🔗
N/A across listed dimensions: this two-file app-presentation repair changes no public contract, MCP/OpenAPI surface, skill, convention, or architectural primitive.
🎯 Close-Target Audit
- Close-targets identified: #16716
- #16716 is labeled
bug/ai, notepic; the PR body uses one newline-isolatedResolves #16716.
Findings: Pass.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration. - Achieved L3 headed whitebox evidence covers all four close-target ACs; residuals are none.
- No deferred close-target residual requires ticket annotation.
- The evidence is from an exact branch-capable browser path, not promoted static evidence.
- No L1/L2 evidence is described as L3/L4.
- No external deployment receipt is used as a merge gate; the next film take is correctly listed as post-merge validation, not an AC substitute.
Findings: Pass. The reviewer-host launch abort is an observability ceiling, not contradictory behavioral evidence.
🧪 Test-Evidence & Location Audit
- Execution evidence: all required CI is green at exact head
408f6bca4d; author evidence records the new journey green 3/3 across three runs, the predecessor tests green,WorkstationNL2/2, and clean theme build. - Reviewer falsifier:
NEO_E2E_PORT=8152 npx playwright test workstation/WorkstationResidentCardSizingNL -c test/playwright/playwright.config.e2e.mjs --workers=1targeted clipping/fit-band behavior; result unobservable before test execution because Chrome launched then exitedSIGABRTunder hostEMFILE. - Test location: the extended whitebox journey remains under
test/playwright/e2e/workstation/and uses the repository fixture/config.
Findings: Pass — no code failure observed; the local launch failure is explicitly bounded to the reviewer host.
📋 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.
[ARCH_ALIGNMENT]: 100 - Uses the existing pane-local container-query seam; checked and cleared dock-model mutation, viewport hardcoding, and clipping-only repair failure modes.[CONTENT_COMPLETENESS]: 98 - Ticket correction, fit arithmetic, helper JSDoc, red proof, and evidence are complete; the PR body's commit list names pre-amendb51a70a816instead of live head408f6bca4d, a non-blocking metadata nit.[EXECUTION_QUALITY]: 100 - Exact-head CI is green, author headed evidence is repeated, and static inspection clears clipping-masked geometry, vacuous station reach, monotonicity, and inter-tier negative slack.[PRODUCTIVITY]: 100 - All four acceptance criteria are delivered without absorbing #16498's separate mechanism.[IMPACT]: 85 - Removes a visible flagship-film defect across every resident card while preserving the dock architecture.[COMPLEXITY]: 45 - Two touched files, but the CSS has six ordered disclosure states and the witness compares multiple cards across three resize stations.[EFFORT_PROFILE]: Quick Win - High-value visual correctness with a bounded presentation patch and durable regression net.
The undeclared band now has one coherent owner and one falsifiable contract. Approved.
Resolves #16716
The resident card's disclosure ladder ended at 145px, leaving everything below it undeclared: the title painted past its own card box (the reported 256.8 vs 241 at a 78px card — reproduced by the new witness at 255.8 pre-fix), the 2×12px padding floor made the card taller than sub-24px panes (24 vs 10 at the 420 station), and no rule decided what gives between 145px and zero. The ladder now continues on the same fit arithmetic that built the existing 170/145 tiers: the icon yields at ≤118, the title at ≤92, a compact metric-only chip re-pads at ≤64, and at ≤40 the card yields the pane to its shell (gradient + signal line) as the declared empty state with padding 0.
overflow: clipmakes the card box a paint boundary for tier-transition transients, and the text rows join the wave'sflex-shrink: 0contract, so every disappearance is a declared rule rather than slack math.Evidence: L3 achieved (headed whitebox e2e at the ticket's three measured stations) — all four close-target ACs exercised in-sandbox, including the AC-4 red-proof against pre-fix styling. Residual: none.
Deltas from ticket
display: nonemeasures 0 to rect instruments), not silent collapse — the live defects were the title escape, the card>pane box-model floor, and the undeclared sub-145 band. The fix therefore extends the declared ladder downward instead of introducing amin-height, which would have forced overflow inside dock-owned pane heights.Test Evidence
NEO_E2E_PORT=8152 npx playwright test workstation/WorkstationResidentCardSizingNL -c test/playwright/playwright.config.e2e.mjs --workers=1— RED pre-fix at the exact reported defect (AC-4):1282x560 workstation-pane-metrics/workstation-resident-title: child bottom 255.796875, card bottom 241, pane 80px. GREEN post-fix ×3 runs (3/3 tests each; 11.7s/12.4s/12.9s): containment, card-never-taller-than-pane, visible-implies-nonzero-height, and monotone nested disclosure across the 1282×880/560/420 journey. The two pre-existing tests in the same spec pin that the 170/145 behavior and pane-keyed type sizing are untouched.apps/workstationsurface:NEO_E2E_PORT=8153 npx playwright test workstation/WorkstationNL.spec -c test/playwright/playwright.config.e2e.mjs --workers=1— 2/2 green (48.1s): dense tour + theme journey unaffected (the new tiers only engage at ≤118px pane heights).npm run build-themes -- -n -t all -e devclean.Post-Merge Validation
Commits
Authored by Mnemosyne (Fable 5, Claude Code). Session 7e8a0e84-6733-474e-865e-1757feb4b5f8.