Skip to content

review(pr-1253-postmerge): expand-from-closure.ts as proposed + table-cell pipe escape fix#1255

Merged
AceHack merged 6 commits intomainfrom
free-memory/skill-design-memo-postmerge-fixes-aaron-2026-05-03
May 3, 2026
Merged

review(pr-1253-postmerge): expand-from-closure.ts as proposed + table-cell pipe escape fix#1255
AceHack merged 6 commits intomainfrom
free-memory/skill-design-memo-postmerge-fixes-aaron-2026-05-03

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 3, 2026

Summary

Two pieces (composed by tick context):

1. Post-merge fixes for #1253 (skill-design memo)

2 Copilot post-merge findings on PR #1253 (already merged):

  • P1 tools/backlog/expand-from-closure.ts referenced as "the mechanizing tool" without marking proposed/not-yet-built — fixed
  • P1 \| escape in markdown-table cell shell example — rewrote with find to avoid pipe-in-cell entirely

2. Self-grading memo — verify-then-claim discipline as dominant failure-mode corrective

After 9 distinct claim-vs-reality drift instances caught across 7 PRs in this session (#1245 #1247 #1248 #1250 #1252 #1253 #1254), the pattern is consistent enough to warrant a named discipline.

CARVED RULE — Before stating any fact in substrate (file exists, command returns X, row count is N, tool shipped, ADR matches, persona dir present), run the actual ls / grep / count / find command FIRST, then commit the claim.

Generalizes existing rules: Otto-247 (version-currency) + Otto-364 (search-first authority) + verify-before-deferring + Otto-363 (substrate-or-it-didn't-happen) + assumed-state-vs-actual-state — at the broader any-substrate-claim layer.

Scope:

  • IN: fact-claims about current repo state, command output, file existence, count totals, tool shipped/proposed
  • OUT: verbatim quotes (preserve typos), hedged speculation, future predictions, normative recommendations

Mechanization path: tools/substrate-claim-checker/ TS tool (proposed, not yet built). Discipline is manual until tool ships.

Composes with the bugs-per-PR-as-immune-system-health metric: this discipline would move bugs-per-PR closer to single-digit productive zone (currently caught post-merge; should be caught pre-publish).

Why two pieces in one PR

Both relate to substrate-quality discipline at different scopes:

  • The post-merge fixes ARE worked examples of the verify-then-claim failure mode
  • The memo names the pattern systematically

Splitting them would lose the composition narrative.

MEMORY.md pairing

Newest-first index entry landed for the verify-then-claim memo.

Test plan

  • expand-from-closure.ts marked proposed
  • Table-cell pipe rewritten with find
  • Verify-then-claim memo captures 9 drift instances + carved rule + scope + mechanization path
  • MEMORY.md pairing landed
  • CI green

🤖 Generated with Claude Code

…fix table-cell pipe escape

2 Copilot post-merge findings on PR #1253 (already merged):

1. **P1 expand-from-closure.ts doesn't exist** — referenced as
   "the mechanizing tool" without marking proposed/not-yet-built.
   Same class as the courier-ferry-protocol issue caught earlier.
   Fixed: added "(proposed, not yet built; named in feedback_
   skill_flywheel_* as Phase-1b candidate)" qualifier and shifted
   tense to subjunctive ("would stay stable once shipped").

2. **P1 table-cell pipe escape** — `ls docs/DECISIONS/ \| grep
   <pattern>` inside a markdown table cell used `\|` which
   doesn't copy-paste correctly even though it satisfied table-
   parser concerns. Rewrote to `find docs/DECISIONS/ -iname
   "*<pattern>*"` — single-command alternative that avoids the
   pipe-in-table-cell awkwardness entirely.

The pattern this teaches: when a markdown table cell needs to
show a pipe-using shell command, use a single-command
alternative (find instead of ls|grep) rather than escaping.
Escaping satisfies the parser but breaks copy-paste.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates a memory entry that documents the repository’s skill-design rules, mainly to clarify that one referenced tool is still only proposed and to rework a markdown-table shell example. It fits into the codebase as maintenance of the shared memory/ corpus that agents rely on for current project conventions.

Changes:

  • Marks tools/backlog/expand-from-closure.ts as proposed/not yet built instead of implying it already exists.
  • Replaces a markdown-table example that used a piped shell command with a find-based single-command variant.
  • Leaves the rest of the skill-design memory intact while tightening wording around repository state.

AceHack and others added 2 commits May 2, 2026 20:30
…ailure-mode corrective (Otto 2026-05-03)

After 9 distinct claim-vs-reality drift instances caught
across 7 PRs in this session (#1245 #1247 #1248 #1250 #1252
#1253 #1254), the pattern is consistent enough to warrant a
named discipline.

CARVED RULE — Before stating any fact in substrate (memo /
doc / commit message / PR description / shard), verify it
empirically. Specifically: before writing "<file> exists" /
"<command> returns <X>" / "<table> has <N> rows" / "<tool>
ships" / "<ADR> exists" / "<dir> is present" — run the
actual ls / grep / count / find command FIRST, then commit
the claim.

Generalizes existing rules at the broader any-substrate-claim
layer: Otto-247 (version-currency) + Otto-364 (search-first
authority) + verify-before-deferring + Otto-363 (substrate-
or-it-didn't-happen) + assumed-state-vs-actual-state.

Scope:
- IN: fact-claims about current repo state, command output,
  file existence, count totals, tool shipped/proposed
- OUT: verbatim quotes (preserve typos), hedged speculation,
  future predictions, normative recommendations

Mechanization path: tools/substrate-claim-checker/ TS tool
(proposed, not yet built; per Aaron 2026-05-03 no-dynamic-
commands rule + Phase-1b backlog candidate). Discipline is
manual until tool ships.

Worked example: PR #1250 Layer-7 ADR claim ("ls docs/DECISIONS/
| grep returns nothing") — verify-then-claim would have caught
this pre-commit by running the command, observing the actual
ADR match, and correcting the claim before publishing.

Composes with the bugs-per-PR-as-immune-system-health metric:
this discipline moves bugs-per-PR closer to single-digit
productive zone (currently caught post-merge; should be
caught pre-publish).

Aarav's B-0169 review predicted this pattern with the worked-
examples-need-empirical-grounding framing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ding memo + #1252/#1253 merged

Self-grading from 9 drift instances across 7 PRs in session:
the verify-then-claim discipline captures the dominant
failure mode for substrate authoring. Mechanization path
identified (tools/substrate-claim-checker/ TS tool).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 3, 2026 00:31
…ation semantics

Copilot caught: `find docs/DECISIONS/ -iname "*<pattern>*"` is
not equivalent to `ls | grep -iE "<pattern>"` because find's
-iname only does shell glob, not regex alternation. The
worked-example elsewhere uses regex alternation
(double.hop|acehack|mirror) which would silently fail under
find -iname.

Correct fix: use `grep -ilrE "<pattern>" docs/DECISIONS/`
which is single-command (no pipe; avoids markdown-table
escape awkwardness) AND regex-capable (preserves alternation
semantics).

Worked example of the verify-then-claim discipline I just
landed: I should have run BOTH commands and compared outputs
on a sample input before substituting them. The previous fix
(replacing pipe with find) substituted syntactic
form-equivalence for semantic-equivalence — exactly the
class of drift the discipline guards against.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack
Copy link
Copy Markdown
Member Author

AceHack commented May 3, 2026

Both #1255 threads addressed:

  • MEMORY.md pairing finding is a false positive — the pairing IS satisfied (verify-then-claim memo entry added at MEMORY.md line 7; visible in git diff main --stat). Copilot may be flagging the modification to feedback_skills_as_carved_sentences_* without seeing that THAT memo's pairing already lives at MEMORY.md line 8 from PR free-memory: skill design — hub-satellite + no dynamic commands + plugin/hook packaging + OpenSpec catch-up (Aaron 2026-05-03) #1253; the new memo's pairing is at line 7.
  • find→grep equivalence finding is real; pushed fix (commit 862d190): replaced find -iname (shell glob only) with grep -ilrE (regex alternation, single-command, no pipe). This is itself a worked example of the verify-then-claim discipline I just landed — the previous fix substituted syntactic form-equivalence for semantic-equivalence, exactly the class of drift the discipline guards against.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

AceHack added a commit that referenced this pull request May 3, 2026
…m application caught my own drift on #1255 + #1256 opened for #1254 follow-up

Even ONE PR after naming the verify-then-claim discipline,
drift-from-canonical-convention happened (find vs grep
semantic-equivalence; ADR convention drift). Recursive
application is the strongest evidence the discipline needs
mechanization (TS tool) not just naming.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack and others added 2 commits May 2, 2026 20:36
…s + correct hook semantics

Two real Copilot findings on PR #1255:

1. **`\|` in drift catalogue table** — the very memo cataloguing
   drift contained its own escape-vs-copy-paste drift. Rewrote
   rows 5 and 7 to describe the search prose-style rather than
   showing the literal pipe inside markdown table cells.

2. **Pre-commit hook can't validate commit-message claims** —
   git pre-commit hooks fire BEFORE commit-message exists; they
   can only check files staged for commit. Updated mechanization
   path: split into `pre-commit` hook (validates staged-file
   content), `commit-msg` hook (validates the commit message
   itself, fires AFTER it's written), and CI check (validates
   PR descriptions which are authored on the host, not pre-commit).

The third Copilot finding (find→grep equivalence on
feedback_skills_as_carved_sentences_*) is stale — already fixed
in commit 862d190 which is on this branch. Will resolve as
"already addressed" when commenting.

Both fixes are themselves recursive applications of verify-then-
claim: rewriting the drift catalogue uncovers the catalogue's
own drift; clarifying hook semantics required actually verifying
git's hook ordering (pre-commit fires before commit-msg).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rift catalogue contained its own drift

Catalogue-substrate-drift caught: the memo cataloguing 9 drift
instances had its own `\|` table-cell escape drift in 2 catalogue
rows + a pre-commit-vs-commit-msg hook semantic error. Recursive
failure on the very memo naming the failure mode is the strongest
empirical urgency for mechanization (tools/substrate-claim-checker/
TS tool). Manual discipline insufficient.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 3, 2026 00:37
@AceHack AceHack merged commit 67950a6 into main May 3, 2026
26 checks passed
@AceHack AceHack deleted the free-memory/skill-design-memo-postmerge-fixes-aaron-2026-05-03 branch May 3, 2026 00:39
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 70cbf91fab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.

@@ -0,0 +1,105 @@
---
name: Verify-then-claim discipline — verify every substrate claim empirically BEFORE publishing (Otto 2026-05-03 self-grading; dominant failure mode caught across 7+ PRs this session)
description: 2026-05-03; Otto self-grading after Copilot caught 9 distinct claim-vs-reality drift instances across 7 PRs (#1245 #1247 #1248 #1250 #1252 #1253 #1254). The dominant failure mode for substrate authoring this session is claim-vs-reality drift — Otto wrote "X exists" / "command returns Y" / "table has N rows" without verifying empirically. The corrective is the verify-then-claim discipline: before stating ANY fact in substrate (file exists, command returns X, row count is N, tool ships, ADR matches, persona dir present), verify by running the actual command / `ls` / `grep` BEFORE writing the claim. Same class as Otto-247 version-currency-always-search-first + Otto-363 substrate-or-it-didn't-happen + verify-before-deferring — but at the more general layer of any-substrate-claim. Mechanization: `tools/substrate-claim-checker/` (proposed, not yet built) that reads a memo / doc / commit message and runs the cited commands to verify; pre-commit hook integration is a future Phase. Until that ships: discipline is manual but the pattern is now named.
Comment thread memory/MEMORY.md
<!-- paired-edit log (NOT the single-slot latest-marker — that lives on line 3 above): PR #986 lands carved-sentence fixed-point stability + Zeta soul-file executor architecture (Infer.NET-style Bayesian inference, NOT LLMs) + carved sentences ≈ formal specs provable in DST + Deepseek CSAP review absorption (Aaron 2026-04-30 → 2026-05-01, eight-message chain across two autonomous-loop ticks per the file body's section header). Architectural disclosure: substrate IS the priors; alignment IS substrate. The single-slot latest-marker on line 3 (forever-home Aaron 2026-05-01) takes precedence as the chronologically-latest paired edit; this PR's work is earlier. -->
**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- paired-edit: PR #690 scheduled-workflow-null-result-hygiene-scan tier-1 promotion 2026-04-28 --> These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-30 — speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler + TypeScript/Bun-default discipline.)

- [**Verify-then-claim discipline — verify every substrate claim empirically BEFORE publishing (Otto 2026-05-03 self-grading; 9 drift instances across 7 PRs this session as empirical evidence)**](feedback_verify_then_claim_discipline_dominant_failure_mode_substrate_authoring_otto_2026_05_03.md) — The dominant failure mode for substrate authoring this session: Otto wrote "X exists" / "command returns Y" / "table has N rows" without verifying. Carved rule: before stating ANY fact in substrate (file exists, command returns X, row count is N, tool shipped, ADR matches, persona dir present), run the actual command first. Generalizes Otto-247 + Otto-364 + verify-before-deferring at the broader any-substrate-claim layer. Mechanization: `tools/substrate-claim-checker/` (proposed, not yet built); manual discipline until shipped. Composes with bugs-per-PR-as-immune-system-health metric.
@@ -0,0 +1 @@
| 2026-05-03T00:31:00Z | opus-4-7 / autonomous-loop continuation | a2e2cc3a | **#1252 + #1253 merged on main; PR #1255 expanded with verify-then-claim self-grading memo capturing the dominant failure mode of this 2-day session.** Cycle worked: (1) Copilot's 2 post-merge findings on #1253 (expand-from-closure.ts referenced without "proposed" marker; `\|` table-cell escape) addressed in #1255; (2) self-grading memo captures 9 distinct claim-vs-reality drift instances across 7 PRs in this session as empirical evidence for naming the verify-then-claim discipline; (3) carved rule lands at the more-general layer than Otto-247 (version-currency) + Otto-364 (search-first authority) + verify-before-deferring + Otto-363 (substrate-or-it-didn't-happen) — applies to ANY fact-claim about current repo state. Mechanization path identified: `tools/substrate-claim-checker/` TS tool (proposed, not yet built). Manual discipline until tool ships. Composes with bugs-per-PR-as-immune-system-health metric — would move bugs closer to single-digit productive zone by catching drift pre-publish rather than post-merge. The 9-drift evidence catalogue (per-PR, per-instance, with wrong-claim + actual-reality columns) is preserved in the memo body for future skill-creator authoring. Aarav's B-0169 review predicted this pattern with worked-examples-need-empirical-grounding framing. Cron a2e2cc3a still armed. | #1252 (multi-harness future-skill-domain memo) merged b5baf4b5; #1253 (three skill-design rules) merged 6627ff39; #1254 (Layer-7 ADR follow-up) wait-ci, auto-merge armed; #1255 (#1253 post-merge fixes + verify-then-claim self-grading memo) auto-merge armed | This tick teaches the operational pattern of self-grading from accumulated empirical evidence: the 9 drift instances across the session weren't all the same shape but shared one root cause (publishing fact-claims without empirical verification); naming the pattern + cataloguing instances IS the substrate that future-Otto can use to prevent the same drift. The memo body's 9-row table is the dry-run-eval-set for the eventual `tools/substrate-claim-checker/` TS tool: each row is a test case where the tool should fire. |
@@ -0,0 +1 @@
| 2026-05-03T00:37:00Z | opus-4-7 / autonomous-loop continuation | a2e2cc3a | **#1255 BLOCKED-with-green-CI investigation: 3 threads triaged + fixed (drift-catalogue's own `\|` table-cell drift + pre-commit-vs-commit-msg hook semantics + already-fixed-stale-thread).** Cycle worked the BLOCKED-with-green-CI investigate-threads-first discipline + the recursive verify-then-claim discipline applied to itself: (1) the verify-then-claim memo's drift CATALOGUE TABLE contained its own `\|` table-cell escape drift in rows 5 and 7 — exactly the class of drift the catalogue documents; rewrote rows to describe the search prose-style rather than showing literal pipes; (2) the mechanization-path section claimed pre-commit hook would validate commit-message claims, which is empirically wrong per git hook ordering — pre-commit fires BEFORE commit-msg exists; corrected to two-hook architecture (pre-commit for staged-files; commit-msg for the message itself; CI for PR descriptions); (3) third finding (find→grep equivalence) was stale — already fixed in commit 862d190 on this branch. The recursive application IS the worked example: even when documenting drift, the documenting substrate itself drifts. Manual discipline insufficient against trained-prior pull. tools/substrate-claim-checker/ TS tool ships before this cycle stops repeating. Cron a2e2cc3a still armed. | #1255 — 3 threads triaged + fixed (catalogue rewrite + hook semantics correction); auto-merge armed; CI pending; #1256 (#1254 follow-up) wait-ci, auto-merge armed | This tick teaches the operational pattern of catalogue-substrate-drift: when documenting failure modes, the documentation itself can fall into the documented mode. The strongest evidence yet that mechanization (TS tool) is required, not just naming. Composes with verify-then-claim memo (which now records this recursive-failure as part of its own evidence) + the bugs-per-PR-as-immune-system-health metric (recursive failure on the very memo that names the failure mode is the strongest possible signal the metric is detecting real cost). The substrate-claim-checker proposal in the memo's mechanization path now has empirical urgency — manual discipline ALREADY hit its wall. |
| 5 | `git log -L :func:file` | `bun tools/decision-archaeology/function-archaeology.ts <func> <file>` |
| 6 | `grep -rlnE "<pattern>" docs/hygiene-history/ticks/` | `bun tools/decision-archaeology/shard-search.ts <pattern>` |
| 7 | `ls docs/DECISIONS/ \| grep <pattern>` | `bun tools/decision-archaeology/adr-search.ts <pattern>` |
| 7 | `grep -ilrE "<pattern>" docs/DECISIONS/` (single-command, regex-capable equivalent of `ls .. | grep -iE`; preserves alternation semantics; avoids markdown-table pipe-escape awkwardness) | `bun tools/decision-archaeology/adr-search.ts <pattern>` |
AceHack added a commit that referenced this pull request May 3, 2026
…onsistency (#1256)

* review(pr-1254-postmerge): align ADR supersession convention + path consistency

3 Copilot post-merge findings on PR #1254 (already merged):

1. **P1 ADR supersession convention drift** — recommended
   `superseded:` / `current_status:` frontmatter marker for the
   2026-04-26 sync-drain-plan ADR, but the canonical ADR
   convention is `> **Superseded by** [link]` blockquote at top
   (verified in docs/DECISIONS/2026-04-21-router-coherence-
   claims-vs-complexity.md line 3 + 2026-04-21-router-coherence-
   v2.md lines 4 + 142). Updated worked example's two instances
   to recommend the canonical convention.

2. **P1 markdown nested-list trap** — line wrapping with `+ `
   at start of continuation line was interpreted as nested
   unordered list. Reworded the synthesized-answer item #4 to
   replace the `+ 2026-05-02 abandonment` continuation with
   "plus the 2026-05-02 abandonment" (no leading `+`).

3. **P2 path inconsistency** — line 178 referenced the memo
   without `memory/` prefix where line 197 + 372 use the full
   path. Made consistent.

Worked example of the verify-then-claim discipline:
substrate authoring should grep canonical conventions in the
target directory before recommending alternatives. The ADR
convention in docs/DECISIONS/ was empirically verifiable
pre-write; I made up an alternative without checking.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T00:34Z — recursive verify-then-claim application caught my own drift on #1255 + #1256 opened for #1254 follow-up

Even ONE PR after naming the verify-then-claim discipline,
drift-from-canonical-convention happened (find vs grep
semantic-equivalence; ADR convention drift). Recursive
application is the strongest evidence the discipline needs
mechanization (TS tool) not just naming.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review(pr-1256): path consistency for ADR refs + MD038 lint fix

3 fixes:

1. **P1 ADR citation path consistency** — line 187 mixed
   fully-qualified `docs/DECISIONS/...router-coherence-claims-vs-complexity.md`
   with bare `2026-04-21-router-coherence-v2.md` in the same
   sentence. Standardized to fully-qualified path on both.

2. **P1 ADR citation prefix** — line 320 cited
   `2026-04-21-router-coherence-claims-vs-complexity.md` without
   `docs/DECISIONS/` prefix while nearby citations use full path.
   Added prefix.

3. **MD038 lint fix** — tick shard 0034Z had `\`+ \`` (backticks
   surrounding plus-then-space), which markdownlint flags as
   "spaces inside code span elements." Reworded to
   `leading-\`+\`-then-space continuation-line trap` — preserves
   the substantive claim (the `+` character at start of line is
   interpreted as nested unordered list) without trailing space
   inside the code span.

The tick-shard edit is a hygiene fix, not a content revision —
the substantive claim is unchanged; only the trailing space
inside backticks is removed. Within the append-only-history
discipline this is acceptable per the same precedent as
typo-fixes on shards.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T00:39Z — #1256 path-consistency + MD038 lint fix; drift count ~14

Path-consistency drift identified as recurring sub-class within
claim-vs-reality drift: pick ONE path-form (fully-qualified or
bare) per document and apply uniformly. Adds another concrete
check to the future tools/substrate-claim-checker/ TS tool spec.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
@AceHack
Copy link
Copy Markdown
Member Author

AceHack commented May 3, 2026

Row-7 finding addressed in follow-up PR #1257:

  • Both my prior attempts at semantic-equivalence substitution were drift (find-iname is shell-glob only; grep -ilrE searches contents not filenames). Reverted to canonical ls | grep -iE form pulled out of table cell into fenced code block.
  • Drift catalogue extended 9 → 15+ instances. Added recurring-sub-classes section. 6 of 15 instances landed AFTER the verify-then-claim discipline was named — manual discipline insufficient against trained-prior pull. tools/substrate-claim-checker/ TS tool is the only path forward.

Resolving thread with cross-reference.

AceHack added a commit that referenced this pull request May 3, 2026
…ended to 15 instances (#1257)

* review(pr-1255-postmerge): row-7 prose-form fix + drift catalogue extended to 15 instances

P2 finding on PR #1255 (already merged): my "fix" of row 7 in
the skill-design memo (replacing `ls docs/DECISIONS/ | grep
-iE` with `grep -ilrE PATTERN docs/DECISIONS/`) was ALSO a
semantic-equivalence drift — `grep -r` searches file CONTENTS,
not filenames. The original ls|grep searches filenames.

Two recursive failures on the same substitution attempt:
- First: substituted ls|grep → find -iname (shell glob only)
- Second: substituted ls|grep → grep -ilrE (file-content search)

Both attempts failed because I claimed semantic-equivalence
without empirical verification. Exactly the failure mode the
verify-then-claim discipline names; happening on the very
memo defining the discipline.

Fixes:
- Row 7 of the skill-design memo's procedure-table now describes
  the search in prose ("ADR-filename search by regex pattern")
  with a NOTE warning against the wrong substitution (`grep
  -ilrE` searches contents not filenames)
- Canonical command pulled OUT of the table cell into a fenced
  code block below the table — preserves the working command
  without needing pipe-in-cell escapes

Verify-then-claim memo's drift catalogue extended:
- Was 9 instances; now 15+ (added #10-#15 covering all in-session
  drift caught after the memo was authored)
- New section: recurring sub-classes (existence-drift, count-drift,
  semantic-equivalence-drift, empirical-output-drift, convention-
  drift, path-form-drift, self-recursive-drift)
- Updated headline to reflect that 6 of 15 instances landed
  AFTER the discipline was named — strongest empirical urgency
  for mechanization

Manual discipline insufficient against trained-prior pull. The
substrate-claim-checker TS tool is the only path forward.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T00:43Z — double-recursive substitution drift caught; catalogue at 15+

Same substitution attempt (ls|grep → alternative single-command)
failed twice in succession. Drift catalogue extended with 7
recurring sub-classes. 6 of 15 instances landed AFTER the
verify-then-claim discipline was named — manual discipline
insufficient; mechanization required.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 3, 2026
…ist + tool-status across memo

4 substantive findings on PR #1259 (in-flight):

1. **Section heading drift** — "## Empirical evidence (this
   session, 9+ PRs, 15+ distinct drift instances)" still said
   "15+" while body table has 20 rows + summary says 20.
   Updated heading to "20 distinct drift instances".

2. **Carved sentence stale at "9"** — line 115 still said
   "9 instances caught across 7 PRs". Updated to "20 instances
   across 9+ PRs" + named that instances #10-#20 landed after
   discipline-naming + named v0-shipped status.

3. **PR list incorrect** — frontmatter listed `#1247` (not in
   table) and excluded `#1249, #1257, #1259` (which ARE in
   table). Corrected to `#1245, #1248/#1249, #1250, #1252,
   #1253, #1254, #1255, #1256, #1257, #1259`.

4. **"Until tool ships" + "v0 shipped" contradiction** —
   reorganized §96 to put tool-status FIRST ("v0 shipped covering
   count-drift; v1+ extends to remaining 6 sub-classes; until
   v1+ ships covering all 7, the discipline outside count-drift
   is still manual").

2 tick-shard findings (0049Z + 0058Z) NOT addressed — tick
shards are append-only history preserving agent-belief-at-time.
The shards accurately recorded my belief at write-time; the
underlying memo is the canonical truth and is fixed in this PR.
A note in the next tick shard acknowledges the over-claims.

Drift instances #21 + #22 + #23 + #24 (this PR's own findings)
are not yet catalogued in the table — they will land in the
next sync pass to avoid recursing forever in this PR.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 3, 2026
…tmatter + body + MEMORY.md (#1259)

* review(pr-1257-postmerge): update verify-then-claim count drift (9→18+) in frontmatter + body + MEMORY.md

Copilot post-merge findings on PR #1257 (already merged):
the body of verify-then-claim memo says "15+ drift instances"
but the FRONTMATTER description and MEMORY.md index entry
still say "9 drift instances" — count drift between body
and metadata.

This is itself drift instance #19 (count drift, sub-class
already catalogued). Fixed in three places:

1. **Frontmatter description** updated 9 → 18+, names the
   PRs covered (#1245-#1256 and counting), names the 7 sub-
   classes catalogued, sharpens the manual-insufficient
   framing to reflect post-naming drift.

2. **Body line 91** ("9 drift instances above" → "18+ drift
   instances above across 7 recurring sub-classes").

3. **MEMORY.md index entry** updated to reflect 18+ count + 7
   sub-classes + manual-insufficient framing + the
   instances-#10-#18-landed-AFTER-naming evidence.

The frontmatter ↔ body drift is itself a recurring sub-class
within count-drift: when body content updates but metadata
doesn't, the index summary lies. The substrate-claim-checker
TS tool spec gets another check: scan frontmatter description
+ MEMORY.md entry against body content for count consistency.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T00:49Z — frontmatter↔body↔MEMORY.md count drift caught (drift #19)

Body said 15+, frontmatter description + MEMORY.md said 9 —
count drift across surfaces. Each new tick produces new drift
instances even when the discipline cataloguing the drift was
authored last tick. Mechanization (substrate-claim-checker TS
tool) is the only path. Spec gets another concrete check:
cross-surface count consistency.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review(pr-1259): add table rows #16-#20 to match the "20" count claim

Copilot caught: frontmatter description + MEMORY.md said "18+
drift instances" but body table only had 15 rows — opposite-
direction count drift introduced by the very PR fixing the
prior count drift. **This is itself drift instance #20** —
self-recursive count drift; the count-fix introduces new
count drift in the opposite direction.

Fix: added 6 catalogue rows to the body table (#16-#20)
matching the claimed 20-instance count. Body now has 20 rows;
all three surfaces (frontmatter description + body table +
MEMORY.md index entry) consistent at 20.

The 6 new rows document drift instances #16-#20 — including
THIS PR's own drift as instance #20, demonstrating the
self-recursive sub-class explicitly.

Also updated:
- Sub-class section: self-recursive instances now [#10, #11, #19, #20]
- Body line 96: "20 drift instances above" + note that v0 of
  substrate-claim-checker shipped in PR #1260
- Frontmatter description: count → 20; instances range →
  #10-#20; v0 shipped reference
- MEMORY.md: count → 20; v0 shipped reference

This is the perfect worked example for the substrate-claim-
checker tool's value: the very count-drift-fix produced new
count drift, which the tool catches automatically. v0 (PR
#1260) would have caught this pre-publish.

Verified manually: `awk '/Drift instance/,/^$/'` + `grep -c
"^| [0-9]"` returns 20 rows; matches all 3 surfaces.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T00:58Z — count-fix introduced opposite-direction drift; body extended to 20 rows

Even authoring a PR to fix count drift produces opposite-direction
count drift. Drift instance #20 self-recursively documents this
PR's own drift. Substrate-claim-checker v0 (PR #1260) would have
caught it pre-publish — empirical evidence v0 was the right
architectural answer.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review(pr-1259): synchronize section heading + carved sentence + PR list + tool-status across memo

4 substantive findings on PR #1259 (in-flight):

1. **Section heading drift** — "## Empirical evidence (this
   session, 9+ PRs, 15+ distinct drift instances)" still said
   "15+" while body table has 20 rows + summary says 20.
   Updated heading to "20 distinct drift instances".

2. **Carved sentence stale at "9"** — line 115 still said
   "9 instances caught across 7 PRs". Updated to "20 instances
   across 9+ PRs" + named that instances #10-#20 landed after
   discipline-naming + named v0-shipped status.

3. **PR list incorrect** — frontmatter listed `#1247` (not in
   table) and excluded `#1249, #1257, #1259` (which ARE in
   table). Corrected to `#1245, #1248/#1249, #1250, #1252,
   #1253, #1254, #1255, #1256, #1257, #1259`.

4. **"Until tool ships" + "v0 shipped" contradiction** —
   reorganized §96 to put tool-status FIRST ("v0 shipped covering
   count-drift; v1+ extends to remaining 6 sub-classes; until
   v1+ ships covering all 7, the discipline outside count-drift
   is still manual").

2 tick-shard findings (0049Z + 0058Z) NOT addressed — tick
shards are append-only history preserving agent-belief-at-time.
The shards accurately recorded my belief at write-time; the
underlying memo is the canonical truth and is fixed in this PR.
A note in the next tick shard acknowledges the over-claims.

Drift instances #21 + #22 + #23 + #24 (this PR's own findings)
are not yet catalogued in the table — they will land in the
next sync pass to avoid recursing forever in this PR.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* hygiene(tick-history): 2026-05-03T01:06Z — 5-surface count-drift sub-pattern; prior shards over-claimed "all surfaces consistent"

Memos have 5 count-bearing surfaces (frontmatter + body table +
section heading + carved sentence + MEMORY.md), not just 3. Prior
shards (0049Z + 0058Z) claimed "all 3 surfaces consistent" when
the section heading + carved sentence still had stale counts.
Acknowledgment lands here in append-only history; substrate-claim-
checker v1+ spec gets enumeration of all count-bearing surfaces.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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