# Marketplace Escape-Hatch Marker Reference

> **Auto-generated** from the iter-111 canonical producer-marker registry at
> `plugins/itp-hooks/hooks/lib/marketplace-wide-escape-hatch-producer-marker-canonical-registry-cross-plugin-iter111.ts`.
> Do NOT edit this file directly — edits will be overwritten by the iter-113 generator on next regeneration.
> To add or modify a marker, edit the registry source and re-run:
>
> ```bash
> mise run generate-marketplace-escape-hatch-marker-reference-documentation-from-iter111-canonical-registry
> ```

## Quick navigation

Jump directly to any of the 20 registered markers below. Markers are listed alphabetically within each lifecycle layer.

**Runtime-hook markers** (12; consumed by Pre/PostToolUse hooks via iter-107 helper on every Write/Edit/Bash invocation):

- [`BASH-LAUNCHD-OK`](#bash-launchd-ok)
- [`CARGO-TTY-SKIP`](#cargo-tty-skip)
- [`CARGO-TTY-WRAP`](#cargo-tty-wrap)
- [`CWD-DELETE-OK`](#cwd-delete-ok)
- [`FILE-SIZE-OK`](#file-size-ok)
- [`INIT-MONOLITH-OK`](#init-monolith-ok)
- [`INLINE-IGNORE-OK`](#inline-ignore-ok)
- [`LAYER3-STRIPPED-PATH-OK`](#layer3-stripped-path-ok)
- [`PROCESS-STORM-OK`](#process-storm-ok)
- [`PUEUE-LOCAL-OK`](#pueue-local-ok)
- [`SETPROCTITLE-OK`](#setproctitle-ok)
- [`SSoT-OK`](#ssot-ok)

**Audit-task markers** (8; consumed by `.mise/` audit tasks once per release-preflight):

- [`ESCAPE-HATCH-AUDIT-OK`](#escape-hatch-audit-ok-audit-task)
- [`HOOK-OUTPUT-SIZE-CAP-OK`](#hook-output-size-cap-ok-audit-task)
- [`MATCHER-NO-MULTIEDIT-OK`](#matcher-no-multiedit-ok-audit-task)
- [`ORDERING-OK`](#ordering-ok-audit-task)
- [`POSTTOOLUSE-RAW-STDOUT-OK`](#posttooluse-raw-stdout-ok-audit-task)
- [`SPAWN-SYNC-OK`](#spawn-sync-ok-audit-task)
- [`STOP-HOOK-ADDITIONAL-CONTEXT-OK`](#stop-hook-additional-context-ok-audit-task)
- [`WILDCARD-MATCHER-OK`](#wildcard-matcher-ok-audit-task)

## Purpose

The marketplace honors two FAMILIES of escape-hatch markers — RUNTIME-HOOK markers (consumed by Pre/PostToolUse hooks via the iter-107 shared helper on every Write/Edit/Bash invocation) and AUDIT-TASK markers (consumed by .mise/ release-preflight audit tasks via bash grep, fired once per release). This document catalogs every legitimate marker token from BOTH families with its consumer reference, case-sensitivity policy, window-semantics policy (runtime markers only), reason policy, and operator-readable description.

## How to use this reference

1. Identify the hook whose enforcement you want to suppress (e.g., `process-storm-guard`, `file-size-guard`).
2. Locate the corresponding marker section below.
3. Write the marker into your source file using the example syntax.
4. The hook will recognize the marker on next invocation and skip its check for that file.

## Marketplace invariants (audit-enforced)

- **iter-110 STRICT-BLOCK** (release preflight Check 4s): every consumer hook in the canonical cohort must route its marker detection through the iter-107 shared helper. Silent removal of a cohort member's helper import fails release.
- **iter-111 informational** (release preflight Check 4t): every producer-side marker token written in any marketplace file must appear in the canonical registry. Unregistered tokens are flagged as POTENTIAL TYPOS.
- **iter-113 informational** (release preflight Check 4u): the on-disk `docs/marketplace-escape-hatch-marker-reference.md` (this file) must be in sync with the canonical registry source. Drift is reported via the iter-113 doc-drift detector.

## Runtime-hook marker catalog (12 registered markers consumed by iter-107 shared helper)

These markers are honored by PreToolUse/PostToolUse hooks at runtime — they suppress a specific hook's enforcement for a specific file or command. Detection runs on EVERY matching tool invocation.

## `BASH-LAUNCHD-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-native-binary-guard.ts` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a bash-shebang script OR a plist `/bin/bash` ProgramArguments reference in a macOS launchd file (~/.claude/automation/, ~/Library/LaunchAgents/, ~/Library/LaunchDaemons/) — the hook normally requires a compiled native binary so System Settings > Login Items shows the executable's actual name instead of generic 'bash'. Accepted in plist files as `<!-- BASH-LAUNCHD-OK -->`.

**Example usage**:

```
# BASH-LAUNCHD-OK
```

## `CARGO-TTY-SKIP`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-cargo-tty-guard.ts` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Opt OUT of cargo-tty-guard's automatic PUEUE-wrapping of `cargo bench/test/build` commands. Use when the operator has confirmed there is no TTY-suspension risk (e.g., cargo invocation already redirects stdin) — the guard will pass the command through unchanged instead of redirecting to PUEUE.

**Example usage**:

```
# CARGO-TTY-SKIP
```

## `CARGO-TTY-WRAP`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-cargo-tty-guard.ts` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Opt IN to cargo-tty-guard's PUEUE-wrapping even when the heuristic doesn't trigger automatically. Used when the operator knows their cargo invocation will inherit a contested TTY and wants the daemon path explicitly.

**Example usage**:

```
# CARGO-TTY-WRAP
```

## `CWD-DELETE-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/cwd-deletion-patterns.mjs` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a bash command that the cwd-deletion-guard would otherwise block as a CWD-deleting `rm -rf` (or equivalent). Used when the operator has verified the rm target is safe (e.g., target is a sibling, not the CWD itself, and the regex false-positives).

**Example usage**:

```
# CWD-DELETE-OK
```

## `FILE-SIZE-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-file-size-guard.ts` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a file to exceed file-size-guard's per-extension warn/block thresholds. Default marker token; can be overridden per-project via `.claude/file-size-guard.json` `escapeComment` field — but the helper always runs in CASE_SENSITIVE mode (substring match on the literal token, regardless of marker spelling).

**Example usage**:

```
# FILE-SIZE-OK
```

## `INIT-MONOLITH-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-pyi-stub-guard.ts` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow top-level `class`/`def`/decorator definitions in a Python `__init__.py` or `__init__.pyi` file. The hook normally enforces PEP 561 + clean-package-structure (init files MUST be thin re-export layers); this opt-out covers legitimate cases like temporary scaffolding or libraries that genuinely require the monolith shape.

**Example usage**:

```
# INIT-MONOLITH-OK
```

## `INLINE-IGNORE-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-inline-ignore-guard.ts` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Window-semantics mode** | `SAME_LINE_ONLY` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a single inline lint-suppression comment (covering the four families: Python ruff suppressions, Python ty type-checker suppressions, ESLint per-line and per-block suppressions, and the Bun-ecosystem fast-linter suppressions) on the SAME LINE as this marker. Used when a tool/library limitation genuinely requires the suppression — config-file-level suppression in ruff/ty/oxlint/biome configuration files is still strongly preferred when possible.

**Example usage**:

```
# INLINE-IGNORE-OK
```

## `LAYER3-STRIPPED-PATH-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-iter78-layer3-stripped-path-edit-time-guard.ts` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Window-semantics mode** | `SAME_LINE_OR_PRECEDING_N_LINES` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Allow a `${CLAUDE_PLUGIN_ROOT}/<segment>/` reference where `<segment>` is NOT in the iter-76 cache-populator allowlist (hooks, skills, commands, agents, plugin.json). REQUIRES a ≥10-character reason after the colon (e.g., `LAYER3-STRIPPED-PATH-OK: deliberate scratch-dir reference for migration spike`). Marker is honored on the same line OR within the preceding 3 lines.

**Example usage**:

```
# LAYER3-STRIPPED-PATH-OK: explain the deliberate exception here in at least 10 characters
```

## `PROCESS-STORM-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/process-storm-patterns.mjs` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a bash command or file content that the process-storm-guard would otherwise block (fork-bomb pattern, gh-recursion subshell, mise-activate-in-zshenv, subprocess-in-while-true, etc.). Used pervasively in daemon entry points (gmail-commander bots, calcom-commander bots, autoloop heartbeat) where the pattern is intentional.

**Example usage**:

```
# PROCESS-STORM-OK
```

## `PUEUE-LOCAL-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-pueue-local-guard.ts` |
| **Case-sensitivity mode** | `CASE_INSENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a `pueue` command that targets a remote daemon (the guard normally enforces local-only targeting to prevent accidentally queueing work on the wrong host). NOTE: pueue-local-guard is NOT YET migrated to the iter-107 helper (iter-112+ candidate); this registry entry is forward-looking and the audit treats this marker as known even before the migration lands.

**Example usage**:

```
# PUEUE-LOCAL-OK
```

## `SETPROCTITLE-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/posttooluse-reminder.ts` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Suppress the setproctitle-reminder PostToolUse hint, which fires when a Python service or daemon file is edited but does not import `setproctitle`. Used when the file is genuinely NOT a long-running service (e.g., a short-lived CLI invocation or a one-shot script that happens to share filename patterns with daemon code). Iter-112 migration: pre-iter-112 detection used `fileContent.includes("# SETPROCTITLE-OK")` (required leading `# ` comment prefix); iter-112 routes through the canonical helper in CASE_SENSITIVE / FILE_WIDE mode (pure substring match on `SETPROCTITLE-OK`), which also accepts `// `, `<!-- `, or no comment prefix — matching the UPPER-KEBAB-CASE-never-collides substring convention used by the other 11 registry entries.

**Example usage**:

```
# SETPROCTITLE-OK
```

## `SSoT-OK`

| Field | Value |
| ----- | ----- |
| **Consumer hook** | `plugins/itp-hooks/hooks/pretooluse-version-guard.ts` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Window-semantics mode** | `FILE_WIDE` |
| **Reason policy** | Bare marker accepted (no reason required) |

**What it does**: Allow a hardcoded version string (e.g., `v1.2.3`) in a markdown file that the version-guard would otherwise block as a single-source-of-truth violation. Mixed-case spelling `SSoT-OK` is grandfathered (NOT renamed to `SSOT-OK`) because operators have been using this exact spelling since the version-guard was first authored.

**Example usage**:

```
# SSoT-OK
```

## Audit-task marker catalog (8 registered markers consumed by .mise/ release-preflight audit tasks)

These markers are honored by .mise/ audit tasks at release-preflight time — they opt a specific source file out of a release-blocking marketplace-wide invariant check. Detection runs ONCE per release (not on every tool invocation). Audit markers commonly require a ≥10-character reason after a colon because legitimate exceptions to release-blocking invariants demand justification.

## `ESCAPE-HATCH-AUDIT-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-marketplace-wide-escape-hatch-marker-detection-inventory-with-recommendation-to-migrate-hand-rolled-patterns-to-iter107-canonical-shared-helper.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-110 STRICT-BLOCK escape-hatch-marker detection invariant for a specific hook source file. This invariant enforces that every consumer hook in the canonical cohort routes its marker detection through the iter-107 shared helper. Use this opt-out ONLY for a documented architectural exception (e.g., a future hook that must use bash-grep detection rather than the helper for performance-critical reasons in a verified hot path). Requires ≥10-character justification after the colon.

**Example usage**:

```
# ESCAPE-HATCH-AUDIT-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `HOOK-OUTPUT-SIZE-CAP-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-pretooluse-and-posttooluse-hook-classifiers-for-unbounded-reason-emission-not-wrapped-in-canonical-truncation-helper-against-claude-file-spillover-threshold-iter105-marketplace-scale-of-iter104-single-hook-fix.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-105 marketplace-wide unbounded-emission truncation-helper invariant for a specific PreToolUse or PostToolUse hook classifier. The invariant enforces that every classifier wraps its decision-reason output through the iter-106 canonical truncation helper to stay below Claude's 10,000-character hook-output file-spillover threshold. Use this opt-out for classifiers whose reason emission is provably bounded by a smaller invariant (e.g., a 500-char fixed-format message). Requires ≥10-character justification.

**Example usage**:

```
# HOOK-OUTPUT-SIZE-CAP-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `MATCHER-NO-MULTIEDIT-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-pretooluse-and-posttooluse-hook-matchers-for-write-or-edit-without-multiedit-coverage-gap-surfaced-by-iter100-postooluse-orchestrator-matcher-broadening-scaled-to-marketplace-invariant.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-101 matcher-hygiene invariant for a specific hook entry. The invariant enforces that any hook matcher containing `Write|Edit` also includes `MultiEdit` (because MultiEdit is a distinct tool name in the Claude Code tool schema — pre-iter-100 hooks that matched `Write|Edit` silently skipped MultiEdit invocations). Use this opt-out for the rare hook that deliberately ignores MultiEdit (e.g., a hook that only operates on single-file Write operations and has no semantic for batch edits). Requires ≥10-character justification.

**Example usage**:

```
# MATCHER-NO-MULTIEDIT-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `ORDERING-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-pretooluse-pueue-wrap-guard-is-last-pretooluse-entry-in-hooks-json-to-mitigate-github-15897-multi-hook-updatedInput-aggregation-last-writer-wins-bug.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-61 pueue-wrap-guard last-entry ordering invariant for a specific hook entry. The invariant enforces that `pretooluse-pueue-wrap-guard.ts` is the LAST PreToolUse Bash-matcher entry in any `hooks.json`, mitigating GitHub anthropics/claude-code#15897 (multi-hook updatedInput aggregation last-writer-wins bug). Use this opt-out only when a downstream PreToolUse hook MUST run after pueue-wrap-guard (rare). Requires ≥10-character justification.

**Example usage**:

```
# ORDERING-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `POSTTOOLUSE-RAW-STDOUT-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-no-raw-stdout-emission-in-posttooluse-typescript-hooks-because-anthropic-schema-routes-non-json-stdout-to-operator-transcript-only-and-silently-drops-it-from-claude-context.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-99 raw-stdout-emission invariant for a specific PostToolUse TypeScript hook. The invariant enforces that PostToolUse hooks emit ONLY decision-JSON to stdout (per the official Anthropic schema, non-JSON stdout from PostToolUse is silently dropped from Claude's context and only reaches operator transcripts). Use this opt-out for hooks that emit raw stdout INTENTIONALLY as transcript-only debug output (e.g., the iter-66 Stop-orchestrator stderr-aggregation path). Requires ≥10-character justification.

**Example usage**:

```
# POSTTOOLUSE-RAW-STDOUT-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `SPAWN-SYNC-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-no-bun-spawnsync-in-posttooluse-orchestrator-subhooks-because-it-defeats-promise-all-parallelism-per-bun-docs-and-2026-community-guidance.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-94 no-Bun.spawnSync invariant for a specific PostToolUse orchestrator subhook. The invariant enforces that classifiers inlined into the iter-93 PostToolUse multi-aggregation orchestrator use `Bun.spawn` (async) rather than `Bun.spawnSync` — the latter halts the JS event loop and defeats `Promise.all` parallelism (per Bun docs + 2026 community guidance). Use this opt-out for subhooks where a verified architectural constraint requires synchronous semantics. Requires ≥10-character justification.

**Example usage**:

```
# SPAWN-SYNC-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `STOP-HOOK-ADDITIONAL-CONTEXT-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-stop-hooks-for-additionalContext-emission-which-claude-code-silently-drops-per-official-anthropic-schema-only-decision-and-reason-fields-are-read-from-stop-hook-stdout-json.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-67 / iter-68 / iter-69 Stop/SubagentStop/SessionEnd/PreCompact/Notification additionalContext-emission silent-drop pentad invariant for a specific hook source file. The invariant enforces that the five lifecycle-tail event types emit ONLY {decision, reason} per the official Anthropic schema (additionalContext from these events is silently read by NO consumer and dropped from Claude's context). Use this opt-out for hooks that emit additionalContext INTENTIONALLY to make iter-66-style stderr-route output explicit. Requires ≥10-character justification.

**Example usage**:

```
# STOP-HOOK-ADDITIONAL-CONTEXT-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## `WILDCARD-MATCHER-OK` (audit-task)

| Field | Value |
| ----- | ----- |
| **Consumer audit task** | `.mise/tasks/audit-pretooluse-and-posttooluse-hooks-for-wildcard-matcher-star-or-null-which-cold-starts-bun-on-every-tool-call-causing-12-17ms-cpu-or-latency-waste-per-non-meaningful-invocation.sh` |
| **Case-sensitivity mode** | `CASE_SENSITIVE` |
| **Reason policy** | Reason required after colon — minimum 10 characters |

**What it does**: Opt out of the iter-65 wildcard-matcher invariant for a specific Pre/PostToolUse hook entry. The invariant enforces that no hook matcher is `*` or null (because wildcard matchers cold-start bun on every tool call, costing ~12-17ms CPU/latency per non-meaningful invocation — measured by the iter-80 bun-startup-floor profiler). Use this opt-out for hooks that legitimately need to fire on every tool call regardless of tool name (rare; usually a more specific matcher exists). Requires ≥10-character justification.

**Example usage**:

```
# WILDCARD-MATCHER-OK: explain the deliberate exception to this release-blocking invariant in at least 10 characters
```

## Marketplace UPPER-KEBAB-CASE convention

All markers follow the UPPER-KEBAB-CASE-OK shape (except `SSoT-OK` which is grandfathered mixed-case). This convention was chosen because UPPER-KEBAB-CASE tokens never collide with code identifiers, so substring matching is safe across all comment styles (`#`, `//`, `<!-- -->`) and prefix variants (with or without leading prefix).

## Adding a new marker

1. Implement the consumer-side detection in the hook source file using `hasFileWideEscapeHatchMarkerInContent(...)` or `detectEscapeHatchMarkerCoveringTargetSourceLine(...)` from `plugins/itp-hooks/hooks/lib/shared-escape-hatch-marker-detection-helper-cross-pretooluse-and-posttooluse-iter107.ts`.
2. Add an entry to the registry at `plugins/itp-hooks/hooks/lib/marketplace-wide-escape-hatch-producer-marker-canonical-registry-cross-plugin-iter111.ts`.
3. Add the consumer hook to the iter-110 canonical-cohort array in `.mise/tasks/audit-marketplace-wide-escape-hatch-marker-detection-inventory-...`.
4. Re-run `mise run generate-marketplace-escape-hatch-marker-reference-documentation-from-iter111-canonical-registry` to regenerate this document.
5. Commit all four changes atomically.

## Related documentation

- [HOOKS.md — iter-107 → iter-113 escape-hatch consolidation arc](./HOOKS.md)
- [iter-111 canonical registry source](../plugins/itp-hooks/hooks/lib/marketplace-wide-escape-hatch-producer-marker-canonical-registry-cross-plugin-iter111.ts)
- [iter-107 shared helper source](../plugins/itp-hooks/hooks/lib/shared-escape-hatch-marker-detection-helper-cross-pretooluse-and-posttooluse-iter107.ts)
