Hook Gates
These gate IDs appear in terminal output as BLOCKED [H-xx]: <message> (a blocking
hook, exit 2) or REMINDER [H-xx]: <message> (an advisory hook, exit 0). This page is
generated at build time directly from the block()/remind() call sites in
plugins/ca/hooks/*.py, so it can never drift from what a hook actually prints.
A `{placeholder}` shown in a message is an f-string interpolation — the hook fills
it in with a run-time value (a file path, a branch name, a count) when it actually fires.
Blocking
Event(s): PreToolUse (Bash|PowerShell), PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
pre-bash guard crashed while scanning this command — failing closed (ORCHESTRATOR §2) rather than silently allowing an unscanned command. See the traceback above; retry, or report it.
pre-edit guard crashed while scanning this Edit — failing closed (ORCHESTRATOR §2) rather than silently allowing an unscanned edit. See the traceback above; retry, or report it.
pre-write guard crashed while scanning this Write — failing closed (ORCHESTRATOR §2) rather than silently allowing an unscanned write. See the traceback above; retry, or report it.
Blocking
Event(s): git backstop
branch state could not be determined (git unavailable or timed out) — failing closed (ORCHESTRATOR §2). Retry, or verify you are not on main/master before committing/pushing.
HEAD’s protected-branch-tip state could not be determined (git unavailable or timed out) — failing closed (ORCHESTRATOR §2). Retry, or verify HEAD before committing.
Direct commit to
{target}is prohibited (ORCHESTRATOR §3). Create a feature branch.
‘git push —all’ / ‘—mirror’ publish every local ref (including main) (ORCHESTRATOR §3) — main moves only via a merged PR. Push an explicit feature refspec.
Pushing to a protected branch (‘
{tok}’) is prohibited (ORCHESTRATOR §3) — main moves only via a merged PR.
Bare
git pushfrom main/master publishes the protected branch (ORCHESTRATOR §3) — main moves only via a merged PR.
‘git -C
{cwd}’ does not resolve to an existing directory — failing closed (ORCHESTRATOR §2). Verify the -C target exists before committing/pushing.
branch state could not be determined (git unavailable or timed out) — failing closed (ORCHESTRATOR §2, #161 git backstop).
HEAD’s protected-branch-tip state could not be determined (git unavailable or timed out) — failing closed (ORCHESTRATOR §2, #161 git backstop).
Direct commit to
{target}is prohibited (ORCHESTRATOR §3) — this is the git-level backstop (#161). Create a feature branch.
Pushing to a protected branch (‘
{rref}’) is prohibited (ORCHESTRATOR §3, #161 git backstop) — main moves only via a merged PR.
Blocking
Event(s): git backstop
Force-push is prohibited (ORCHESTRATOR §3).
Force-push / non-fast-forward update is prohibited (ORCHESTRATOR §3, #161 git backstop).
Blocking
Event(s): (none registered)
‘git add -A’ / ‘git add .’ / ‘git add —all’ / ‘git add -u’ are prohibited. Stage files explicitly (commit-gate skill).
Wildcard staging is prohibited —
{why}stages a non-explicit file set. Stage files explicitly, one path per file (commit-gate skill).
Blocking
Event(s): PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
The .codearbiter audit logs (overrides.log, triage.log, sprint-log.md, gate-events.log) are append-only (ORCHESTRATOR §7). Truncating, overwriting, or deleting the audit trail is prohibited; append with ’>>’ only.
MultiEdit cannot guarantee a pure append to an append-only .codearbiter audit log (overrides.log, triage.log, sprint-log.md) (ORCHESTRATOR §7). Append with a single Edit or ’>>’.
An Edit with replace_all=true on an append-only .codearbiter audit log (overrides.log, triage.log, sprint-log.md) cannot be a verifiable pure append (ORCHESTRATOR §7) — replace_all rewrites every matching occurrence, not just the file’s tail. Append with ’>>’, or a single non-replace_all Edit whose old_string is the file’s current trailing content.
An Edit with an empty old_string on an append-only .codearbiter audit log (overrides.log, triage.log, sprint-log.md) cannot be a verifiable pure append (ORCHESTRATOR §7) — every string starts with the empty string. Append with ’>>’, or a single Edit whose old_string is the file’s current trailing content.
The .codearbiter audit logs (overrides.log, triage.log, sprint-log.md) are append-only (ORCHESTRATOR §7). This Edit alters existing audit lines; only pure appends are permitted (new text must extend the old text).
The .codearbiter audit logs (overrides.log, triage.log, sprint-log.md) are append-only (ORCHESTRATOR §7). This Edit’s old_string is not the file’s current TRAILING content — a mid-file insertion reorders the audit record even though new_string extends old_string. Append with ’>>’, or a single Edit whose old_string is exactly the file’s current tail.
The .codearbiter audit logs (overrides.log, triage.log, sprint-log.md) are append-only (ORCHESTRATOR §7). Append with Edit or ’>>’, never Write.
The .codearbiter audit logs (overrides.log, triage.log, sprint-log.md) are append-only (ORCHESTRATOR §7). A patch cannot express a verifiable pure append; append with ’>>’ instead.
Advisory
Event(s): PostToolUse (Write|Edit)
Dependency manifest changed. Dispatch dependency-reviewer before committing (ORCHESTRATOR §5).
Advisory
Event(s): PostToolUse (Write|Edit)
Crypto/TLS pattern detected. Run the crypto-compliance check + dispatch auth-crypto-reviewer (no MD5/SHA1/DES/3DES/RC2/RC4/Blowfish; do not disable TLS verification). The commit will block until the gate records a pass.
Blocking
Event(s): git backstop
the diff for the crypto/secret security scan could not be read (git unavailable or timed out) — failing closed (ORCHESTRATOR §2). Retry, or run the crypto-compliance / secret-handling gate, then commit.
This commit introduces
{kind}changes, but no security-gate pass is recorded (.codearbiter/.markers/security-gate-passed). Run the{skill}gate (it records the pass), then commit. To bypass a security gate, /override requires its heavier security-acknowledgement path.
{len(uncovered)}{kind}line(s) in this commit are not covered by the recorded security-gate pass — the pass is bound to the exact lines it reviewed, and these changed (or appeared) after it ran. Re-run the{skill}gate so it reviews the current diff and re-records the binding, then commit.
the staged diff for the crypto/secret scan could not be read — failing closed (ORCHESTRATOR §2).
This commit introduces
{kind}changes, but no security-gate pass is recorded (#161 git backstop). Run the{skill}gate, then commit.
{len(uncovered)}{kind}line(s) in this commit are not covered by the recorded security-gate pass (#161 git backstop) — re-run the{skill}gate so it reviews the current diff, then commit.
Advisory
Event(s): PostToolUse (Write|Edit)
Possible hardcoded secret. Run the secret-handling check before committing. The commit will block until the gate records a pass.
Blocking
Event(s): git backstop
This commit introduces
{kind}changes, but no security-gate pass is recorded (.codearbiter/.markers/security-gate-passed). Run the{skill}gate (it records the pass), then commit. To bypass a security gate, /override requires its heavier security-acknowledgement path.
{len(uncovered)}{kind}line(s) in this commit are not covered by the recorded security-gate pass — the pass is bound to the exact lines it reviewed, and these changed (or appeared) after it ran. Re-run the{skill}gate so it reviews the current diff and re-records the binding, then commit.
This commit introduces
{kind}changes, but no security-gate pass is recorded (#161 git backstop). Run the{skill}gate, then commit.
{len(uncovered)}{kind}line(s) in this commit are not covered by the recorded security-gate pass (#161 git backstop) — re-run the{skill}gate so it reviews the current diff, then commit.
Blocking
Event(s): PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
ADR files under .codearbiter/decisions/ are authored only via /adr and are immutable history (ORCHESTRATOR §6) — shell writes, edits, and deletions there are prohibited.
ADR files are edited only via /adr (ORCHESTRATOR §3) — user attribution required.
ADR authoring marker is stale (>30 min). Re-run /adr.
ADR files under .codearbiter/decisions/ are immutable history (ORCHESTRATOR §6) — deleting one is prohibited, marker or not.
ADR files are authored only via /adr (ORCHESTRATOR §3) — user attribution required. Subagent-authored ADRs are prohibited.
ADR authoring marker is stale (>30 min). Re-run /adr.
Advisory
Event(s): PostToolUse (Write|Edit)
{rel}is governed by ADR-{entry['adr']}({entry['title']}). If this change contradicts it, route to{get_host().cmd_ref('reconcile')}or{get_host().cmd_ref('adr')}— do not drift silently.
Advisory
Event(s): PostToolUse (Write|Edit)
{rel}: em/en dash used as a prose separator on line(s){shown}``{more}(anti-slop-design §3.A). Restructure the prose and run the §3.A/§3.B copy self-audit before committing.
Blocking
Event(s): git backstop
the file list for the migration scan could not be read (git unavailable or timed out) — failing closed (ORCHESTRATOR §2). Retry, or run the migration-review gate, then commit.
{len(uncovered)}staged migration file(s) lack a recorded migration-review pass:{', '.join(uncovered)}. commit-gate dispatches migration-reviewer and records the pass via hooks/migration-pass.py; run that review, then commit. To bypass a migration gate, /override logs the exception.
the staged file list for the migration scan could not be read — failing closed (ORCHESTRATOR §2).
{len(uncovered)}staged migration file(s) lack a recorded migration-review pass (#161 git backstop):{', '.join(uncovered)}. Run the migration-review gate, then commit.
Advisory
Event(s): PostToolUse (Write|Edit)
CI/CD workflow changed. Dispatch security-reviewer before merging (it reviews workflow/secrets/permissions exposure). Advisory — not a commit block.
Advisory
Event(s): PostToolUse (Write|Edit)
Deployment/IaC manifest changed. Dispatch security-reviewer before merging (it reviews exposed ports, public ACLs, disabled encryption, privilege). Advisory — not a commit block.
Advisory
Event(s): PostToolUse (Write|Edit)
Auth/authorization logic detected. Dispatch security-reviewer before merging (authn on every protected route; authz at the right layer). Advisory — not a commit block.
Blocking
Event(s): PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
.codearbiter/CONTEXT.md is the activation switch every enforcement hook reads (#159) — shell rewrites, edits, or deletions that could flip
arbiter: enabledoff or corrupt its frontmatter are prohibited. Edit it through the sanctioned init path.
This Edit would remove or alter the
arbiter: enabledfrontmatter in .codearbiter/CONTEXT.md (#159) — the activation switch every enforcement hook reads. Disabling it from inside the repo would make every gate dormant. Keeparbiter: enabledin a well-formed frontmatter block.
This Write would remove or alter the
arbiter: enabledfrontmatter in .codearbiter/CONTEXT.md (#159) — the activation switch every enforcement hook reads. Disabling it from inside the repo would make every gate dormant. Keeparbiter: enabledin a well-formed frontmatter block.
This patch operation edits or deletes .codearbiter/CONTEXT.md (#159) — the activation switch every enforcement hook reads — and its resulting frontmatter cannot be verified from patch hunks. Failing closed; use the sanctioned init path (or ).
Blocking
Event(s): PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
The .codearbiter/.markers/ security-gate-passed / migration-gate-passed tokens are recorded only by the sanctioned gate producers (#160) — a shell redirect, write verb, or interpreter invocation (python/node/perl/ruby/sh) naming a gate marker forges a security/migration gate pass and is prohibited.
The .codearbiter/.markers/ gate tokens are not editable via the Edit tools (#160) — editing one forges or tampers with a security/migration/ADR gate pass. Markers are recorded only by the sanctioned gate producers.
The .codearbiter/.markers/ gate tokens are not writable via the Write tool (#160) — a hand-written marker forges a security/migration/ADR gate pass. Markers are recorded only by the sanctioned gate producers.
Blocking
Event(s): (none registered)
‘—no-verify’ / ‘-n’ on git commit skips the .git/hooks git-enforce backstop entirely (appsec-002) — every commit-time gate (H-01/H-02/H-09b/H-10b/H-14) would go unenforced for this commit. Remove the flag; use /override for a sanctioned bypass.
‘—no-verify’ on git push skips the .git/hooks git-enforce backstop entirely (appsec-002) — every push-time gate would go unenforced for this push. Remove the flag; use /override for a sanctioned bypass.
Blocking
Event(s): PreToolUse (Edit|MultiEdit|NotebookEdit), PreToolUse (Write)
This edit could not be decomposed into per-file operations, so its targets cannot be guarded. Failing closed. Retry, or report it.
This patch envelope could not be decomposed into per-file operations, so its targets cannot be guarded. Failing closed. Re-issue the change as a plain patch in the documented apply_patch grammar (or split it into smaller single-file patches).