Checks and GitHub
PR opened but no PolicyCodex check ever appears
PR opened but no PolicyCodex check ever appears
First: wait 2 minutes — the cron sweep runs every minute and evaluation is
asynchronous by design.
Then: tail the worker (
cd apps/mcp && npx wrangler tail) and re-trigger by
closing/reopening the PR. If you see
webhook for unclaimed installation <id> … ignored, the installation isn’t
linked to an org: check codex.github_installations for that installation_id.
Fix by connecting GitHub from Settings → Integrations while signed into the org
that should own it. One installation can only be claimed by one org (DB-unique);
the connect flow refuses to steal an installation another org holds, with a clear
error.Check stuck as an eternal spinner
Check stuck as an eternal spinner
Historical failure (pre 2026-08-11): an in_progress check run orphaned when a
deploy evicted the isolate. Current code creates check runs already-completed, so
a spinner today means GitHub is showing a queued check the ruleset requires but
the App hasn’t reported — same diagnosis path as “no check appears”.
Violating PR shows a green check
Violating PR shows a green check
- Confirm the statement is enforced (approved = advisory, does not block).
- Check the org’s model: Settings → LLM. Weak models miss real findings —
openai/gpt-4.1is the validated reference; Anthropic-via-OpenRouter breaks the JSON response format entirely. - Replay the exact input:
gh pr diff <n>piped to/v1/check(see Smoke tests) —statements_consideredtells you which org’s corpus the key saw; a surprising number means the wrong key. - Remember diff-only limits: a diff cannot prove a missing OpenAPI entry; repo-tree evidence helps, full scans close the rest.
Red PR is still mergeable
Red PR is still mergeable
The check only blocks if a ruleset/branch protection requires it. On GitHub’s
free plan, required checks need a public repo (private repos 403 with “Upgrade to
Pro”). Verify the repo has a ruleset requiring
PolicyCodex pinned to
integration 4542396.Full scan 429s: "scanned too recently"
Full scan 429s: "scanned too recently"
Per-repo cooldown. Wait a few minutes, or (internal estates only) delete the
org’s
pending_scans row to clear the cooldown.Scan finds nothing on a repo with known violations
Scan finds nothing on a repo with known violations
Confirm the file types are scannable (code + markdown extensions, 400-file/55k-char
caps) and that the scan-mode prompt is in effect — a regression to the diff-framed
prompt makes scans blind. Probe with the known-bad file contents via
/v1/check
and compare against the eval suite.Authoring and extraction
Every save fails with "fix frontmatter before saving"
Every save fails with "fix frontmatter before saving"
The current revision’s
body_md is missing its YAML frontmatter block —
body_md must hold the full composed document. Happens when content was
seeded/imported wrongly. Fix: paste the frontmatter block back into the editor
and save (creates a complete new revision); fix the seeding source too.Extraction failed after approval
Extraction failed after approval
Approval survives extraction failure by design. Common causes: free-plan org
without
llm_extraction (HTTP 402 from the function) → upgrade or expect
manual statements; LLM output rejected by schema (rare since synonym
normalization — check the function logs in the Supabase dashboard). Re-approving
the RFC re-runs extraction.Import spec rejected
Import spec rejected
The importer converts and validates but never auto-approves; Zod errors are shown
verbatim. Most common: non-ISO
created dates and RFC 2119 synonym levels in
hand-written JSON.Platform
A fix was merged but production behaviour is unchanged
A fix was merged but production behaviour is unchanged
Almost always a deploy-matrix miss: the artifact that owns the behaviour wasn’t
redeployed — especially
packages/core changes, which require redeploying
every consumer, and Edge Functions, which deploy one-by-one. Check the
deploy matrix. For the worker, verify secrets
survived: npx wrangler secret list must show 8; the GitHub trio has
vanished after dashboard changes before, and a missing MODEL silently degrades
/v1/check.Site serves the old bundle after a deploy
Site serves the old bundle after a deploy
Pages custom domains can lag a few seconds after a deployment reports Active.
Confirm with the asset-hash probe in Environments
before escalating.

