Chronicle-to-Proof-Candidate Seam — History Proposes Positioning Proofs, the Audit Verifies, Acceptance Stays Human
Accepted
Context
The constellation-memory work folds a chronicle (plan component B): companion-NCL milestones, harvested insights, the interaction trace (ADR-037), ADRs-by-date, and migrations-by-number woven into a retrospective timeline of what the project has actually DONE. Independently, ADR-043 established positioning as a four-element framework — orthogonal axes (Qué / Para-Quién / Cómo) bound by a Proof seam — and ADR-035 made positioning a queryable protocol surface; positioning.nu already runs five coherence rules, including that a differentiator or value-prop marked proven must converge on a Proof whose evidence_adr is Accepted. There is an obvious and dangerous adjacency: the chronicle KNOWS what shipped (accepted ADRs, completed milestones), and positioning NEEDS proofs that what it claims is real. The temptation is to let the chronicle auto-populate positioning Proofs — every accepted ADR becomes a proof of the value-prop it touches. That collapses ontology-vs-reflection: the chronicle is reflection (what BECAME, a record of history) and a positioning Proof is an ontology-side claim about what the project IS and delivers; auto-asserting proofs from history makes reflection decide the truth of outward claims. The reality-collapses-intent hazard is also present in mirror form — a milestone that shipped is evidence FOR a proof, but a milestone with no positioning home is not automatically a defect to be erased; it may simply be internal work the positioning layer never intended to claim. What is missing is a seam that lets history INFORM positioning without history ASSERTING positioning.
Decision
Establish a one-directional propose-only seam from the chronicle to the positioning Proof layer, verified by the existing positioning audit and accepted only by a human. Three mechanisms. (1) PROOF CANDIDATES, NOT PROOFS — `coder chronicle --as-proof-candidates` emits accepted ADRs and completed milestones as CANDIDATE proofs wired against the ADR-043 four-element structure (which differentiator/value-prop each could support); a candidate is a proposal, never an accepted Proof, and is materialized only through the positioning layer's own acceptance path, never written directly by the chronicle. (2) THE AUDIT VERIFIES, THE CHRONICLE DOES NOT — a proof candidate is checked by positioning audit's existing five rules (ADR-043): a candidate that would create a DanglingRef, an UnprovenValidatedAudience, or an AnchorDrift is surfaced as such and cannot be accepted until the inconsistency is resolved. The chronicle proposes; the audit is the verifier; structural verification is positioning's job, not the chronicle's. (3) ORPHAN MILESTONES WARN, NEVER ERASE — a `positioning roadmap` (sibling to backlog roadmap) lays mechanisms against dated milestones, and an orphan-milestone rule in positioning audit WARNS (warn-only severity) when a shipped milestone has no positioning home — it never deletes the milestone nor auto-creates a claim, because internal work the positioning layer never intended to claim is a legitimate half-state, not a defect. G reads outreach/.coder only and writes nothing into outreach (no spine there).
Constraints
- Hard The chronicle emits proof CANDIDATES only; a candidate is never written as an accepted Proof and is materialized solely through the positioning layer's own human acceptance path
- Hard Proof candidates are verified by positioning audit's existing five coherence rules (ADR-043); the chronicle does not run its own proof-coherence checks
- Soft A shipped milestone with no positioning home is surfaced as a warning by positioning audit; it is never deleted and never auto-claimed
- Hard The chronicle-to-positioning seam is one-directional and confined to the spine; G reads outreach/.coder and writes nothing into outreach
Alternatives considered
- Auto-create positioning Proofs from every accepted ADR / completed milestone — rejected: Collapses ontology-vs-reflection toward reflection-dominates: history would assert the truth of outward claims with no human acceptance. Proofs are ontology-side claims; only a declared act on the positioning side confers proof status.
- Let the chronicle run its own proof-coherence checks — rejected: Forks verification away from positioning audit (ADR-043), risking divergent rules and two sources of positioning truth. The audit already encodes the five coherence rules; candidates must be verified there.
- Treat orphan milestones as defects and auto-remove or auto-claim them — rejected: The reality-collapses-intent violation: a shipped milestone with no positioning home is a legitimate half-state (internal work), not a defect. Warn-only describes the gap and leaves the judgement to a human.
- Write proof candidates directly into outreach/ where the difusion site lives — rejected: outreach has no spine and is a separate repo; writing into it reintroduces the cross-project mutation hazard ADR-046 resolves. The seam reads outreach as evidence and writes only within the spine.
Anti-patterns
- History asserts a proof — An accepted ADR or completed milestone is auto-written as an accepted positioning Proof, so the chronicle (reflection) decides the truth of an outward claim (ontology) with no human acceptance.
- Chronicle self-verifies claims — The chronicle runs its own proof-coherence logic instead of routing candidates through positioning audit, creating a second, divergent source of positioning truth.
- Orphan milestone erased or force-claimed — A shipped milestone with no positioning home is treated as a defect and deleted or auto-claimed, erasing legitimate internal-work intent because it lacks an outward claim.
- Write into a spineless repo — The seam writes proof candidates or claims into outreach/, a separate repo with no spine, reintroducing the cross-project mutation hazard.
Related ADRs
ADR-043 · ADR-035 · ADR-024 · ADR-046 · ADR-037 · ADR-048 · ADR-052