Skip to main content
Version: MVP

Contradiction Inbox

5 min readFor reviewersUpdated 2026-05-19

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

File a contradiction
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

Open queue
craik contradictions list --status open
One report and its linked evidence
craik contradictions show \
contradiction_task_review_docs_docs_conflict_with_implementation

What a report carries

Field
Type
Purpose
conflicting_facts
fact_id[] · text[]
The fact ids or plain-language statements in conflict.
affected_artifacts
artifact_ref[]
Files, docs, or PRs the contradiction touches.
evidence_ids
evidence_id[]
Evidence references that show the conflict directly.
owner
operator_uri
Who is responsible for resolving this report.
proposed_resolution
text
The reporter's suggested resolution. Reviewers can override.
status
enum
open · resolved · dismissed · linked_to_stigmem.
stigmem_conflict_id
id (optional)
The matching Stigmem memory conflict, when one exists.

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

  1. Read the evidence. Confirm both sides of the conflict are substantiated. If one side has no evidence, the resolution is to drop that side.

  2. Decide which artifact moves. Often the conflict is signal that docs, code, or a fact needs to change — not that both should somehow coexist.

  3. 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.

  4. Update the report on resolution. Mark resolved (or dismissed with reason). The report stays addressable for audit.

  5. Link to Stigmem if applicable. When the conflict touches a memory fact, set stigmem_conflict_id so the trail is joinable.

What's next