Repository navigation
approval loop D: converge materialization, loopback bind, mtcollins1_boot mode - #11484
Conversation
d08f46c to
a1236f1
Compare
|
Both findings in review 67096 are real and are fixed in
|
|
Both findings in review 67111 were real; fixed in
|
|
Both findings in review 67114 were real; fixed in
|
|
Addressed review 67124 in 5f92578.
— sent from tidy-wren-372 |
|
Addressed review 67148 in b323b29.
— sent from tidy-wren-372 |
|
review 67185 — both findings stand and are landed on this head.
|
|
review 67192 — both findings stand and are landed on this head.
|
|
review 67200 — both findings stand and are landed on this head.
|
|
review 67200 wait — review 67208.
|
|
review 67210 — both findings stand and are landed on this head.
|
|
review 67219: both findings were in the tree and are now on The capability digest ran after
|
|
review 67229: the Unclaimed HTTP grant plus a stable
The dashboard artifact truncated after the first finding ( |
|
review 67233: the two standing folds were dangling; fixed on
|
|
review 67237: the
|
|
review 67240: Its own trigger was |
|
review 67243: both findings were in the tree; closed on
|
|
review 67247: both findings were in the tree; closed on POST no longer greps "already filed". GET standing emit/parse is one grammar in |
|
review 67250: both findings were live in the tree.
— sent from tidy-wren-372 |
|
review 67254: the first finding was in the tree. Those arms now return The dashboard artifact truncated after that finding ( — sent from tidy-wren-372 |
|
review 67257: the gap was real. — sent from tidy-wren-372 |
…r asserted beside it (review 67264) approval_identity_trust = approval_identity_trust_for(srv1_live_dashboard_instance.listen_host): loopback establishes (the header is tailscale serve's), any other bind or an unparseable host keeps the gate closed, with the blocker naming the row. On main and this branch the row is 0.0.0.0, so the standing is NotEstablished; D's loopback row (#11484) opens it in the same commit that emits the unit. Witness pins the three arms and the wiring to the production row. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
review 67271: both preludes were unmarked hand-shell. They now carry Scaffold + unbound_dissolution the same way — sent from tidy-wren-372 |
…overs both key paths; the Mt. Collins BMC secret accessor grant is modeled (review 67280; boot run 35245186544) - approval_keyring_materialization_frontier names the converge step that writes both MAC key files (lands as gunbc.auth.approval_keyring_converge in #11484, first live receipt run 35181154197); the path comment no longer cites a symbol this tree does not hold. - gunbc.machine_intake_mtcollins1_secret_access_ensure: the accessor grant for bmc-mtcollins1-gunbc on the convergence principal, converged through gunbc.auth.gcp_secret_access under the operator's token (same shape as gunbc.spark.secret_access_ensure). The first mtcollins1_boot dispatch got 403 on that secret because no grant was modeled. Witness pins the target and the accessor-only cell. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
review 67301: the SOL hold witness now supplies the pid-file and cmdline observations ( |
|
review 67371: dropped the listen_host contrast from the macbook instance annotation. srv1-live is 127.0.0.1; that field is no longer one of the differences from srv1-live. Left the credential-prelude concat as-is — the dissolve-on wall you already accepted. |
|
review 67415: Keyring files now seal as Claim key: did not restore |
|
review 67425: |
…v1 keyring. fleet-converge gains approval_keyring_converge and mtcollins1_boot: SM-pinned MAC keys land 0640 on srv1, the runner files a signed AuthorizationRequest, polls a bounded GET, and only then attaches virtual media. SOL is held before the stimulus. Trust stays NotEstablished until dashboard_deploy installs the loopback unit. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review 68456 addressed at 3e535a3: (1) the claim/settle/unterminated-exit triple is now ONE authority, gunbc.authorization_claim_slot (claim_authorization_slot / settle_authorization_claim / unterminated_claim_exit, parameterised by escalation id, attempt, label), consumed by both gunbc.srv3.srv3_boot_once_cd and mtcollins1_boot_run; the two verbatim copies and srv3's private exit renderer are deleted. (2) password@file newline hazard: the contract is stated on OpenSession — the file is the password bytes exactly; the prelude writes the SM payload verbatim (base64-decoded, no trailer); boot 22's successful login is the executed positive control for the stored bytes. If the reviewer wants a structural wall rather than a stated contract, the honest place is the rotation fold that mints the payload (refuse a trailing newline at mint), not a trim at the consumer — say so and I'll add it. — sent from eager-owl-205 |
…union (drop the retired heal_repo_local_git_config target); regenerate the generated artifacts Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…'s row, satisfied at this branch's merge base); the gate names it as due for deletion on the roster's next touch Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…onverge_workflow rosters are the union of both sides; regenerate fleet-converge.yml Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…oped-authorization-' + escalation id) — the earlier repair for the slash-addressability refusal deleted the prefix and moved scoping into caller convention (review 68728); the witness now reds on the bare id and on a slashed key Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review 68728 addressed at ce0b794: authorization_claim_key carries its scope again — 'scoped-authorization-' + escalation id (the '-' separator is slot-addressable; the earlier repair deleted the prefix instead of re-spelling the separator). The witness a_boot_claim_slot_key_is_scoped_and_slot_addressable reds on the bare id and on a slashed key. Note the srv1 claim store already holds bare-keyed slots from boots 14–22; those are per-run, terminal, and dead, so no migration. — sent from eager-owl-205 |
… missing review 68826: the scratch entry came back when the second census recreated it and `git add -A dag` swept it in again. Deleted, and the lane note now says to stage explicit paths. The heal job's refusal is NOT this branch's: `fleet_converge_mode_fleet_ssh_key_demand` is non-exhaustive on origin/main itself. #11736 added the match and #11484 then added the ApprovalKeyringConverge and MtCollins1Boot variants without arms for it; neither touched the other's lines, so nothing conflicted and the gap only appears once both are on main. Both modes open host sessions, and the function's own note says only the two API-only modes are established as not consuming the fleet key while every other mode keeps what it held, so both arms are FleetSshKeyConsumed. Local verification of that resolve did not complete: the closure takes longer than a 900s timeout under current fleet load, twice. The heal job that reported the refusal is the instrument for it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbc_run_step_targets listed gunbc_ci_approval_keyring_converge_target and gunbc_ci_mtcollins1_boot_target twice. Both are main's, from #11484; my first conflict resolution in this branch unioned the two sides of that list hunk and kept a copy of each. 41 entries, 39 distinct. This is the class I predicted and then failed to check here. Every time main moved I verified fleet_converge_workflow_modes for duplicate arms and a symmetric difference against its coproduct -- and never applied the same check to this roster, in a different file, holding the same shape. Checking one instance of a class is not checking the class. So the check is now the general one: 39 entries, 39 distinct, every entry resolves to a declaration. It also reports the converse -- two declared targets are absent from the roster (org_runner_roster_observe, spark_runtime_image_probe), both main's and both predating this branch. KEEPING my gunbc_ci_mtcollins1_fan_observe_target entry, and the reason is not symmetry for its own sake: gunbc_run_step_targets has no consumer anywhere in the corpus, so the roster establishes nothing today and whichever way I go is inert. Omitting mine would make my target the only one missing on the day it acquires a consumer. The unconsumed fold is a pre-existing §3c finding against its owner, not something this lane should fix by writing one fewer row. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
fleet-convergemodesapproval_keyring_convergeandmtcollins1_boot: WIF-pinned SM materialization of the approval MAC keys onto srv1 (0640 root:briansrls) and of the submission key +bmc-mtcollins1-gunbc/2in-run; signed POST/approvalsusingstored_request_json; bounded GET poll;grant_from_storegate; attach + CD handoff only on admit.always(). Denied/expired/unfiled refuse with no controller write. Materialized files are wiped on EXIT.listen_hostis127.0.0.1.approval_identity_truststays NotEstablished untildashboard_deployinstalls that unit (hermetic POST/approvewould otherwise requireClock.Now).Test plan
claim_batchover the three new witness modules.generated_artifact_gate main_wetto emit.github/workflows/fleet-converge.ymlon a runner with a cgroup memory bind.approval_keyring_convergeon srv1, thendashboard_deploy, then flip trust.mtcollins1_boot— no controller write without the tap.