Skip to content

docs(protocol): consolidate accepted change proposals into v0.2.1 and resolve KF-2 - #5

Open
claude[bot] wants to merge 12 commits into
mainfrom
claude/project-thread-g04bim
Open

claude[bot] wants to merge 12 commits into
mainfrom
claude/project-thread-g04bim

Conversation

@claude

@claude claude Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Why

The owner accepted change proposals CP-01, CP-02, CP-04, CP-08, CP-13, CP-14 and CP-16 to CP-21, but the published protocol text still read as v0.2 had it. Separately, known finding KF-2 showed that protocol/07 section B, a register of deferred technical decisions, sat inside the vendor-free protocol layer and was the only reason the normative text named a harness. This PR folds the accepted proposals into the protocol as v0.2.1, so the published protocol matches what was decided, and resolves KF-2 through a new proposal, CP-22.

Approach

One commit per proposal group. CP-01, CP-02, CP-04, CP-08, CP-13 and CP-14 trace their wording to the proposal text in docs/review/2026-09-adversarial-review-v0.2.md §5. CP-16 to CP-21 came out of executing CP-10; their full proposal text is not published, so a public reader can check them only against their one-line summaries in the second table of docs/review/disposition.md and the CHANGELOG.

  • CP-22 (KF-2): T-01 to T-10 move verbatim to docs/technical-decisions.md; only T-01 gains a "Decided" line. protocol/07 keeps a one-line pointer where section B was, and sections C, D and E keep their letters so inbound anchors stay valid. KF-2 leaves the known-findings list and the lint baseline.
  • CP-14, CP-02 (option b), CP-04: a declared scope (one human, one AI, single-threaded discovery ending in a handoff); a mode names the dominant learning objective of the moment, not a phase, and the mode names stay; Progressive Commitment is the one commitment ladder.
  • CP-01, CP-16, CP-20: a challenge condition for convergence, a review typology, review timing and the return leg of a review; review timing comes back as open question P-15.
  • CP-17, CP-19, CP-21: in-session stop signal, reuse check before architecture, local versus structural counterexamples.
  • CP-18: an information-loss check before any normalization of source-grounded information; protocol/04 §4 becomes its terminology instance. CAP-16 is specified as Extended, with the new event kind normalization.recorded.
  • CP-13, CP-08: pre-registered predictions become the primary evaluation instrument in protocol/05, with always-on measures and optional diagnostics; one evidence scale separates observation clarity from evidential weight. Existing ledgers get a column, not a rewrite. The strength labels already in research/ stay as written (research/01 §1), so CP-08 is only partly done, and its disposition row says so.
  • Version marks: headings and status lines of all protocol files read v0.2.1; file names are unchanged so links hold. The CHANGELOG gets a v0.2.1 section marked "not yet tagged", with a "What did not happen" paragraph.

New protocol material is added as subsections, so section numbers and inbound references stay stable. Two independent pre-review rounds ran on the branch: round 1 returned BLOCK because some sentences went beyond what their proposal asked for, fixed in 9d26ae4; round 2 returned PASS with wording nits, fixed in 04945ba. main is merged in, including the public guard from #4. Review round 1 on this PR returned PASS with four advisories; a45dfad closes a gap in the Keep/Investigate rules of protocol/05 §9, records CP-08 as partly done, and states the review's length test plainly in the CHANGELOG.

Acceptance List

Derived from the acceptance criteria of KF2, V021.

  • A new change proposal for KF-2 is recorded as accepted in docs/review/disposition.md — proof: eval:disposition-cp-row — Verify: grep -n '^| CP-22' docs/review/disposition.md shows the row as accepted 2026-09-22 and done for v0.2.1, pointing at docs/technical-decisions.md
  • protocol/07 no longer contains section B, and its content is present in project documentation under docs/ — proof: eval:section-b-moved (diff comparison of the moved text) — Verify: grep -n '^## B' protocol/07_DECISIONS_AND_OPEN_QUESTIONS.md prints nothing; a blank-line-insensitive diff of section B from git show origin/main:protocol/07_DECISIONS_AND_OPEN_QUESTIONS.md against docs/technical-decisions.md from ### T-01 on differs only by the T-01 Decided line and one trailing ---
  • T-01 is marked decided, pointing at the naming-decision example — proof: eval:t01-decided-grep — Verify: grep -n -A1 '^### T-01' docs/technical-decisions.md shows **Decided** 2026-09-14 linking examples/naming-decision.md
  • KF-2 leaves docs/known-findings.md and tools/known-findings.txt, and the change appears in the changelog — proof: eval:kf2-closed-grep — Verify: grep -c KF-2 docs/known-findings.md tools/known-findings.txt prints 0 for both; the CHANGELOG v0.2.1 table has a CP-22 row
  • The boundary lint exits 0 with KF-2 no longer reported as known — proof: boundary-lint (python3 tools/boundary_lint.py .) — Verify: python3 tools/boundary_lint.py . exits 0 and reports 1 finding, 0 new; the only known entry is protocol/06 line 114 (KF-1), with no protocol/07 line
  • Every relative link to the moved section resolves — proof: eval:relative-link-anchor-check — Verify: git grep -n technical-decisions.md lists seven references in six files, each link resolving from its own file; git grep -n '07_DECISIONS_AND_OPEN_QUESTIONS.md#b' prints nothing
  • Each listed change proposal is reflected in the protocol text, and its row in docs/review/disposition.md records it as done in v0.2.1 with the section it landed in — proof: eval:disposition-v021-rows — Verify: grep -nE '^\| CP-(01|02|04|08|13|14|1[6-9]|2[0-2]) ' docs/review/disposition.md returns 13 rows, each reading done in v0.2.1 and naming a section; open each named section and compare it with the proposal text in docs/review/2026-09-adversarial-review-v0.2.md §5 (for CP-16 to CP-21, with their row in the disposition table)
  • The CHANGELOG has a v0.2.1 entry naming every applied proposal — proof: eval:changelog-v021-entry — Verify: sed -n '/^## v0.2.1/,/^## v0.2 /p' CHANGELOG.md shows the not-yet-tagged section with one row each for CP-01, 02, 04, 08, 13, 14, 16 to 22
  • The protocol files' headings and status banners read v0.2.1 consistently — proof: eval:version-marker-grep — Verify: grep -L v0.2.1 protocol/*.md protocol/observation-model/*.md prints nothing; head -1 protocol/0*.md shows v0.2.1 in all seven headings
  • The boundary lint exits 0 — proof: boundary-lint (python3 tools/boundary_lint.py .) — Verify: python3 tools/boundary_lint.py . exits 0 (1 known, 0 new)
  • An agentic review of the PR finds every listed proposal applied as its proposal text says — proof: eval:agentic-pr-review (/pr-review verdict PASS) — Verify: /pr-review on this PR returns PASS; the branch pre-review returned BLOCK in round 1 (fixed in 9d26ae4) and PASS in round 2 (nits fixed in 04945ba)
  • CAP-16 moves from Reserved to Extended, with the extended event kind normalization.recorded carrying discarded and reconstruction_cost — Verify: grep -n 'CAP-16' capabilities/catalogue.md capabilities/CONFORMANCE.md and grep -n normalization.recorded protocol/observation-model/02-event-vocabulary.md; the CHANGELOG carries the migration note
  • Review timing is reinstated as open question P-15 in protocol/07 — Verify: grep -n 'P-15' protocol/07_DECISIONS_AND_OPEN_QUESTIONS.md protocol/01_PROTOCOL_V0.2.md
  • No tag is created and file names are unchanged; CITATION.cff reads version 0.2.1 — Verify: git tag --list 'protocol/v0.2.1' prints nothing; git diff --name-status origin/main...HEAD shows only M and one A (docs/technical-decisions.md); grep -n '^version' CITATION.cff

What Was Tested

  • python3 tools/boundary_lint.py . exits 0 with 1 known finding (KF-1) and 0 new. The KF-2 entry is gone from the baseline and the lint no longer reports anything in protocol/07.
  • python3 tools/public_guard.py --self-test passes, and the guard over origin/main..HEAD with the private deny file reports 0 findings.
  • The moved T-01 to T-10 text was compared with the old section B: it matches except for the added T-01 "Decided" line.
  • A relative-link and anchor check over all tracked Markdown reported no broken links (run on the branch at 9d26ae4).
  • Changelog rows were checked against the review's finding titles and the proposal texts.

Not tested: none of the mechanisms CP-16 to CP-21 bring back has been run in a case yet; they are recorded as hypotheses.

Risks

For owner confirmation at merge:

  • CP-02 is decided as option (b): the mode names stay and are redefined as objectives. Option (a), renaming to EXPAND/CONVERGE, was rejected because the state model, the capability catalogue and the evidence cases use the current names.
  • The acceptance record: docs/review/disposition.md now records the owner's acceptance for CP-02, CP-04, CP-08, CP-13, CP-14, CP-16 to CP-21 and CP-22. Please confirm these rows match your decisions.
  • Reading of "CP-10 challenge before convergence": the item seed named CP-10, but CP-10 is the already-done Case 01 disposition table. The seed was read as CP-01's content, and CP-01 is what protocol/01 §13 now implements.
  • D-21 is still release-worded: protocol/07 D-21 still names whole-package adversarial review for a stable or public baseline, while protocol/01 §13 now asks for challenge before convergence and review while change is cheap (§15 is stated as the release instance). D-21 was left unchanged because no accepted proposal rewords it.
  • Tagging protocol/v0.2.1 is the owner's decision: no tag was created, and the CHANGELOG section says "not yet tagged".
  • The protocol text grew rather than shrank: the review's own plan (§7, W1) says a v0.2.1 longer than v0.2 means the phase failed. By that test this consolidation fails, and the CHANGELOG says so.

🤖 Generated with Claude Code

https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME


Generated by Claude Code

…(CP-22)

Section B of protocol/07 was a register of deferred technical decisions
(repository topology, state serialisation, skill architecture, release
workflow). Those are project decisions, not protocol semantics, and T-03
was the only reason the normative layer named a harness. This is known
finding KF-2. The protocol is only edited through accepted change
proposals, so the move goes through a new one, CP-22, recorded in
docs/review/disposition.md as accepted on 2026-09-22 (owner decision to
resolve KF-2 through a change proposal) and done for v0.2.1.

Approach:
- T-01..T-10 move verbatim into the new docs/technical-decisions.md,
  with a short note on what the register is and where it came from.
- T-01 (project name) is marked decided on 2026-09-14 and points at
  examples/naming-decision.md. No other deferred decision is decided.
- protocol/07 keeps a one-line pointer where section B was. Sections A,
  C, D and E keep their letters so existing anchors stay valid.
- KF-2 is removed from docs/known-findings.md, and its entry is removed
  from tools/known-findings.txt, since the lint finding no longer exists.
- Inbound references are updated: the CHANGELOG Unreleased entry, the
  identifier table in docs/provenance.md (T-nn gets its own row, CP-22
  is added), research/hypothesis-register.md, the CAP-05 "derives from"
  line in capabilities/catalogue.md, and the README count of open
  findings reported by the lint (two to one).

Alternatives considered:
- Re-lettering C/D/E to B/C/D: rejected, it breaks inbound anchors and
  goes beyond the proposal's scope.
- Deleting section B without a pointer: rejected, readers following
  older references to section B would find nothing.
- Deciding other T-items in the same change: out of scope.

Tested:
- tools/boundary_lint.py exits 0 with one known finding (06:114, KF-1)
  and no new findings. The 07 finding is gone.
- A scripted comparison shows the moved text is byte-identical to the
  old section B, except for the T-01 decided line.
- protocol/07 has no "## B." heading and no T- entries.
- A relative-link and anchor check over all tracked Markdown reports no
  broken links.

Risks: the owner still has to confirm the CP-22 acceptance at merge.
The heading of protocol/07 still reads v0.2 until the v0.2.1
consolidation updates it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…one commitment ladder (CP-14, CP-02, CP-04)

First commit of the v0.2.1 consolidation. It brings the protocol text in
line with three change proposals that docs/review/disposition.md had
accepted and deferred to v0.2.1. Each edit traces to the proposal text in
docs/review/2026-09-adversarial-review-v0.2.md §5.

CP-14, the configuration assumption. protocol/01 §1 gains a "Declared
scope" subsection: one human, one AI, single-threaded discovery ending in
a handoff to a separate implementation context. It lists the known
untested extensions (teams, multiple stakeholders, discovery inside an
existing system, continuous discovery->delivery) and says that evidence
from multi-party settings is a transfer into this configuration, not
direct support for it.

CP-02, the mode names. This applies option (b) from the proposal: the
names PROBLEM_EXPLORATION, SOLUTION_EXPLORATION and CONVERGENCE stay.
01 §5 and 02 §1 now say that a mode names the dominant learning objective
of the moment, never a phase, and that switches are expected many times
per session. Option (a) would have renamed the modes to EXPAND/CONVERGE
with a focus attribute. It was rejected because 02, the capability
catalogue and the evidence cases already use the current names, and the
proposal itself names (b) as the low-cost option.

CP-04, the tentativeness devices. 01 §3 now calls Progressive Commitment
the protocol's one tentativeness ladder, with a typed instantiation for
each kind of object. It also adds the ladder's one presentation rule:
render status honestly, so exploratory structure must not carry
convergence rhetoric. §6 is marked as guidance under that rule rather
than a separate device, and it keeps its exploration/convergence
distinction, as the proposal requires. 02 §7 says its decision and
shared-language dimensions are the state encoding of the same ladder.

The catalogue's "Mode tracking" absence note no longer points to an open
CP-02. The three disposition rows now read "done in v0.2.1" and name the
section each change landed in. The headings still read v0.2; a later
commit in this consolidation changes the version.

Tested: the boundary lint exits 0 (1 known, 0 new).

Risk: the owner still has to confirm the option (b) reading of CP-02 at
merge.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…and return leg (CP-01, CP-16, CP-20)

CP-01 was accepted after review, but the protocol text was left for
v0.2.1: convergence could still be declared on a model nobody had tried
to break. protocol/01 §13 now lists that as a convergence condition: the
current model has survived at least one deliberate attempt to break it,
by a party or context independent of the pair that built it.

Three related gaps in the same mechanism are closed alongside it:

- Review typology (CP-01): exploration, adversarial and verification
  review, and spike, each answering a different question, so a review
  can say which kind it is. §15 now states that it is the release
  instance of the §13 mechanism, not a separate one.
- When to review (CP-20): review when the model is coherent, concrete
  enough to attack and still cheap to change. The open question on
  review timing, dropped when v0.2 moved the trigger to release, is
  reinstated as protocol/07 P-15.
- Closing the review loop (CP-16): fix only the named blockers, keep a
  resolution log, run a narrow verification review of those blockers
  only, and end with a ready or not-ready verdict. A verification pass
  must not reopen the product.

The README drops its "protocol text follows in v0.2.1" note on
challenge before convergence. CAP-10 now derives from CP-01, CP-16,
CP-20 and protocol §13. docs/review/disposition.md records CP-01 as
done in v0.2.1, and the CP-16..CP-21 table gains Disposition and Where
columns: the owner's acceptance of 2026-09-22 for all six, and done in
v0.2.1 for CP-16 and CP-20.

The item's seed named "CP-10 (challenge before convergence)"; CP-10 is
the already-done Case 01 disposition table, so the seed is read as
CP-01's content.

Alternative considered: a new top-level section for the typology.
Rejected because it would renumber §14 and §15 and break inbound
references; subsections of §13 keep the numbering stable.

Tested: tools/boundary_lint.py exits 0 (1 known, 0 new).

Risks: the owner confirms the recorded acceptances of CP-16..CP-21 at
merge. The "None applied" sentence under the CP-16..CP-21 table is now
stale and is updated in a later commit once all six are in.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…lassification (CP-17, CP-19, CP-21)

Applies three change proposals the owner accepted on 2026-09-22, as
recorded in docs/review/disposition.md.

CP-19, §11 "Reuse check before architecture": the Analogy Boundary Check
covers borrowed ideas, but nothing covered borrowed components. The new
gate asks, at the point of decision, whether the critical part already
exists externally and actually works, and says to spike before designing
around it when the answer is uncertain. §14's external-contract readiness
check follows it but does not replace it.

CP-21, §12 "Counterexamples": each counterexample is classified as local
(the model survives with a bounded fix) or structural (frame, boundaries
or core concepts change). Counterexample work is saturated when new
counterexamples cause mostly local changes; a structural one after
apparent saturation reopens convergence.

CP-17, §13 "Stop signal": five in-session symptoms of a discovery that
keeps running without producing anything (hypothetical future features,
options only decidable in code, settled decisions restated, artifacts
re-sorted, no new evidence or decisions), and the decision to take when
they dominate: converge, hand off with the open points deferred, or name
the uncertainty that justifies continuing. 05's No-New-Evidence
Reopenings measures the same failure after the fact, too late to act on.

All three are subsections, so section numbers and inbound references stay
stable. The disposition rows for CP-17, CP-19 and CP-21 now record them
as done in v0.2.1, with the section.

Tested: boundary lint exits 0 (1 known, 0 new); wording traced to the
proposal texts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…-16 (CP-18)

Change proposal CP-18 (accepted by the owner on 2026-09-22) generalizes
the information-loss gate beyond terminology. Until now the protocol only
protected source expressions from being overwritten (04 §4). Case 01
showed the same loss happens whenever source-grounded information is
normalized in any other way, and that the general form carries over to
any system that ingests and transforms external information.

Protocol text:
- protocol/01 §9 gains "Information-loss check before normalization".
  Before source-grounded information is irreversibly normalized (merged,
  summarised, mapped onto a schema, renamed or discarded), record what is
  discarded and what reconstructing it would cost. When the cost is high
  and the information may still matter, keep a source reference instead.
- protocol/04 §4 now says it is the terminology instance of that rule.

The proposal takes the form of a capability, so CAP-16 moves from Reserved
to Extended in capabilities/catalogue.md, with required, must emit, eval
L1, eval L2 and falsified-by. The Reserved section now says that no
identifier is reserved. capabilities/CONFORMANCE.md gains a CAP-16 row
(ext, every cell "?"). The observation model gains the extended event kind
normalization.recorded with the proposal's payload (discarded,
reconstruction_cost). The CP-18 row in docs/review/disposition.md
records it as done in v0.2.1 and names the sections.

CAP-16 is Extended rather than Core because the Core/Extended split
(CP-11) is still a proposal and nothing in Core depends on this
capability. Lint rule R3 only requires Core capabilities in the matrix,
so the lint passes with either classification.

Tested: boundary lint exits 0 (1 known, 0 new). That includes R2 (every
CAP-nn reference resolves) and R3 (every Core capability appears in the
conformance matrix).

Risk: a new extended event kind changes the observation model. It is part
of the v0.2.1 version bump in the same consolidation and is named in the
changelog.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…n instrument and add one evidence scale (CP-13, CP-08)

Evaluation in protocol/05 was built around run-level signals and a
cross-run Pareto comparison. Evidence arrives one case at a time, so at
n=1 there is no population to compare against, and a dashboard of
signals invites conclusions nobody committed to in advance. CP-13
(accepted, deferred to v0.2.1) asked for an evaluation design that works
at n=1.

CP-13:
- §2 becomes "Primary instrument: pre-registered predictions": per case
  at most five hypotheses with IDs from the hypothesis register, each
  with a predicted observable and a falsification criterion.
  Conclusions are drawn only against these predictions. The two quality
  gates stay; cross-run Pareto comparison becomes a diagnostic until
  several comparable cases exist.
- §3 becomes "Always-on measures and optional diagnostics": cold-start
  handoff blockers, decision explainability on three sampled decisions,
  and trace-derived state-integrity defects are taken on every run. The
  other signals keep their headings as an explicitly optional
  diagnostic catalogue.
- §8's learning loop starts with pre-registration; §9 restates
  Keep/Investigate/Revert as rules over the pre-registered predictions;
  §11's Case 03 instrumentation lists the pre-registered predictions.
- Section numbers are unchanged, so inbound references (01 §13 stop
  signal, CAP-09's "05 §3", CAP-02's "05 §11") still resolve.

CP-08 (previously recorded as deferred; accepted by the owner on
2026-09-22):
- New §12 "Evidence strength: one scale, two columns" separates
  observation clarity (clear / partial / inferred) from evidential
  weight (strong / moderate / weak / contested). Clarity never raises
  weight, so a clearly observed pattern in one self-authored, dependent
  case is still weak evidence.
- Existing ledgers get an added column and a dated note; recorded
  judgements are never rewritten. This is the proposal's own risk
  mitigation.
- research/01 §1 gains one sentence: its labels predate the rule, are
  kept as written and read as evidential weight, with KF-3 as the list
  of known over-statements.
- The evidence ledgers are not published here, so relabelling Case 02's
  ledger is recorded in the disposition as still outstanding in the
  evidence layer.

The disposition rows for CP-13 and CP-08 are updated to match.

Alternatives considered:
- Renumbering 05 to put the new instrument first and move the old gates
  later. Rejected: it breaks inbound section references.
- Relabelling research/01 in place. Rejected: it overlaps KF-3's
  separate narrowing pass.

Tested: boundary lint exits 0 (1 known, 0 new).

Risks: the scale values are a first definition and may need adjusting
once applied to a ledger. The owner confirms CP-08's acceptance at
merge.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
This is the last commit of the v0.2.1 consolidation. The earlier commits
applied the accepted change proposals to the protocol text. This one gives
that text a version number and brings the records into line with it.

Version marking: the headings of protocol/01-07 and the status line of all
11 protocol files, including protocol/observation-model/, now read v0.2.1.
The file names stay as they are. 01_PROTOCOL_V0.2.md keeps its name so
that inbound links keep working. README, docs/overview.md and CITATION.cff
(version "0.2.1") match.

CHANGELOG: a new "v0.2.1 - consolidation of accepted change proposals (not
yet tagged)" section has one row per applied proposal (CP-01, 02, 04, 08,
13, 14, 16-22). Each row gives the changed rule, the observation behind it
(a review finding or a Case 01 code) and what is still hypothesis. The
earlier CP-22 bullet under Unreleased moves into this section. A migration
note for the observation model records one extended kind,
normalization.recorded. No run has been recorded under the old vocabulary,
so no comparability is lost. A "What did not happen" paragraph says what
this version does not do:
- The review planned a smaller v0.2.1. This one is larger because CP-16-21
  bring back Case 01 mechanisms, none of which has been tested.
- CP-15 is still deferred.
- KF-1 and KF-3 are still open.
- The Core/Extended split is still only a proposal.

Records brought into line:
- docs/review/disposition.md: two summary sentences no longer matched the
  table rows ("None were applied", "Five remain deferred"). Each gets a
  dated update note, and the original wording stays. The CP-16-21 table
  now says "All six applied in v0.2.1". The priority-findings table is
  updated for F-02 and F-09.
- docs/provenance.md: the timeline gains a 22 Sep 2026 v0.2.1 row.
- docs/known-findings.md: KF-3's proposed fix no longer calls itself "a
  v0.2.1 pass". That work is not part of this consolidation.
- protocol/05: a stray trailing blank line left by the previous commit is
  removed.

No tag is created. Tagging is the owner's decision.

Tested: python3 tools/boundary_lint.py . exits 0 (1 known, 0 new). The
line number of the known entry in 06 has not changed, because the banner
edits keep line counts the same. Every observation in the changelog was
checked against the review's finding titles and the proposal texts.

Risks: at merge, the owner still has to confirm the recorded acceptances
and decide whether to tag protocol/v0.2.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
…in v0.2.1

An independent pre-review of the v0.2.1 consolidation returned BLOCK.
The blocking finding: v0.2.1 claims every change traces to one listed
proposal, but several sentences went beyond what their proposal asked
for. This commit removes them and fixes the should-fix findings.

Rules removed because no proposal asked for them:
- 01 §9: "keep a reference to the source instead of discarding it".
  CP-18 asks only that the loss be recorded.
- 01 §12: "saturation is evidence for convergence; a structural
  counterexample reopens it". CP-21 defines only the local/structural
  classification and the saturation exit.
- 05 §2: "each with a stable ID from the hypothesis register" and the
  sentence restricting conclusions to the predictions.
- 01 §13: the stop signal now says "stop" plus the proposal's own note,
  without the added converge/hand-off/justify decision.
- 01 §5: "returning to an earlier mode is normal" removed.

Consistency fixes:
- CHANGELOG: the older "Research references checked..." bullet goes back
  under Unreleased; the intro says v0.2.1 applies the listed accepted
  change proposals; "What did not happen" states that CP-03, CP-05 and
  CP-06 are accepted and drafted as CAP-14, CAP-06 and CAP-04 but their
  protocol-text edits are not in v0.2.1; the observation-model note says
  the model is not versioned separately, so v0.2.1 is the bump.
- 01 §15 no longer claims the §13 timing rule applies to the release
  review; the typology and return leg apply, and it does not replace the
  earlier review.
- 05 §9: Keep and Investigate no longer depend on a cross-run
  comparison. Keep requires that the always-on measures show no material
  defect (no cold-start blocker, sampled decisions explainable, no
  systematic state-integrity defect). "Defective-AI resistance" is no
  longer cited, since the protocol does not collect that signal (the
  defect finding F-13 named).
- 05 §2: the two gates sit under a "Quality gates" heading so they do
  not read as predictions.
- 05 §12: `strong` is now "replicated, or several independent studies",
  removing the overlap with `moderate`; the intro no longer claims every
  record already uses the scale.
- research/01: the note no longer maps "strongly supported" onto
  evidential weight; it points to KF-3 instead.
- docs/review/disposition.md: CP-02, CP-04, CP-13 and CP-14 rows record
  the owner's acceptance in the v0.2.1 consolidation; the CP-02 row names
  option (b) as the proposal's low-cost option; the header says rows were
  updated in place for v0.2.1 and git history holds the earlier wording;
  the CP-22 note says sections A, C, D and E are "unchanged by it".
- research/hypothesis-register.md: P-01..P-15 in the questions range;
  CAP-16 no longer "proposed"; HYP-019..024 note they are back in the
  protocol text in v0.2.1, untested.
- 07 P-15 says it is carried over from the unpublished Case 01 method
  and is the same claim as HYP-019; 01 §13 cites both.
- 01 §3 says only the decision/commitment and shared-language dimensions
  of 02 §7 encode the ladder.

Tested: boundary lint exit 0 (1 known, 0 new); relative-link and anchor
check over all tracked Markdown: 0 broken.

Risks: none new. A formal review round follows on the PR.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
Round 2 of the independent pre-review of the v0.2.1 consolidation passed
with one should-fix and four nits, all wording:

- research/01 no longer says KF-3 lists every over-stated item; KF-3
  names the clearest ones and research/REFERENCES.md lists them all.
- protocol/05 §12's "second column added" rule now says it covers older
  evidence ledgers, so it does not read as contradicting research/01's
  unmapped labels.
- protocol/05 §9's Investigate example names diagnostics that exist
  (Useful Breadth, the shared-language diagnostics) instead of
  "understanding" and "semantic consistency", which are not signals.
- docs/review/disposition.md's CP-04 row says two dimensions of 02 §7
  encode the ladder, matching 01 §3 and 02 §7.
- research/hypothesis-register.md's opening ID inventory is dated "as of
  v0.2", with a note on P-15 and the move of T-01..T-10.

Tested: boundary lint exits 0 (1 known, 0 new).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
@claude
claude Bot requested a review from kschlt September 26, 2026 10:04
@claude claude Bot assigned kschlt Sep 26, 2026
@claude

claude Bot commented Sep 26, 2026

Copy link
Copy Markdown
Author

PR Review Verdict

Result: PASS

Deterministic: CI check-run lint: success on the pinned head; commands.quality settled by the caller on the same head: boundary_lint exit 0 (1 known, 0 new), public_guard --self-test pass, public_guard over origin/main..HEAD with the deny file 0 findings — Tree: kschlt/earnedshape (the PR's own tree; commands.quality and CI) — Head: dff9337

Acceptance Criteria

  • [met] CP-22 for KF-2 recorded as accepted in docs/review/disposition.md — Evidence: grep -n '^| CP-22' shows one row: accepted 2026-09-22, done for v0.2.1, pointing at docs/technical-decisions.md. The owner's acceptance itself is recorded, not verifiable by a reviewer; the PR routes it to confirmation at merge
  • [met] protocol/07 no longer contains section B; its content is under docs/ — Evidence: grep '^## B' prints nothing; blank-line-insensitive diff of origin/main section B against docs/technical-decisions.md from ### T-01 differs by exactly the T-01 Decided line and one trailing ---
  • [met] T-01 marked decided, pointing at the naming-decision example — Evidence: grep -A1 '^### T-01' shows **Decided** 2026-09-14 linking ../examples/naming-decision.md; the target exists
  • [met] KF-2 leaves known-findings.md and known-findings.txt; changelog records it — Evidence: grep -c KF-2 prints 0 for both files; the v0.2.1 CHANGELOG table has a CP-22 row; repo-wide, KF-2 now appears only in the CP-22 records and README's lint-finding count was updated from two to one
  • [met] Boundary lint exits 0 with KF-2 no longer known — Evidence: ran python3 tools/boundary_lint.py .: exit 0, 1 finding 0 new, only protocol/06:114 (KF-1); no protocol/07 line
  • [met] Every relative link to the moved section resolves — Evidence: git grep technical-decisions.md lists 7 references in 6 files; a relative-link and heading-anchor check over all tracked Markdown found no missing target and no broken anchor introduced by this diff (the only unresolved anchors are pre-existing HTML-id anchors into research/REFERENCES.md, which exist as ids); git grep '07_DECISIONS_AND_OPEN_QUESTIONS.md#b' prints nothing
  • [met] Each listed proposal is in the protocol text and its disposition row says done in v0.2.1 with its section — Evidence: the stated grep returns 13 rows, each done in/for v0.2.1 with a location; every named section exists at that number in protocol/01 (§1, §3, §5, §6, §9, §11, §12, §13, §15), protocol/02 §1 and §7, protocol/04 §4, protocol/05 §2, §3, §9, §11, §12, and says what the row claims. CP-01, 02, 04, 08, 13, 14 compared against review §5; CP-16 to CP-21 compared against the unpublished CP-10 disposition text, since review §5 does not contain them (see findings)
  • [met] CHANGELOG v0.2.1 entry names every applied proposal — Evidence: the stated sed shows the section marked not yet tagged with exactly one row each for CP-01, 02, 04, 08, 13, 14, 16 to 22 (13 rows) and a What did not happen paragraph
  • [met] Protocol headings and status banners read v0.2.1 — Evidence: grep -L v0.2.1 over protocol/*.md and observation-model prints nothing; head -1 shows v0.2.1 in all seven headings; a grep for a remaining protocol v0.2 banner without .1 finds none
  • [met] Boundary lint exits 0 — Evidence: same run as above: exit 0 (1 known, 0 new)
  • [met] Agentic review finds every listed proposal applied as its proposal text says — Evidence: this review compared all 13 proposals clause by clause with their proposal texts: each Change clause is present; CP-02 applied as option (b) as the proposal permits; CP-08 applied in its protocol-text half, which is the item's stated scope (advisory finding on how the remainder is recorded)
  • [met] CAP-16 moves from Reserved to Extended with normalization.recorded {discarded, reconstruction_cost} — Evidence: catalogue.md:170 specifies CAP-16 inside the Extended section and the Reserved section now reserves nothing; CONFORMANCE.md row marks it ext/enf; 02-event-vocabulary.md:91 lists normalization.recorded with discarded, reconstruction_cost; CHANGELOG carries the Observation model migration note
  • [met] Review timing reinstated as open question P-15 — Evidence: protocol/07:124 ### P-15 — Review timing; protocol/01:461 references 07 P-15 and HYP-019
  • [met] No tag, file names unchanged, CITATION.cff version 0.2.1 — Evidence: no local or remote tag protocol/v0.2.1; git diff --name-status origin/main...HEAD is 23 M and 1 A (docs/technical-decisions.md); CITATION.cff line 12 version: "0.2.1"

Findings

  • [advisory][reproduced] protocol/05 §9 no longer partitions outcomes: a case where the predicted observable did not appear and the falsification criterion was not met (the common inconclusive n=1 outcome) matches none of Keep, Investigate or Revert; and a cold-start blocker is both an always-on material defect (Investigate) and a failed handoff gate (Revert). Built by enumerating the outcome combinations against the three rule texts. Worth a sentence naming the inconclusive case, or a follow-up proposal
  • [advisory][reproduced] CP-08's proposal text also asks to harmonize the strength vocabularies across evidence/ and research/; research/01 now states its labels are kept and not mapped, while the CP-08 disposition row records only the Case 02 ledger column as outstanding. The research/ half is neither done nor listed as outstanding
  • [advisory][reproduced] The PR body and the disposition-rows acceptance check say wording traces to review §5, but §5 holds only CP-01 to CP-15; the CP-16 to CP-21 texts are unpublished, so a public reader cannot run that verification for six of the thirteen proposals (the text matches the unpublished source). Consider publishing the six proposal texts or saying where they live
  • [advisory][reproduced] The CHANGELOG What did not happen paragraph paraphrases review §7 W1 as expecting a smaller document; W1 states that a longer v0.2.1 means the phase has failed. For a project that says it is built so it can lose, quoting the failure condition would be the more honest record

Not Checked

  • Whether the owner actually accepted CP-02, CP-04, CP-08, CP-13, CP-14, CP-16 to CP-22 on 2026-09-22: the disposition records it; only the owner can confirm
  • Link anchors were checked with an approximation of GitHub heading slugs, not against GitHub's own rendering
  • Per-commit atomicity (one proposal group per commit) and the content of the merge commit from main beyond what the net diff shows
  • The public_guard run and the deny-file scan were taken as settled by the caller, not re-run
  • The unpublished evidence layer (Case 02 ledger) that CP-08 also targets
  • Whether each new protocol rule is workable in a real run: CP-16 to CP-21 are untested mechanisms, as the PR states

Routed

none

…ength test plainly

Addresses the four advisories from review round 1 of PR #5 (verdict PASS).

protocol/05 §9: the outcome rules left a case unassigned. When the
predicted observable did not appear but the falsification criterion was
not met either, neither Keep nor Revert applied. Investigate now covers
it. Investigate also overlapped Revert: a material always-on defect such
as a major cold-start blocker fails a gate of §2 and is therefore Revert.
Investigate now takes such a defect only when it does not fail a gate of
§2, so each outcome has exactly one verdict.

CHANGELOG "What did not happen": the previous wording said the review
"expected a smaller document", which softened what the review actually
set. Its §7 W1 is a test: if v0.2.1 is longer than v0.2, the phase has
failed. The entry now quotes that test and says the consolidation fails
it.

docs/review/disposition.md CP-08: the row read as fully done, but the
strength labels already in research/ were deliberately kept as written
rather than mapped onto the new scale (research/01 §1). The row now says
so, and that the harmonization the proposal asked for is only partly
done.

Approach: minimal wording edits; no new rules are introduced.
Alternative considered: mapping the research/ labels onto the new scale
now. Rejected, because research/01 deliberately keeps them as written.

Tested: boundary_lint reports 0 new findings; public_guard over tracked
files reports 0 findings.

Risk: the CHANGELOG now states plainly that v0.2.1 fails the review's own
length test. Accepting that is the owner's decision.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
@claude

claude Bot commented Sep 26, 2026

Copy link
Copy Markdown
Author

Advisories from review round 1, addressed in a45dfad:

  1. protocol/05 §9: Investigate now covers "predicted observable absent, falsification criterion not met", and a material always-on defect is Investigate only when it does not fail a gate, so a major cold-start blocker is Revert only.
  2. CP-08: the disposition row now says the research/ strength labels stay as written, so CP-08 is only partly done.
  3. The PR body now says CP-16 to CP-21 can be checked publicly only against their summaries in the disposition table and the CHANGELOG.
  4. The CHANGELOG now quotes the review's W1 length test and says this consolidation fails it.

Generated by Claude Code

@claude

claude Bot commented Sep 26, 2026

Copy link
Copy Markdown
Author

PR Review Verdict

Result: PASS

Deterministic: CI check-run lint: success on the pinned head; commands.quality settled by the caller on the same head: boundary_lint exit 0 (1 known, 0 new), public_guard over tracked files and over the new commit with the deny file 0 findings — Tree: kschlt/earnedshape (the PR's own tree; commands.quality and CI) — Head: a45dfad

Acceptance Criteria

  • [met] Each listed change proposal is reflected in the protocol text, and its disposition row records it as done in v0.2.1 with its section (round 1 advisories 2 and 3) — Evidence: the CP-08 row still reads done in v0.2.1 in the protocol text and now adds that the research/ labels are kept as written, not mapped, so the harmonization is only partly done; research/01 line 27 says exactly that. The PR body and this criterion's Verify line now say CP-16 to CP-21 are checkable only against their one-line rows in the disposition table's second table; those six rows exist, each naming a section
  • [met] The CHANGELOG has a v0.2.1 entry naming every applied proposal (round 1 advisory 4) — Evidence: "What did not happen" now states the review's §7 W1 test (if v0.2.1 is longer than v0.2, the phase has failed), which matches the last sentence of W1 in the review document, and says this consolidation fails it; protocol/01 grew from 1389 to 2074 words against origin/main, so the claim holds. The row set is unchanged by the delta
  • [met] An agentic review finds every listed proposal applied as its proposal text says (CP-13, round 1 advisory 1) — Evidence: CP-13 asks to restate Keep/Investigate/Revert as rules over pre-registered predictions; §9 still does. The inconclusive case (predicted observable absent, falsification not met) now has a verdict, and a material always-on defect that fails a gate of §2 now falls only under Revert. One residual overlap, see findings
  • [met] The boundary lint exits 0 (both boundary-lint criteria) — Evidence: settled on a45dfad: exit 0, 1 known (KF-1), 0 new; the delta touches no lint-relevant text
  • [met] Remaining criteria (CP-22 row, section B move, T-01, KF-2 removal, links, version marks, CAP-16, P-15, no tag / file names / CITATION.cff) — Evidence: met at dff9337 in round 1; the delta changes none of the lines they check (diff is one line each in protocol/05 §9, CHANGELOG "What did not happen", disposition CP-08 row)

Findings

  • [advisory][reproduced] The new Investigate sentence in protocol/05 §9 (predicted observable absent, falsification not met) has no gate qualifier, so a run where that holds and a gate of §2 also fails matches both Investigate and Revert. The same edit added "does not fail a gate of §2" to the first Investigate clause for exactly this reason; the commit message states that each outcome now has exactly one verdict, which this case contradicts. Built by enumerating predicted-observable x falsification x gate against the three rule texts. A pre-existing overlap of the same kind remains too: a prediction that held, no material defect, gates holding, and a diagnostic pointing the other way matches both Keep and Investigate. One sentence, for example "Revert takes precedence, then Investigate", would close both

Not Checked

  • Round 2 is delta-scoped (dff9337..a45dfad plus the updated PR body): criteria not touched by the delta were not re-audited and rest on round 1 at dff9337
  • The public_guard and deny-file results were taken as settled by the caller, not re-run
  • Whether the owner accepts the CHANGELOG stating that v0.2.1 fails the review's own length test: only the owner can decide that
  • The length comparison used protocol/01 word counts only, not the whole normative layer

Routed

none

… several fit

Section 9 of protocol/05 still let a single outcome fit two verdicts.
An absent observable with an unmet falsification criterion and a failed
gate matched both Investigate and Revert; a held prediction with a
contrary diagnostic but no defect matched both Keep and Investigate.

One sentence in the section 9 introduction now sets precedence: Revert
over Investigate, Investigate over Keep. This also makes the previous
commit's claim of one verdict per outcome true.

A single precedence sentence was chosen over adding conditions to each
rule ("and both gates hold" on Investigate, "no diagnostic points the
other way" on Keep), which would add more wording for the same effect.

Tested: boundary_lint reports no new findings; public_guard over tracked
files reports no findings. No risk beyond wording.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H3KoTUo8coyqs8Vyx8StME
@claude

claude Bot commented Sep 26, 2026

Copy link
Copy Markdown
Author

Round 2 advisory addressed in d17afce: protocol/05 §9 now says that when more than one rule fits, Revert takes precedence over Investigate, and Investigate over Keep. That closes both overlaps the round found.


Generated by Claude Code

@claude

claude Bot commented Sep 26, 2026

Copy link
Copy Markdown
Author

PR Review Verdict

Result: PASS

Deterministic: CI check-run lint: success (both runs) on the pinned head; commands.quality settled by the caller on the same head: boundary_lint exit 0 (1 known, 0 new), public_guard over tracked files and over the new commit with the deny file 0 findings — Tree: kschlt/earnedshape (the PR's own tree; commands.quality and CI) — Head: d17afce

Acceptance Criteria

  • [met] An agentic review finds every listed proposal applied as its proposal text says (CP-13; round 2 advisory) — Evidence: the delta (a45dfad..d17afce) is one sentence added to the protocol/05 §9 introduction: when more than one rule fits, Revert takes precedence over Investigate, and Investigate over Keep. Enumerated all 32 combinations of predicted observable appeared, falsification criterion met, a gate of §2 failed, a material always-on defect that fails no gate, and a contrary diagnostic against the three rule texts at the head: 0 combinations have no verdict, 8 fit more than one rule, and the precedence sentence assigns each of those 8 exactly one verdict. Both overlaps named in round 2 are among the 8 and are resolved: absent observable, falsification not met, gate failed now gives Revert; prediction held, no defect, gates holding, contrary diagnostic now gives Investigate. CP-13's requirement, Keep/Investigate/Revert as rules over pre-registered predictions, still holds; the CHANGELOG and disposition CP-13 rows still describe §9 accurately
  • [met] The boundary lint exits 0 (both boundary-lint criteria) — Evidence: settled on d17afce: exit 0, 1 known (KF-1), 0 new; the delta adds no vendor or harness term
  • [met] Remaining criteria (CP-22 row, section B move, T-01, KF-2 removal, links, the other disposition rows, CHANGELOG v0.2.1 entry, version marks, CAP-16, P-15, no tag / file names / CITATION.cff) — Evidence: met in rounds 1 and 2; the delta changes one line of protocol/05 §9 and none of the lines those criteria check

Findings

none

Not Checked

  • Round 3 is delta-scoped (a45dfad..d17afce): criteria not touched by the delta were not re-audited and rest on rounds 1 and 2
  • The enumeration models "the prediction held" as observable appeared and falsification not met; under any other reading a met falsification criterion still falls to Revert by precedence, so the result does not depend on it
  • Two qualifiers written before the precedence sentence ("Both gates of §2 must hold for Keep", "does not fail a gate of §2" in Investigate) are now implied by it; they were left as they are and judged harmless, not a defect
  • The public_guard and deny-file results were taken as settled by the caller, not re-run
  • The PR body's Approach paragraph still describes review rounds only up to a45dfad; the PR body is not part of the tree and was not judged

Routed

none

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants