feat(web): verification states, attempt counter and findings - #54
Merged
Merged
Conversation
MVP slice 4 (ADR 0018): the web renders the verification gate the
orchestrator projects since slice 3.
- A "verifying" badge state with its own label, colour token and spoken
text; it counts as active, so Cancel is offered while the work is checked.
- An attempt counter ("Attempt 2/3") beside the badge, from the STATE_SNAPSHOT
job (or Thread.job before the stream); shown only when a job is present.
- A vymalo.check card per source and attempt (status in words, source, short
commit, summary, findings), replaced in place by id; a stale answer is its
own muted card. Findings and every other string are plain text, long ones
cut with an expand control, long lists folded.
- A vymalo.rework divider: "Attempt 2 of 3: sent back with N findings".
- RUN_ERROR checks_failed is kept by ThreadAgent and shown as "Checks failed
after N attempts" instead of the ordinary "This thread is failed".
- The mock replays verify-green and verify-red (golden.test.ts no longer
skips them) plus verify-pass and the mock-only verify-ci and verify-wait;
Thread.job is served by the mock.
- Tests: parsing and renderers (malformed payloads draw nothing, unknown fields
are ignored, markup and markdown in findings stay text), the goldens through
the runtime, both goldens through the whole ChatShell against the mock
(state history, counter, order, reconnect mid-verification), mock Playwright
with axe, and the system suite against the real orchestrator with a gated
fake agent.
- Docs: web/README.md, agui.md rendering rules, dev/README.md, mvp.md, ADR 0018.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvSwLecV9s4iZdbQ9HeBEJ
|
✅ AI Governance check passedThis PR declares AI usage, references a source of truth, and provides verification evidence. Thank you. |
stephane-segning
marked this pull request as ready for review
September 30, 2026 10:34
18 of 30 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.
1. Summary
This PR changes:
verifyingstate with its own colour token (contrast about 7:1 light, 9:1 dark) and spoken text. It counts as active, so Cancel is offered while it lasts.STATE_SNAPSHOT.job, falls back toThread.job, and is shown only under a gate.vymalo.check): one per source, attempt and verification, replaced in place by its id. It shows the status in words with an icon, the source, the attempt, the short sha and the summary.vymalo.rework): "Attempt 2 of 3: sent back with N findings".RUN_ERROR code:"checks_failed"becomes "Checks failed after N attempts".web/mock/): replaysverify-greenandverify-redframe for frame, so every golden is covered. It follows the orchestrator's check-card idscheck-<attempt>-<verification>-<source>, and takesjob.shaonly frombranchartifacts. Two mock-only scenarios are added:verify-ciandverify-wait.gatedagent in the Playwright system suite's agents file, and averification.spec.tsagainst the real orchestrator.It solves:
2. Intent
The intent of this PR is:
3. Scope
In Scope
parseCheck,parseReworkandparseJobreturn null on malformed input), the badge, the counter and the notice.Out of Scope
4. Verification
I verified this change by:
Commands run:
Results:
<script>, markdown,<img onerror>andjavascript:links in findings render as text, both at unit level and end to end from the wire.5. Screenshots / Evidence
Screenshots were taken locally in light and dark for four states: verifying with a pending card, green after a rework, stale and replaced cards, and checks failed. They are not committed. CI runs the web, mock and system suites on this PR.
6. Risk Assessment
Risk level:
Potential risks:
Mitigation:
golden.test.tsrequires the mock's connect stream to equal every golden, includingverify-*.7. AI Usage Declaration
AI was used for:
Human verification:
8. Reviewer Focus
Please focus your review on:
🤖 Generated with Claude Code
https://claude.ai/code/session_01LvSwLecV9s4iZdbQ9HeBEJ
Generated by Claude Code