feat(console): the bulk intake panel — upload, the real report, the four-eyes gate - #71
Merged
Conversation
…our-eyes gate U3 slice 1. The panel is a client of the frozen bulk surface: definitions and their awaiting-approval age lead the screen, the batch list filters by STATE only (the contract has no definition filter, so the panel does not send one), the validation report walks by keyset on `afterRow`, and the gate offers approve/reject exactly where the engine allows a decision. Kit changes the gate needed: - `VerbButton` can collect an EVIDENCE note in its confirm step; a required note blocks the verb until the reason exists (the contract makes reject's note mandatory — it is what the next uploader reads). - `quiet` suppresses the button's own outcome strip for verbs whose control legitimately unmounts when the verb lands; the composite renders the outcome instead. Without it, approving a batch destroyed the very message it produced. - `Approved` joins the standard state map (info: the work is still ahead). The exit gate is real: the console smoke host now composes bulk, and Playwright uploads a file with a broken line, reads the report THE ENGINE wrote, is refused by the engine when invalid rows block approval, rejects with the mandatory reason, then uploads a clean file and approves it — 3/3 green locally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner
Author
|
Review agent v1 — 1 finding(s). The human decides; hard-stop labels need explicit resolution.
|
The comment promised a client-side narrow by definition that the panel does not do — and should not do: narrowing one take-bounded page would read as "no batches" while more exist server-side. The honest fix is the server-side filter, tracked in #72. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner
Author
|
R3 accepted — the comment described a client-side definition narrow the panel deliberately does not do (narrowing one take-bounded page would read as "no batches" while more exist server-side). Comment rewritten to the contract's actual STATE-only behaviour; the real fix is the server-side filter, filed as #72. |
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.
U3 slice 1: the bulk intake panel, capability-lit like the rest of the console.
What the panel does
curl --data-binary's shape) — the console adds no format the API does not already accept.definitionparameter, so the panel does not send one.afterRow— the one genuinely cursor-paged surface here.Kit changes the gate needed
VerbButtoncan collect an evidence note in its confirm step; a required note blocks the verb until the reason exists.quietsuppresses the button's own outcome strip for verbs whose control legitimately unmounts when the verb lands — approving a batch was destroying the very message it produced (the U2 teardown lesson, found again).Approvedjoins the standard state map (info: the work is still ahead).Proof
scripts/console-smoke.sh— 3/3 green locally. The smoke host now composes bulk, so Playwright:Unit: kit 55, console 34.
Docs updated in the same PR: console RFC phase table (U3 bulk MET, three panels open), RFC index,
ai-sdlc-status.md, CLAUDE.md status, the nightly job comment.🤖 Generated with Claude Code