Repository navigation
feat(agent-plugin): visual pass on the decision-review and decision-board canvases (0.11.0) - #282
Merged
Merged
Conversation
…oard canvases I gave both Copilot app canvases one shared stylesheet (canvas-theme.mjs) so their tokens, badges, buttons, and focus ring cannot drift. Colours still read the app's injected tokens first; the fallbacks now follow prefers-color-scheme, where before every render outside the app was light. A test checks every fallback text colour at 4.5:1 in both themes. decision-review: governing records as cards with status, verdict, and provenance in view; findings grouped by severity; notes collapsed; the review cost stated under the button; distinct loading, empty, and error states, the last showing the fixed messages. The paid button starts disabled until the first snapshot. decision-board: pan and zoom through pure viewBox helpers (board-view.mjs, embedded into the page from their own source), neighbour highlight, a clearer legend, approvals as dots against quorum, labelled objection counts, and review controls that label their three steps. With recording off, the fixed note is shown once above the queue. Routes, actions, payload, and the CSP are unchanged. No inline style, no HTML sink, no external asset. A new test bans inline style on both pages. Signed-off-by: Mark Beacom <m@beacom.dev>
Signed-off-by: Mark Beacom <m@beacom.dev>
…rd after Fit A plain wheel over the board graph now scrolls the panel; only Ctrl or Cmd with the wheel zooms, as the hint says. Fit makes the next resize re-open the graph. I also record the after-load resize I measured through the chrome-devtools MCP, and fix the README's stacking breakpoint. Signed-off-by: Mark Beacom <m@beacom.dev>
The baseline dark renders kept a white page and dark text; 16 of 34 pairs were byte-identical and the rest differed only in native form controls and timestamps. I had written that every pair was identical. Signed-off-by: Mark Beacom <m@beacom.dev>
Decisions governing this change9 accepted decisions govern this change · 5 active proposals
Active proposals touching this change (5)These are not yet ratified and do not bind this change:
Links point at |
There was a problem hiding this comment.
🟡 Changes recommended
Dimmed graph labels fail contrast requirements, while fitting and Unicode truncation have concrete edge-case defects.
3 open findings
What changed in this PR
Adds the 0.11.0 visual refresh for both agent-plugin canvases.
Changes:
- Introduces shared theming, responsive states, and accessibility styling.
- Adds decision-board pan, zoom, highlighting, and review-control presentation.
- Updates tests, documentation, packaging, and version metadata.
ADR MCP compliance could not be independently verified because the server was unavailable.
| File | Description |
|---|---|
.claude-plugin/marketplace.json |
Bumps marketplace versions. |
AGENTS.md |
Documents canvas invariants. |
CHANGELOG.md |
Records the visual release. |
bun.lock |
Aligns workspace version. |
docs/reference-verification-agent-plugin.md |
Records headless verification. |
packages/adapters/agent-plugin/.claude-plugin/plugin.json |
Bumps plugin version. |
packages/adapters/agent-plugin/README.md |
Documents the refreshed interfaces. |
packages/adapters/agent-plugin/apm.yml |
Bumps APM version. |
packages/adapters/agent-plugin/extensions/adrkit/board-page.mjs |
Implements the board UI refresh. |
packages/adapters/agent-plugin/extensions/adrkit/board-view.mjs |
Adds pure pan/zoom helpers. |
packages/adapters/agent-plugin/extensions/adrkit/canvas-page.mjs |
Implements review-canvas states and cards. |
packages/adapters/agent-plugin/extensions/adrkit/canvas-theme.mjs |
Adds the shared theme. |
packages/adapters/agent-plugin/package.json |
Bumps package version. |
packages/adapters/agent-plugin/skills/decision-backfill/SKILL.md |
Bumps skill version. |
packages/adapters/agent-plugin/skills/decision-memory/SKILL.md |
Bumps skill version. |
packages/adapters/agent-plugin/test/packaging.test.ts |
Includes new modules in packaging checks. |
packages/adapters/agent-plugin/test/visual-pass.test.ts |
Tests visual states, contrast, and navigation. |
🧠 Review effort: Balanced
…r, and keep dimmed labels legible Three findings from review on #282: - Fit may now go below the 0.2 zoom minimum, so a tall graph is shown whole, and zooming out stops at that fit. - A clipped title is cut by grapheme (code point where segmenting is unavailable), so an emoji at the cutoff is never split. - Dimming fades the record's box and stripe only; the label and the focus ring stay at full opacity. Signed-off-by: Mark Beacom <markbeacom@Marks-MacBook-Pro.local>
…measured Signed-off-by: Mark Beacom <m@beacom.dev>
3 of 5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

What and why
I'm about to record a demo of the two Copilot app canvases. They worked, but they looked plain, so this PR is a visual pass on both. Function, routes, actions, the payload, the Content-Security-Policy, and the agent surface are all unchanged. Plugin 0.11.0.
Shared look.
extensions/adrkit/canvas-theme.mjs. Each page's/app.cssis that block followed by its own rules, so there's no new route.prefers-color-scheme. Before this, a dark render outside the app kept a white page and dark text; only native form controls followed the system. 16 of my 34 baseline dark/light pairs were byte-identical, and the rest differed only in those controls and in timestamps. In the after set, all 36 pairs differ, with dark page colours.decision-review.
affectspattern, or the marker's file:line, exactly asadr checkreports it (ADR-0047).decision-board.
+ - 0and arrow keys on the focused graph. A plain wheel still scrolls the panel.viewBoxhelpers inboard-view.mjs. The page embeds them from their own source, and a test runs the embedded copies.<title>. The legend is clearer.One brief item I could not do: showing who raised each objection.
adr queue --format json(QueueReport v1) reports only the unresolved and resolved counts, so there's nothing to allowlist. It needs a CLI field, which I've left out of this PR.Evidence
run_review.adrkit-democorpusBefore/after pairs:
ghcan't attach images, so they're described here, with paths in my working notes (U-shots/before/andU-shots/after/, 68 and 72 PNGs):review-fixture-*: before, flat sections with provenance hidden under "Evidence"; after, cards with status and verdict badges, provenance chips, and the cost line.review-not-a-work-tree-*: before, the message was a bullet under Notes after six "None." sections; after, a red error callout at the top.board-full-*: before, 255 full-weight edges across a horizontally scrolling SVG; after, a zoomable frame with lighter edges, a zoom bar, and a legend grouped by Status and Relationships.board-confirm-*: before, the confirm looked like the idle row with different labels; after, a highlighted "Step 2 of 3" box that names step 3.Checklist
packages/ci/srcor@adrkit/corechange.test/visual-pass.test.ts(42 tests) and planted 22 mutations, one per behaviour, each restored afterwards. The two contrast tests failed for real on the first run.bun test(4011 pass),typecheck,lint,check:stale-refs,emit:manifest,check:changelog, andcheck:dcoall pass, andclaude plugin validatepasses for the plugin and for the marketplace.Notes for reviewers
data-step="confirm"rather than a class, because the review tests find the box by its exactclassName(see AGENTS.md).