Skip to content

shard(tick): 2026-05-16T03:22Z — PR #3690 markdownlint MD038 unblock + sweep#3707

Merged
AceHack merged 3 commits into
mainfrom
shard/tick-0322z-otto-cli-2026-05-16
May 16, 2026
Merged

shard(tick): 2026-05-16T03:22Z — PR #3690 markdownlint MD038 unblock + sweep#3707
AceHack merged 3 commits into
mainfrom
shard/tick-0322z-otto-cli-2026-05-16

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 16, 2026

PR #3690 had been 'armed, awaiting CI' since tick 6 (~70 min ago) — diagnosed today as a REQUIRED check FAILURE on lint (markdownlint). MD038/no-space-in-code triggered on backslash-quote-git-space-backslash-quote (trailing space in code span) at 0240Z.md:20. Fixed via commit 81b2f1a.

Sweep of all 2026-05-16 shards on main: 0 other MD038 violations.

Lesson: required-check failures are distinct merge-block class from unresolved-threads + non-required warnings. poll-pr-gate.ts's nextAction field disambiguates ('fix-failed-checks' vs 'resolve-threads' vs 'wait-ci' vs 'none').

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

…+ sweep

PR #3690 had been "armed, awaiting CI" since tick 6 (~70 min ago) — turned
out to be a REQUIRED check FAILURE on lint (markdownlint), not "still
running". MD038/no-space-in-code triggered on `git ` (trailing space inside
backticks) at 0240Z.md:20.

Fixup 81b2f1a: rewrite "prepend `git ` to" → "prepend the `git` prefix to".
Same semantic, no trailing space in code span. markdownlint-cli2 local
exit 0.

Sweep of all 2026-05-16 shards on main: 0 other MD038 violations.

Lesson: required-check failures are a distinct merge-block class from
unresolved-threads + non-required-check warnings. poll-pr-gate.ts's
nextAction field disambiguates. PR #3701 also merged 03:16:50Z (carry-over).

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 16, 2026 03:23
@AceHack AceHack enabled auto-merge (squash) May 16, 2026 03:23
Same MD038 class I described in this very shard. Line 44 used a literal
backtick-git-space-backtick to illustrate the bug pattern, which IS the
bug. Inside fenced code blocks (lines 41, 51) the pattern is safe.

Rewrite line 44 to describe the pattern in prose without using the literal
trailing-space-in-backticks form. markdownlint-cli2 → exit 0.

Lesson: pre-commit MD038 self-check would have caught this before push.
Adding to the discipline list.

Co-Authored-By: Claude <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 adds a tick-history shard documenting the PR #3690 markdownlint MD038 investigation, fix, and follow-up operational lessons.

Changes:

  • Adds the 2026-05-16T03:22Z hygiene-history tick shard.
  • Records the required-check failure diagnosis for PR #3690.
  • Captures MD038 lessons and next-tick follow-up candidates.

Comment thread docs/hygiene-history/ticks/2026/05/16/0322Z.md
Comment thread docs/hygiene-history/ticks/2026/05/16/0322Z.md Outdated
Comment thread docs/hygiene-history/ticks/2026/05/16/0322Z.md
The sweep description on L58 duplicated "main" ("on origin/main main").
Tightening to "on \`origin/main\`" preserves the intent (sweep target =
the main branch) and clarifies it's a ref-name, not free text.

The other two Copilot threads on this PR are addressed in the reply:
- L44 MD038 alarm is a false positive (the literal `` `git ` `` instances
  live inside ` ```text ` fenced blocks; MD038 only fires on inline code
  spans; markdownlint exits 0 locally).
- L33 cross-reference to 0240Z.md is no longer stale — PR #3690 has
  merged and the file is present on main.

Co-Authored-By: Claude <noreply@anthropic.com>
@AceHack AceHack merged commit 38f6117 into main May 16, 2026
24 checks passed
@AceHack AceHack deleted the shard/tick-0322z-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
…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>
AceHack added a commit that referenced this pull request May 16, 2026
)

* feat(hygiene): bundled pre-push self-check helper for tick shards

Bundles the three self-checks I've been running per-tick this session
into one command: MD032 paragraph-before-bullet awk-style scan +
markdownlint-cli2 (the broad markdown surface including MD038) +
audit-tick-shard-relative-paths (the dedicated relative-path audit).

Motivation: today's self-bite tick 13 saw an MD038 violation ship to
PR #3707 because I didn't run markdownlint before push; the required CI
check failed and blocked merge for 70+ min. A bundled helper shortens
the local-feedback loop from "push + wait for CI" to "single command
+ immediate output."

DX helper, not a CI gate. CI gates remain authoritative.

Usage:
  bun tools/hygiene/check-shard-before-push.ts <shard-path>...

Exit codes:
  0   all checks passed
  1   one or more checks failed
  64  argument error (missing files, non-files, no args)

Local verify:
- Clean shard (0334Z.md): exit 0; all 3 checks ok
- Bad shard (synthetic MD032 + MD038): exit 1; specific findings printed
- Missing file: exit 64 with structured "input not found"
- No args: exit 64 with usage
- bun --bun tsc --noEmit: exit 0
- markdownlint-cli2 on this file: exit 0

Composes with: audit-tick-shard-relative-paths.ts (the audit it wraps),
AUDIT-LIFECYCLE.md (the lifecycle template that motivates pre-push
catches), the §33 audit's same pattern.

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

* fix(pr-3716): 3 Copilot findings — substring fragility, fenced-code MD032, parseArgs exit

Three real findings on PR #3716, fixed:

L114 (substring fragility): runRelativePathAudit relied on out.includes(
"0 broken relative-path links") as the success signal. Fragile to future
wording tweaks AND ignored r.status entirely. Replace with:
  1. r.status !== 0 → unambiguous failure (echo stdout+stderr+status)
  2. Parse the "N broken relative-path links" count via regex; "0" = ok
  3. Unrecognized output format → fail loud, echo, don't silent-pass

L69 + L74/L75 + (3 duplicate threads on fenced-code MD032): the
checkMd032 scan didn't track fence state, so a `- ` line inside ```...```
was flagged as a false-positive MD032 violation. Add buildCodeFenceFlags
(same pattern as audit-tick-shard-relative-paths.ts) and skip lines
inside fences. Verified with a synthetic shard containing a bullet
inside a code block — was reported FAIL pre-fix, now reports OK.

L124 (parseArgs process.exit): parseArgs called process.exit(64) directly
on no-args, blocking unit-test of the no-args branch even though main is
exported for testability. Replace with a typed ParseResult discriminated
union ({ok:true,args} | {ok:false,exitCode:64,message}); main inspects
the result and exits itself.

Skipped (P2 optional, scope creep): multi-file batching of spawn calls.
Markdownlint-cli2 + audit script accept multiple files natively; could
reduce wall-clock for N>1 invocations. Filing for future iteration if
multi-shard usage materializes.

Local verify (5 tests):
- Clean shard (0334Z.md): exit 0
- Bad shard (MD032 + MD038): exit 1, both findings printed
- Fence-shard (- bullet inside ```text```): exit 0 ← fix verified
- No args: exit 64 via main (was via process.exit inside parseArgs)
- tsc --noEmit: exit 0

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

---------

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