docs(csd): ready-to-promote list, #1213 rows for agent 2.12.1, drafts README matches CSD.md - #128
Conversation
…nt#1213 rows CIRISAgent#1213 closed via #1215 (released in agent 2.12.1, 2026-09-26): the node proxy now forwards any /v1 path the brain does not serve. The rows in CSD-005, 007, 045, 091, 092 and 102 that cited #1213 as missing reach through the agent now say reach works from agent 2.12.1, and that the client still calls the node URL directly, which works on every agent version. No `blocked_by: CIRISAgent#1213` existed in any typed block, so there was nothing to remove; check_csd_v3 passes on every CSD. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
None of csd-025, 036, 057, 066, 068, 087 loads with the loader on main: testing/gate/run_flows.py does not exist there, and FlowSpec.load refuses the `csd:` key every draft carries. The binder that reads it is in #97, still open. With `csd:` removed each parses, so the key is the only thing refused. csd-036 is additionally floored `unreleased`. The README table says so per row, and step 3 of "Promoting one" now reserves the green run for `verified`, matching what `testable` means on the promoted cards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
CSD.md §1 makes `testable` a released floor AND a matrix run; no flow here has run on the matrix, and the runner that would (#97) is not on main. So CSD-005, 006 and 091 go back from `testable` to `building`, and they and the 19 cards whose spec passes check_csd_v3 at `testable` with a written flow (CSD-008, 032, 033, 036, 040, 045, 046, 047, 048, 049, 057, 068, 069, 081, 082, 090, 092, 100, 101) each open §5 with one line naming the flow and floor, and what promotes them. Stale "Flow: unwritten" headers on ten cards with drafts (040, 057, 068, 069, 081, 082, 083, 085, 087, 090) now name the draft. The drafts README's "Promoting one" now states the CSD.md bar for testable and verified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7628cc3201
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - `testable` needs the flow's `client:` floor to name a released version (not | ||
| `unreleased`) **and** the flow to run on the matrix; |
There was a problem hiding this comment.
Keep the
testable rule distinct from shipped
For a flow whose floor has changed from unreleased to a not-yet-published version, this rule would keep the card at building even after it runs on the matrix. CSD.md:49-51 requires only a non-unreleased floor for testable; requiring a published version belongs to shipped. Following this README would therefore stall valid promotions, so describe the testable floor as non-unreleased, not necessarily released.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-057-wallet.yaml`, floor `>=0.5.224`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Replace the stale Wallet “Unwritten” flow section
This now says the Wallet flow is written, but §4 at lines 131-147 still begins “Unwritten” and labels its inline YAML as only a candidate. Anyone consulting the CSD for the canonical flow therefore gets contradictory status and obsolete guidance despite the real draft file now being named; update §4 to point to and describe the draft flow.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-068-provision-accord-holder.yaml`, floor `>=0.5.224`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Remove CSD-068's obsolete unreleased-floor blocker
The draft and this new line both set the floor to >=0.5.224, which the repository records as released, but lines 255-260 still say this exact draft is client: "unreleased" and that no release carries the screen. That stale Stage paragraph now identifies a blocker that has already been cleared and obscures that the remaining promotion condition is the matrix run.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-069-accord-ceremony.yaml`, floor `>=0.5.224`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Remove CSD-069's obsolete unreleased-floor blocker
This line and the actual draft declare >=0.5.224, yet the Stage paragraph at lines 328-331 still says the draft floor is unreleased and no release carries the relevant UI. Since 0.5.224 is recorded as released, the document now gives two incompatible reasons for remaining at building; update the Stage text so only the outstanding matrix-run condition remains.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-040-storage.yaml`, floor `unreleased`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Replace the obsolete proposed Storage error tag
This declares the Storage spec complete, but its §4 error-state assertion at line 156 still expects the literal tag proposed:storage_error, while the csd:states block and the actual client tag are storage_error. If that documented fixture is moved into the runnable flow during promotion, it will wait for a tag that can never render; update the §4 assertion to the real tag before calling the spec complete.
Useful? React with 👍 / 👎.
|
|
||
| **CSD**: CSD-069 · **Standard**: CSD/3 (`CSD.md`) · **Origin**: the Locked Spec, wave 1 | ||
| **Flow**: unwritten | ||
| **Flow**: `testing/flows/drafts/csd-069-accord-ceremony.yaml` (floor `>=0.5.224`) |
There was a problem hiding this comment.
Remove foreign-screen tags from the ceremony flow
The newly referenced draft's completed-ceremony step expects remint_done_family and remint_done_holders, but this CSD explicitly states at lines 299-304 that those tags belong to the Accord re-mint sheet, are not present on AccordCeremony, and were moved to CSD-067. When the optional hardware ceremony is actually completed, this flow will therefore fail while waiting for elements from another screen, preventing the declared flow from ever going green on that path.
Useful? React with 👍 / 👎.
|
|
||
| **CSD**: CSD-057 · **Standard**: CSD/3 (`CSD.md`) · **Origin**: the Locked Spec, Rules tab | ||
| **Flow**: unwritten | ||
| **Flow**: `testing/flows/drafts/csd-057-wallet.yaml` (floor `>=0.5.224`) |
There was a problem hiding this comment.
Seed or condition the Wallet's optional status cards
The newly declared Wallet flow unconditionally expects card_transaction_history, card_spending_progress, and card_trust_warning, but WalletPage.kt renders them only for nonempty transactions, non-null spending, and hardwareTrustDegraded == true; the defaults are empty/null/false, and this flow declares no fixture that changes them. A normal healthy or fresh wallet will therefore fail this draft before it can run on the matrix, so these assertions need deterministic seeded data or optional preconditions matching the states they test.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-081-login.yaml`, floor `>=0.5.224`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Give the optional Login steps selective preconditions
In the flow this line declares complete, both fixture-specific steps are marked optional but require only screen: Login. After the preceding input step that condition is always true, so FlowRunner will not skip them: a normal owner login must immediately show the observer-refusal card and then the post-setup banner, causing every ordinary matrix run to fail. Require the fixture-specific visible state for each step, or split them into separately seeded flows.
Useful? React with 👍 / 👎.
|
|
||
| ## 5. QA plan | ||
|
|
||
| Spec complete and flow written (`testing/flows/drafts/csd-006-receipt.yaml`, floor `>=0.5.225`); promotes to `testable` when the floor is released and the flow runs on the matrix (#97). |
There was a problem hiding this comment.
Open the receipt before asserting its facts
The declared CSD-006 draft never clicks a btn_receipt_*: its first step only counts hamburger tags, while every fact assertion is optional and requires sheet_receipt to already be visible. With a contact those fact steps are skipped because nothing opened the sheet, and without a contact the entire receipt path skips, so a matrix run can provide no evidence for the receipt contract while still completing. Add an action that opens a concrete receipt before calling this flow complete.
Useful? React with 👍 / 👎.
…x on #128) A §5 line that says a flow is written must mean the flow can go green on an ordinary matrix run. Per Codex's nine findings, and the same defect class found by scanning every optional step whose precondition was empty or only `screen:`: - testable needs a floor that is no longer `unreleased` (CSD.md §1), not a published version (that is `shipped`): README rule and every §5 line say so. - CSD-057: §4 describes the draft; the draft no longer asserts the spending, history and trust-warning cards WalletPage renders only with seeded state (disclaimed in §5); address and transfer steps are gated on their cards. - CSD-068 / CSD-069 Stage paragraphs: the floor is >=0.5.224; the matrix run is the only remaining condition. - CSD-069 draft: the completed-ceremony step asserts what AccordCeremony renders, not the re-mint sheet's remint_done_* (CSD-067). - CSD-040 §4: storage_error is real, not proposed. - CSD-081 draft: the observer and post-wizard steps are gated on card_observer_blocked and banner_setup_complete_relogin. - Gated on their own state: CSD-032, 033, 036 (both branches), 045 (plus typed / picked delegation steps), 048, 049, 090. - Line replaced by "Flow not complete" with the reason: CSD-006 (never opens a concrete receipt), CSD-047 (never picks a peer), CSD-082 (finish step ungatable), CSD-091 (a system-note-only room fails the history step). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
Docs only. Nothing under
client/changed.1. Ready-to-promote list, kept at
building(7628cc3)Under
CSD.md§1, a card reachestestableonly when its flow's floor is a released version and the flow runs on the matrix. No flow here has run on the matrix, and the runner that would run them (#97) is not onmain. So:testabletobuilding. The people review promoted them with>=0.5.225floors and flows that have never run on the matrix.<file>, floor<x>); promotes totestablewhen the floor is released and the flow runs on the matrix (feat(testing): CSD flows run on the five-platform matrix; state: now asserts something #97)." The 22 are CSD-005, 006 and 091 plus the 19 below, which each passcheck_csd_v3when trial-set totestableand have a draft flow: CSD-008, 032, 033, 036, 040, 045, 046, 047, 048, 049, 057, 068, 069, 081, 082, 090, 092, 100, 101.The other 49 cards at
buildingfail that trial:2. CIRISAgent#1213 rows, for agent 2.12.1 (920c7e6)
CIRISAgent#1213 was closed by #1215, which shipped in agent 2.12.1 on 2026-09-26. The agent's node proxy now forwards
/v1paths the agent does not serve itself,/v1/adminincluded.The rows in CSD-005, 007, 045, 091, 092 and 102 now say two things: reach through the agent works from agent 2.12.1, and the client still calls the node URL directly, which works on every agent version. No typed block had a
blocked_by: CIRISAgent#1213, so nothing needed removing.3. Nav-only drafts: none promoted (ec61a1d, 7628cc3)
csd-025,036,057,066,068and087do not load onmain:testing/gate/run_flows.pydoes not exist onmain.FlowSpec.loadrefuses thecsd:key withunknown key(s) ['csd'].csd-036is also still flooredunreleased.The table in
testing/flows/drafts/README.mdrecords this row by row. Its "Promoting one" section now states theCSD.mdbar:testableneeds a released floor and a matrix run, andverifiedneeds that run green on every declared platform.4. Codex review fixes (64e258b)
testableneeds a floor that is no longerunreleased(CSD.md§1); a published version isshipped. The README and every §5 line now say so.remint_done_*removed; CSD-040'sstorage_errorun-proposed; CSD-068/069 Stage paragraphs updated.Checks
check_csd_v3passes on every CSDpytest -q testing/test_csd_state_tags.py: 189 passedcheck_csd_routes.py: no new uncited routes, baseline currentbash packaging/gates.sh: exit 0, ending[OK] every release gate passedpytest -q testing/: 323 passed, 79 skipped🤖 Generated with Claude Code
https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM