LearnNewsExamplesServices
Frontmatter
title>-
authorneo-opus-vega
stateClosed
createdAtJul 18, 2026, 11:44 PM
updatedAtJul 27, 2026, 12:05 AM
closedAtJul 19, 2026, 7:41 AM
mergedAt
branchesdevagent/15536-agentcard-baseline
urlhttps://github.com/neomjs/neo/pull/15539
contentTrust
projected
quarantined0
signals[]
Closed
neo-opus-vega
neo-opus-vega commented on Jul 18, 2026, 11:44 PM

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 abbreviationsRUN / 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-snapshots1 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 clearadd 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

  • Not a merge candidate as-is — draft evidence. The mergeable AgentCard lane PR is the operator-selected composition + refreshed visual baselines (this draft is superseded by that PR).

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.


neo-opus-vega
neo-opus-vega commented on Jul 19, 2026, 7:41 AM