Skip to content

feat(B-0170): extend check-self-recursive.ts with existence topic (v0.9.1)#4681

Merged
AceHack merged 1 commit into
mainfrom
backlog/b-0170-self-recursive-existence-topic-2026-05-22
May 22, 2026
Merged

feat(B-0170): extend check-self-recursive.ts with existence topic (v0.9.1)#4681
AceHack merged 1 commit into
mainfrom
backlog/b-0170-self-recursive-existence-topic-2026-05-22

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 22, 2026

Summary

Smallest safe slice of B-0170: extend check-self-recursive.ts to dispatch a second topic (existence), cashing the README v0.9.0 promise that "Adding additional topics (existence, path-forms, cross-surface, convention) is a 1-line dispatch each". No new file, no architecture change.

Operative-authorization: aaron 2026-05-14: "- Devil-pole (edge-runner drive): keep pushing, discover, go hard, never-be-idle".

Changes

  • tools/substrate-claim-checker/check-self-recursive.ts
    • SelfCheckTopic = "count""count" | "existence"
    • SUPPORTED_TOPICS gains "existence"
    • Dispatch branch composes check-existence.ts
    • Only drift-severity findings surface from existence (gitignored-but-extant warning findings are a distinct sub-class concern, not self-recursive failure)
    • Bump v0.9.0 → v0.9.1
  • tools/substrate-claim-checker/check-self-recursive.test.ts — +3 tests:
    • parseDirective of bare existence
    • parseDirective of mixed [count, existence] preserves order
    • checkFile detects existence drift in self-check memo
    • checkFile clean existence case (no path claims)
    • checkFile mixed dispatch emits findings for both topics
  • tools/substrate-claim-checker/README.md — version bump, supported-topics list, severity-treatment doc
  • docs/backlog/P1/B-0170-...mdlast_updated: 2026-05-22; sub-class table row reflects count + existence shipped

Focused checks

Check Result
bun test tools/substrate-claim-checker/check-self-recursive.test.ts 23 pass / 0 fail (was 20; +3 new)
bun test tools/substrate-claim-checker/ 140 pass / 0 fail across 7 files; no regressions
End-to-end sanity: [count, existence] directive on memo with both drift shapes 2 findings (one per topic), exit 1
Commit canary: git ls-tree HEAD | wc -l vs parent 54 = 54 (no broken-commit corruption)

Bounded slice discipline

Stays well within "exactly one bounded step":

  • One new topic case + tests + doc-bump
  • No new file
  • No architecture change
  • Remaining v1 sub-classes (semantic-equivalence, empirical-output) and remaining self-recursive topics (path-forms, cross-surface, convention) stay deferred per the B-0170 done-criteria

Composes with

  • .claude/rules/skill-router-as-substrate-inventory.md — extend existing substrate before authoring new; the check-self-recursive.ts dispatch was the substrate to extend
  • .claude/rules/refresh-world-model-poll-pr-gate.md — Pure-git tier traversal during this session (GraphQL was 0/5000 at slice start; PR opened post-reset)
  • .claude/rules/zeta-expected-branch.mdZETA_EXPECTED_BRANCH set + git branch --show-current guard before commit
  • B-0170 done-criteria item deps: Bump FsUnit.xUnit from 7.1.0 to 7.1.1 #1: each sub-class has at least one check-type. Count + existence now both routed through the self-recursive dispatch, narrowing the v1+ deficit

Test plan

  • bun test tools/substrate-claim-checker/ clean (140/140)
  • End-to-end sanity reproduces both drift findings
  • Branch pushed; PR opened; auto-merge can be armed once CI is green

🤖 Generated with Claude Code

…opic (v0.9.1)

Adds a second supported self-check topic to check-self-recursive.ts:
the README v0.9.0 promised "Adding additional topics (existence,
path-forms, cross-surface, convention) is a 1-line dispatch each" —
this slice cashes one of those.

Operative-authorization: aaron 2026-05-14: "- **Devil-pole**
(edge-runner drive): keep pushing, discover, go hard, never-be-idle".

## Changes

- check-self-recursive.ts: SelfCheckTopic = "count" | "existence";
  SUPPORTED_TOPICS gains "existence"; dispatch branch composes
  check-existence.ts; only drift-severity findings surface (warnings
  about gitignored-but-extant paths are a distinct sub-class concern
  and not treated as self-recursive failure). Bump v0.9.0 -> v0.9.1.
- check-self-recursive.test.ts: +3 tests (parse "existence", detect
  self-recursive existence drift, mixed [count,existence] dispatch).
- README.md: bump v0.9.0 -> v0.9.1; update supported-topics; clarify
  drift-vs-warning severity treatment.
- B-0170 row: bump last_updated; update sub-class table row to
  reflect count + existence shipped.

## Focused checks

- `bun test tools/substrate-claim-checker/check-self-recursive.test.ts`
  -> 23 pass / 0 fail (was 20; +3 new).
- `bun test tools/substrate-claim-checker/` -> 140 pass / 0 fail
  across 7 files. No regressions.
- End-to-end sanity: directive `self-check: [count, existence]` on a
  memo with both shapes of drift -> 2 findings (one per topic) and
  exit 1, as expected.

## Bounded slice discipline

This stays well within "exactly one bounded step" per the task
brief: one new topic case + tests + doc-bump, no architecture
change, no new file. The remaining v1 sub-classes
(semantic-equivalence, empirical-output) and the remaining
self-recursive topics (path-forms, cross-surface, convention)
stay deferred per the B-0170 done-criteria.

Composes with: .claude/rules/skill-router-as-substrate-inventory.md
(extend existing substrate before authoring new); B-0170 done-criteria
item #1 (each sub-class has a check-type) — count + existence now
both routed through self-recursive dispatch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 22, 2026 21:50
@AceHack AceHack enabled auto-merge (squash) May 22, 2026 21:50
@AceHack AceHack merged commit 4b16d82 into main May 22, 2026
30 of 32 checks passed
@AceHack AceHack deleted the backlog/b-0170-self-recursive-existence-topic-2026-05-22 branch May 22, 2026 21:52
@AceHack AceHack review requested due to automatic review settings May 22, 2026 22:12
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.

1 participant