Conversation
…/flows
Of the 21 CSDs carrying "Spec complete and flow written", eight drafts move
up to run on the five-platform matrix: csd-005, 006, 008, 047, 057, 068,
092, 101. Floors that were `unreleased` flip to `>=0.5.225` only where every
tag the flow drives is found in client/shared/src by test_flows' rule
(008, 047, 092, 101; also 033, 046, 048, 049, which stay for navigation).
Each first screen has a nav_map hop or is Contacts; each loads with
run_flows.load_flows and passes the seeded-flow tag test.
Three drafts were fixed so an ordinary run can go green: csd-005's scan
button is gated on there being a camera (desktop renders `${tag}_status`
and no button), csd-092's close step no longer expects `contacts_list` on
a bare node, csd-101's first step accepts the roster's empty shape.
Held, with the reason in each CSD's §5 line and the drafts README:
- floor left `unreleased`, tags built by interpolation with an
interpolated head (`${tagPrefix}_not_on_this_node`, ConfirmSheet's
`sheet_$tagPrefix` / `${tagPrefix}_fact_$i` / `btn_${tagPrefix}_*`),
invisible to test_flows' grep: 032, 036, 040, 045, 100;
- first screen flow-only (no hop; cannot-start on every leg): 033, 046,
048, 049, 069, 081, 090;
- known red on released nodes (CIRISServer#698): 091.
testing/flows/README.md gains a table of what runs; drafts/README.md now
states the per-file reason and the tag-check blind spot in place of the
stale "#97 not on main" sections.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Every cannot-start on the 0.5.225 matrix run (36588619656) — wallet, provision-accord-holder, household-members, network-content on both desktop legs, and notes-to-self on macOS — was one race: `CIRISApp.openTab` runs with the `circleNow` the last composition captured, so a tab clicked before the frame after the circle click has recomposed opens the OLD circle's tab. Just me's Rules tab has no Wallet row, its Safety tab has one card and opens ChildSafety directly, its People tab opens Contacts directly — each reported as "hop tag 'nav_epistemic_X' never appeared … on 'CircleTab'". A node client signs in under Neighbours (`defaultCircle`), which is why macOS lost `circle_agent -> tab_chats` to Rooms as well. The client now publishes the circle and tab the shell stands in on `/state` (`circle`, `tab`; the rail's selected state is only a background colour, so nothing in `/tree` could say). The runner waits for the shell to say a circle or tab hop landed before clicking the next one, always walks the hop even when the screen is already showing (Contacts sits in every circle's People tab, and the previous flow left the shell wherever it left it), and lists what was on screen when a hop tag never appears — the evidence that named this cause was missing from every cannot-start line. An older client without the fields is walked unverified. Local Linux desktop leg, node v0.5.217, after this: all nine flows reach their first screen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
…nup:`) `people`, `csd_005_people` and `csd_006_receipt` failed on both desktop legs of run 36588619656 with `card_contacts_add` / `contacts_list` / `contacts_row_<peer>` "never appeared", and every one of their on-screen lists carried `btn_contact_code_close` and `contact_code_error`: csd_092 had opened the contact-code card — which replaces People's body while open, and whose open state lives in the view model — and stopped at its failed second step with the card still up. The ordering (session → fixture-free flows → two_node → fixture flows) was already right; the leak was inside the screen. A flow may now declare `cleanup:` — actions run after its steps, pass, fail or crash. Only the flow knows what it opened; the runner guarantees the closing runs. A cleanup that fails is recorded in the outcome's detail and the per-flow JSON, never as the verdict; a target already gone is nothing to close. csd-092 and csd-005 (whose last step opens the same card) close it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
csd_092 failed on both desktop legs: `contact_code_error` text "Could not get your contact code." does not contain "0.5.218 or newer". The client was right — a bare 404 maps to `ContactCodeState.NodeTooOld` and the card draws "This node can't make a contact code yet. It needs ciris-server 0.5.218 or newer." as the error's BODY, which is CSD-092's `error:` contract — but `StateBlock` registered its tag with the title alone, so the tree could not show the words the person reads. `ListState.automationText` now joins message, body and detail, one per line, and the block registers that. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
Run 36588619656 logged `contact … reachable_nodes=0` on both sides and then `awaiting_peer` for the whole 150 s on every leg. The fixture waited for the peer's owner KEY to be known, which lands before the owner→node BINDING; CIRISServer#699 measured that a contact added while `reachable_nodes=0` keys a pair room whose bodies read `not_granted` for good, and that re-asking until it is >= 1 before the room fixes it (3/3 reproduced, 2/2 fixed). CIRISServer `FSD/TOPOLOGY.md` (chore/adopt-edge-v33) §2.5 defines the relation: `reachable(A, q) >= n` is "POST /v1/contacts on A for q reports reachable_nodes >= n (q's owner→node binding held on A at federation scope)"; §3 rule 5 needs one of q's nodes announced, which the fixture's announce is; §2.3 keeps scoped content to directly-attached peers (CC 5.4.6), which the peer dialling the leg's node satisfies. No read route answers the predicate, so `add_contact` re-asks the idempotent POST every 5 s, bounded (`reachable_wait`, 120 s), and records what it waited on and for how long in `values.notes`. Cited in the module docstring. Local Linux leg, node v0.5.217: reachable_nodes=1 after 10 s (3 asks) on the leg's node, at once on the peer. The room still does not key on the released line (awaiting_peer after 150 s) — the KeyPackage does not cross between two unconferred 0.5.217 nodes, as the README already records; the contact, its row and its five-fact receipt are seeded, and csd_005 / csd_006 pass. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
…sleeping 2 s Windows, run 36588619656: `wizard did not advance past 'you'; on screen: ['btn_next', 'setup_step_indicators', 'step_indicator_join_federation', 'step_indicator_you']`. The app log shows Next clicked with canProceed=true, the fed-ID auto-minted on Next (`POST /v1/self/identity`), and the node still minting when the fixture judged — two seconds after the click, with the form already torn down for the next step. The wizard was working; the fixture's clock was fixed. `_advanced` now polls (screen, active step) for up to ADVANCE_TIMEOUT (90 s); a step that truly stalls is still reported by name. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
…river's reason With the hop verified, csd_047 reached LayerGlobalCommons for the first time and failed `click 'tile_federation_content' did not succeed`: the Content tile is the last row of the hub's grid, composed below the fold, and `/click` refuses a composed-but-off-screen element (CIRISClient#33). The helper answered a refusal with False and threw the reason away; the remedy the client ships for exactly that (`/scroll`) went unused. The session fixture's wizard had learned this rule (`_reach`); the flow helper had not. `SyncFlowHelper` now scrolls the target into view on an off-screen refusal — down to the bottom, then up, bounded — and keeps the driver's last reason, which the runner appends to "did not succeed". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
`/click` returns before the frame that applies it, so an `expect` read in the same instant sees the screen the click is leaving. On the local Linux leg (2026-09-29, run 2) three flows failed exactly there — csd_057's back (`card_wallet_balance` still on screen), csd_092's close (`contact_code_error` still on screen), csd_006's sheet close (`sheet_receipt` still on screen) — after their clicks had succeeded. The runner now re-reads the expect every quarter second until it holds or EXPECT_SETTLE_S (2.5 s) runs out; a condition that never holds still fails, in that long. The same rule `navigate` already states for hops: an assertion made in the instant of a click is a race, not a test. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
csd_068 reached its screen for the first time on the local Linux leg and failed `input into 'input_provision_holder_usb_path' did not succeed`: the key-id, USB-path and PIN fields carried `input_*` tags and nothing subscribed to them, so `/input` had nothing to apply to (CIRISClient#30). They were three of check_ui_drivable.py's baseline debt. Declared beside the dispatch, as SetupScreen does; the baseline drops from 142 to 139 and a source test pins the three. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
csd_057's last step clicked `btn_wallet_back` and csd_068's `btn_provision_holder_back`; neither was on screen on the local Linux leg. WalletPage draws its own arrow only when it runs outside the shell in a wide window, and the card sits in a seven-card tab, so the shell draws the back a person sees (`btn_nav_back`, CirclesShell). Both flows press that; CSD-057 §4 step 6 says so. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
The gallery job of run 36588619656 died on `unrecognized arguments: --shots` and warned "gallery build failed; the raw artifacts are still attached", so no gallery has ever built. The script takes the artifacts directory positionally and the step passed it as a flag. The parser is now a function the workflow test parses the step's argv with, so the two cannot drift again; the step also appends the table to the job summary. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
The §5 lines of the eight CSDs and the flow README rows say what passed, skipped and failed on the Linux desktop leg run locally the way five-platform-live-qa.yml runs it (scratch ports and homes, node v0.5.217, `--flows testing/flows`, the two-node fixture). None has run on the other four legs since the fixes; the stages stay `building`. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM
This branch has not been deployed
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.
Now that
VERSIONis 0.5.225, the drafts floored at it can run.Moved to
testing/flows/(8): People (two_node), receipt (two_node), wallet, provision accord holder, notes to self, network content (two_node), share contact code, household members. Four floors flipped fromunreleasedto>=0.5.225after every tag each flow drives was found in the client source. Three flows needed fixing to be green on an ordinary run (a camera-only button on desktop; a list a bare node never renders; a roster that doesn't exist on a household-less node).Stay in drafts (13), each with the reason in its CSD §5 line and the drafts README: 5 whose state tags are built by interpolation (
ReadFailureBlock,ConfirmSheet) and invisible to the flow-load tag check — a test fix, not a flow fix; 7 whose first screen is flow-only with no nav hop (would becannot-starton every leg; each line says how to enter it from the hub); 1 known red upstream (chat, CIRISServer#698).Loader: 9 flows bound to their CSDs. pytest 431 passed. Every CSD validates; route gate at baseline; gates 0.
A five-platform run on this branch is the promotion evidence: whatever is green on the matrix promotes to
testablein a follow-up.🤖 Generated with Claude Code
https://claude.ai/code/session_0155SkTGdbwnSnR6tWBqJvUM