Repository navigation
ISS-13944, ISS-13949: Review unit criteria in code and visual QA - #421
Merged
Merged
Conversation
A grouped unit is not ready, its PR does not open and its tickets do not move to In Review or Done until every member and PRD criterion passes a code review row and a visual QA capture on each page and surface it names. Adds unit-review.mjs (with list-query performance criteria and NOT-VISIBLE rows), the criteria-audit runtime-evidence rule, handoff-gate --review, board and status-audit checks, and the update-document status guard.
criteria-audit.mjs now honours the passing-it-on exception: with --passing-on, a PARTIAL 'not met yet: waits on <ticket>' row is accepted while --ticket-status shows that ticket open and is listed under waiting. It is refused for a pull request, without a ticket, without a status, or when the ticket is DONE or CANCELED.
Moves the ticket status guard and the unit review record reader into vibe-core (1.0.1), binds the review, PRD and plan evidence in vibe-core's handoff-gate-check, and raises VIBE_CORE_MIN to 1.0.1.
Takes vibe 1.1.77 after ISS-13846's 1.1.75; vibe-core stays 1.0.2.
Keeps vibe 1.1.77, vibe-core 1.0.2 and VIBE_CORE_MIN 1.0.2 after ISS-13899's 1.1.76 and 1.0.1; rebuilds the vibe-workers bundles from the merged sources.
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.
Summary
handoff/scripts/unit-review.mjs:--member,--prdand--planbodies. PRD criteria are read from its acceptance checklist and from lines that lead with their own id (**BR-8-01.**).review.jsonholds code rows (file:line, checked at HEAD) and visual rows (one image per page and surface, magic-byte checked; one image may not cover two cells).OUT-OF-SCOPE.GAP <ticket> <criterion>: <missing>lines for the operator, and--recordsaves the result for the fleet board.pagesandsurfacesempty and passes on code rows alone. A criterion there that still names a page or surface is a gap.NOT-VISIBLEvisual row with a reason, only when it names no page or surface and has no cross-page or cross-surface wording. Each one printsNOT-VISIBLE <ticket> <criterion>: <reason>.list-query-performance.mjs): every grouped, sorted or paginated list query the unit touches is listed inlistQueries. Each one needs a criterion naming its page, its kind and a load time, met by ameasuredrow (command, dataset rows, timing within the budget). Otherwise the review printsGAP <ticket> performance <page> <kind>.criteria-audit.mjs:--reviewpasses.criteria-list.mjs(re-exported) to break an import cycle.--passing-on, a PARTIALnot met yet: waits on <ticket>row is accepted while--ticket-statusshows that ticket open, and is listed underwaiting. It is refused for a PR, with no ticket, with no status, or when the ticket is DONE or CANCELED.handoff-gate.mjs --review/--prd/--planbinds those files into the witness (vibe-core'shandoff-gate-check.mjschecks them) and recordsunitReviewPassed, so the PR-create hook refuses a unit's PR until the review passes.board.mjs unit --closedrefuses a unit without a passing review, andboard.mjs statusprintsUNIT-UNREVIEWED.status-audit.mjs --boardkeeps members IN_PROGRESS and flags one moved early.hooks/unit-status-guard.mjs(matchermcp__closedloop__update-document) denies IN_REVIEW or DONE for an unreviewed unit's ticket.VIBE_CORE_MIN1.0.2, with CHANGELOG entries. Merged with origin/main after ISS-13869: Move vibe hooks into the vibe-core plugin #418 and ISS-13846: Accept real runner evidence in mutation-proof gate #422 (plain merges, no rebase).Breaking changes
--review(and its PRD) at the criteria audit and the handoff gate, and a criterion naming Web or Desktop needs runtime evidence. This is the ticket's intent. Single-ticket sessions without such criteria are checked as before.UI Feature Flag
Test plan
plugin-version-bootstrap.test.mjs(fixed in 7dfb31c, 4/4 since) ande2e-lock"a second signal escalates" (passes alone).uv run pytest plugins/2768 passed, 3 skipped; ruff and pyright clean; vibe-bench typecheck,validate:pluginsandnpm test(199) passed. The test machine then went down before vibe-workers ran, so vibe-workers is validated by this PR's CI only. Targeted reruns on 31412be: unit-review 18, criteria-audit 9, unit-status-guard 3, handoff-gate-members 3, plugin-version-bootstrap 4, all passing. The vibe-workers dist bundles were rebuilt (onlyVIBE_CORE_MINchanges in them) after CI flagged them stale.unit-review.test.mjs(18),criteria-audit.test.mjs(9),unit-status-guard.test.mjs(3), plus additions tohandoff-gate-members,boardandstatus-audit. Each core check was turned off once to confirm a test goes red: the code-row requirement, the per-page loop, PRD scoping, list-query gaps, the measured row, the NOT-VISIBLE naming check and the runtime rule.e2e-lockCompose tests, onedocker-disk-admissiontest, and vibe-workersmain-sync.test.ts"runs only the commit-hook checks" (timeout).