docs: scope the Channel::Deliberate promotion submission path - #71
Merged
Merged
Conversation
threads-xpo reads as one missing feature: the daemon never constructs Channel::Deliberate. That is true and it is the smallest part of the gap. Scoping it first avoids starting at the visible symptom and discovering the real blockers halfway in. Verified against origin/main of each repository on 2026-09-16. The encouraging half is larger than expected. The daemon's decision, audit and approval path is already channel-generic end to end: the staged envelope carries channel as a required field and roughly twenty downstream sites pass it through rather than re-deriving it. ward_audit persists the channel and the census classifier already decodes "deliberate", so the value round-trips today with no schema change and no migration. On the Threads side the validator is complete, including ChannelNotCovered and the FamiliarCoherence ceremony section 3.1 recommends, and every RejectReason and WindowCloseReason the contract names exists. The seam needs no new rejection vocabulary. Two blockers are decisions rather than effort, and both were found by checking rather than assuming. Provenance has no resolvable anchor. RFC-0001 section 5.6 requires source_attestation to resolve to an event in the append-only audit log, but the daemon generates neither candidate: ward_updated has no construction site and principal_authorized_write appears only in an allowlist and a test. The daemon calls exactly two audit constructors. The substrate's Attestation type is anchored to a redacted artifact file rather than to the log, and nothing reconciles the two shapes. No thread holds under Deliberate. PROTECTED_CHANNELS serves as both the woven holds_under and the pattern predicate's required floor, so a Deliberate request rejects before anything else matters. Appending to that const is the wrong fix: pattern.rs states Deliberate coverage is a per-thread choice, not a floor requirement, so widening it would change weave coherence for every protected surface. The remaining surface is small once those land: five literals and one const in threads_gate.rs, a dispatch arm, a handler, and an admission emission site. Also corrects two claims in the 2026-08-09 threads-xpo record. Not every construction site is Mutation; store.rs builds Channel::Forced for the WARD-C6 compaction row. And the cmem-r59 cross-reference threads-5mn calls phantom is real: that check read .beads/interactions.jsonl, which is a passive export of a Dolt database, so absence from the export was never absence from the board. Authorizes no implementation, settles neither decision, and closes no bead. Refs: threads-xpo, threads-55s, threads-5mn, threads-vd8, threads-7gw, threads-dr2 Co-Authored-By: Claude Opus 5 (1M context) <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.
Scope for
threads-xpo, the daemon-side promotion-write path the merged seamcontract (#25) requires. Documentation only — it authorizes no implementation,
settles neither decision it identifies, and closes no bead.
Every claim verified against
origin/mainof each repository on 2026-09-16.Why scope first
threads-xporeads as one missing feature: the daemon never constructsChannel::Deliberate. True — and the smallest part of the gap. The surroundingmachinery (a scratch tier, a reachable promotion module, an admission event, a
resolvable provenance anchor) is also absent, and two of those are blocked on
decisions rather than effort.
The encouraging half is larger than expected
The daemon's decision/audit/approval path is already channel-generic end to
end — the staged envelope carries
channelas a required field and ~20downstream sites pass it through rather than re-deriving it.
ward_auditpersists it and the census classifier already decodes
"deliberate", so thevalue round-trips today, with no schema change and no migration.
The Threads validator is complete:
ChannelNotCovered, theFamiliarCoherenceceremony §3.1 recommends, and every
RejectReason/WindowCloseReasonthecontract names all exist. No new rejection vocabulary is needed.
Two blockers that are decisions, not tasks
Provenance has no resolvable anchor. RFC-0001 §5.6 requires
source_attestationto resolve to an event in the append-only audit log. Thedaemon generates neither candidate —
ward_updatedhas no construction site,principal_authorized_writeappears only in an allowlist and a test. It callsexactly two audit constructors. The substrate's
Attestationis anchored to aredacted artifact file, not the log, and nothing reconciles the shapes.
No thread holds under
Deliberate.PROTECTED_CHANNELSserves as both thewoven
holds_underand the pattern predicate's required floor, so aDeliberaterequest rejects before anything else matters. Appending to thatconst is the wrong fix —
pattern.rsstates Deliberate coverage is aper-thread choice, not a floor requirement, so widening it changes weave
coherence for every protected surface.
Once those land, the surface is small: five literals and one const in
threads_gate.rs, a dispatch arm, a handler, and an admission emission site.Two corrections to the 2026-08-09 record
Mutation—store.rs:3444buildsChannel::Forcedfor the WARD-C6 compaction row.cmem-r59cross-referencethreads-5mncalls phantom is real. Thatcheck read
.beads/interactions.jsonl, a passive export of a Dolt database,so absence from the export was never absence from the board.
Tracking
Filed
threads-vd8(provenance decision, P1),threads-7gw(coverage decision,P1),
threads-dr2(daemon reachability, P2), and wiredthreads-xpoto dependon all three.
threads-55scarries a re-sequencing recommendation, deliberatelynot applied — unblocking it needs its acceptance criterion split, which is
the maintainer's call.
Verified:
agent-check.sh fastandfullboth exit 0.🤖 Generated with Claude Code