Refs #15536
Step 1 of the AgentCard re-baseline: the current (rejected) composition captured at pathological fleet density, across the card-width matrix, so the rebaseline directions are judged against the real failure modes — not a benign 7-card seed. Draft / evidence, not a merge candidate: these goldens are the "before"; they're superseded by the selected composition's renders.
The control is captured on the card's own width (294 / 360 / 480px), not viewport breakpoints — the same axis the A / B+C-fusion / D directions render against, so it's an apples-to-apples "before." (The card grid is pinned to a single fixed-width track per width; the rejected card itself only responds to the outer FleetGrid's 3/2/1 viewport breakpoints — one of the defects the ticket names.)
What the control exposes — @neo-gpt-emmy's four falsifier teeth + the operator's avatar invariant, all rendered (not asserted from prose):
- 294px narrow failure — names collapse to
starting Ba / idle Cle…, engine tags vanish, the source markers wrap into the three-row 9px wall.
- Shared-prefix lanes — the two
control-plane … lanes (open counts 23 / 17) both collapse to th… / start…; the visible fragment does not distinguish them.
- Opaque source abbreviations —
RUN / ROS / REP at 9px; at 294px they stack three rows, collapsing to one row only when brute-forced to 480px.
- Control-rail footprint — the two ~40px lifecycle buttons dominate the rail and crush the identity body at every width, including a pending
start… and a retained reject reason.
- Avatar keeper (operator invariant) — a clearly visible profile avatar in every card at every width (a deterministic placeholder silhouette standing in for the production github image, so the 40px slot is on record without a flaky network fetch).
The source facts span the full honest vocabulary — wired-observed / wired-inferred / missing / not-wired — honoring the closed sourceHealth.mjs contract (a wired marker needs its axis's producer literal + observed/inferred confidence, else it fails closed). The card states resolve honestly too (wedged/idle need runtime wired; limited renders start… transitionally via pendingAction).
Evidence: L3 (mounted whitebox render at pathological density; 3 goldens across the card-width matrix, visually verified) → L3 required (the render evidence step 1 of the lane asks for). Residual: none for step 1 — the three directions' renders, the operator selection, and the implementation + baseline refresh are the lane's remaining steps.
Deltas from ticket
None — this is exactly step 1 (the current-density "before" across the card-width matrix, with the avatar keeper). Reworked from an initial viewport-axis draft after reading @neo-gpt-emmy's [baseline-contract] (four teeth) + [operator-invariant] (avatar) messages: the axis moved from viewport (420/820/1280) to card width (294/360/480), avatars were added, and the source DTO was corrected to the closed contract so mixed health actually renders (the first cut failed all sources closed to not-wired).
Test Evidence
NEO_E2E_PORT=8143 npx playwright test agentos/FleetCardBaselineRenderNL -c test/playwright/playwright.config.e2e.mjs --workers=1 --update-snapshots → 1 passed (3.0s); 3 goldens generated.
- Card-width pin asserted live (each card renders within ±4px of 294 / 360 / 480); the four pathological residents render one card each (the
clear→add store injection + grid reconcile verified live).
- Every card avatar image confirmed loaded before capture; all three goldens visually reviewed (avatar visible, mixed source health, shared-prefix collapse, control-rail dominance).
- Not in any CI suite: the e2e/visual matrix runs local-only (no
e2e job in test.yml; the darwin goldens don't gate CI — visual-regression is inherently per-platform).
Post-Merge Validation
Authored by Vega (Claude Opus 4.8, Claude Code). Session ec14fd1b-28a0-4157-aef3-dbe8a5003eca.
Retiring per operator direction (draft-convergence) — falsifiers carried forward
Per @tobiu's relayed priority (resolve the four draft PR states), retiring this draft. #15539 was always explicit "before"-evidence, not a merge candidate — the rejected-baseline witness Grace + Phoebe judged the three rebaseline directions against. Its goldens are transient (darwin-local, non-CI, superseded by the selected composition's refreshed #14618 baselines), so it earns retirement, not merge.
But the falsifiers earn permanence. The pathological fixtures this PR established are durable regression guards for the selected AgentCard shape, and I carry them into the #15536 implementation witness when I execute the operator's SELECT:
- the density roster — long display/engine names, two lanes sharing their first seven chars + 2-digit overflow, wake/throttle telltales at once, a pending control + a retained reject reason;
- the closed
sourceHealth DTO exercised across the full honest vocabulary (wired-observed / wired-inferred / missing / not-wired — the producer-literal + observed/inferred-confidence contract that fails closed);
- the operator avatar-keeper invariant (a visible avatar at every card width);
- the card-width matrix (294 / 360 / 480, not viewport) — the axis the alternatives render against.
The spec (FleetCardBaselineRenderNL.spec.mjs) stays on the branch as the fixture source; the implementation PR re-homes the roster + falsifiers where they guard the new composition permanently, and the goldens refresh to the selected shape.
Independent pressure-test of the production exit: the falsifiers have a durable home (the implementation's own regression witness), so nothing informational is lost by retiring the transient baseline — and my production branch does not inherit Grace's still-unrendered A/B/C browser work (Phoebe is carrying that per the split). Closing; the implementation seat is primed for the #15536 SELECT.
Authored by Vega (Claude Opus 4.8, Claude Code). Session ec14fd1b-28a0-4157-aef3-dbe8a5003eca.
Refs #15536
Step 1 of the AgentCard re-baseline: the current (rejected) composition captured at pathological fleet density, across the card-width matrix, so the rebaseline directions are judged against the real failure modes — not a benign 7-card seed. Draft / evidence, not a merge candidate: these goldens are the "before"; they're superseded by the selected composition's renders.
The control is captured on the card's own width (294 / 360 / 480px), not viewport breakpoints — the same axis the A / B+C-fusion / D directions render against, so it's an apples-to-apples "before." (The card grid is pinned to a single fixed-width track per width; the rejected card itself only responds to the outer FleetGrid's 3/2/1 viewport breakpoints — one of the defects the ticket names.)
What the control exposes — @neo-gpt-emmy's four falsifier teeth + the operator's avatar invariant, all rendered (not asserted from prose):
starting Ba/idle Cle…, engine tags vanish, the source markers wrap into the three-row 9px wall.control-plane …lanes (open counts 23 / 17) both collapse toth…/start…; the visible fragment does not distinguish them.RUN / ROS / REPat 9px; at 294px they stack three rows, collapsing to one row only when brute-forced to 480px.start…and a retained reject reason.The source facts span the full honest vocabulary — wired-observed / wired-inferred / missing / not-wired — honoring the closed
sourceHealth.mjscontract (awiredmarker needs its axis's producer literal +observed/inferredconfidence, else it fails closed). The card states resolve honestly too (wedged/idle need runtime wired;limitedrendersstart…transitionally viapendingAction).Evidence: L3 (mounted whitebox render at pathological density; 3 goldens across the card-width matrix, visually verified) → L3 required (the render evidence step 1 of the lane asks for). Residual: none for step 1 — the three directions' renders, the operator selection, and the implementation + baseline refresh are the lane's remaining steps.
Deltas from ticket
None — this is exactly step 1 (the current-density "before" across the card-width matrix, with the avatar keeper). Reworked from an initial viewport-axis draft after reading @neo-gpt-emmy's
[baseline-contract](four teeth) +[operator-invariant](avatar) messages: the axis moved from viewport (420/820/1280) to card width (294/360/480), avatars were added, and the source DTO was corrected to the closed contract so mixed health actually renders (the first cut failed all sources closed to not-wired).Test Evidence
NEO_E2E_PORT=8143 npx playwright test agentos/FleetCardBaselineRenderNL -c test/playwright/playwright.config.e2e.mjs --workers=1 --update-snapshots→ 1 passed (3.0s); 3 goldens generated.clear→addstore injection + grid reconcile verified live).e2ejob intest.yml; the darwin goldens don't gate CI — visual-regression is inherently per-platform).Post-Merge Validation
Authored by Vega (Claude Opus 4.8, Claude Code). Session ec14fd1b-28a0-4157-aef3-dbe8a5003eca.
Retiring per operator direction (draft-convergence) — falsifiers carried forward
Per @tobiu's relayed priority (resolve the four draft PR states), retiring this draft. #15539 was always explicit "before"-evidence, not a merge candidate — the rejected-baseline witness Grace + Phoebe judged the three rebaseline directions against. Its goldens are transient (darwin-local, non-CI, superseded by the selected composition's refreshed #14618 baselines), so it earns retirement, not merge.
But the falsifiers earn permanence. The pathological fixtures this PR established are durable regression guards for the selected AgentCard shape, and I carry them into the #15536 implementation witness when I execute the operator's SELECT:
sourceHealthDTO exercised across the full honest vocabulary (wired-observed / wired-inferred / missing / not-wired — the producer-literal +observed/inferred-confidence contract that fails closed);The spec (
FleetCardBaselineRenderNL.spec.mjs) stays on the branch as the fixture source; the implementation PR re-homes the roster + falsifiers where they guard the new composition permanently, and the goldens refresh to the selected shape.Independent pressure-test of the production exit: the falsifiers have a durable home (the implementation's own regression witness), so nothing informational is lost by retiring the transient baseline — and my production branch does not inherit Grace's still-unrendered A/B/C browser work (Phoebe is carrying that per the split). Closing; the implementation seat is primed for the #15536 SELECT.
Authored by Vega (Claude Opus 4.8, Claude Code). Session ec14fd1b-28a0-4157-aef3-dbe8a5003eca.