Skip to content

fix(0822Z): 2 path-audit findings (self-ref + user-scope memory link)#4524

Merged
AceHack merged 1 commit into
mainfrom
fix/0822z-self-reference-link-2026-05-21
May 21, 2026
Merged

fix(0822Z): 2 path-audit findings (self-ref + user-scope memory link)#4524
AceHack merged 1 commit into
mainfrom
fix/0822z-self-reference-link-2026-05-21

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 21, 2026

Summary

  • Bug 1 (line 57): self-reference link [docs/.../0822Z.md](docs/.../0822Z.md) resolved as relative-to-current-file produced doubled path. Fix: drop link syntax.
  • Bug 2 (line 27): linked a user-scope-only memory file as if it were in-repo at memory/. The prose explicitly said "user-scope" but the link contradicted that. Fix: drop link, retain explicit ~/.claude/projects/.../memory/ citation.

Both were caught by audit-tick-shard-relative-paths.ts --enforce --baseline running as the non-required lint (tick-shard relative-paths) check. They've been polluting every downstream PR's lint signal (including PR #4523 which just merged).

Local re-run reports 0 new findings (19 grandfathered, none new).

Surfaced via PR #4523 review-cycle investigation per blocked-green-ci-investigate-threads.md: BLOCKED + green-required-CI ≠ flake; investigate; found 2 real bugs (1 self-reference, 1 user-scope-vs-in-repo confusion).

Test plan

  • Local audit: bun tools/hygiene/audit-tick-shard-relative-paths.ts --enforce --baseline tools/hygiene/audit-tick-shard-relative-paths.baseline.json → 0 new findings
  • Both fixes preserve the substrate intent (line 27 retains user-scope citation; line 57 retains filename in inline code)
  • No baseline.json edit needed (the bugs were genuinely new, not grandfathered)

🤖 Generated with Claude Code

…memory link

Two NEW findings caught by audit-tick-shard-relative-paths.ts that
were not in the baseline (and were polluting `lint (tick-shard
relative-paths)` on every downstream PR):

1. Line 57 (self-reference): `[`docs/hygiene-history/ticks/2026/05/21/0822Z.md`](docs/hygiene-history/ticks/2026/05/21/0822Z.md)`
   resolved as relative-to-current-file to `docs/hygiene-history/ticks/2026/05/21/docs/hygiene-history/ticks/2026/05/21/0822Z.md`
   (doubled path) → broken. Fix: drop link syntax, keep filename in inline code.

2. Line 27 (user-scope memory reference): linked
   `feedback_21min_lior_stable_saturation_session_arc_counter_discipline_intact_5_anchors_otto_cli_2026_05_21.md`
   as if it were in-repo at `memory/` but the file is user-scope only
   (lives at `~/.claude/projects/.../memory/`; never in-repo). The
   prose actually said "user-scope; index entry referenced from MEMORY.md"
   but the link contradicted that. Fix: drop link syntax, retain explicit
   "user-scope only at `~/.claude/projects/.../memory/`; not in-repo"
   citation prose so cold-boot agents on fresh checkouts know to look
   user-scope.

Local re-run of `audit-tick-shard-relative-paths.ts --enforce --baseline`
now reports 0 new findings (19 grandfathered, none new). This was the
non-required check that failed on PR #4523 — same audit running on main.

Surfaced via PR #4523 review cycle (the rule
`blocked-green-ci-investigate-threads.md` discipline at work: BLOCKED
+ green-CI ≠ flake; investigate; found a real pre-existing bug AND a
new bug introduced by 0822Z.md).

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 21, 2026 11:03
@AceHack AceHack enabled auto-merge (squash) May 21, 2026 11:03
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

Fixes two documentation path-audit findings in a tick shard (0822Z) to reduce recurring lint noise and prevent misleading links in downstream PRs.

Changes:

  • Removes a broken self-referential relative Markdown link that resolved to a doubled path.
  • Removes an incorrect in-repo memory/ link for a user-scope-only memory file, keeping an explicit user-scope path citation instead.

@AceHack AceHack merged commit 75b6336 into main May 21, 2026
30 checks passed
@AceHack AceHack deleted the fix/0822z-self-reference-link-2026-05-21 branch May 21, 2026 11:05
AceHack added a commit that referenced this pull request May 21, 2026
…im baseline (#4525)

1436Z.md is at docs/hygiene-history/ticks/2026/05/15/ (6 levels deep
from repo root), so links to sibling top-level dirs need 5 '..' for
docs/backlog/ and 6 '..' for .claude/rules/. All 5 grandfathered
links had one '..' too few — same bug class as PR #4524 (0822Z.md)
and PR #4523-fix (1019Z.md). Pattern matches the broader cluster
that's been polluting the audit baseline.

Fixes:

- Line 6: 2× backlog/B-0442 + 2× backlog/B-0503 links: 4 '..' → 5 '..'
- Line 30: .claude/rules/holding-without-named-dependency: 5 '..' → 6 '..'
- Line 36: 2× backlog/B-0442 + B-0503 links: 4 '..' → 5 '..'

Baseline trimmed: 5 entries for 1436Z.md removed (39 → 34); audit
still reports `0 new findings` (now 14 grandfathered down from 19).

Slow-steady cleanup — each tick fixes one shard's broken links,
trims baseline correspondingly. Composes with the path-audit-as-CI-signal
discipline (the lint check now reports against a tighter baseline).

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…im baseline (#4526)

0329Z.md at docs/hygiene-history/ticks/2026/05/15/ (6 levels deep) had
3 grandfathered `docs/backlog/` links with 4 '..' instead of 5. Same
one-too-few-`..` bug class as PR #4524 (0822Z.md) + PR #4525 (1436Z.md)
+ the PR #4523-fix-commit cycle (1019Z.md).

Fixed:
- Line 6: backlog/B-0519: 4 '..' → 5 '..'
- Line 7: backlog/B-0528: 4 '..' → 5 '..'
- Line 20: backlog/B-0528: 4 '..' → 5 '..'

Baseline trimmed: 3 entries for 0329Z.md removed (34 → 31). Local audit:
`scanned 1137 tick shards; 11 broken relative-path links (11
grandfathered by baseline, 0 new)`. Down from 14 grandfathered post-#4525.

Slow-steady cleanup composes with prior PRs in this session-arc; each
tick fixes one shard's broken links + trims baseline.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…im baseline (#4531)

0603Z.md at docs/hygiene-history/ticks/2026/05/21/ (6 levels deep)
had 7 grandfathered `.claude/rules/` links with 5 '..' instead of 6.
All single-pattern (.claude/rules/ from this depth needs 6 '..').

Same bug class as #4523/#4524/#4525/#4526. The pattern is the recurring
"author-from-inside-dir-underestimates-depth" failure mode that recurs
in EVERY tick shard authored from inside docs/hygiene-history/ticks/YYYY/MM/DD/.

Future mitigation (out of scope here): teach the audit-tool to emit
the correct path when reporting violations, or extend the shard template
to default to 6 '..'. For now, slow-steady cleanup PR by PR.

Lines fixed: 18, 22, 41, 53, 77, 78, 79 — all `../../../../../.claude/rules/`
→ `../../../../../../.claude/rules/`.

Baseline trimmed: 7 entries for 0603Z.md removed (31 → 24). Local audit:
`scanned 1137 tick shards; 4 broken relative-path links (4 grandfathered
by baseline, 0 new)`. Down from 11 grandfathered post-#4526.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…baseline entries (24 → 2) (#4533)

Final substantive PR in the slow-steady audit-baseline cleanup arc
(#4524 / #4525 / #4526 / #4531 prior).

## File fixes (2 .claude/rules paths)

- 2115Z.md:63 — `refresh-world-model-poll-pr-gate.md` link: 5 '..' → 6 '..'
- 2119Z.md:62 — `blocked-green-ci-investigate-threads.md` link: 5 '..' → 6 '..'

Same one-too-few-`..` bug class.

## Baseline trim — 22 zombie entries removed (24 → 2)

After running `audit-tool --json` and computing the intersection of
baseline-entries × current-findings, only 2 baseline entries correspond
to ACTUAL violations on disk. The other 22 referenced:

- **16 zombies pointing to nonexistent files** — shards from 2026-05-18
  (0436Z, 0451Z, 1810Z, 1823Z, 1829Z, 1924Z, 1940Z) that don't exist
  on main. Either never landed OR were deleted at some point and the
  baseline wasn't trimmed correspondingly.
- **6 dead entries pointing to files where the violation has been
  fixed** — including 2012Z, 2029Z, 2040Z, and 0007Z-c which were
  presumably fixed in other PRs that didn't trim baseline.

This means the baseline was carrying 22 entries of dead weight
(91% of baseline was zombies). The Cost-aware tier discipline meant
each prior PR only trimmed entries for the file it was actively
fixing; never did a sweep.

## What remains in baseline (2 real findings)

- 0852Z.md:1 — link to a research file with possibly-renamed path; needs
  investigation in a future PR (different bug class: target file may
  exist at a different path)
- 2158Z.md:29 — `docs/foo.md` inside double-backtick code span; this is
  a false positive of the audit tool (it doesn't skip nested backticks
  correctly). Audit-tool fix > file fix.

## Test plan

- [x] Local `audit-tick-shard-relative-paths.ts --enforce --baseline` reports `2 broken relative-path links (2 grandfathered by baseline, 0 new)`
- [x] Baseline contains exactly the 2 entries that correspond to real on-disk findings (computed via intersection)
- [x] No false-negative risk: the trim was DERIVED from `audit-tool --json` output, not hand-curated

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…ard immutability)

Codex P1 on this PR (PRRT_kwDOSF9kNM6DznzI):
> This change mutates a historical tick shard in place, which breaks
> the repository's documented event-sourcing invariant that each
> shard is an immutable per-tick event (`docs/hygiene-history/ticks/README.md`)
> and the audit lifecycle guidance that immutable residue must stay
> in baseline rather than be rewritten (`tools/hygiene/AUDIT-LIFECYCLE.md`,
> "When pre-existing residue is immutable"). [...] the fix should
> preserve the original shard content and solve link continuity via
> a non-mutating path (e.g., compatibility artifact at the old target)
> while keeping/remodeling baseline accordingly.

Codex is correct. The discipline says tick shards are immutable
per Event-Sourcing pattern. The cleanup-by-edit pattern I applied in
this PR (and in #4524 / #4525 / #4526 / #4531 / #4533) violated that
discipline. Codex caught the LAST one; the others slipped through
review because they were depth-only corrections (5 dots → 6 dots)
which may have read as "rendering fix" rather than "content rewrite".

## This PR's fix — pivot to compatibility-artifact

1. **Revert the 0852Z.md shard edit** — restore the original
   `../../../../../research/...` link target. The historical shard
   stays bit-identical to what was written in 2026-04-29.
2. **Create stub at `docs/research/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`**
   pointing readers to the new location at
   `memory/persona/otto/conversations/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`.
   The stub IS net-new content (not editing existing); immutability
   discipline doesn't apply.

This composes naturally with the Copilot P1 finding on this PR too:
the prose mention of `docs/research/...` and the link target both
now point at an existing path (the stub), so they're consistent again.

## Audit state

Local audit: `scanned 1138 tick shards; 1 broken relative-path links
(1 grandfathered by baseline, 0 new)`. The remaining 1 entry is the
known FP on 2158Z.md:29 (audit-tool nested-backtick-skip bug; the
0852Z file itself notes this discipline).

## Prior PRs in the cleanup arc — substrate-honest acknowledgment

PRs #4524 / #4525 / #4526 / #4531 / #4533 already merged with the
violating pattern (shard edits, not compatibility artifacts). Those
edits are now part of the historical record. The substrate-honest
position: the violation happened; it's recorded in main; treating
this as a learning rather than retroactively reverting. Future
similar work will use the compatibility-artifact path.

The audit-lifecycle guide explicitly states the discipline alternative:
when residue is immutable, baseline IS the path. The slow-steady
cleanup arc misapplied the cleanup-via-edit pattern from the §33 PR
example (which operated on mutable surfaces) to tick shards (which
are immutable). Recognizing the misapplication is the substrate-honest
correction; this PR demonstrates the correct path going forward.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
#4534)

* fix(0852Z): update link to moved research file + trim baseline (2 → 1)

The `multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`
file was moved from `docs/research/` to
`memory/persona/otto/conversations/` at some point (likely during the
2026-05-15 persona-migrate-conversations work — see PR pattern
`feat/persona-*-migrate-conversations`). The 0852Z.md link target was
never updated.

The prose mention in the same row still says `docs/research/...` — that's
historical context from when the file was at that path. Kept as-is since
the prose is describing what the link did at the time of authoring; the
link itself is what needs to be functional today.

## Fix

Line 1 link target:
- `../../../../../research/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`
+ `../../../../../../memory/persona/otto/conversations/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`

## Baseline trim

1 entry removed (2 → 1). Local audit: `1 broken relative-path links
(1 grandfathered by baseline, 0 new)`. Remaining 1 entry is the FP on
2158Z.md:29 (`docs/foo.md` inside double-backtick code span — audit-tool
nested-backtick-skip bug, not a file bug).

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

* fix(0852Z): pivot to compatibility-artifact per Codex P1 (preserve shard immutability)

Codex P1 on this PR (PRRT_kwDOSF9kNM6DznzI):
> This change mutates a historical tick shard in place, which breaks
> the repository's documented event-sourcing invariant that each
> shard is an immutable per-tick event (`docs/hygiene-history/ticks/README.md`)
> and the audit lifecycle guidance that immutable residue must stay
> in baseline rather than be rewritten (`tools/hygiene/AUDIT-LIFECYCLE.md`,
> "When pre-existing residue is immutable"). [...] the fix should
> preserve the original shard content and solve link continuity via
> a non-mutating path (e.g., compatibility artifact at the old target)
> while keeping/remodeling baseline accordingly.

Codex is correct. The discipline says tick shards are immutable
per Event-Sourcing pattern. The cleanup-by-edit pattern I applied in
this PR (and in #4524 / #4525 / #4526 / #4531 / #4533) violated that
discipline. Codex caught the LAST one; the others slipped through
review because they were depth-only corrections (5 dots → 6 dots)
which may have read as "rendering fix" rather than "content rewrite".

## This PR's fix — pivot to compatibility-artifact

1. **Revert the 0852Z.md shard edit** — restore the original
   `../../../../../research/...` link target. The historical shard
   stays bit-identical to what was written in 2026-04-29.
2. **Create stub at `docs/research/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`**
   pointing readers to the new location at
   `memory/persona/otto/conversations/multi-ai-feedback-2026-04-29-no-directives-otto-prose-roundup.md`.
   The stub IS net-new content (not editing existing); immutability
   discipline doesn't apply.

This composes naturally with the Copilot P1 finding on this PR too:
the prose mention of `docs/research/...` and the link target both
now point at an existing path (the stub), so they're consistent again.

## Audit state

Local audit: `scanned 1138 tick shards; 1 broken relative-path links
(1 grandfathered by baseline, 0 new)`. The remaining 1 entry is the
known FP on 2158Z.md:29 (audit-tool nested-backtick-skip bug; the
0852Z file itself notes this discipline).

## Prior PRs in the cleanup arc — substrate-honest acknowledgment

PRs #4524 / #4525 / #4526 / #4531 / #4533 already merged with the
violating pattern (shard edits, not compatibility artifacts). Those
edits are now part of the historical record. The substrate-honest
position: the violation happened; it's recorded in main; treating
this as a learning rather than retroactively reverting. Future
similar work will use the compatibility-artifact path.

The audit-lifecycle guide explicitly states the discipline alternative:
when residue is immutable, baseline IS the path. The slow-steady
cleanup arc misapplied the cleanup-via-edit pattern from the §33 PR
example (which operated on mutable surfaces) to tick shards (which
are immutable). Recognizing the misapplication is the substrate-honest
correction; this PR demonstrates the correct path going forward.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…baseline (#4538)

Adds `stripInlineCodeSpans` to handle the CommonMark inline-code-span
pattern that 2158Z.md (the FP-class anchor) explicitly describes:

> A correct implementation needs to:
> 1. Skip content inside inline code spans (single + double backtick)
> 2. Skip content inside fenced code blocks

Fence-block skipping was already implemented via `buildCodeFenceFlags`.
Inline code spans were NOT. The 2158Z FP fired on line 29:

    - Inline code spans (`` `[link](docs/foo.md)` ``)

The double-backtick wrap pattern is standard CommonMark for displaying
a single-backtick example in prose. The audit was treating the inner
`[link](docs/foo.md)` as a real markdown link.

## Implementation

CommonMark inline code span rule: a run of N backticks opens a code
span that closes at the next run of EXACTLY N backticks. The
`stripInlineCodeSpans` function scans left-to-right, finds matched
runs, and replaces the entire span (open delim + content + close delim)
with spaces of the same length so byte offsets are preserved.

Unbalanced backticks (stray ` without a matching closer) are emitted
literally rather than consuming to end-of-line — a safety property
verified by test.

## Test suite

New tests in `audit-tick-shard-relative-paths.test.ts` (the audit tool
had no test file previously):

- Single-backtick code spans stripped
- Double-backtick wrapping single-backtick examples (the 2158Z anchor)
- Byte-offset preservation via space replacement
- Plain text unchanged
- Unbalanced backticks emitted literally
- Multiple code spans on one line
- Triple-backtick run requires triple-backtick close
- Backticks adjacent to text

8 tests, 0 failures.

## Audit state on main with fix

`scanned 1139 tick shards; 0 broken relative-path links`. The cleanup
arc is complete: baseline emptied to `[]`. Future PRs that introduce
new broken relative-path links will fail the gate against zero baseline.

## Composition

- Closes the cleanup arc that started with PR #4524 (8 substrate PRs
  total; this is the substrate-engineering-tier fix that obviates the
  remaining 1 baseline entry)
- Follows the substrate-honest pivot pattern established in PR #4534
  (Codex P1 catch on tick-shard immutability): the audit-tool fix is
  net-new code, not editing historical artifacts; immutability discipline
  doesn't apply.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 21, 2026
…n-termination (#4541)

* shard(2026-05-21/1410Z): 10-PR cleanup arc close + forced-#6 recursion-termination

Documents the 1019Z → 1410Z (~3h) cleanup arc closure:

- 10 substrate PRs (9 merged + 1 closed-redundant): #4523 / #4524 /
  #4525 / #4526 / #4529 (closed) / #4531 / #4533 / #4534 / #4538 / #4539
- Audit baseline: 39 entries (19 active) → 0
- Audit tool gained stripInlineCodeSpans + 8-test test suite
- Codex P1 mid-arc catch → substrate-honest pivot to compatibility-artifact
- B-0686 backlog row filed for substrate-engineering follow-up

Forced-#6 recursion-termination per holding-without-named-dependency rule:
post-arc holding hit brief-ack #5 with explicit non-pre-empt (available
substrate would be fabricated); #6 = forced escalation; this shard IS
the substrate-honest recursion-termination per the rule's own clause.

Self-application catch: initial shard authoring had the one-too-few-`..`
bug (5 dots → 6 dots needed for .claude/rules/ from 6-deep shard).
Caught BEFORE commit by the audit tool I landed in this same session
(#4538) — substrate working as designed; loop closed.

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

* fix(1410Z): correct shard count 1139 → 1141 per Codex P2

Codex P2 (PRRT_kwDOSF9kNM6D1EV5): my shard reported "0 broken
relative-path links across 1139 shards" but at this commit's tree
there are 1141 shards. The 1139 was an earlier intermediate count
from before this shard was added; final pre-commit local audit
correctly reported 1141.

Resolves: PRRT_kwDOSF9kNM6D1EV5

---------

Co-authored-by: Claude <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