Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .claude/agents/5plus3-council.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,28 @@ board hygiene in the SAME commit (EPIPHANIES if a finding emerged,
STATUS_BOARD row flip, AGENT_LOG entry naming the council run: which 5,
which 3, verdict counts, what changed between v1→v2→v3).

## Sequencing invariant + base case (operator-ruled 2026-08-04)

**The order above is load-bearing, not stylistic.** The 5 first
streamline the open points into a hardened draft; the 3 attack ONLY the
already-hardened draft; findings are fixed. **Never cast the 3 in
parallel with (or ahead of) the 5** — most sessions' raw output is not
yet hardened, and reviewers loosed on unhardened material invite
hallucinated, deflected, reactive coding. The 3 need a consolidated
object to break, not a moving one. (This is why Phase 2 exists and why
Phase 3 reads "on draft v2 ONLY".)

**Base case:** the council's ratified v3 lands without an automatic
further council — each cycle terminates (streamline → attack → fix →
land). **A further full 5+3 pass on the result is permitted as a
deliberate re-invocation when warranted** (a BLOCK returning to Phase 0
is the built-in instance). What bounds the recursion is that re-running
is a choice, never an unconditional per-output obligation; an
unconditional "council before any claim" would require a council on the
council's own verdict, forever. Cross-ref: OGAR `CLAUDE.md` doc-family
item 9 (same ruling, producer side) and lance-graph
`E-THE-HYGIENE-RULE-RECURSED-1` (the recursion test).

## Token-economy summary

| role | model | why |
Expand Down
27 changes: 27 additions & 0 deletions .claude/board/EPIPHANIES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
## 2026-08-04 — E-THE-HYGIENE-RULE-RECURSED-1 — a rule that requires an entry per merged PR generates an infinite chain unless hygiene-only PRs are exempted

**Status:** FINDING + rule amendment (termination clause added to `CLAUDE.md` § Mandatory Board-Hygiene Rule). **Confidence:** High — the chain is three links of observed fact, not a projection. Documentation only.

**What happened, in order.** #881/#882/#883 merged with no arc entries — a real violation of the hygiene rule. **#884** was opened to close that gap, and merged without its own entry. **#885** was opened to close *that* gap, and merged. At that point the shape became visible: an entry for #885 would need an entry, and so on without end. Each individual step was the rule correctly applied; the composition was a non-terminating loop.

**Why it was invisible for three links.** The rule is stated per-PR (*"a PR that adds X must also update Y"*), and each application is locally correct — which is exactly the property that hides a divergent recursion. The failure only shows at the third link, when the *content* of the newest PR is nothing but a record of the previous one. Two prior sessions each wrote the honest local lesson ("writing the hygiene PR does not discharge the rule for the hygiene PR") without noticing that the lesson, applied uniformly, never terminates.

**The amendment.** A PR whose ENTIRE content is board hygiene for prior PRs — no type, plan, deliverable, epiphany, or code — generates NONE of the merged-PR row's obligations: no arc entry AND no `LATEST_STATE` update; it is discharged by the entries it wrote. (Scope corrected same-day per codex P2: the first draft exempted only the arc entry, which left the chain alive through the row's other half — recording the still-required `LATEST_STATE` update is itself a hygiene-only PR, forever. A termination clause that covers one of two co-required obligations terminates nothing.) **The test is content, not intent:** does the PR change anything a future session needs the *why* for? A hygiene-only PR's why IS the entry already in the arc; a second entry saying "this PR added an entry" carries no architectural context and costs a real read. **Mixed PRs still get their entry** — #884 landed hygiene *and* the D-KIA-C1b re-scope, and the entry exists for the re-scope half.

**What this is NOT.** Not a loosening. The originating gap — three PRs merged with no entries at all — remains a violation, and the retroactive-hygiene pattern it belongs to is still the anti-pattern the rule was written against. Only the degenerate tail is excluded.

**The transferable shape.** *A per-item obligation whose discharge is itself an item of that kind needs an explicit base case, or it is a recursion with no bottom.* Worth checking wherever the workspace states a rule of the form "every X must produce a Y" and Y is itself an X: the append-only governance files, the probe-records-a-probe pattern, and any future "every finding gets an entry" convention are the same shape. The cheap check is to apply the rule twice to its own output and see whether the third application says anything new.

> **Sweep result (2026-08-04, same session — the Deferred item, discharged).** Nine workspace rules of this shape were checked. **Two discriminators emerged, and they turn a hand-audit into a two-question test:**
>
> 1. **Does discharging the obligation CREATE a new artifact of kind X, or impose a PROPERTY on the artifact already there?** New artifact → divergent. Property → terminates. (A guard needing a can-it-fire *test* creates a test; a test needing to be *falsifiable* is a property of that test — which is why the falsifiability rule does not recurse.)
> 2. **Is the trigger UNCONDITIONAL or ERROR-TRIGGERED?** Unconditional ("every merged PR") diverges, because the discharge is itself an instance of the trigger. Error-triggered ("a wrong entry gets a correction") terminates, because the base case is the *absence* of the error and errors are not manufactured by fixing them.
>
> **Divergent — fixed:** the board-hygiene rule (termination clause, this PR).
>
> **Latently divergent — base case existed only implicitly, now stated:** `AGENT_LOG.md`'s *"Every agent run gets one entry."* The one-writer correction makes the orchestrating main thread the sole writer, and the main thread is not a spawned agent — so a base case exists, but by side effect. **The near-miss is real, not hypothetical: this log records "Sonnet W3 (board hygiene)" runs**, i.e. board hygiene HAS been delegated to workers. A worker writing the log entry is an agent run, which needs an entry, which needs a writer. The base case is now written down at the rule.
>
> **Checked and terminating, no action:** the falsifiability rule (discriminator 1 — falsifier validity is discharged by property-checks such as max-achievable-value-under-the-guard and invariance leakage, **never by a meta-falsifier**; that is the answer to "who validates the validator" for this workspace); the insight update cycle (a "probe P measured X" claim is grounded by P's output, not by a new probe — `Label everything` is the base case); the probe-first rule (bounded by the same base case); `PR_ARC` rule 4 corrections and rule 5 reversals (both discriminator 2 — error-triggered); the handover protocol (terminal artifact of a session, produces no new session); the entropy ledger (not of this shape — rows are observations, not discharges).
>
> **Cross-repo — found here, FIXED there (OGAR PR #233):** OGAR's `CLAUDE.md` stated *"Run [the 5+3 hardening pattern] before any claim enters the canon"* — and the council's own output IS a claim, so the literal reading diverged. Fixed in OGAR with the operator's sequencing ruling, which supersedes this sweep's first parenthetical ("reviewers on v2 only, *once*") on where the termination actually comes from: **the 5 first streamline the open points into a hardened draft; the 3 attack ONLY the already-hardened draft (never in parallel — raw session output attacked unhardened invites hallucinated, deflected, reactive coding); findings are fixed; and a further full 5+3 pass is PERMITTED as a deliberate re-invocation.** The recursion is bounded not by "once ever" but by re-running being a *choice* instead of an unconditional per-claim obligation — discriminator 2 applied precisely: it is the unconditional trigger that diverges, not the existence of re-runs. (An earlier draft of this sweep deferred the OGAR edit as "separation of concerns"; that was a misapplication — the rule guards private→public content bleed, not an in-scope repo's own doctrine file — corrected same session.)

## 2026-08-04 — E-ACTOR-IS-NOT-THE-PHASE-PATH-1 — #879 is the complete phase-progression path; KanbanActor has no assigned architectural responsibility

**Status:** RATIFIED (operator ruling, 2026-08-04) + CORRECTION of a same-week over-reach in `kanban-64k-inverted-awareness-v1` §A1. **Confidence:** High. Documentation and legacy-surface quarantine only — **no runtime behaviour changed, no #879 redesign, no future actor proposal.**
Expand Down
14 changes: 14 additions & 0 deletions .claude/board/PR_ARC_INVENTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,20 @@
> - **Docs** — knowledge files produced (immutable)
> - **Confidence (YYYY-MM-DD):** — the ONLY mutable field

## 2026-08-04 — lance-graph #886 — the board-hygiene rule gets a termination clause (it was recursing)

**Head:** `<this branch>` (entry written in the same commit as the change, per the rule's own "SAME commit" wording; merge SHA follows on merge). 3 files, doc/board prose only — **no code, no runtime behaviour.**

- **Added.** A **Termination clause** in `CLAUDE.md` § Mandatory Board-Hygiene Rule; `EPIPHANIES.md` `E-THE-HYGIENE-RULE-RECURSED-1`.
- **Locked — the rule does not recurse.** A PR whose **entire** content is board hygiene for prior PRs (no type, plan, deliverable, epiphany, or code) **generates NONE of the merged-PR row's obligations — no arc entry AND no `LATEST_STATE` update** — it is discharged by the entries it wrote. (Scope corrected in-PR per codex P2: exempting only the arc entry left the chain alive through the row's other half.) **The test is content, not intent:** does the PR change anything a future session needs the *why* for? **Mixed PRs still get their entry** (#884 landed hygiene *and* the D-KIA-C1b re-scope; the entry exists for the re-scope half).
- **Locked — the chain that produced this stops at #885.** #881/#882/#883 merged entry-less → #884 recorded them → #885 recorded #884 → an entry for #885 would need one, forever. **#885 therefore has no arc entry, deliberately, and its absence is not a gap.**
- **NOT a loosening.** The originating violation — three PRs merged with no entries at all — stands as a violation, and the retroactive-hygiene anti-pattern is unchanged. Only the degenerate tail is excluded.
- **Locked — the two-question test for this rule shape** (from the sweep, folded into the same PR at operator request). **(1) Does discharge CREATE a new artifact of kind X, or impose a PROPERTY on the one already there?** New artifact → divergent; property → terminates. **(2) Is the trigger UNCONDITIONAL or ERROR-TRIGGERED?** Unconditional diverges (the discharge is itself an instance of the trigger); error-triggered terminates (base case = absence of the error).
- **Locked — `AGENT_LOG`'s base case is now explicit.** *"Every agent run gets one entry"* had a base case only by side effect of the one-writer rule (the orchestrating main thread is not a spawned agent). **The near-miss is real** — the log records "Sonnet W3 (board hygiene)" runs, so hygiene HAS been delegated to workers. Stated at the rule: the consolidation is not an agent run and gets no entry.
- **Swept, terminating, no action:** the falsifiability rule (falsifier validity is discharged by property-checks, **never a meta-falsifier** — the workspace's answer to "who validates the validator"); the insight update cycle; the probe-first rule; `PR_ARC` rules 4 and 5; the handover protocol; the entropy ledger.
- **Cross-repo: found here, fixed in OGAR PR #233 (operator-ruled sequencing).** OGAR's *"Run [5+3] before any claim enters the canon"* diverged literally — the council's output is a claim. The ruling that fixed it: **5 streamline the open points into a hardened draft → 3 attack ONLY the hardened draft (never in parallel; attacking unhardened material invites hallucinated, deflected, reactive coding) → findings fixed → a further full 5+3 pass is permitted as a deliberate re-invocation.** The bound is that re-running is a *choice*, not an unconditional per-claim obligation — discriminator 2, precisely. (An earlier draft deferred the OGAR edit as "separation of concerns"; misapplied — that rule guards private→public content bleed, not an in-scope repo's own doctrine — corrected same session.)
- **Confidence (2026-08-04):** working — prose only, nothing to regress.

## 2026-08-04 — lance-graph #884 — post-merge arc entries for #881/#882/#883 + D-KIA-C1b statistics re-scope

**Merged:** `1e90cef` (branch `claude/x265-x266-plans-review-h9osnl`, head `c6acd75`). 4 files, board/plan prose only — no code, no runtime behaviour.
Expand Down
32 changes: 32 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,30 @@ updating the relevant board file in the SAME commit is incomplete.**
repository have to exclusively focus on the necessary updates in the public
repository, and keep a separation of concerns.**

**Termination clause — the rule does not recurse (added 2026-08-04, three
links deep; scope corrected same-day per codex P2).** A PR whose ENTIRE
content is board hygiene for prior PRs — it adds no type, plan,
deliverable, epiphany, or code — **generates NONE of the merged-PR row's
obligations: no arc entry AND no `LATEST_STATE` update.** It is discharged
by the entries it wrote. Exempting only the arc entry would leave the
chain alive through the other half — recording the still-required
`LATEST_STATE` update is itself a hygiene-only PR, forever. Without this
clause the rule is an infinite chain: #884 recorded #881/#882/#883, #885
recorded #884, and an entry for #885 would need its own forever. The
chain that produced this clause stops at #885.

The test is *content*, not intent: does the PR change anything a future
session would need the "why" for? A hygiene-only PR's why **is** the entry
it added, already in the arc — a second entry saying "this PR added an
entry" carries no architectural context and costs a real read. **A mixed PR
still gets its entry** — if it lands hygiene *and* a decision, scope, code,
or correction (as #884 did with the D-KIA-C1b re-scope), the non-hygiene
half is what the entry is for.

This is a stopping rule, not a loosening: the original gap — merging #881,
#882 and #883 with no entries at all — remains a real violation. What is
excluded is only the degenerate tail.

### The falsifiability rule (P0, added 2026-07-26 — 7 instances in one session)

**An assertion implied by the code it tests is not a test.** Before a test
Expand Down Expand Up @@ -751,6 +775,14 @@ For subagent coordination *during* this session:
> **Every agent prompt MUST include:** "Read `.claude/board/AGENT_LOG.md`
> before starting. Do NOT write it — leave your record in your own tag-file;
> the orchestrator consolidates."
> **Base case (made explicit 2026-08-04, recursion sweep):** the
> consolidation itself is **not** an agent run and gets **no** entry. Without
> this the rule diverges the moment board hygiene is delegated — which has
> happened (see this log's own "Sonnet W3 (board hygiene)" runs): a worker
> writing the log entry is an agent run, needing an entry, written by a
> worker. The one-writer rule already implies the base case; stating it means
> a future session doesn't have to re-derive it. Cf. `CLAUDE.md`
> § Termination clause and `E-THE-HYGIENE-RULE-RECURSED-1`.
- **`LATEST_STATE.md` + `PR_ARC_INVENTORY.md`** are the structural
blackboard — what types exist, which PRs shipped. Every subagent
reads them for current state.
Expand Down