M7 C4 first-post runbook — draft artifact tracked, §7 recheck-window justification corrected - #74
Merged
Merged
Conversation
Brings docs/m7_c4_first_post_runbook_2026-08-21.md under version control. It was authored 2026-08-21 and had remained untracked in the working tree with no object anywhere in the repository. Follows the C1/C3 precedent: a standalone dated artifact rather than a row-embedded decision. Marked DRAFT pending operator review. It amends no numbered section of the transport spec, the envelope doc, the GO checklist, or any ruling, and authorizes no transmission — GO-2 does that. Content sequences existing obligations into an executable order and adds two things the surrounding documents imply but do not spell out as steps: - §4 names the action_id binding as a manual control point. validate_envelope() checks expiry, governance_config_version and payload_hash only, and never action_id; approve() mints a uuid4 when the argument is omitted. C4 closes this with a procedural control, explicitly not a code change or a new invariant. - §5 states the AMBIGUOUS-verification branch as a stop. That branch returns SUCCESS / PENDING_VERIFICATION / REQUIRED, which §E row 5 does not fire on (needs OUTCOME_UNKNOWN), §E row 6 does not apply to (needs PUBLISHED), and resolve_ambiguous_write() raises on. C4 carries forward the existing TODO.md disposition rather than ruling on the gap. §8 records the forward dependency on §C5, which is not started. Version binding at §10 is current: the document binds to the transport implementation at 52a8c9c, which is this branch's merge base. Six load-bearing code anchors spot-checked against moltbook/transport.py (1720 lines) before committing — :74 approve, :113 validate_envelope, :404 the OUTCOME_UNKNOWN guard, :1635 the AMBIGUOUS branch, :1219 make_dry_run_action_id, :463 KillSwitch.__init__ — all resolve as cited. C4's row in docs/m7_operator_go_checklist.md:143 is deliberately left blank. This commit tracks the artifact; it does not attest it. C5 remains unstarted. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016RWHYtHc4TM4mPUhqQCAnm
The note under §7 step 7 asserted that steps 6 and 7 "execute back-to-back with no intervening human action" and described them as "only two near-instant function calls." Both are false under every execution model §3 permits. §3 requires the send to run inside an interactive session and names as one permitted form "an interactive script that pauses for operator input at the send call itself" — a pause located exactly at the 6→7 boundary. The "two near-instant function calls" shape is the fire-and-forget execution §3 expressly rules out. The governance conclusion the note exists to support is unaffected: the step 2–5 rechecks do satisfy checklist §E rows 1–2. Only its stated basis was wrong, and a stronger code-grounded basis was available — send() calls kill_switch.check_write() before any network call, and check_write() is by contract the final outbound-boundary enforcement, so step 3's confirmation is re-enforced in code at the instant of transmission. Also made explicit, since the new wording invites the question: §E row 2 carries two obligations. Its first clause is discharged by steps 2–5; its second — a reachable activate_manual path open during the send — is a standing condition discharged by step 7's operator presence. A scoping note records that `engaged` is not pinned for the whole of step 7, since the captcha-suspension-risk trigger can engage it during verification, and that verification gates publication rather than transmission. Wording fix only. Amends no numbered section of the transport spec, the envelope doc, the GO checklist, or any ruling; authorizes nothing; the C4 row remains unsigned. VERSION BINDING: this edit adds four moltbook/transport.py anchors — :448-450, :495, :1447-1448, :1472-1474 — verified against transport.py at 52a8c9c, byte-identical at 5ea17a1 and in the working tree (blob 7e42220). §10 binds this document to the transport implementation at 52a8c9c, so the anchors are covered by that binding, and §10's non-inheritance clause is what handles drift: the document does not inherit forward across a material change to any of the three things §10 binds. An earlier version of this commit message stated that §10's binding does not cover transport.py and that the anchors were unpinned, and gave the count as five. Both were wrong — §10 was cited without being read, and the anchors were never counted. Amended before merge rather than left to be corrected on main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NhiZnaN2DHPCASC31pjEaE
GodSpeed313
force-pushed
the
docs/m7-c4-first-post-runbook
branch
from
August 22, 2026 23:40
44e6a0e to
a993f9e
Compare
GodSpeed313
added a commit
that referenced
this pull request
Aug 24, 2026
…e; log a7069a7 message discrepancy (#77) * Log discrepancy: a7069a7's message overclaims what that commit did Records, without correcting, that the squashed commit for PR #76 — "Finalize first-post runbook with execution steps" — describes work it did not do. What a7069a7 actually changed: one file, one line. It entered C4's operator signature at docs/m7_operator_go_checklist.md:143 (Kevin Brown, 2026-08-24 10:58 EDT). That signature is genuine and is not in question here. What its message claims but the commit does not contain: 1. It did not finalize docs/m7_c4_first_post_runbook_2026-08-21.md. That file is not in the commit's diffstat at all, and its line 3 still reads "Status: DRAFT - pending operator review and sign-off" on main today. 2. It added no execution steps. Section 7's nine-step sequence has been present in the runbook since c36161b (PR #74) - verified by counting the enumerated steps in that blob, which yields nine. A squashed commit message cannot be amended without rewriting main, which is not worth doing for a message defect. So the record is corrected by addition rather than by revision: the note goes in TODO.md under Infrastructure / process debt, where it is durable and discoverable from the repo rather than from memory. This commit changes TODO.md only - ten added lines, no deletions. It touches no checklist row, no signature cell, and no runbook. The actual DRAFT -> FINALIZED header flip is a separate commit on this same branch, dated to the 10:58 EDT signature rather than to its own commit time, per the obligation the C4 row carries. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VaW4tW3d1b78Mfkst69qer * C4 runbook: flip header DRAFT -> FINALIZED, dated to the 10:58 EDT signature Line 3 of docs/m7_c4_first_post_runbook_2026-08-21.md now reads: **Status: FINALIZED - signed by Kevin Brown, 2026-08-24 10:58 EDT, citing `docs/m7_operator_go_checklist.md` §C4.** This is the follow-on commit that the C4 row obligates. The row at docs/m7_operator_go_checklist.md:143 states that the flip is "pending as a follow-on commit citing this row, kept separate from the merge itself and dated to this signature." All three conditions are met here: it cites the row, it is its own commit, and it carries the signature's timestamp. On the timestamp: 2026-08-24 10:58 EDT is the operator signature entered in C4's row by a7069a7, not the time this commit runs. The row's wording binds the flip to the signature deliberately - C3 is the precedent for why. C3's row is signed 2026-08-21 15:56 EDT while its artifact header still reads "Status: EXECUTED 2026-08-21 - NOT SIGNED" on main today, a deferred flip that was never performed. Dating to the signature rather than to the commit is what that precedent lacked. This commit transcribes an existing, verifiable signature into the artifact's status line. It does not create one. The signature it cites was entered by the operator in a7069a7 (author GodSpeed313 <lamontb778@gmail.com>, committed via GitHub 2026-08-24T11:05:39-04:00, squashed from 36e1869 on GodSpeed313-patch-1), and it remains the sole authority for C4 being signed. Scope: one file, one line. The checklist is not touched - C4's row already cites this document, and this document is only catching up to what the row says of it. No signer cell, no date cell, no other file. Section C stands at 4/5; C5 is not started. Nothing here authorizes transmission. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VaW4tW3d1b78Mfkst69qer --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.
Brings
docs/m7_c4_first_post_runbook_2026-08-21.mdunder version control and corrects one defect found in review before signature. Two commits, one file, 285 lines added againstmain.The runbook remains
Status: DRAFTand the C4 row atdocs/m7_operator_go_checklist.md:143remains blank in all four fields. This PR tracks and corrects an artifact; it signs nothing, amends no numbered section of the transport spec, the envelope doc, the GO checklist, or any ruling, and authorizes no transmission — GO-2 does that.5ea17a1— draft artifact trackedThe runbook was authored 2026-08-21 and had remained untracked in the working tree with no object anywhere in the repository. Follows the C1/C3 precedent of a standalone dated artifact rather than a row-embedded decision.
a993f9e— §7 recheck-window justification correctedThe note under §7 step 7 asserted that steps 6 and 7 "execute back-to-back with no intervening human action" and described them as "only two near-instant function calls." Both are false under every execution model §3 permits. §3 requires the send to run inside an interactive session and names as one permitted form "an interactive script that pauses for operator input at the send call itself" — a pause located exactly at the 6→7 boundary. The "two near-instant function calls" shape is the fire-and-forget execution §3 expressly rules out at
:57-58.The governance conclusion the note exists to support is unaffected: the step 2–5 rechecks do satisfy checklist §E rows 1–2 (
docs/m7_operator_go_checklist.md:218-219). Only its stated basis was wrong, and a stronger code-grounded basis was available —send()callskill_switch.check_write()before any network call, andcheck_write()is by contract the final outbound-boundary enforcement, so step 3's confirmation is re-enforced in code at the instant of transmission.Also made explicit, since the new wording invites the question: §E row 2 carries two obligations. Its first clause is discharged by steps 2–5; its second — a reachable
activate_manualpath open during the send — is a standing condition discharged by step 7's operator presence. A scoping note records thatengagedis not pinned for the whole of step 7, since the captcha-suspension-risk trigger can engage it during verification, and that verification gates publication rather than transmission.Version binding, carried from the commit message verbatim
Correction notice
An earlier revision of this PR body carried a paragraph asserting that §10's version binding does not cover
transport.py, so the new anchors were unpinned and would drift. That was wrong. §10 reads: "Bound to the transport implementation at52a8c9c(main, post-C3), todocs/m7_first_live_post_governed_envelope.md§5 as quoted at §5.3 and §5.4 above, and todocs/m7_operator_go_checklist.md's §D and §E as quoted. Does not inherit forward across a material change to any of them." The anchors are covered. The same paragraph also miscounted them as five. The commit message carrying the claim has been amended (44e6a0e→a993f9e, tree unchanged at79a1149) and this body corrected, both before merge.Review notes
transport.pyanchors verified against blob7e42220, identical at52a8c9c,5ea17a1, and the working tree.transport.pychecked byte-exact; the:448-450quote is a partial, beginning at "called" and dropping the source's "must be."246→261, §9255→270, §10265→280. Any external note citing the old numbers is stale.🤖 Generated with Claude Code
https://claude.ai/code/session_01NhiZnaN2DHPCASC31pjEaE