diff --git a/docs/pr-discussions/PR-3616-chore-bg-b-0502-launchd-plist-and-docs-for-backlog-ready-not.md b/docs/pr-discussions/PR-3616-chore-bg-b-0502-launchd-plist-and-docs-for-backlog-ready-not.md new file mode 100644 index 000000000..70eaddf28 --- /dev/null +++ b/docs/pr-discussions/PR-3616-chore-bg-b-0502-launchd-plist-and-docs-for-backlog-ready-not.md @@ -0,0 +1,102 @@ +--- +pr_number: 3616 +title: "chore(bg): B-0502 launchd plist and docs for backlog-ready-notifier" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-15T22:58:14Z" +merged_at: "2026-05-15T23:30:51Z" +closed_at: "2026-05-15T23:30:51Z" +head_ref: "feat/b0502-launchd-plist" +base_ref: "main" +archived_at: "2026-05-16T00:14:11Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3616: chore(bg): B-0502 launchd plist and docs for backlog-ready-notifier + +## PR description + +Implements backlog row **B-0502** (Slice 6 of B-0441). Wires up the launchd plist for the background service and updates the architecture documentation. Also updates the backlog row status tables to reflect that slices 3 and 5a have shipped. + +## Reviews + +### COMMENTED โ€” @copilot-pull-request-reviewer (2026-05-15T22:59:41Z) + +## Pull request overview + +Wires up slice 6 of B-0441 (launchd plist + AUTONOMOUS-LOOP.md update for the backlog-ready-notifier background service) and brings backlog row status tables in line with what has now shipped (slices 3, 5a, and 6). + +**Changes:** +- Adjust the maintainer comment in the new `com.zeta.backlog-ready-notifier.plist` to drop a reference to a non-existent `install-launchd-services.sh` and replace with manual path-update instructions. +- Update `tools/bg/README.md` "Current services" table to reflect newly-live slices for the backlog-ready notifier. +- Mark B-0502 as shipped (acceptance criteria boxes + frontmatter) and update B-0441's slice-status table to reflect 5a and 6 shipped. + +### Reviewed changes + +Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment. + +| File | Description | +| ---- | ----------- | +| `.gemini/launchd/com.zeta.backlog-ready-notifier.plist` | Replaces reference to a non-existent install script with manual maintenance instructions. | +| `tools/bg/README.md` | Bumps backlog-ready-notifier slice-status entry. | +| `docs/backlog/P1/B-0502-...md` | Flips status to shipped and ticks acceptance boxes. | +| `docs/backlog/P1/B-0441-...md` | Marks slices 5a (B-0501) and 6 (B-0502) as shipped in the parent row. | + +### COMMENTED โ€” @chatgpt-codex-connector (2026-05-15T22:59:52Z) + + +### ๐Ÿ’ก Codex Review + +Here are some automated review suggestions for this pull request. + +**Reviewed commit:** `76177bc375` + + +
โ„น๏ธ About Codex in GitHub +
+ +[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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". + +
+ +### COMMENTED โ€” @AceHack (2026-05-15T23:28:31Z) + +_(no body)_ + +### COMMENTED โ€” @AceHack (2026-05-15T23:28:32Z) + +_(no body)_ + +## Review threads + +### Thread 1: tools/bg/README.md:32 (resolved) + +**@copilot-pull-request-reviewer** (2026-05-15T22:59:41Z): + +The slice status here reads "1+2+3+4+5+6 live", but per the B-0441 status table updated in this same PR, slice 5 for the backlog-ready-notifier is split: 5a (assignment-history dedup, B-0501) is shipped, but 5.2 (agent-side `work-assignment` subscriber handler, B-0460) is still โŒ open. The shorthand "5" here implies the whole slice is live, which contradicts B-0441 and the "What's still pending" section below (lines 88-92) that lists "Slice 5 for all three โ€” subscriber agents that react to bus envelopes" as pending. Consider writing this as `1+2+3+4+5a+6 live (5.2 pending B-0460)` to match B-0441's substrate-honest framing. + +**@AceHack** (2026-05-15T23:28:31Z): + +Fixed in 6ef1b491 โ€” line now reads `1+2+3+4+5a+6 live (5.2 pending B-0460)` per your suggested phrasing. Matches B-0441's substrate-honest framing (5a = assignment-history dedup B-0501 shipped; 5.2 = `work-assignment` subscriber handler B-0460 still โŒ) and stays consistent with the "What's still pending" section below. + +### Thread 2: tools/bg/README.md:32 (resolved) + +**@chatgpt-codex-connector** (2026-05-15T22:59:52Z): + +**![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat) Keep backlog-ready slice status aligned with pending 5.2** + +Update this status to avoid overclaiming slice 5 as fully landed: this row now says `1+2+3+4+5+6 live`, but the same commit still records `5.2` (`work-assignment` subscriber handler) as open in `docs/backlog/P1/B-0441-backlog-row-ready-to-grind-notifier-background-service-2026-05-13.md` (table row for slice 5.2). Marking full `+5` here can mislead operators into thinking the subscriber path is shipped and suppress follow-up on B-0460. + +Useful? React with ๐Ÿ‘ย / ๐Ÿ‘Ž. + +**@AceHack** (2026-05-15T23:28:32Z): + +Fixed in 6ef1b491 โ€” slice-5 status updated to `1+2+3+4+5a+6 live (5.2 pending B-0460)` so it no longer suggests the subscriber path is shipped. Keeps follow-up on B-0460 visible. diff --git a/docs/pr-discussions/PR-3617-docs-shadow-lior-antigravity-check-23-05z-drift-report.md b/docs/pr-discussions/PR-3617-docs-shadow-lior-antigravity-check-23-05z-drift-report.md new file mode 100644 index 000000000..a68abb7de --- /dev/null +++ b/docs/pr-discussions/PR-3617-docs-shadow-lior-antigravity-check-23-05z-drift-report.md @@ -0,0 +1,40 @@ +--- +pr_number: 3617 +title: "docs(shadow): Lior antigravity check 23:05Z - drift report" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-15T22:58:34Z" +merged_at: "2026-05-15T23:01:04Z" +closed_at: "2026-05-15T23:01:04Z" +head_ref: "lior/shadow-drift-0515" +base_ref: "main" +archived_at: "2026-05-16T00:14:11Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3617: docs(shadow): Lior antigravity check 23:05Z - drift report + +## PR description + +Shadow lesson log for 23:05Z antigravity check and PR preservation. Otto is stale, Vera/Riven stuck on dirty trees. Array requires fresh worktrees. + +## Reviews + +### COMMENTED โ€” @copilot-pull-request-reviewer (2026-05-15T23:00:24Z) + +## Pull request overview + +Adds a shadow lesson log and preserves a merged PR discussion archive for the current autonomous-loop/shadow drift cycle. + +**Changes:** +- Adds a new Lior shadow lesson log describing drift observations and corrective actions. +- Adds archived PR discussion metadata and review-thread history for PR #3607. + +### Reviewed changes + +Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments. + +| File | Description | +| ---- | ----------- | +| `docs/research/2026-05-15-shadow-lesson-log-lior-drift-2305Z.md` | Records the 23:05Z shadow drift report and corrective actions. | +| `docs/pr-discussions/PR-3607-shard-tick-2220z-null-arm-sweep-prior-tick-prs-landing.md` | Preserves PR #3607 metadata, description, and review threads. | diff --git a/docs/pr-discussions/PR-3619-backlog-b-0545-b-0498-id-collision-renumber-sweep-riven-curs.md b/docs/pr-discussions/PR-3619-backlog-b-0545-b-0498-id-collision-renumber-sweep-riven-curs.md new file mode 100644 index 000000000..feeb3de5d --- /dev/null +++ b/docs/pr-discussions/PR-3619-backlog-b-0545-b-0498-id-collision-renumber-sweep-riven-curs.md @@ -0,0 +1,131 @@ +--- +pr_number: 3619 +title: "backlog(B-0545): B-0498 ID collision \u2014 renumber sweep (Riven cursor-terminal \u2192 next ID)" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-15T22:59:52Z" +merged_at: "2026-05-15T23:01:41Z" +closed_at: "2026-05-15T23:01:41Z" +head_ref: "backlog/b0545-b0498-collision-renumber-sweep-otto-cli-2026-05-15" +base_ref: "main" +archived_at: "2026-05-16T00:14:10Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3619: backlog(B-0545): B-0498 ID collision โ€” renumber sweep (Riven cursor-terminal โ†’ next ID) + +## PR description + +## Summary + +- **Real ID collision** caught by `copilot-pull-request-reviewer` on PR #3604 (tick shard 2217Z thread): + - `docs/backlog/P1/B-0498-riven-cursor-terminal-*-2026-05-15.md` (from merged #3603) + - `docs/backlog/P2/B-0498-substrate-evolution-algebra-*-2026-05-14.md` (pre-existing) +- Per `b0451_per_collision_renumber_procedure`: first-merged-wins โ†’ P2 (2026-05-14) keeps B-0498; P1 (2026-05-15) renumbers to next free (B-0546). +- This row IS the filed-correction surface; implementation in a follow-up PR. +- P2 priority โ€” collision exists but no active break; address within 1-2 weeks. + +## Test plan + +- [x] Verified via `git ls-tree origin/main -- docs/backlog/` โ€” both files exist +- [x] Rule discipline confirmed via memory file lookup +- [x] B-0545 ID allocated via on-disk + in-flight check (B-0543/0544 in #3614; B-0545 free) +- [ ] Implementation PR (renumber sweep) to follow + +๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED โ€” @chatgpt-codex-connector (2026-05-15T23:02:31Z) + + +### ๐Ÿ’ก Codex Review + +Here are some automated review suggestions for this pull request. + +**Reviewed commit:** `b0bcac6436` + + +
โ„น๏ธ About Codex in GitHub +
+ +[Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). 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". + +
+ +### COMMENTED โ€” @copilot-pull-request-reviewer (2026-05-15T23:03:16Z) + +## Pull request overview + +Adds a new P2 backlog row (B-0545) to document and track the discovered B-0498 ID collision, and to define the intended renumber target/sweep scope for a follow-up implementation PR. + +**Changes:** +- Introduces backlog row B-0545 describing the B-0498 collision (P1 vs P2 rows) and the โ€œfirst-merged-winsโ€ renumber procedure reference. +- Captures proposed renumber target (B-0546) and a checklist of cross-reference updates to perform in the implementation sweep. +- Records rationale for P2 priority and scope-bounds (filed-correction surface only). + + +
+Comments suppressed due to low confidence (3) + +**docs/backlog/P2/B-0545-b0498-collision-renumber-sweep-2026-05-15.md:47** +* P1: The example command `gh pr list --search "B-NNNN" --state all` wonโ€™t actually enumerate the in-flight IDs you list below (it searches for the literal string `B-NNNN`). Use a concrete search term/pattern that matches real PR titles (e.g., the specific IDs, or a prefix like `B-054`), or reword this to describe the check without giving a non-functional command. +``` +## Next free ID + +At time of filing (2026-05-15T22:55Z), `git ls-tree origin/main` plus `gh pr list --search "B-NNNN" --state all` shows: + +- B-0542 last on main +- B-0543/B-0544 taken in flight (PR #3614, OPEN) +- B-0545 โ€” THIS ROW, claimed +- **B-0546** โ€” next free for the renumber target +``` +**docs/backlog/P2/B-0545-b0498-collision-renumber-sweep-2026-05-15.md:70** +* P1: `tick-shards-are-immutable` is referenced as if itโ€™s a named rule, but thereโ€™s no such rule/doc in the repo; this reads like a dead xref. Consider linking to an existing authority that states shard immutability (e.g., `docs/hygiene-history/ticks/README.md`, which describes shards as immutable events) or rename this to the actual rule/document name. +``` +- Update `id:` frontmatter inside the moved file +- Update any `depends_on:` / `composes_with:` fields in OTHER backlog rows that pointed at B-0498 in the Riven sense +- Update tick shards that QUOTE the Riven B-0498: PER `tick-shards-are-immutable` discipline, do NOT in-place-edit; instead, append a correction note in a new shard OR add a glossary entry in the renumber row +- Update any tools/scripts: rename references via `grep -rln "B-0498-riven\|B-0498.*riven" memory/ docs/ .claude/ tools/` +``` +**docs/backlog/P2/B-0545-b0498-collision-renumber-sweep-2026-05-15.md:88** +* P2: In the โ€œComposes withโ€ section, `claim-acquire-before-worktree-work.md` and `refresh-before-decide.md` are referenced as bare filenames, but the canonical paths are under `.claude/rules/โ€ฆ`. Consider linking them with their full repo paths (as other backlog rows do) so readers can navigate unambiguously. +``` +## Composes with + +- The `b0451_per_collision_renumber_procedure` memory (2026-05-14) โ€” same shape, second instance +- The `claim-acquire-before-worktree-work.md` rule's "ID allocation discipline" section โ€” this collision is an instance the discipline is meant to prevent +- `refresh-before-decide.md` invariant at ID-allocation scope โ€” both surfaces (merged + in-flight) must be checked; the Riven-cursor row at 2026-05-15 likely skipped the on-disk B-0498 P2 check +``` +
+ +## Review threads + +### Thread 1: docs/backlog/P2/B-0545-b0498-collision-renumber-sweep-2026-05-15.md:66 (unresolved) + +**@chatgpt-codex-connector** (2026-05-15T23:02:31Z): + +**![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat) Replace wildcard destination in rename command** + +The documented sweep command uses a wildcard in the destination (`git mv ... B-0546-riven-*`), which is unsafe in Bash because unmatched destination globs are passed literally; running this as written can rename the file to a path containing a `*` character instead of the intended concrete filename. In the renumber workflow, that would leave the backlog row under an invalid/unexpected name and likely break follow-up references/indexing, so the command should name the exact target file (or compute it programmatically) rather than using a wildcard destination. + +Useful? React with ๐Ÿ‘ย / ๐Ÿ‘Ž. + +### Thread 2: docs/backlog/P2/B-0545-b0498-collision-renumber-sweep-2026-05-15.md:7 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-15T23:03:16Z): + +P1: This backlog row frontmatter is missing the required `last_updated` field (the backlog schema requires it and it should be updated on every content edit). Add `last_updated: 2026-05-15` (or the correct date) to the YAML frontmatter to keep the row schema-compliant. + +This issue also appears in the following locations of the same file: +- line 40 +- line 67 +- line 84 diff --git a/docs/pr-discussions/PR-3620-shard-tick-2300z-arm-sweep-3617-merged-3618-armed-lior-threa.md b/docs/pr-discussions/PR-3620-shard-tick-2300z-arm-sweep-3617-merged-3618-armed-lior-threa.md new file mode 100644 index 000000000..3fc280be5 --- /dev/null +++ b/docs/pr-discussions/PR-3620-shard-tick-2300z-arm-sweep-3617-merged-3618-armed-lior-threa.md @@ -0,0 +1,64 @@ +--- +pr_number: 3620 +title: "shard(tick): 2300Z \u2014 arm-sweep #3617 (merged) + #3618 (armed); Lior-thread PRs left" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-15T23:02:37Z" +merged_at: "2026-05-15T23:04:11Z" +closed_at: "2026-05-15T23:04:11Z" +head_ref: "shard/tick-2300z-otto-cli-2026-05-15" +base_ref: "main" +archived_at: "2026-05-16T00:14:09Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3620: shard(tick): 2300Z โ€” arm-sweep #3617 (merged) + #3618 (armed); Lior-thread PRs left + +## PR description + +## Summary + +- **Cheap-survey discipline**: used `gh pr list --json mergeStateStatus,autoMergeRequest` (single call) instead of `poll-pr-gate-batch --all-open` (37 calls). Composes with `memory/feedback_gh_graphql_rate_limit_cascade_cost_*.md` cost-awareness. +- **2 thread-free arms**: #3618 (B-0544 research) + #3617 (Lior 23:05Z drift; MERGED immediately). +- **2 thread-laden LEFT alone**: #3610 (codex P2 archive-naming) + #3609 (copilot threads on Lior content) โ€” Lior-payload threads pending peer-Lior cycle; respects `honor-those-that-came-before` discipline. + +## Test plan + +- [x] Budget verified before/after: 4177 โ†’ 4151 (26 units this tick โ€” sustainable) +- [x] #3617 confirmed MERGED via gh pr view +- [x] #3618 confirmed armed via gh pr view +- [x] Cron `d97cdace` still listed + +๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED โ€” @copilot-pull-request-reviewer (2026-05-15T23:05:08Z) + +## Pull request overview + +Adds a new hygiene-history tick shard (2300Z, 2026-05-15) documenting an arm-sweep decision, GitHub rate-limit budgeting, and which PRs were armed vs intentionally left due to thread ownership. + +**Changes:** +- Add `2300Z.md` tick shard with frontmatter + narrative sections (refresh, per-PR filter table, budget accounting, CronList check, visibility signal). +- Document โ€œcheap surveyโ€ approach (`gh pr list --json ...`) vs batch polling to reduce GraphQL unit burn. + +## Review threads + +### Thread 1: docs/hygiene-history/ticks/2026/05/15/2300Z.md:27 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-15T23:05:08Z): + +Line 27 references the rule as a bare filename (`honor-those-that-came-before.md`). In recent tick shards these rule refs are linked to their canonical `.claude/rules/...` path (so readers can click through and so renames donโ€™t silently break references). Please convert this to a markdown link to `.claude/rules/honor-those-that-came-before.md` using the appropriate relative path from this file. + +### Thread 2: docs/hygiene-history/ticks/2026/05/15/2300Z.md:28 (unresolved) + +**@copilot-pull-request-reviewer** (2026-05-15T23:05:08Z): + +`PR-3607.md` is mentioned as if it were an on-repo archive file, but that filename doesnโ€™t exist anywhere in the current tree. If this is a proposed/canonical name thatโ€™s missing, consider clarifying that itโ€™s not yet present (or link directly to the relevant preservation doc/PR where the naming question lives) to avoid sending readers on a dead-end search. + +## General comments + +### @chatgpt-codex-connector (2026-05-15T23:02:42Z) + +You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage). diff --git a/docs/pr-discussions/PR-3624-feat-b-0170-4-seed-existence-drift-fixture-regression-test.md b/docs/pr-discussions/PR-3624-feat-b-0170-4-seed-existence-drift-fixture-regression-test.md new file mode 100644 index 000000000..0016615b2 --- /dev/null +++ b/docs/pr-discussions/PR-3624-feat-b-0170-4-seed-existence-drift-fixture-regression-test.md @@ -0,0 +1,82 @@ +--- +pr_number: 3624 +title: "feat(B-0170.4): seed existence-drift fixture + regression test" +author: "AceHack" +state: "MERGED" +created_at: "2026-05-16T00:01:18Z" +merged_at: "2026-05-16T00:04:09Z" +closed_at: "2026-05-16T00:04:09Z" +head_ref: "otto/b0170-4-existence-drift-fixture-2026-05-15-v2" +base_ref: "main" +archived_at: "2026-05-16T00:14:08Z" +archive_tool: "tools/pr-preservation/archive-pr.ts" +--- + +# PR #3624: feat(B-0170.4): seed existence-drift fixture + regression test + +## PR description + +## Summary + +Smallest safe slice of B-0170.4 (fixture-tests + eval-set coverage). Extends [PR #3611](https://github.com/Lucent-Financial-Group/Zeta/pull/3611)'s count-drift seed to the existence-drift sub-class โ€” the second of the 5 shipped check-types now has empirical-axis regression coverage. + +- New `tools/substrate-claim-checker/fixtures/existence-drift-missing-doc.md` fixture modeling the verify-then-claim memo's body-table instance #8 (PR #1252 โ€” future-domain memo referenced a `docs/` markdown file that didn't actually exist). +- New describe block in `fixtures.test.ts` asserting `check-existence.ts` emits exactly one drift finding at line 24 with severity `"drift"`. +- `fixtures/README.md` index gains the new fixture row. + +## Why the fixture path is synthetic + +The fixture cites `docs/_fixture_existence_drift_target_b0170_2026_05_15.md` โ€” a clearly synthetic path no human or agent would create accidentally. This tests the empirical detection pattern, not a frozen substrate snapshot โ€” substrate evolution can't break the regression by creating an unrelated file at the historical path. + +## Discipline carried forward from PR #3611 review threads + +`chatgpt-codex-connector` + `copilot-pull-request-reviewer` flagged a hazard on the count-drift fixture: restating the claim inside the HTML provenance comment let the test pass via the comment match alone, masking regressions in body-claim detection. Same discipline applied here: + +- HTML provenance comment intentionally does NOT backtick-quote the exact fixture path +- Test asserts `findings.length === 1` (exact, not `>= 1`) +- Test pins `finding.line === 24` so a regression that stops detecting the body claim can't be masked + +## Test plan + +- [x] `bun tools/substrate-claim-checker/check-existence.ts ` โ€” 1 drift finding at line 24, severity `"drift"`, exit 1 +- [x] `bun test tools/substrate-claim-checker/fixtures.test.ts` โ€” 2 pass, 12 expect() calls, exit 0 +- [x] `bun test tools/substrate-claim-checker/` (full suite) โ€” 114 pass, 0 fail, 256 expect() calls (negative-path stderr lines are intentional error-handling cases per PR #3611 convention) +- [x] Commit-tree integrity per `.claude/rules/codeql-no-source-on-docs-only-pr-is-broken-commit-canary.md` โ€” `tools/substrate-claim-checker/` tree size 13 at both `HEAD~1` and `HEAD` + +## Composes with + +- B-0170.4 done-criteria ("fixture-tests + eval-set coverage for all shipped + new check-types") โ€” incremental progress, one sub-class per slice per the `fixtures/README.md` procedure +- B-0170 (parent row, `decomposed`) +- [PR #3611](https://github.com/Lucent-Financial-Group/Zeta/pull/3611) (count-drift seed; same scaffolding extended here) +- `memory/feedback_verify_then_claim_discipline_dominant_failure_mode_substrate_authoring_otto_2026_05_03.md` โ€” body-table instance #8 is the empirical anchor for this fixture + +## Claim + +`6c253d24-3ed0-4e89-8f3a-563b13f933cc` (otto-cli, B-0170) + +operative-authorization: aaron 2026-05-14: "- **Devil-pole** (edge-runner drive): keep pushing, discover, go hard, never-be-idle" + +๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) + +## Reviews + +### COMMENTED โ€” @copilot-pull-request-reviewer (2026-05-16T00:02:51Z) + +## Pull request overview + +Extends the substrate-claim-checker eval-set (started in PR #3611) with the second drift sub-class โ€” existence drift. Adds a synthetic-path fixture, a regression test asserting `check-existence.ts` emits exactly one drift finding at the expected line, and an index row in the fixtures README. + +**Changes:** +- New `existence-drift-missing-doc.md` fixture using a clearly synthetic `docs/_fixture_existence_drift_target_b0170_2026_05_15.md` path, with HTML provenance comment that deliberately avoids backtick-quoting the path +- New `describe` block in `fixtures.test.ts` asserting exactly one finding at line 24 with severity `"drift"` +- `fixtures/README.md` index gains a row for the new fixture + +### Reviewed changes + +Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments. + +| File | Description | +| ---- | ----------- | +| tools/substrate-claim-checker/fixtures/README.md | Adds index row for the new existence-drift fixture | +| tools/substrate-claim-checker/fixtures/existence-drift-missing-doc.md | New fixture modeling PR #1252 existence-drift instance #8 with synthetic path | +| tools/substrate-claim-checker/fixtures.test.ts | Adds regression test for `check-existence.ts` against the new fixture |