An offer, not a defect. I've held this since 08-29 and it doesn't belong in any open PR. Row 278 of docs/hunting-loop-briefing.md covers the neighbouring case ("a path-pinned consumer breaks on push"). This one is about what a path-pinned consumer writes down, and nothing currently checks that.
Mechanism
A Cargo.toml version requirement breaks the build when it drifts. That's a falsifier. A path dependency resolves to whatever the tree holds, so any claim a consumer records about the subc tree has no falsifier: a version in a decision record, a capability note, a "parked upstream" comment. The build stays green while the sentence stops being true.
Measured 08-29 across two of nine consumers:
recorded in prose resolved
synapse subc-protocol 0.7.0 0.13.0
subc-transport 0.3.1 0.5.1
broca subc-protocol 0.3.0 0.13.0
Broca also had a comment above wire_crate_version: None saying subc-protocol didn't export a version const yet, when SUBC_PROTOCOL_CRATE_VERSION was already public. That's the same decay applied to a capability claim, and it led to the field being left empty on purpose. Synapse filed its instance as cortexkit/synapse#4.
The distinction that makes it tractable (Synapse's correction to my first draft)
It's tense, not accuracy. "We pinned X at 0.7.0 on 2026-07-04" is history. It's still true and needs no check. "We are on X 0.7.0" is present tense and needs one. Only the author knows which they meant, so the rule can't be "every claim must be asserted against cargo metadata". That fights records that are deliberately historical.
The asymmetry
A consumer can't find out its recorded claim has expired without re-deriving a fact about a crate it doesn't own. The tree owner sees every such change at once. So the duty to notice sits here, and the duty to record checkably sits with the consumer. Neither half works alone.
Proposed text
Two rows for the briefing, in its existing shape:
| # |
Question |
Why |
| — |
A consumer records a fact about a path-dependency's tree: a version, a capability, "not exported yet" |
A path dep has no version requirement to disagree with, so the record has no falsifier and decays silently. Date it (history) or check it mechanically (present tense); only the author knows which was meant |
| — |
Is the value you'd write down already a constant you could read? |
Prefer reading SUBC_PROTOCOL_CRATE_VERSION (or calling build_provenance, which since #87 enforces canonical hex) over recording the value in prose. The helper constrains what a sentence cannot |
Optionally, one sentence in docs/fleet-surface.md → Provenance reads: "A consumer's own documentation about which subc version it runs is not provenance; the supervisor.provenance declaration is."
If you'd take a PR for the two rows, I'll send one. If they belong in a different file, or the briefing already covers this under a row I missed, point me there and I'll close this.
An offer, not a defect. I've held this since 08-29 and it doesn't belong in any open PR. Row 278 of
docs/hunting-loop-briefing.mdcovers the neighbouring case ("a path-pinned consumer breaks on push"). This one is about what a path-pinned consumer writes down, and nothing currently checks that.Mechanism
A
Cargo.tomlversion requirement breaks the build when it drifts. That's a falsifier. A path dependency resolves to whatever the tree holds, so any claim a consumer records about the subc tree has no falsifier: a version in a decision record, a capability note, a "parked upstream" comment. The build stays green while the sentence stops being true.Measured 08-29 across two of nine consumers:
Broca also had a comment above
wire_crate_version: Nonesaying subc-protocol didn't export a version const yet, whenSUBC_PROTOCOL_CRATE_VERSIONwas already public. That's the same decay applied to a capability claim, and it led to the field being left empty on purpose. Synapse filed its instance as cortexkit/synapse#4.The distinction that makes it tractable (Synapse's correction to my first draft)
It's tense, not accuracy. "We pinned X at 0.7.0 on 2026-07-04" is history. It's still true and needs no check. "We are on X 0.7.0" is present tense and needs one. Only the author knows which they meant, so the rule can't be "every claim must be asserted against
cargo metadata". That fights records that are deliberately historical.The asymmetry
A consumer can't find out its recorded claim has expired without re-deriving a fact about a crate it doesn't own. The tree owner sees every such change at once. So the duty to notice sits here, and the duty to record checkably sits with the consumer. Neither half works alone.
Proposed text
Two rows for the briefing, in its existing shape:
SUBC_PROTOCOL_CRATE_VERSION(or callingbuild_provenance, which since #87 enforces canonical hex) over recording the value in prose. The helper constrains what a sentence cannotOptionally, one sentence in
docs/fleet-surface.md→ Provenance reads: "A consumer's own documentation about which subc version it runs is not provenance; thesupervisor.provenancedeclaration is."If you'd take a PR for the two rows, I'll send one. If they belong in a different file, or the briefing already covers this under a row I missed, point me there and I'll close this.