Skip to content

feat(ci): wire lint (tick-shard relative-paths) gate — --enforce --baseline#3708

Merged
AceHack merged 1 commit into
mainfrom
feat/wire-tick-shard-relative-paths-ci-gate-otto-cli-2026-05-16
May 16, 2026
Merged

feat(ci): wire lint (tick-shard relative-paths) gate — --enforce --baseline#3708
AceHack merged 1 commit into
mainfrom
feat/wire-tick-shard-relative-paths-ci-gate-otto-cli-2026-05-16

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 16, 2026

What

Adds the final step of the tick-shard-relative-path audit lifecycle: a CI gate (lint-tick-shard-relative-paths) that runs

bun tools/hygiene/audit-tick-shard-relative-paths.ts \
  --enforce \
  --baseline tools/hygiene/audit-tick-shard-relative-paths.baseline.json

Exit 1 only on NEW findings (not in baseline). 10 pre-existing findings stay grandfathered.

Lifecycle now complete

Step PR State
Discovery #3676 + #3679 merged
Narrow fix per-shard #3680 merged
Scanner #3692 merged
Filter + quality × 3 #3692 (fixups) merged
Baseline mechanism #3699 merged
CI enforce gate this proposed

Same 4-step §33 audit lifecycle pattern (PR #3513#3552 → enforce), compressed across 14 ticks of this session.

Local verify

  • 842 shards scanned (was 833 in tick 7; +9 from this session's merges)
  • 10 grandfathered (matches baseline)
  • 0 NEW findings
  • exit 0

CI surface

Per existing convention in .github/workflows/gate.yml, this job is non-required by default. The gate surfaces on every PR as a status check; branch-protection rules govern which subset is required for merge. The §33-migration-xrefs sibling is also a non-required check by default.

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

…seline

Adds the final step of the tick-shard-relative-path audit lifecycle:
discovery (#3676/#3679) → narrow fix (#3680) → scanner (#3692) → filter +
quality × 3 (#3692 fixups) → baseline mechanism (#3699) → THIS JOB.

The job runs `audit-tick-shard-relative-paths.ts --enforce --baseline
tools/hygiene/audit-tick-shard-relative-paths.baseline.json`, exiting 1
only on NEW findings (not in baseline). The 10 pre-existing findings
recorded in the baseline file stay grandfathered — same shape as Stryker
`--reset` or ESLint suppressions.

This is a NON-required check by default per gate.yml convention (only the
checks explicitly listed in branch-protection rules are required). The job
will surface as a status check on every PR; specific path-failure
detection prevents the wrong-depth-`..` bug class from recurring on new
shards.

Local verify on origin/main + new files:
- 842 shards scanned (was 833 in tick 7; +9 from this session's merges)
- 10 grandfathered (matches baseline)
- 0 NEW findings
- exit 0

Composes with: audit-section-33-migration-xrefs.ts (sibling gate, same
lifecycle pattern), blocked-green-ci-investigate-threads.md (the rule
this catch surface mechanizes for tick-shard navigation specifically).

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

Adds a non-required CI lint job that enforces the tick-shard relative-path audit with the existing baseline, so new broken relative links fail while historical findings remain grandfathered.

Changes:

  • Adds lint-tick-shard-relative-paths to .github/workflows/gate.yml.
  • Runs the audit with --enforce --baseline.
  • Documents the lifecycle and rationale inline with the new job.

@AceHack AceHack merged commit 98935b7 into main May 16, 2026
34 checks passed
@AceHack AceHack deleted the feat/wire-tick-shard-relative-paths-ci-gate-otto-cli-2026-05-16 branch May 16, 2026 03:31
AceHack added a commit that referenced this pull request May 16, 2026
…3710) (#3711)

Tick 15: promoted the audit-lifecycle pattern to a canonical doc at
tools/hygiene/AUDIT-LIFECYCLE.md. 7-step pattern + 2 worked examples
(§33 audit ~4 weeks; tick-shard relative-path audit ~80 min single
session). Pre-emptive scanner-author findings documented to shorten
the quality iteration loop for future audit work.

All 3 prior-tick PRs (#3707/#3708/#3709) still armed + awaiting CI.

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

- Merged origin/main: adds 0322Z.md to tree so parent-tick link
  resolves at review time (was P0 copilot + P2 codex finding;
  link target existed on main but not on the PR branch)
- "landed" → "opened (armed for auto-merge)" for #3708, since
  the lifecycle table marks it as armed not merged (copilot)
- Table-syntax finding (||) is a false positive — table uses
  single | (line 18: `| ~~#3690~~ ...`)
AceHack added a commit that referenced this pull request May 16, 2026
… gate (PR #3708) (#3709)

* shard(tick): 2026-05-16T03:28Z — audit-script lifecycle CLOSED via CI gate (PR #3708)

3 PRs landed during tick 13 cycle (#3699 baseline mechanism, #3703 0316Z
shard, #3690 finally after MD038 fix). The audit-script lifecycle is now
structurally complete: discovery → narrow-fix → scanner → quality × 3 →
baseline → CI enforce gate. PR #3708 ships the gate.

Same §33-audit lifecycle pattern (PR #3513#3552 → enforce), compressed
across 14 ticks of one session.

Local gate-invocation verify on main + new files: 842 shards, 10
grandfathered, 0 NEW, exit 0. The earlier transient 0249Z.md:4 → 0240Z.md
finding self-resolved when PR #3690 merged.

TodoWrite adopted this tick for the 4-step gate-wire (wire → verify → PR →
shard). Aligned naturally with per-tick discipline.

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

* shard(tick): 0328Z — fix parent-tick link + status-term drift (PR #3709 review)

- Merged origin/main: adds 0322Z.md to tree so parent-tick link
  resolves at review time (was P0 copilot + P2 codex finding;
  link target existed on main but not on the PR branch)
- "landed" → "opened (armed for auto-merge)" for #3708, since
  the lifecycle table marks it as armed not merged (copilot)
- Table-syntax finding (||) is a false positive — table uses
  single | (line 18: `| ~~#3690~~ ...`)

---------

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

* docs(hygiene): land tools/hygiene/AUDIT-LIFECYCLE.md — reusable template

Promotes the audit-lifecycle pattern (discovery → narrow-fix → scanner →
quality iterations → baseline → CI enforce gate → maintenance) to a
canonical doc co-located with the hygiene-audit tooling.

Two worked examples documented:
1. §33 migration xrefs audit (PR #3513#3552 → enforce; ~4 weeks)
2. Tick-shard relative-path audit (PR #3676#3708; ~80 min single
   autonomous-loop session)

Captures the step-ordering rationale (why each step depends on the
previous), the mutable-vs-immutable surface distinction for baseline
strategy, and pre-emptive scanner-author findings worth implementing
in step 3 to shorten the quality iteration loop:
- sonarjs disable comment
- main export + import.meta.main guard
- generic URI scheme regex
- --files validation (existsSync + statSync.isFile)
- platform-correct PATH_SEP
- JSON output schema discipline
- baseline schema type guard

Local markdownlint clean.

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

* fix(pr-3710): 2 Copilot threads — role-refs + §33 PR-attribution correction

Two real Copilot findings on the §33 worked-example table:

P2 (line 37): direct name attribution outside allowed roster surfaces.
"Codex P2 catch on Riven section-33 archive migration" used Zeta persona
names inline. Replace with role-ref: "Reviewer P2 catch on the section-33
archive-migration PR". (Copilot stays as-is — it's an external automated-
reviewer role-ref, accepted style per existing gate.yml comments.)

Line 44 (factual error): I'd attributed BOTH baseline cleanup AND CI
enforce to PR #3552. Verified via git log + gh api:
- PR #3552 (Slice A): "baseline cleanup — 10 dead xrefs → 0"
- PR #3555 (Slice B.3 + B.4): "--enforce flag + gate.yml wiring"

Split the row: PR #3552 = "Baseline (cleanup-to-zero)"; PR #3555 = "CI enforce"
with sub-slice attribution preserved. Calendar duration range extended to
PR #3513 → PR #3555.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 16, 2026
…stale/FP) (#3715)

PR #3707 + #3708 merged. 6 new Copilot threads investigated:
- PR #3710 (AUDIT-LIFECYCLE.md): 2 real — name attribution (Codex/Riven →
  role-refs) + §33 PR-attribution factual error (PR #3552 baseline cleanup
  + PR #3555 CI enforce, not both #3552). Fixup cd7ba81.
- PR #3709 (0328Z shard): 4 threads — 2 stale (0322Z merged via #3707),
  1 minor prose-drift, 1 false-positive (4th time on table-pipes). All
  resolved no-op.

The Copilot table-pipe || hallucination is now a 4-time pattern (#3685,
#3690, #3699-era, #3709) — verify-first-resolve-no-op discipline.

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