## 1 · playground-presence-warner

PreToolUse/Bash · 100 LOC · ORK_DISABLE_PLAYGROUND_WARNER
Trigger
Bash command matches `git push` or `gh pr create`
Skips
main / master / develop / dev · dependabot/* · renovate/* · release-please*
Check
Does `docs/<branch-slug>/*.html` exist? (slug = branch with `/` → `--`)
If missing
Inject advisory context with mkdir/touch fix command. Push proceeds.
$ git push -u origin feat/m128-bundle-x-monitor-quickwins
[playground-presence-warner] Branch feat/m128-bundle-x-monitor-quickwins has no playground at
docs/feat--m128-bundle-x-monitor-quickwins/. The CI playground-check
job will reject this PR unless you add at least one HTML file there.
Quick fix: mkdir -p docs/feat--m128-bundle-x-monitor-quickwins
&& touch docs/feat--m128-bundle-x-monitor-quickwins/explorer.html
(Advisory — push not blocked.)

## 2 · delete-branch-stacked-pr-guard

PreToolUse/Bash · 124 LOC · ORK_DISABLE_DELETE_BRANCH_GUARD
Trigger
Bash matches `gh pr merge ... --delete-branch`
Resolves
PR ref → headRefName via `gh pr view`. No-arg form → current branch.
Check
`gh pr list --base <headRefName> --state open` for stacked PRs
If found
Lists dependent PRs + retarget command. Merge proceeds.
$ gh pr merge 1567 --squash --delete-branch
[delete-branch-stacked-pr-guard] About to merge with --delete-branch on
chore/m126-count-sync-followup, but 1 open PR(s) target it as base:
- #1568 feat(M127): cost-hygiene A1 — CI fork-subagent
Deleting the branch will auto-CLOSE these PRs and they CANNOT be
reopened or retargeted via API. Either retarget them first
(gh pr edit 1568 --base main) or drop --delete-branch.
(Advisory — merge not blocked.)

## 3 · claude-md-byte-budget

PostToolUse/Write · 76 LOC · ORK_DISABLE_CLAUDE_MD_BUDGET
Trigger
Write or Edit on a file whose basename is `CLAUDE.md`
Limits
soft: 4320 B (90%) · hard: 4800 B (matches `tests/perf/test-token-overhead.sh`)
Below soft
silent
Soft → hard
"Approaching CI budget: NB / 4800B"
Above hard
"CI test-token-overhead.sh will FAIL — extract to docs/<topic>.md"
$ Edit CLAUDE.md (added Background Monitors section, +14 lines)
[claude-md-byte-budget] CI test-token-overhead.sh will FAIL (5726B > 4800B limit, +926B over).
Extract the most recent additions to docs/<topic>.md and leave a 1-line
pointer in CLAUDE.md.

## Why these three?

Friction this fixes | 3 of 5 PRs in the 2026-04-30 batch hit each of these issues
Total new code | ~300 LOC across 3 hooks · 0 new dependencies
Performance impact | ~5ms per push/merge/CLAUDE.md edit (advisory only)
Opt-out | 3 env vars · each hook independently disable-able
Coverage | Registered in dispatchers (sync-bash-dispatcher, unified-write-quality-dispatcher) — 0 new hook-spawn cost