Contradiction Inbox
What you'll do
Open, inspect, and triage local contradiction reports — the workflow-level conflicts that don't necessarily map to Stigmem memory conflicts. By the end you'll know how to file a report, the fields every report carries, and how local reports relate to Stigmem-level conflicts.
Local contradiction report
A first-class workflow record for "two things disagree" — docs vs. implementation, handoff vs. branch state, reviewer vs. implementer, public docs vs. internal-only content. Not the same as a Stigmem memory conflict, though it can reference one.
Open a report
craik contradictions open \
--task-id task_review_docs \
--summary "Docs conflict with implementation." \
--fact fact_docs_planned \
--fact fact_cli_implemented \
--affected-artifact README.md \
--evidence-id evidence_readme_status \
--owner user:maintainer
List and inspect
craik contradictions list --status open
craik contradictions show \
contradiction_task_review_docs_docs_conflict_with_implementation
What a report carries
open · resolved · dismissed · linked_to_stigmem.Reports are local workflow items. They're redacted before storage and appear in work-graph exports when linked to a task.
Local reports vs Stigmem conflicts
Local contradiction report
- Workflow-level conflict between artifacts or runtime decisions.
- Examples: docs disagree with implementation; a handoff disagrees with branch state; a reviewer result disagrees with an implementer result; public docs contain content that should be internal.
- Resolved by editing artifacts, updating intent locks, or filing a new task.
- Lives in Craik local state.
Stigmem memory conflict
- Memory-substrate conflict between facts in Stigmem.
- Tracked by Stigmem itself, with its own contradiction-handling primitives.
- Resolved through Stigmem's federation / approval flow.
- Requires explicit memory-write authority to resolve from inside Craik.
When a Stigmem conflict matches a local contradiction, store its id in
stigmem_conflict_id. The local report becomes the workflow tracking
layer; Stigmem handles the memory-substrate resolution.
A pragmatic resolution flow
Read the evidence. Confirm both sides of the conflict are substantiated. If one side has no evidence, the resolution is to drop that side.
Decide which artifact moves. Often the conflict is signal that docs, code, or a fact needs to change — not that both should somehow coexist.
File the change as a new task. The contradiction report names the problem; a follow-up task with its own intent lock and case file does the work.
Update the report on resolution. Mark
resolved(ordismissedwith reason). The report stays addressable for audit.Link to Stigmem if applicable. When the conflict touches a memory fact, set
stigmem_conflict_idso the trail is joinable.