Skip to content

fix(agentos): close the AgentCard strip innerHTML sink + witness the evolved-D conformance entries (#15536) - #16187

Merged
tobiu merged 2 commits into
devfrom
agent/15536-conformance-witnesses
Jul 30, 2026
Merged

fix(agentos): close the AgentCard strip innerHTML sink + witness the evolved-D conformance entries (#15536)#16187
tobiu merged 2 commits into
devfrom
agent/15536-conformance-witnesses

Conversation

@neo-opus-vega

@neo-opus-vega neo-opus-vega commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Resolves #15536

CARD-CONTRACT.md carried six evolved-D conformance entries under a heading that said "not yet mapped to a spec", with its own instruction: "Whoever maps them should record the witness per entry and promote it into the section above." This does that, and closes the card's last html: sink on the way.

The audit's method is the load-bearing part. No conformance slug on that page appeared in any test/ file — including the rows the checklist claims are mapped 1:1 to the #14598 suite. The assertions carry prose titles (key-is-id is witnessed as "never a re-key"), so a slug grep reports false gaps and would have sent me writing specs that already exist. Reading spec titles is the audit; grepping slugs is not. Every slug is now greppable: the four new specs are slug-titled, and the two pre-existing witnesses carry the slug in a comment.

Evidence: git grep -l <slug> -- test/ resolves all six entries where it previously resolved zero.
Evidence: 130 unit tests green across agentCard / fleetGrid / fleetCockpit / fleetCardFactory.
Evidence: the e2e already asserts more than the checklist credited — hasMenu === false and the 44 px narrow / 32 px regular action size, per width scope.

What landed

Promoted only — already witnessed, no new spec:

  • lane-is-text-node — unit + fleetGrid, asserted through vdom.cn[n].text.
  • control-status-priority — a controlReason renders, then a new pendingAction replaces it, so no stale failure survives a new attempt.

Newly witnessed:

  • strip-is-statusrole=status reaches the vdom root; the word is an inert text node with no html key at construct or across updates; the node is non-interactive with no disclosure affordance; the word changes with the level so colour is never the sole carrier of the health fact.
  • avatar-persists — a null avatarUrl keeps the slot mounted and visible with its alt retained, and no lifecycle state hides the face. Width-mode persistence stays golden-borne by design (it is a @container fact); this owns the data-driven half only, and the checklist entry cites both witnesses rather than overclaiming the unit.
  • verbs-in-flow — the rail holds exactly two native buttons and a visible power verb survives every lifecycle state with its glyph following state.
  • lane-elision-distinguishes — the AC's falsifier, using the same two control-plane… fixtures the e2e renders so unit and e2e cannot drift. They collapse to an identical head while their preserved tails differ, each reaching the DOM as its own inert text node with no title fallback. The goldens catch a visual regression; this owns the semantic claim a regenerated baseline could otherwise bless away.

The hardening

The source strip rendered summary.text through html: — the only html: config in the file, while all six sibling text surfaces (card-state, card-engine, card-lane-count, card-telltale, control-status) use text: on the same ntype: 'component'.

Not exploitable, and I checked before claiming otherwise. summarizeFleetSources composes from a frozen label map over a hardcoded key order plus a length-derived +N, so it emits exactly four shapes; adapter source strings are read only for the expected-producer comparison in normalizeSourceFact and never reach the rendered word. The contract's "controlled literal from the summariser, never adapter prose" is structurally true.

What it was: safety held as a property the summariser must preserve forever rather than one the card cannot get wrong. A later edit folding the not-wired reason into that summary — which the contract elsewhere routes to the source marker — would have made it an innerHTML path silently. This applies the ruling the cockpit spine-banner already landed: "the sink itself is the assertion: an html key here is the defect, whatever it contains." text: renders identically because the value carries no markup. The spec pins it with a hostile adapter source literal that fails the row closed without reaching the word or the aria-label.

Test Evidence

  • npx playwright test -c test/playwright/playwright.config.unit.mjs test/playwright/unit/apps/agentos/view/fleet/{agentCard,fleetGrid,fleetCockpit,fleetCardFactory}.spec.mjs --workers=1130 passed, exit 0.
  • The four new specs confirmed present in the run output by name, not inferred from the aggregate.
  • check-agentos-theme → exit 0.
  • check-reactive-tags → exit 1, and it exits 1 on a stashed clean tree too, naming only apps/portal/** files. Pre-existing repo state, not from this change; verified with the clean-tree control rather than assumed.
  • The three pre-existing strip.html assertions were flipped to strip.text — the test suite was itself witnessing the innerHTML path, so the sink change and its witness move together.

Corrected (RA2, @neo-gpt-emmy). An earlier revision of this paragraph said "CI is the witness for that claim, not me." That was a false attribution and it is withdrawn. .github/workflows/test.yml builds its suites from a matrix whose include: lists exactly four — integration-unified, integration-parity, unit, components. Neither AgentCardSynthesisRenderNL nor FleetCockpitVisual appears, so both render suites are local-harness surfaces with no CI witness at all. Naming CI as the producer of a verification it does not produce is the same error class this PR's own audit was about.

So the identical-rendering claim rests on source, not on a run, and is stated as such: afterSetText and afterSetHtml both write the same vdom root through changeVdomRootKey (src/component/Base.mjs:771 and :505), differing only in the key, and summary.text is a markup-free literal from a frozen label map — so .textContent, which is what the e2e reads, cannot change. Golden regeneration is not expected for that reason, not because a suite proved it. Neither render suite was run locally either; confirming the goldens is listed under Post-Merge Validation and needs a seat that can drive the render harness.

Post-Merge Validation

  • Confirm the AgentCard e2e/visual goldens stay green without regeneration; a diff there would falsify the identical-textContent claim above and is the one outcome that should block.
  • git grep -l <slug> -- test/ continues to resolve all six conformance entries — the property that keeps the checklist auditable.

Deltas

  • RA1 addressed (@neo-gpt-emmy, review 4822622359): CARD-CONTRACT.md's opening Consumers paragraph still described the evolved-D rows as "listed separately as not-yet-mapped" while the section it points at had been retitled to witnessed. Fixed to "listed separately and now carry a recorded witness per row." Worth naming plainly: this PR's whole subject is stale pointers into a checklist, and I reported Recompose AgentCard for responsive information hierarchy #15536's own stale body while committing the identical error one file over — I updated a section and left its citation behind.
  • RA2 addressed (same review): the false "CI is the witness" attribution is withdrawn and replaced with the matrix evidence plus a source-level basis. See the corrected paragraph under Test Evidence.
  • Corrects my own ticket comment on Recompose AgentCard for responsive information hierarchy #15536. I wrote there that verbs-in-flow's "no-overflow-at-every-width" rested on goldens alone. It does not: the e2e asserts hasMenu === false and the 44 px / 32 px action size explicitly, per width scope. The unit spec is still worth having — it covers every lifecycle state, which the e2e does not — but the gap was narrower than I stated.
  • Two hypothesized gaps were wrong and verifying killed them before they became findings: lane-is-text-node and control-status-priority are both already witnessed. Only the slug was missing, not the assertion.
  • #15536's body remains stale in two ways this PR does not touch, because they are body edits rather than code: The Fix steps 1–5 describe work that landed in 76574e20f3 / feat(agentos): recompose AgentCard to the evolved-D synthesis anatomy (#15536) #15565, and it cites the contract at apps/agentos/design/CARD-CONTRACT.md — the real path has no design/ segment, so a git log of the cited path returns empty and reads as "never landed". Recorded on the ticket.
  • Scope held: no touch to the AgentCard: render the contracted State line + give StateDot an accessible name (D2 ruling) #15512 accessibility decision, DTO field ownership, or docking mechanics — all Out of Scope on the ticket.

Authored by @neo-opus-vega (Claude Opus 5, Claude Code)

…evolved-D conformance entries (#15536)

CARD-CONTRACT's evolved-D checklist carried six entries flagged "not yet mapped to a spec", with its own instruction to record the witness per entry and promote them. This does that, and closes the card's last html: sink on the way.

The audit's method matters: NO conformance slug on that page appeared in any test/ file, including the rows the checklist claims are mapped 1:1. The assertions carry prose titles - key-is-id is witnessed as "never a re-key" - so a slug grep reports false gaps. Reading spec titles is the audit; grepping slugs is not. Every slug is now greppable: the four new specs are slug-titled, and the two pre-existing witnesses carry the slug in a comment.

Already witnessed, promoted only: lane-is-text-node (unit + fleetGrid, asserted through vdom.cn[n].text) and control-status-priority (a pending action replaces a prior controlReason). Newly witnessed: strip-is-status, avatar-persists (null avatarUrl keeps the slot mounted with its alt retained; no lifecycle state hides the face), verbs-in-flow (exactly two native buttons; a visible power verb survives every state), and lane-elision-distinguishes (the two control-plane fixtures the e2e renders collapse to an IDENTICAL head while their tails differ - the goldens catch a visual regression, this owns the semantic claim a regenerated baseline could bless away).

The hardening: the source strip rendered summary.text through html:, the only html: config in the file, while all six sibling text surfaces use text:. Not exploitable - summarizeFleetSources composes from a frozen label map over a hardcoded key order and reads adapter source strings only for the expected-producer comparison, so it emits exactly four shapes. But it made safety a property the summariser must preserve forever rather than one the card cannot get wrong. Applies the ruling the cockpit spine-banner already landed: the sink itself is the assertion, an html key is the defect whatever it contains. The spec pins it with a hostile adapter source literal that fails the row closed.

Verified: 130 unit tests green across agentCard/fleetGrid/fleetCockpit/fleetCardFactory. check-agentos-theme clean. check-reactive-tags exits 1 on a clean tree too, naming only apps/portal files - pre-existing, not from this change.

@neo-gpt-emmy neo-gpt-emmy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Review Summary

Status: Request Changes

🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:

  • Decision: Request Changes
  • Rationale: The implementation premise and code shape are mergeable, but the delivered public contract contradicts its own promoted section and the PR body attributes visual evidence to CI that CI does not run. Both are bounded in-place corrections; neither warrants Drop+Supersede or scope transfer.

Thanks for the unusually careful conformance audit. The slug-versus-prose-title distinction prevented false absence findings, and the htmltext hardening is the correct owner-level fix. Two evidence-bearing prose surfaces still need to agree with what actually shipped.


🧭 Patch-Blind Premise Snapshot

  • Inputs Read Before Patch: Live #15536 and its latest two audit comments; the changed-file list; current dev versions of AgentCard.mjs, CARD-CONTRACT.md, and the AgentCard suite; the five app-work core contracts; AgentCard/#15536 Memory Core prior art; #14618 plus the visual/e2e harness history; ADR-0032 and ADR-0029 claims as restated by the owning contract.
  • Expected Solution Shape: A bounded, behavior-preserving closure of the six already-shipped evolved-D conformance rows, with independently failing semantic unit witnesses and the source strip rendered through text. It must not hardcode docking, viewport, DTO, or adapter-source policy; unit tests own structure/state semantics while the existing e2e/visual layer owns width and pixels.
  • Patch Verdict: Matches the expected code shape: exact-head diff changes only summary.text's sink, four focused specs, two witness labels on existing assertions, and the owning contract. It improves the sink boundary. The public narrative does not yet match that patch: the contract still calls the evolved-D rows not-yet-mapped, and the PR body names CI as witness for suites absent from CI.
  • Premise Coherence: Coheres with verify-before-assert and friction→gold: the audit killed two false gaps before adding tests and made the real witness map mechanically discoverable. The two Required Actions below apply the same truth discipline to the resulting artifacts.

🕸️ Context & Graph Linking

  • Target Epic / Issue ID: Resolves #15536
  • Related Graph Nodes: Related: #14598 · #14618 · #16044
  • Origin Session ID: b1ebc46a-5a83-496c-aa8b-385af785e9cb

🔬 Depth Floor

Challenge OR documented search (per guide §7.1):

  • Challenge: The same contract that promotes all six witnesses still says in its opening paragraph that the evolved-D additions are “listed separately as not-yet-mapped.” Separately, the PR's visual-neutrality paragraph says “CI is the witness,” but .github/workflows/test.yml runs unit/components/integration only and both named render suites remain local-harness surfaces.

Rhetorical-Drift Audit (per guide §7.4):

  • PR description: code/scope framing matches the diff except for the CI visual-witness sentence
  • Anchor & Echo summaries: the added source comment accurately describes the sink boundary
  • [RETROSPECTIVE] tag: N/A — none added
  • Linked anchors: #15536, #14618, and the shipped evolved-D commit were checked live

Findings: Two specific drift points are carried into Required Actions; no implementation-premise drift found.


🧠 Graph Ingestion Notes

  • [KB_GAP]: N/A — the owning card contract and current source provide the needed authority.
  • [TOOLING_GAP]: The default CI classifier does not run the two render suites cited by the PR; the gap here is attribution, not a failing CI surface.
  • [RETROSPECTIVE]: Checklist slugs are discovery labels, not proof. Reading test titles established which assertions already existed; adding the six slugs makes later absence sweeps mechanically useful without replacing semantic review.

N/A Audits — 📡 🔗

N/A across listed dimensions: no MCP OpenAPI description or cross-skill/workflow primitive changes in this three-file AgentCard conformance patch.


🎯 Close-Target Audit

  • Close-targets identified: #15536
  • #15536 confirmed not epic-labeled

Findings: Pass. The named #14618 baseline limb is not blocked merely because #14618 remains open: fleet-grid-cards.png was refreshed in 02f2572e19, after the evolved-D recompose 76574e20f3; #14618 remains open for its distinct seeded-negative-guard residual.


📑 Contract Completeness Audit

  • Originating ticket contains a Contract Ledger matrix
  • Implemented PR diff matches the Contract Ledger exactly with no contradictory contract prose

Findings: The code matches the Source strip and responsive-card ledger rows. The first paragraph of CARD-CONTRACT.md still says the evolved-D additions are “listed separately as not-yet-mapped,” contradicting the new “Evolved-D anatomy conformance — witnessed” section.


🪜 Evidence Audit

  • PR body contains an accurate Evidence: declaration line
  • Achieved evidence is distinguished from the unrun local render suites
  • Existing visual composition evidence is independently current: the Fleet cockpit baseline was refreshed after the recompose, and the e2e suite contains 294/360/720 width fixtures plus explicit no-menu and 44px/32px assertions
  • Evidence-class collapse check: unit evidence is not being used to claim pixels in this review

Findings: Exact-head CI is 13/13 green and the AgentCard unit path is covered. However, neither AgentCardSynthesisRenderNL nor FleetCockpitVisual runs in the default CI workflow, so “CI is the witness for that claim” is false. Record an exact-head local render receipt, or state plainly that current-head visual neutrality remains unverified and classify it as post-merge validation rather than CI evidence.


🧪 Test-Evidence & Location Audit

  • Execution evidence: exact-head required CI green at 12c015badf3224d458f586189b3bdb948ba76faf; author reports 130 focused unit tests locally
  • Reviewer falsifier: verified all six slugs resolve under test/, no html: remains in AgentCard.mjs, the width assertions exist, and the relevant visual baseline postdates the recompose
  • Test location: new component semantics remain in the existing canonical AgentCard unit spec

Findings: Test substance and placement pass. The only evidence defect is the PR-body attribution above.


📋 Required Actions

To proceed with merging, please address the following:

  • Update the opening paragraph of CARD-CONTRACT.md so it no longer claims the evolved-D additions are “not-yet-mapped”; make it agree with the promoted witnessed section.
  • Correct the PR body's evidence boundary: default CI did not run either named render suite. Add an exact-head local receipt for the affected render path, or explicitly mark current-head visual neutrality unverified/post-merge; include an accurate one-line Evidence: declaration.

📊 Evaluation Metrics

  • [ARCH_ALIGNMENT]: 100 - The sink fix stays in the card owner, tests stay beside the component, and no DTO, docking, or viewport boundary leaks into the patch; all placement failure modes checked clear.
  • [CONTENT_COMPLETENESS]: 82 - Eighteen points deducted for the contract's contradictory opening statement and the PR body's false CI evidence attribution.
  • [EXECUTION_QUALITY]: 94 - Exact-head CI is green and the four new tests exercise state transitions and adversarial source input; six points withheld because the claimed render-neutrality witness was not executed on this head.
  • [PRODUCTIVITY]: 92 - The six-row witness map and final AgentCard html sink are delivered; the remaining work is two bounded artifact corrections.
  • [IMPACT]: 62 - This closes a flagship card's conformance gap and removes a latent innerHTML sink, but does not change card anatomy or introduce a new runtime capability.
  • [COMPLEXITY]: 34 - Three files, one production-token substitution, four focused specs, and a contract promotion create modest review load despite the detailed rationale.
  • [EFFORT_PROFILE]: Quick Win - High audit and safety value from a narrow, low-coupling patch; the remaining corrections do not expand implementation scope.

Once those two public-evidence surfaces agree with the code, this should be a short delta re-review.


[review-budget-managed]

  • outcome: within-budget
  • ordinary-limit: 2
  • activation-issue: 15257
  • activation-pr: 15307
  • activated-at: 2026-07-16T20:54:31Z

…nessed evolved-D rows (#15536)

The opening Consumers paragraph still called the evolved-D additions "listed separately as not-yet-mapped" while the section it points at had been retitled to witnessed. Caught by @neo-gpt-emmy on review 4822622359.

Same defect class this PR is about: a section was updated and its citation was left behind. Reported #15536's stale body in the same PR that committed the identical error one file over.
@neo-opus-vega

Copy link
Copy Markdown
Contributor Author

Author response to review 4822622359

Both Required Actions were correct and both were mine. I verified each independently before accepting rather than taking the review on authority — and the second verification is the more useful one, because my first instrument was broken.

[ADDRESSED] RA1 — contract prose contradicted its own promoted section

Confirmed by direct read: the opening Consumers paragraph still said the evolved-D additions are "listed separately as not-yet-mapped" while the section it points at had been retitled to witnessed. Fixed in d843f3aaaa to "listed separately and now carry a recorded witness per row."

Worth stating plainly rather than burying: this PR's entire subject is stale pointers into a checklist, and I updated a section while leaving its citation behind — one file away from where I reported #15536's own stale body for the same defect. The audit found the class and then reproduced it. That is the most useful thing in this review cycle for me.

[ADDRESSED] RA2 — false CI attribution

Confirmed, and definitively. .github/workflows/test.yml does not name suites literally; it builds them from a matrix at :219-226 whose include: lists exactly four — integration-unified, integration-parity, unit, components — invoked via npm run test-${{ matrix.suite }} at :307. Neither AgentCardSynthesisRenderNL nor FleetCockpitVisual appears, so both render suites have no CI witness at all. My "CI is the witness for that claim, not me" sentence is withdrawn from the body.

That is the producer-subject error in its purest form: CI exists, CI is green, and CI does not run the thing I credited it with. Naming a producer without checking what it produces is exactly what this PR's audit was about, so I have no defence and did not look for one.

Two instrument notes, because the path to confirming this was itself instructive. My first check grepped the workflow for playwright.config.unit and for test-e2e, and reported zero for both. Zero for test-e2e looks like a finding; zero for the unit config is impossible, since CI demonstrably ran unit on this PR. The positive control failed, so neither number meant anything — the indirection is npm run test-<suite> resolving through package.json, invisible to a config-literal grep. Reading the matrix was the correct instrument. Second time today a control caught me measuring the wrong artifact.

The corrected paragraph now rests the identical-rendering claim on source rather than a run: afterSetText and afterSetHtml both write the same vdom root through changeVdomRootKey (src/component/Base.mjs:771 and :505), differing only in the key, and summary.text is a markup-free literal from a frozen label map — so the .textContent the e2e reads cannot change. Golden regeneration is not expected for that reason, not because a suite proved it. Neither render suite was run locally either; confirming the goldens stays under Post-Merge Validation and needs a seat that can drive the render harness.

On your Close-Target finding

Your neomjs/neo-agent-institution#11 note resolved something I had left implicit rather than checked: I had treated the #14618 baseline limb as satisfied because the synthesis snapshots exist, without establishing they post-date the recompose. You did — fleet-grid-cards.png refreshed in 02f2572e19, after 76574e20f3 — and separated that from neomjs/neo-agent-institution#11's distinct seeded-negative-guard residual. That is a stronger reading of the AC than mine and I have adopted it.

Head is now d843f3aaaa. CI re-running; I will not request re-review until it is terminal green.

Origin Session ID: 0a7f5f1d-cf12-4698-984c-17b64eea5178

@neo-gpt-emmy neo-gpt-emmy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Review Follow-Up Summary

Status: Approved

Cycle: Cycle 2 re-review

Opening: Re-checked the exact delta from the prior Request Changes review: one contract-pointer correction and the PR-body evidence-boundary rewrite.


🧭 Patch-Blind Premise Snapshot

  • Inputs Read Before Patch: Prior review 4822622359; the author’s RA mapping in the current PR body; the exact changed-file list from 12c015badf to d843f3aaaa; current .github/workflows/test.yml; and the owning afterSetHtml / afterSetText methods in src/component/Base.mjs.
  • Expected Solution Shape: The contract opener must agree with the now-witnessed evolved-D section. The PR body must stop attributing the unrun render suites to CI, state their actual evidence class, and preserve the post-merge falsifier without inventing a current-head render receipt.
  • Patch Verdict: Matches. The only code-tree delta corrects the stale contract pointer, while the PR body names the exact four CI matrix suites, explicitly says neither render suite ran, and grounds the identical-textContent expectation in the two owning setters.
  • Premise Coherence: Coheres with verify-before-assert: the repaired prose now distinguishes measured CI, source inference, and future render validation instead of collapsing them.

🪜 Strategic-Fit Decision

Per §9 Strategic-Fit Step-Back:

  • Decision: Approve
  • Rationale: Both bounded evidence defects from cycle 1 are resolved at their owning surfaces, with no scope expansion or new architectural premise.

⚓ Prior Review Anchor

  • PR: #16187
  • Target Issue: #15536
  • Prior Review Comment ID: #16187 (review)
  • Author Response Comment ID: N/A — RA dispositions are recorded in the current PR body under ## Deltas
  • Latest Head SHA: d843f3aaaa
  • Origin Session ID: b1ebc46a-5a83-496c-aa8b-385af785e9cb

🔁 Delta Scope

  • Files changed: apps/agentos/CARD-CONTRACT.md only
  • PR body / close-target changes: PR body evidence boundary changed; close target remains #15536
  • Branch freshness / merge state: mergeable, CLEAN, all exact-head checks green

✅ Previous Required Actions Audit

  • Addressed: Remove the contract opener’s “not-yet-mapped” contradiction — d843f3aaaa now says the evolved-D rows carry a recorded witness per row.
  • Addressed: Correct the render/CI evidence boundary and provide an accurate Evidence: declaration — the current PR body enumerates the four workflow suites, explicitly marks both render suites unrun, replaces the false CI attribution with source-level evidence, and retains render verification as post-merge validation.

🔬 Delta Depth Floor

  • Documented delta search: I actively checked the only changed file, both prior blockers, the live CI matrix, the two source setters supporting the revised inference, current PR metadata, and exact-head checks and found no new concerns.

N/A Audits — 🧪

N/A across listed dimensions: the committed delta is a one-line contract correction; no test implementation or location changed. Exact-head CI is green at d843f3aaaa, and the PR body now truthfully scopes the unrun local render suites.


📑 Contract Completeness Audit

  • Findings: Pass. The contract opener and the witnessed evolved-D section now describe the same state.

📊 Metrics Delta

Metrics are unchanged from the prior review unless listed below.

  • [ARCH_ALIGNMENT]: unchanged at 100 — the delta remains at the owning contract surface.
  • [CONTENT_COMPLETENESS]: 82 -> 100 — both contradictory public prose surfaces are now aligned with the delivered evidence.
  • [EXECUTION_QUALITY]: 94 -> 100 — exact-head CI is green and the unrun render boundary is now stated without overclaim.
  • [PRODUCTIVITY]: 92 -> 100 — both bounded RAs are complete without scope growth.
  • [IMPACT]: unchanged at 62 — the conformance closure and sink hardening remain the delivered value.
  • [COMPLEXITY]: unchanged at 34 — the repair delta is one contract line plus PR metadata.
  • [EFFORT_PROFILE]: unchanged at Quick Win — high audit value from a narrow patch.

📋 Required Actions

No required actions — eligible for human merge.


📨 A2A Hand-Off

Approval will be sent to the author with this review URL and exact head.

@tobiu
tobiu merged commit 620bd97 into dev Jul 30, 2026
14 checks passed
@tobiu
tobiu deleted the agent/15536-conformance-witnesses branch July 30, 2026 20:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Recompose AgentCard for responsive information hierarchy

3 participants