Troubleshooting Charter Failures
This guide covers the most common Charter failure modes and how to fix them.
For background, see How Charter Works.
1. Stale bundle
Symptoms:
uv run spec-kitty charter statusreports drift betweencharter.mdand the bundlespec-kitty nextinjects outdated governance context into agent prompts- Agent behavior does not reflect recent changes you made to
charter.md
What is happening: charter.md was edited after the last synthesis run, so the derived
bundle files no longer match the authoritative source.
Fix:
# 1. Re-sync charter.md to YAML config files
uv run spec-kitty charter sync
# 2. Check for graph-native decay
uv run spec-kitty charter lint
# 3. Re-run synthesis
uv run spec-kitty charter synthesize
# 4. Re-validate the bundle
uv run spec-kitty charter bundle validate
# 5. Confirm no drift
uv run spec-kitty charter status
2. Missing doctrine
Symptoms:
uv run spec-kitty charter statusreports no bundle, an empty bundle, or missing.kittify/doctrine/spec-kitty nextfails or warns that no governance context is available- Agent prompts receive no Charter context
What is happening: The synthesis step has not been run, or the .kittify/doctrine/ directory
is missing or empty.
Fix:
# 1. Run the full synthesis flow
uv run spec-kitty charter synthesize
# 2. Validate
uv run spec-kitty charter bundle validate
# 3. Confirm
uv run spec-kitty charter status
If charter synthesize fails because charter.md does not exist:
# Run the interview and generate a charter.md first
uv run spec-kitty charter interview --profile minimal --defaults
uv run spec-kitty charter generate --from-interview
# Then synthesize
uv run spec-kitty charter synthesize
uv run spec-kitty charter bundle validate
3. Compact-context limitation
Symptoms:
- Governed mission actions receive incomplete Charter context
- Large project governance appears to be truncated in agent prompts
- Agents reference only a subset of your directives
What is happening: When the DRG context payload for an action is too large to include in full, the runtime falls back to compact-context mode — a summarized view that includes resolved paradigms, directives, and tool list but omits full doctrine library text.
This is a known limitation (see issue #787 in the project issue tracker; check that issue for current resolution status).
Workarounds:
- Reduce the scope of
charter.mdby removing directives that are not relevant to the current project phase or that overlap significantly with other directives. - Break a very large project governance layer into smaller, focused governance domains, each with its own charter.
- Use
charter resynthesize --topic <selector>to regenerate only the high-priority directives and ensure they are correctly represented in the DRG.
4. Retrospective gate failure
Symptoms:
spec-kitty nextblocks at mission terminus with a retrospective gate error- Mission cannot transition to
done - You see a message like "Charter does not authorize operator-skip in autonomous mode"
What is happening: The retrospective learning loop gate is blocking mission completion. In autonomous mode, the retrospective is mandatory and cannot be skipped. In HiC mode, the gate offered a retrospective and requires either running it or explicitly skipping it.
Fix for HiC mode:
# 1. View pending retrospective (summary)
uv run spec-kitty retrospect summary
# 2. Preview proposals for the blocked mission
uv run spec-kitty agent retrospect synthesize --mission my-feature-slug
# 3. Apply proposals (or skip in HiC mode by responding 'n' with a reason at the terminus prompt)
uv run spec-kitty agent retrospect synthesize --mission my-feature-slug --apply
Fix for autonomous mode: The retrospective cannot be skipped. If the facilitator failed:
# Check the retrospective record
# .kittify/missions/<mission_id>/retrospective.yaml
# View the summary for diagnostics
uv run spec-kitty retrospect summary
# Check for facilitator errors in the event log
# kitty-specs/<slug>/status.events.jsonl (filter by event_name prefix "retrospective.")
If the facilitator itself errored (exit code 2 with "Retrospective facilitator failed"), check
the retrospective YAML for schema errors and the status events file for the error event. Once
the underlying data issue is fixed, re-run spec-kitty next to retry the gate.
5. Synthesizer rejection
Symptoms:
uv run spec-kitty agent retrospect synthesize --mission <slug> --applyexits with non-zero code- Proposals are not applied
- The output shows "Conflict detection is fail-closed: no proposals applied"
What is happening: Two or more proposals conflict with each other (e.g., both try to add the same glossary term with different definitions). The synthesizer fails closed and applies nothing.
Fix:
# 1. Run dry-run to see the conflict details
uv run spec-kitty agent retrospect synthesize --mission my-feature-slug
# 2. Read the conflict report — it names the conflicting proposals and the conflicting field
# 3. Apply only the non-conflicting proposals, or edit the durable target surface manually
uv run spec-kitty agent retrospect synthesize --mission my-feature-slug --proposal-id P1 --apply
# 4. If you changed charter-derived state manually, re-run synthesis/validation as needed
uv run spec-kitty charter sync
uv run spec-kitty charter synthesize
uv run spec-kitty charter bundle validate
# 5. Re-run retrospect synthesize for the surviving proposal set
uv run spec-kitty agent retrospect synthesize --mission my-feature-slug --proposal-id P1 --apply
Diagnostic Quick Reference
| Question | Command |
|---|---|
| Is the bundle current? | uv run spec-kitty charter status |
| Are there graph decay issues? | uv run spec-kitty charter lint |
| Is the bundle schema valid? | uv run spec-kitty charter bundle validate |
| What retrospectives are pending? | uv run spec-kitty retrospect summary |
| What proposals exist for a mission? | uv run spec-kitty agent retrospect synthesize --mission <slug> |