From 62b92bd425eb10fbd8d722a2a432563ec5daaa69 Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Sun, 2 Aug 2026 11:55:15 +0200 Subject: [PATCH] [FIX] Land the skill-harvest FIX lane and apply its first batch (REVIEWED-85) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit REVIEWED-85 was placed by the steward at 10:41 today; the wake flagged at 10:44 that /wrap-up SKILL.md was still untouched since 2026-07-07. Landing it. Precondition discharged first. The ruling states its own verification limit: the jurist could not read the skill files, so the /wrap-up §1.6 and /wake-up §2.a quotes underpinning Part III's "contradicts itself" claim were affirmed on timeline evidence rather than checked. Required before landing was mechanical containment-with-positive-control verification of exactly those quotes. Run: 7/7 contained verbatim against the live skills, 5/5 controls absent, instrument verified. §1.6 now carries the two-clause disjunctive test (the executor's own narrower single-clause alternative declined at the gate as less safe), the hard floor with its catch-all sharpened per Q4 and tied to the measured failure rather than left as open judgment, and all three instruments as mandatory. The lane is provisional pending the steward-jurist check-in. The §Important-constraints line still stated the blanket rule the ruling narrowed. Left alone it would have been a second live version of a governance rule inside the file that forbids exactly that. Reconciled, with a note saying why. First batch applied -- the four class-(i) proposals the steward raised 2026-07-29 and which REVIEWED-85 itself dispositions as batch 1, so their classification was ruled rather than self-assessed: a `## What held` ledger section (the ledger could previously only record debits), a `prevention` KG predicate capturing transfer between failure classes, one wake line surfacing it, and the retirement of the standing question's self-report framing in favour of the checkable form -- the last on the grounds contamination-problem.md gives, that direct self-report is the most contaminated form of inquiry. The FIX-lane index is created and carries all four. It records explicitly what is NOT in it: the §1.6 edit itself, which changed what the executor may do without asking and was therefore PROPOSAL by its own test. A lane cannot authorize its own construction. Register rows 174-177 marked applied. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc --- .../pending88-quotes-containment.json | 22 ++++++++++++ claude/memory/skill-harvest-fix-lane-index.md | 34 ++++++++++++++++++ claude/memory/skill-harvest-register.md | 8 ++--- claude/skills/symmetria/SKILL.md | 2 ++ claude/skills/wake-up/SKILL.md | 3 ++ claude/skills/wrap-up/SKILL.md | 36 +++++++++++++++++-- 6 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 claude/governance/pending88-quotes-containment.json create mode 100644 claude/memory/skill-harvest-fix-lane-index.md diff --git a/claude/governance/pending88-quotes-containment.json b/claude/governance/pending88-quotes-containment.json new file mode 100644 index 0000000..e3425c4 --- /dev/null +++ b/claude/governance/pending88-quotes-containment.json @@ -0,0 +1,22 @@ +{ + "sources": { + "wrap": "/Users/davidglidden/.claude/skills/wrap-up/SKILL.md", + "wake": "/Users/davidglidden/.claude/skills/wake-up/SKILL.md" + }, + "claims": [ + ["wrap", "This is **event-based, not change-count**"], + ["wrap", "apply at wrap like a tracker"], + ["wrap", "is surfaced for steward review, not auto-applied"], + ["wrap", "the same FIX-vs-PROPOSAL split, one level up"], + ["wrap", "Surface each as a proposal in §8 — never create, patch, or retire a skill autonomously at wrap."], + ["wrap", "The steward converts proposal to action; only then is a skill changed"], + ["wake", "Read `skill-harvest-register.md` directly — the canonical surface for open skill proposals (wrap §1.6 appends there); surface any awaiting steward authorization"] + ], + "controls": [ + ["wrap", "never create, patch, or retire a skill autonomously at wake"], + ["wrap", "apply at wrap like a ledger"], + ["wrap", "the same HARDENING-vs-PROPOSAL split, one level up"], + ["wake", "surface any awaiting jurist authorization"], + ["wake", "the canonical surface for closed skill proposals"] + ] +} diff --git a/claude/memory/skill-harvest-fix-lane-index.md b/claude/memory/skill-harvest-fix-lane-index.md new file mode 100644 index 0000000..d520d88 --- /dev/null +++ b/claude/memory/skill-harvest-fix-lane-index.md @@ -0,0 +1,34 @@ +# Skill-harvest FIX-lane index + +**Append-only.** One line per skill change applied under the `/wrap-up` §1.6 FIX lane. This +is the record the steward–jurist check-in reads; a FIX applied without a line here is a +governance failure, not a shortcut. + +**Authority:** PENDING-88 → jurist design gate PASSED with conditions → REVIEWED-85 +(steward-placed 2026-08-02). The lane is **PROVISIONAL** until that check-in — after the +first batch or one month, whichever comes first. + +**A change belongs in the lane only if** it clears the two-clause test (*does this change +what the executor may do without asking, or what a governed artifact asserts?* — either +clause yes → PROPOSAL) **and** the hard floor. When in doubt, propose. + +| # | Skill | What changed | Date | Batch | +|---|---|---|---|---| +| 1 | `symmetria` §4 (ledger template) | Added a standing `## What held` section — instruments that fired prospectively, lessons that transferred to a failure class they were not built for. Entry format: *banked-lesson → what it caught → what it would have cost*. Without it the ledger can only record debits; six hand-added `## Progress` headings were the practice compensating for the schema gap. | 2026-08-02 | 1 | +| 2 | `/wrap-up` §5 (KG append) | Added a `prevention` predicate — `{subject: , predicate: "prevention", object: }`. Distinct from `drift-pattern-good-direction`: that records a good move, this records **transfer**, which the schema could not previously capture. | 2026-08-02 | 1 | +| 3 | `/wake-up` §2.b.2 | Surface one `prevention` alongside the drift-patterns, one line each way. The wake previously grepped only `drift-pattern`, so every session opened by re-reading what went wrong and never what compounded. | 2026-08-02 | 1 | +| 4 | `/wrap-up` §1 (literal question) | Retired the self-report framing of the standing question. `contamination-problem.md` names direct self-report the most contaminated form of inquiry; the guidance now prefers the checkable form the same evidence answers — *does a lesson banked from one failure prevent a different failure later?* | 2026-08-02 | 1 | + +## Batch 1 — classification note + +All four were raised by the steward on 2026-07-29 and dispositioned as the first FIX-lane +batch by REVIEWED-85 itself, so their classification was ruled rather than self-assessed. +Each is class (i) — a change to what a skill **records**, not to what it **permits or +requires**. None touches an authorization boundary, gate criteria, Constraint 1, or the +escalate list. None removes, defers, or narrows the visibility of an open item; #3 and the +`prevention` predicate *widen* what reaches the steward. + +**Not in this index, deliberately:** the §1.6 edit that created the lane. That change altered +what the executor may do without asking, so it was `[PROPOSAL]` by its own test — filed as +PENDING-88, design-gated by the jurist, authorized by the steward as REVIEWED-85. A lane +cannot authorize its own construction. diff --git a/claude/memory/skill-harvest-register.md b/claude/memory/skill-harvest-register.md index ee0fd8a..c68bba3 100644 --- a/claude/memory/skill-harvest-register.md +++ b/claude/memory/skill-harvest-register.md @@ -214,10 +214,10 @@ The single place proposed skills live so they don't evaporate between sessions. | 171 | ``/jurist-package`` | patch | Formatting convention: ratified text = `>` blockquote; PROPOSED text = fenced block, never a blo | 2026-07-29, found incidentally by | PROPOSED | New proposals (2026-07-29 wrap — awaiting st | | 172 | ``/wake-up` §3 (Next move)` | patch | Before executing an inherited resumption point, grep the substrate for whether its premise is al | 2026-07-29 | PROPOSED | New proposals (2026-07-29 wrap — awaiting st | | 173 | `Target` | Kind | Proposal | Earned by | PROPOSED? | New proposals (2026-07-29, steward-raised — | -| 174 | ``symmetria` §4 (ledger template)` | patch | Add a standing `## What held` section — instruments that fired *prospectively*, lessons that tra | 2026-07-29, steward-raised; corrob | PROPOSED | New proposals (2026-07-29, steward-raised — | -| 175 | ``/wrap-up` §5 (KG append)` | patch | Add a `prevention` predicate — `{subject: , predicate: "prevention", object: , predicate: "prevention", object: + + **b.3. Depth on the thread — grep, don't query.** When the session files don't carry enough, grep the memory dir + the CapableMind thinking docs + the Obsidian vault directly for the thread's keywords. The files are authoritative; there is no catalogue in front of them. *(The typography palace — a separate MemPalace instance queried via CLI for ARC type work — is KEPT, unaffected by the wind-down; reach for it only when the thread is ARC typography.)* diff --git a/claude/skills/wrap-up/SKILL.md b/claude/skills/wrap-up/SKILL.md index 0319273..1856fa7 100644 --- a/claude/skills/wrap-up/SKILL.md +++ b/claude/skills/wrap-up/SKILL.md @@ -51,6 +51,8 @@ Review the conversation and produce a structured session record. The structure m - **Other open horizons, ranked.** What's load-bearing? What's deferred-with-reason? What's parked-without-deadline? - **The pause statement** — explicit acknowledgment: *"I am about to be away from this. I don't know what will have changed when I return. Here is what I want to find still pulling."* Names the gap as a phenomenon, not a hole. - **A literal question for next-Claude** — not a task; a *question*. The thing the next session should hold open until it's resolved or honestly recognized as unanswerable. Captures the unborn part of the work. + - **Prefer the checkable form over the self-report form.** A question the next session answers by *introspecting on itself* is the most contaminated form of inquiry available — `contamination-problem.md` §Why This Matters names direct self-report exactly that. Where the same evidence would answer a checkable question, ask that one instead. *Not* "is there any instrument I built before being burned?" (self-report, unfalsifiable from inside) but **"does a lesson banked from one failure prevent a *different* failure later?"** — which the record answers, and which the new `prevention` predicate (§5) now captures. + ### 1.5. Merge the Symmetria ledger if present @@ -77,7 +79,33 @@ Drawing on the session and the merged ledger (1.5), ask: The yardstick is the steward's own: *did the steward have to re-explain something a skill could have carried next time?* If yes, that is a harvest candidate. -**Surface each as a proposal in §8 — never create, patch, or retire a skill autonomously at wrap.** The steward converts proposal to action; only then is a skill changed, and the changed skill carries a one-line provenance note in its source (e.g. ``) so the chain of improvements stays legible. +**Default: surface each as a proposal in §8.** The steward converts proposal to action; only then is a skill changed, and the changed skill carries a one-line provenance note in its source (e.g. ``) so the chain of improvements stays legible. + +**The FIX lane — the one narrow exception.** Ask the classification test: + +> **Does this change what the executor may do without asking, or what a governed artifact asserts?** + +**Either clause yes → `[PROPOSAL]`.** Both no → `[FIX]`: apply it at wrap, and discharge all three instruments below. The test is deliberately two-clause; the narrower assertion-only form was declined at the design gate as *less* safe, because a change that expands executor latitude without asserting anything would pass it. + +The cut is between changes to what a skill **records** — a ledger section, an output field, a wake line — and changes to what a skill **permits or requires**. The first cannot alter any assertion or latitude; the second always can. + +**The hard floor — stays `[PROPOSAL]`/`[ESCALATE]` regardless of the test's outcome:** + +- Anything under Constitutional Constraint 1 — `~/CLAUDE.md`, `~/REVIEWED.md`, L2 constitutional documents. +- Any change to an authorization boundary or to gate criteria. +- Anything on the escalate-unconditionally list. +- **Any change that removes, defers, or narrows the visibility of an open item, or that could cause a future item to land somewhere the steward's surfacing tools don't read.** This clause is bound to the measured failure that produced the lane, not left as an open judgment call: the blanket rule routed every proposal into one file, the file outgrew the read cap, and the `/wake-up` step whose purpose was to surface them stopped completing. Awareness failed mechanically. A FIX must never do that again by any route. + +**Three instruments, all mandatory for every FIX-lane change** (a wrap report alone is insufficient): + +1. **Report it in the §8 wrap output** — what changed, and why it classified as FIX. +2. **A provenance comment in the skill's own source**, same convention as any other change. +3. **A line in the append-only FIX-lane index** — `~/.claude/projects/-Users-davidglidden/memory/skill-harvest-fix-lane-index.md`. One line per applied change: skill · what changed · date. Append-only; it is the record the check-in reads. + +**The lane is PROVISIONAL.** After the first FIX-lane batch or one month — whichever comes first — steward and jurist review the index together before the lane is treated as settled. Until that review, treat a borderline call as `[PROPOSAL]`. + + + **Append each surfaced proposal to the skill-harvest register** (`~/.claude/projects/-Users-davidglidden/memory/skill-harvest-register.md`) — the canonical surface — not only to §8's transient output. The register is what `/wake-up` reads; a proposal that lives only in a wrap summary evaporates. @@ -125,6 +153,8 @@ palace-memory MemPalace was wound down 2026-07-07 (its search + KG were confirma The file-native KG (`~/.claude/projects/-Users-davidglidden/memory/knowledge-graph.jsonl`) is what wake §b.2 greps for drift-patterns and what carries structured facts across sessions. Keep it current by **appending** one JSON object per line — schema `{"subject","predicate","object","valid_from","valid_to","confidence","source_file","extracted_at"}`: - **Drift patterns from Symmetria returns.** If today's ledger has a return that repeats a pattern from a previous ledger, append `{"subject":"claude-code","predicate":"drift-pattern","object":"", …}`. Wake §b.2 greps these. +- **Preventions — the transfer signal.** When a lesson banked from one failure stops a *different* failure, append `{"subject":"","predicate":"prevention","object":"", …}`. Distinct from `drift-pattern-good-direction`, which records a good move; this records **transfer**, which is the actual signature of learning and was previously uncapturable by the schema. Wake §b.2 surfaces one. + - **A fact that changed.** Append the new triple; to retire a superseded fact, append a matching triple with `valid_to` set to today (a soft-invalidate — the JSONL is append-only, like the logchain, so history stays legible rather than mutated in place). - **A new recurring entity** (person, project, thread) worth a foothold — append the relationship. @@ -212,4 +242,6 @@ The pulling thread + question are first because they are what *waking* needs to - **The literal question for next-Claude is required.** Even if it's small. *"Did Seb push anything overnight?"* counts. The discipline of leaving a question (not just a task) is what makes the wake feel like resumption rather than briefing. - **Don't skip Thistleweld observations** if the companion was active. These have caught real bugs (allSettled swallowing, Levenshtein NONE, resource monitor feedback loop). - **Don't skip the Symmetria ledger merge** if active. The returns and recalibrations are the practice's actual evidence; losing them defeats the practice. -- **Skill harvest is propose-only.** Never create, patch, or retire a skill autonomously at wrap (§1.6) — surface it for steward authorization; the loop is load-bearing here too. "Nothing to harvest" is a valid outcome; do not manufacture changes to satisfy the step. +- **Skill harvest is propose-by-default, with one narrow FIX lane (§1.6).** Surface it for steward authorization unless it clears the classification test *and* the hard floor — in which case apply it and discharge all three instruments. When in doubt, propose: the lane is provisional until the steward–jurist check-in, and the loop is load-bearing here too. "Nothing to harvest" is a valid outcome; do not manufacture changes to satisfy the step. + +- **The FIX lane is not a licence to skip the report.** A change applied without its index line is worse than the same change proposed, because it leaves no record for the check-in to read. If you cannot discharge all three instruments, it is a `[PROPOSAL]`.