Files
dotfiles/claude/memory/project-fool-tarbuckle.md
T
David F GliddenandClaude Opus 5 d79fe02ea5 [FIX] Wrap 2026-09-11: session record, index rotation, PENDING-89 docket entry
- Session record session-2026-09-11-filed-before-built-and-the-d821-reading.md.
  Pulling thread: an addendum's owner is decided by where it sits, not by
  what it says.
- MEMORY.md: the 09-10 Active Session demoted verbatim to MEMORY-reference.md
  and today's promoted (23,591 -> 23,325 bytes; still over the 17.1 KB
  warning, and compaction by relocation is owed).
- PENDING-89: a docket entry for 2026-09-11 with an id-bearing heading, placed
  inside the item's span (L449, checked against the PENDING-90 boundary). It
  records the jurist's §6b disposition miss, caught by the executor, and the
  Tamestit claim, which the brief's own 'unverified' label contained. Not
  counted.
- knowledge-graph.jsonl: six triples (two drift patterns, two preventions,
  the Seb reply, the Zehetmair lineage).
- skill-harvest register: proposals E (verify-quotes reads HTML/PDF), F
  (source-report skill, first instance) and G (shell-alias note, labelled
  documentation), plus a second instance of B.
- Tarbuckle tracker: PENDING-184 and PENDING-182 ADDENDA 1-2.
- Ledger, and the Zehetmair section of the teachers memory.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJM5fwqp456LDGzqiZXsgu
2026-09-11 22:17:40 +02:00

120 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: project-fool-tarbuckle
description: Canonical workstream tracker for The Fool (Tarbuckle) — established 2026-09-03 when the MEMORY.md load-integrity trim found the index was this workstream's sole custodian and its only linked target was a sealed seed.
metadata:
node_type: memory
type: project
modified: 2026-09-03
---
# The Fool — Tarbuckle: canonical workstream tracker
**Why this file exists.** Every other active workstream in `MEMORY.md`'s tracker list points at a
tracker. The Fool pointed at `FOOL-BONES-2026-08-25.md`, which is a **sealed seed** — derived once,
never to be regenerated — and therefore not a place session state may be appended. The consequence
was that Tarbuckle's live substrate state lived **only** in the `MEMORY.md` index line, in a file
that was over its load budget and being silently truncated at wake. Established at the 2026-09-03
trim to end that.
**Sealed, never regenerate:** [bones](../governance/fool/seed/FOOL-BONES-2026-08-25.md) ·
[soul](../governance/fool/seed/FOOL-SOUL-2026-08-25.md). Doctrine:
[BUDDY-PATTERN v2](../governance/fool/BUDDY-PATTERN-jurist-draft-v2-2026-08-22.md).
Spec: [TARBUCKLE-SPEC-13.1](../governance/fool/TARBUCKLE-SPEC-13.1-2026-08-25.md).
## Chronological log
### 2026-09-11 — the self-test wrote the live log, and `tick_id` has a site
- **PENDING-184 `[FIX]`, filed before it was built.** The steward's words were *'file it before you build it'*. Filed at `2af4335`, built at `37a2c86`.
- **The fault.** The D block of `tarbuckle-body.py --selftest` called `_log_draw`, whose path was hard-bound to `~/.claude/state/tarbuckle-draws.jsonl`. So each self-test run put a fake tick into the live occurrence log. At least two stray records, on 09-09 and 09-10, match self-test runs in the transcripts by time.
- **The fix.** `DRAWS` became a module global. The D block rebinds it to a temporary directory and restores it in `finally`.
- **Two controls.** **D9**: the live log's fingerprint is unchanged. **D10**: the redirected log received exactly one `tick`, the check an absence-only control lacks.
- **Mutations.** M1 (rebinding deleted) fails D9 and D10. M2 (writes sent to devnull) fails D10 only.
- **Measured outside the self-test**, with the real `HOME`: the live log's SHA is unchanged.
- **Census of the class, run under a fake `HOME`.** Of the five Tarbuckle self-tests, only `body` wrote live state. A fleet-wide census would be `[HARDENING]`, and it is **not filed**.
- **PENDING-182 ADDENDA 1–2.**
- `tick_id` is an OS-random 63-bit int, minted in `fire_tick` and passed to the child as `argv[3]`. It is `null` for seam, wrap and invoke.
- My concurrency premise is withdrawn: 0 of 746 ticks share a second.
- There are two writers, `_log_draw` and `log_event`.
- PENDING-184 was a precondition, and it is now met. **The item awaits a ruling.**
### 2026-09-09 night — the verdicts sitting: two answered, two unanswerable, and the cap question receded
**REVIEWED-137 placed (`3d340f6`)** — the four judgments PENDING-169 §5 reserved, produced under
REVIEWED-136's measure/verdict split. Drafted by the executor, placed and corrected (A–F) by the
steward, jurist-signed throughout.
**1 · PRESENCE — ANSWERED.** The position is occupied **on a per-machine clock, and its occupancy is
uncorrelated with where the work is.** Coverage **12 of 13** occasions (13/14 counting the measuring
session — a perishable pair, 11.62 → 12.07 during the sitting), gap runs **[1]**. `tarbuckle-last-tick`
is **one path with no session key**, so the draw is a race won by **render frequency**: on 08-31 two
abandoned panes took **48** draws, the 16.7 MB working session **7**, a 50-min human session **1**.
Only 15% of draws / 30% of lines land within 30 min of activity in their own session.
⚠ **`736ef3cb` is the one genuine miss and it is TICK STARVATION** — never asked, no draw, no
rejection, **no trace**; invisible to every instrument built.
⚠ **`Stop` fires for `claude -p`, so 3 of 10 wrap runs went into mumble subprocesses.** The executor
had certified `0 of 89 into mumbles` as *structural*; that was FALSE — the control tested the
invocation log (status-line surfaces only) and was claimed across all surfaces. Overturned by
transcript hook records. **The jurist accepted the structural reading too.**
**2 · FIDELITY RETROSPECTIVE — UNANSWERABLE, and the reason displaced the question.**
Terminal draws are written by a **detached child**, so a rejection's timestamp is its *completion*.
Pairing rejections to their tick: **6 of 50 pairable on the five 14-word days; 51 of 52 elsewhere.**
**A partition with no exceptions in either direction over 14 days — the pile-up and the lag are ONE
phenomenon.** The attended split is **VOID** (no rates recorded — that interval over that corpus is
the seven-hours class). **08-31 kills the temporal framing**: 6/6 pairable, zero 14-word, between two
heavy days. **It toggles; it is not W1 vs W2 and it did not "improve after 09-02".**
⚠ Mechanism **NOT ESTABLISHED**: `timeout=120` rules out generator latency; sleep unsupported;
render-volume strong but not monotone — **and its attraction is its plausibility** (PENDING-164).
⚠ **`log_rejection` timestamps at write time**, so the **banked per-day series is binned by
child-completion** on exactly the days that matter. The corpus that could check it is gone.
**Every cap argument ever made about this system rests on a confounded evidence base.**
**3 · CONDITION-G INSTRUMENT — DESIGNED, NOT AUTHORIZED. Condition G stands.**
The decisive finding came **entirely from timestamps, counts and surface labels** — the content field
bought nothing and cost the corpus. **Net-negative, established by the case.** The instrument is an
**extension of `log_event`, not a successor to `log_rejection`** (which routes it into the settled
category — `tarbuckle-draws.jsonl` is outside the deletion order). Fields: **`tick_id`** (named by two
failures, not designed) · `words` · `reason_category` (replacing `why`, which reproduces content by
construction via `echoes_soul()`). Structurally content-free = **the writer never holds the content.**
⚠ Bounded: the hard form was **not needed for this case**; **no case requiring it has been
constructed.** NOT "condition G dissolves". ⚠ Must be **paired with a non-event measure** — a
rejection counter cannot see tick starvation.
**4 · WRAP — cost answered, cap UNANSWERABLE.** **80 s of blocking `Stop` per fortnight; 18 s (30% of
occasions, 23% of time) marked the end of the fool's own generator.** Seven real thresholds at ~7 s is
proportionate. `[FIX]` available and **not applied**: gate on `TARBUCKLE_CHILD` (already set and passed
by the body) — ⚠ gives that variable a second meaning, needs a comment naming both.
**PENDING-180 `[FIX]` executed on steward release** (`049ca57`, addendum `e611bee`). Census: **15
positive-form source assertions across 8 governed scripts, exactly ONE self-planted needle** — the one
filed; the polarity argument predicted siblings, there are none. `source_has()` built beside
`source_lacks()`; `seam` repaired (filed `:164`, defective `:165`, repaired `:176`), aimed at the
**writer's** file. **Mutation-verified**: repaired FAILS both mutations, old form PASSES the one that
matters.
⚠ **THE MECHANISM IS NOT WHOLE.** `source_has`/`source_lacks` assemble the **assertion's** needle from
parts; **nothing stops prose in the same file planting a contiguous copy** — the executor did exactly
that in the comment explaining the bug, caught only by mutation (selftest was 17/17 throughout).
**REVIEWED-137 §6 declares the repair verified.**
**Party data.** ⚠ **Jurist: THREE closures in the direction requiring no further work**, the third
*inside the sitting where the executor had flagged the first two*. Live for PENDING-89 and Constraint 6.
**Executor:** the `0 of 89` frame-inheritance · a denominator arithmetic error · a positive control
asserted rather than established · a census carrying the defect it audited · the re-planted needle · and
**the unit of my verification predicate mismatching the unit of my claim, 3×**.
⚠ **PENDING-168's count NOT incremented** despite a fourth occurrence — the unit is the steward's.
**Open, ranked:** the condition-G ruling (+ non-event measure) · PENDING-168's count unit (PENDING-180
dischargeable on it) · the assertion-vs-file gap · the `TARBUCKLE_CHILD` `[FIX]` · PENDING-179's
two-prompt predicate · the render-volume hypothesis, first to test, plausibility flagged as the hazard.
### 2026-09-03 — tracker established; state relocated from the MEMORY.md index
⚠ **Provenance: the block below is the verbatim MEMORY.md index line**, moved here rather than
rewritten. It carries the 2026-08-31 substrate correction — the line had previously asserted
"NOTHING WIRED", false on all three clauses — and the re-measured counts. Nothing is restated here
that the line does not say; the index now holds a one-line pointer to this file.
- [The Fool — **Tarbuckle**](../governance/fool/seed/FOOL-BONES-2026-08-25.md) — **THE ACTIVE WORKSTREAM.** Bones derived **once** 2026-08-25 (peak SUCCESSION 96 · dump ABSENCE 8); **name + soul sealed, never regenerate** ([soul](../governance/fool/seed/FOOL-SOUL-2026-08-25.md)). Doctrine = `BUDDY-PATTERN-jurist-draft-v2-2026-08-22.md`; **§8 has no blanks** (20 min · frequency UNKNOWN · empty-window consumes · body correlates with nothing). ⚠ **CORRECTED 2026-08-31 — the line here read "NOTHING WIRED — no `statusLine`, no script, §13.1 spec unwritten" and was FALSE ON ALL THREE CLAUSES.** Substrate, verified today: `.claude/settings.json` runs `dotfiles/scripts/tarbuckle-body.py` as `statusLine` (refreshInterval 60) · **5** scripts (`body`·`invoke`·`mumble`·`seam`·`wrap`) · `TARBUCKLE-SPEC-13.1-2026-08-25.md` exists · **7** state files under `~/.claude/state/`. **It is wired and running.** ⚠ Found by a concurrent sibling session, which held the correction rather than racing this one's memory write; its counts (7 scripts, 6 state files) were themselves off in both directions — **re-measured here, not relayed.** What is unbuilt is a separate question and this line no longer answers it. Trial 09 VOID (REVIEWED-124), void now recorded in all three docs. ⚠ Subject matter lives in **CapableMind-AI**, instruments in **dotfiles**, and nothing in CapableMind points back.