docs(truth): S1 truth maintenance — CHANGELOG, stack line, MCP claim, conflict semantics, 90% cut-list

Findings 4-7 from the 2026-07-02 status analysis, per the session plan (S1):
- CHANGELOG rewritten truthfully (was: 'Plan phase - no framework code yet')
- README stack line names the split GA packages, not the agent-framework meta-package
- CLAUDE.md: MCP downgraded to extension point (in-process FunctionTool is the default seam)
- Verdict conflict semantics documented as chosen (store first-write-wins per id,
  disk/wiki last-write-wins per file; full B10 taxonomy deliberately deferred)
- docs/extending.md: explicit 90%-principle cut-list (B10, B11, U12, U14, concurrent fan-out)
- .gitignore covers .trekexecute-progress-* (docs/.DS_Store was already untracked/ignored -
  the plan's git rm --cached assumption was stale; no-op)

No code behavior changed (docstring only in verdicts.py). Suite 152/4 green, mypy clean,
ruff format --check clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AaQCFnfsh3tfq1VfzdJpoi
This commit is contained in:
Kjell Tore Guttormsen 2026-07-03 00:34:56 +02:00
commit ae01127510
6 changed files with 54 additions and 5 deletions

View file

@ -223,7 +223,15 @@ class VerdictStore:
return ranked[:k]
def add(self, verdict: Verdict) -> None:
"""Persist a captured verdict in-memory (idempotent on content-hash id)."""
"""Persist a captured verdict in-memory.
Conflict semantics (chosen, documented): the store is FIRST-write-wins per ``id`` a
later verdict with the same content-hash id is dropped, which makes repeated Step-7 inbox
merges idempotent. The disk layers are the opposite: ``write_verdict`` (inbox) and
``promote_verdict`` (wiki) are last-write-wins per file. Because ids hash the candidate
FEATURES, "same id" means "same candidate measure", not "same verdict event". A full
verdict-conflict taxonomy (B10: rejection categories + a rule for conflicting expert
verdicts) is deliberately deferred until real experts produce conflicting verdicts."""
if all(v.id != verdict.id for v in self.verdicts):
self.verdicts.append(verdict)