@grainulation/wheat 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/bin/wheat.js +193 -0
  4. package/compiler/detect-sprints.js +319 -0
  5. package/compiler/generate-manifest.js +280 -0
  6. package/compiler/wheat-compiler.js +1229 -0
  7. package/lib/compiler.js +35 -0
  8. package/lib/connect.js +418 -0
  9. package/lib/disconnect.js +188 -0
  10. package/lib/guard.js +151 -0
  11. package/lib/index.js +14 -0
  12. package/lib/init.js +457 -0
  13. package/lib/install-prompt.js +186 -0
  14. package/lib/quickstart.js +276 -0
  15. package/lib/serve-mcp.js +509 -0
  16. package/lib/server.js +391 -0
  17. package/lib/stats.js +184 -0
  18. package/lib/status.js +135 -0
  19. package/lib/update.js +71 -0
  20. package/package.json +53 -0
  21. package/public/index.html +1798 -0
  22. package/templates/claude.md +122 -0
  23. package/templates/commands/blind-spot.md +47 -0
  24. package/templates/commands/brief.md +73 -0
  25. package/templates/commands/calibrate.md +39 -0
  26. package/templates/commands/challenge.md +72 -0
  27. package/templates/commands/connect.md +104 -0
  28. package/templates/commands/evaluate.md +80 -0
  29. package/templates/commands/feedback.md +60 -0
  30. package/templates/commands/handoff.md +53 -0
  31. package/templates/commands/init.md +68 -0
  32. package/templates/commands/merge.md +51 -0
  33. package/templates/commands/present.md +52 -0
  34. package/templates/commands/prototype.md +68 -0
  35. package/templates/commands/replay.md +61 -0
  36. package/templates/commands/research.md +73 -0
  37. package/templates/commands/resolve.md +42 -0
  38. package/templates/commands/status.md +56 -0
  39. package/templates/commands/witness.md +79 -0
  40. package/templates/explainer.html +343 -0
@@ -0,0 +1,68 @@
1
+ # /init — Bootstrap a Wheat research sprint
2
+
3
+ You are initializing a new Wheat research sprint. Have a focused conversation with the user to establish:
4
+
5
+ 1. **What are we figuring out?** Get a clear, specific question. Not "should we use X" but "should we use X given constraints Y and Z for audience A."
6
+ 2. **Who is the audience?** Who needs to be convinced or informed? (engineering leads, CTO, product, finance, etc.)
7
+ 3. **What constraints exist?** Budget, timeline, tech stack, compliance, team size, existing infrastructure.
8
+ 4. **What does done look like?** What artifact ends this sprint? A recommendation? A prototype? A go/no-go decision?
9
+
10
+ Once you have answers:
11
+
12
+ ## Step 1: Update CLAUDE.md
13
+
14
+ Update the Sprint section of CLAUDE.md with the question, audience, constraints, and success criteria.
15
+
16
+ ## Step 2: Seed claims.json
17
+
18
+ Update claims.json with:
19
+ - `meta.question` — the sprint question
20
+ - `meta.initiated` — today's date (ISO format)
21
+ - `meta.audience` — array of audience labels
22
+ - `meta.phase` — set to "define"
23
+ - `meta.connectors` — empty array
24
+
25
+ Add constraint claims (type: "constraint") for each hard requirement identified. Use IDs starting with `d001`. Each claim needs:
26
+ ```json
27
+ {
28
+ "id": "d001",
29
+ "type": "constraint",
30
+ "topic": "<relevant topic>",
31
+ "content": "<the constraint>",
32
+ "source": { "origin": "stakeholder", "artifact": null, "connector": null },
33
+ "evidence": "stated",
34
+ "status": "active",
35
+ "phase_added": "define",
36
+ "timestamp": "<ISO timestamp>",
37
+ "conflicts_with": [],
38
+ "resolved_by": null,
39
+ "tags": []
40
+ }
41
+ ```
42
+
43
+ ## Step 3: Run the compiler
44
+
45
+ ```bash
46
+ npx @grainulation/wheat compile --summary
47
+ ```
48
+
49
+ Verify compilation succeeds.
50
+
51
+ ## Step 4: Generate problem statement
52
+
53
+ Generate `output/problem-statement.html` — a clean, self-contained HTML page summarizing the sprint question, audience, constraints, and success criteria. Use the dark theme from the explainer template in `templates/`. Keep it to a single page — this is the "here's what we're investigating" artifact that can be shared immediately.
54
+
55
+ ## Step 5: Git commit
56
+
57
+ Stage claims.json, CLAUDE.md, output/problem-statement.html, and any other changed files.
58
+
59
+ Commit with message: `wheat: /init "<sprint question short>" — seeded <claim IDs>`
60
+
61
+ ## Step 6: Tell the user what's next
62
+
63
+ Tell them:
64
+ - Their problem statement is in `output/problem-statement.html` — they can open it in a browser and share it
65
+ - Next step: `/research <topic>` to start exploring, or `/connect` to link org tools
66
+ - Remind them that `/status` shows the dashboard at any time
67
+
68
+ $ARGUMENTS
@@ -0,0 +1,51 @@
1
+ # /merge — Combine Claim Sets Across Sprints
2
+
3
+ You are merging claims from another sprint into the current one. This is for when two teams researched the same problem independently and need to combine their findings.
4
+
5
+ ## Process
6
+
7
+ 1. **Parse the argument**: The user provides a path to another sprint's claims.json.
8
+ - Example: `/merge ../auth-sprint/claims.json`
9
+ - If no path given, ask for it.
10
+
11
+ 2. **Validate both claim sets**:
12
+ - Read the current `claims.json`
13
+ - Read the incoming claims file
14
+ - Validate both against the compiler schema:
15
+ ```bash
16
+ npx @grainulation/wheat compile --input <incoming-path> --output /tmp/wheat-merge-incoming.json
17
+ ```
18
+
19
+ 3. **Determine the sprint slug**: Derive from the incoming sprint's `meta.question`.
20
+
21
+ 4. **Resolve ID collisions**: Prefix all incoming claim IDs with the sprint slug:
22
+ - `r001` -> `auth-r001`
23
+ - Also update all `conflicts_with` and `resolved_by` references.
24
+
25
+ 5. **Align topics**: Present probable topic mappings for user confirmation.
26
+
27
+ 6. **Detect cross-sprint conflicts** and **identify evidence upgrades**.
28
+
29
+ 7. **Write merged claims.json** and compile:
30
+ ```bash
31
+ npx @grainulation/wheat compile --summary
32
+ ```
33
+
34
+ ## Git commit
35
+
36
+ Commit: `wheat: /merge <slug> — merged <N> claims from <source path>`
37
+
38
+ ## Tell the user
39
+
40
+ - How many claims were merged
41
+ - Topic alignment results
42
+ - Cross-sprint conflicts detected
43
+ - Suggest: `/resolve` for conflicts, `/blind-spot` for cross-sprint gaps
44
+
45
+ ## Cleanup
46
+
47
+ ```bash
48
+ rm -f /tmp/wheat-merge-*.json
49
+ ```
50
+
51
+ $ARGUMENTS
@@ -0,0 +1,52 @@
1
+ # /present — Generate a presentation from compiled claims
2
+
3
+ You are generating a presentation for this Wheat sprint. Same Bran compilation gate as /brief.
4
+
5
+ ## Process
6
+
7
+ 1. **Run the compiler with check**:
8
+ ```bash
9
+ npx @grainulation/wheat compile --check
10
+ ```
11
+
12
+ **If blocked, STOP.** Show errors, suggest fixes. Do not generate a presentation with unresolved conflicts.
13
+
14
+ 2. **Read compilation.json** — use ONLY `resolved_claims`.
15
+
16
+ 3. **Generate presentation HTML**: Create `output/presentation.html` — a self-contained, scroll-snap presentation using a dark theme.
17
+
18
+ Structure the slides as:
19
+ 1. **Title slide**: Sprint question, date, audience
20
+ 2. **The Problem**: Why this research was needed (from constraint claims)
21
+ 3. **What We Found**: Key research findings (2-3 slides, from factual claims)
22
+ 4. **What We Tested**: Prototype and evaluation results (from tested claims)
23
+ 5. **Tradeoffs**: Risks and estimates
24
+ 6. **Recommendation**: The compiled recommendation with evidence
25
+ 7. **Next Steps**: Concrete actions
26
+ 8. **Appendix**: Compilation certificate, claim count, evidence summary
27
+
28
+ Each slide should:
29
+ - Be visually clean (use the dark theme, accent colors, cards)
30
+ - Reference claim IDs subtly (small text at bottom of relevant sections)
31
+ - Include data visualizations where relevant (CSS-only charts, comparison tables)
32
+ - Work at any screen size (responsive)
33
+
34
+ ## Key rules
35
+
36
+ - Same compilation gate as /brief — no presentation without passing compilation
37
+ - Cite claims, but more subtly than the brief (this is for presenting, not auditing)
38
+ - The presentation should tell a story: problem -> investigation -> evidence -> recommendation
39
+
40
+ ## Git commit
41
+
42
+ Stage output/presentation.html.
43
+
44
+ Commit: `wheat: /present — generated presentation, certificate [hash]`
45
+
46
+ ## Tell the user
47
+
48
+ - Presentation is at `output/presentation.html` — open in browser, works for screen share
49
+ - Mention the compilation certificate for reproducibility
50
+ - Suggest `/feedback` after they present to capture stakeholder responses
51
+
52
+ $ARGUMENTS
@@ -0,0 +1,68 @@
1
+ # /prototype — Build something testable
2
+
3
+ You are building a proof-of-concept for the current Wheat sprint. Read CLAUDE.md for sprint context and claims.json for existing research claims.
4
+
5
+ ## Process
6
+
7
+ 1. **Determine what to prototype**: Based on the user's argument and existing research claims. If no argument given, look at the research and suggest the most promising option to test.
8
+
9
+ 2. **Build it**: Create a working prototype in `prototypes/<name>/`. This should be:
10
+ - Minimal — just enough to test the hypothesis
11
+ - Runnable — include a README or run script
12
+ - Measurable — produce output that can be evaluated
13
+
14
+ 3. **Also generate a demo artifact**: Create `prototypes/<name>/demo.html` — a self-contained HTML page that shows what the prototype does, with screenshots, code snippets, or interactive elements. Non-technical stakeholders should be able to understand the prototype from this page alone.
15
+
16
+ ## Claim updates
17
+
18
+ Every prototype finding becomes a claim with evidence tier `tested`:
19
+
20
+ ```json
21
+ {
22
+ "id": "p001",
23
+ "type": "factual",
24
+ "topic": "<what was tested>",
25
+ "content": "<what we found — be specific with numbers>",
26
+ "source": {
27
+ "origin": "prototype",
28
+ "artifact": "prototypes/<name>/",
29
+ "connector": null
30
+ },
31
+ "evidence": "tested",
32
+ "status": "active",
33
+ "phase_added": "prototype",
34
+ "timestamp": "<ISO timestamp>",
35
+ "conflicts_with": [],
36
+ "resolved_by": null,
37
+ "tags": []
38
+ }
39
+ ```
40
+
41
+ **Critical**: Check if any existing research claims (evidence: "web") are contradicted by prototype results. If so:
42
+ - Set `conflicts_with` on both claims
43
+ - The compiler will auto-resolve in favor of `tested` over `web`
44
+
45
+ Update `meta.phase` to "prototype" in claims.json if this is the first prototype.
46
+
47
+ ## Run the compiler
48
+
49
+ ```bash
50
+ npx @grainulation/wheat compile --summary
51
+ ```
52
+
53
+ Report evidence upgrades (research claims superseded by prototype findings).
54
+
55
+ ## Git commit
56
+
57
+ Stage claims.json and all new/changed files.
58
+
59
+ Commit: `wheat: /prototype "<name>" — added <claim IDs>`
60
+
61
+ ## Tell the user
62
+
63
+ - Point them to the demo.html and the actual prototype code
64
+ - Summarize what was tested and what was found
65
+ - Highlight any research claims that were confirmed or contradicted
66
+ - Suggest: more `/prototype` for other options, `/evaluate` to compare, or `/status` to see progress
67
+
68
+ $ARGUMENTS
@@ -0,0 +1,61 @@
1
+ # /replay — Time-Travel Through Sprint Evolution
2
+
3
+ You are reconstructing the historical evolution of this sprint by recompiling every version of claims.json from git history.
4
+
5
+ ## Process
6
+
7
+ 1. **Get the git history of claims.json**:
8
+ ```bash
9
+ git log --oneline claims.json
10
+ ```
11
+ This gives every commit that touched claims.json — the sprint event log.
12
+
13
+ 2. **Extract each historical version**: For each commit hash:
14
+ ```bash
15
+ git show <hash>:claims.json > /tmp/wheat-replay-<N>.json
16
+ ```
17
+
18
+ 3. **Recompile each version** with the current compiler:
19
+ ```bash
20
+ npx @grainulation/wheat compile --input /tmp/wheat-replay-<N>.json --output /tmp/wheat-comp-<N>.json
21
+ ```
22
+
23
+ 4. **Compute deltas** between consecutive compilations:
24
+ ```bash
25
+ npx @grainulation/wheat compile --diff /tmp/wheat-comp-<N-1>.json /tmp/wheat-comp-<N>.json
26
+ ```
27
+
28
+ 5. **Identify interesting moments** in each delta:
29
+ - Phase transitions (define -> research -> prototype -> evaluate)
30
+ - First time compilation went "ready"
31
+ - Peak conflict count
32
+ - Evidence tier jumps (topic going web -> tested)
33
+ - Claims added then superseded (the sprint changed its mind)
34
+
35
+ 6. **Generate replay HTML**: Create `output/replay.html` — a self-contained timeline visualization using a dark scroll-snap template. Include:
36
+ - Frame-by-frame scrubbing (each commit = one frame)
37
+ - Highlighted pivotal moments
38
+ - Coverage evolution chart
39
+ - Summary statistics per frame
40
+
41
+ 7. **Print a text summary** to the terminal with the key narrative moments.
42
+
43
+ ## Git commit
44
+
45
+ Commit: `wheat: /replay — generated sprint timeline (N frames)`
46
+
47
+ ## Tell the user
48
+
49
+ - How many frames (commits) were found
50
+ - The most interesting moments
51
+ - Point them to `output/replay.html` for the full interactive timeline
52
+ - Suggest: `/handoff` to package this narrative for a successor
53
+
54
+ ## Cleanup
55
+
56
+ Remove temporary files from /tmp after generating the output:
57
+ ```bash
58
+ rm -f /tmp/wheat-replay-*.json /tmp/wheat-comp-*.json
59
+ ```
60
+
61
+ $ARGUMENTS
@@ -0,0 +1,73 @@
1
+ # /research — Deep dive on a topic
2
+
3
+ You are researching a topic for the current Wheat sprint. Read CLAUDE.md for sprint context and claims.json for existing claims.
4
+
5
+ ## Process
6
+
7
+ 1. **Understand the request**: The user's argument tells you what to research. Could be a technology, a comparison, a question, a process.
8
+
9
+ 2. **Research deeply**: Use web search, read documentation, check connected repos (see Connectors in CLAUDE.md). Be thorough — this is the foundation for later decisions.
10
+
11
+ 3. **Extract claims**: Every finding becomes a typed claim. Be specific and verifiable. Bad: "Auth0 is popular." Good: "Auth0 serves 15,000+ customers as of 2025."
12
+
13
+ 4. **Detect conflicts with existing claims**: Check claims.json. If your new findings contradict existing claims, set `conflicts_with` on both the new and existing claim.
14
+
15
+ ## Adding claims
16
+
17
+ Append claims to claims.json with IDs continuing the `r###` sequence (check existing claims for the next number). Each claim:
18
+
19
+ ```json
20
+ {
21
+ "id": "r001",
22
+ "type": "factual|estimate|risk|recommendation",
23
+ "topic": "<topic category>",
24
+ "content": "<specific, verifiable finding>",
25
+ "source": {
26
+ "origin": "research",
27
+ "artifact": "research/<topic-slug>.md",
28
+ "connector": null
29
+ },
30
+ "evidence": "web",
31
+ "status": "active",
32
+ "phase_added": "research",
33
+ "timestamp": "<ISO timestamp>",
34
+ "conflicts_with": [],
35
+ "resolved_by": null,
36
+ "tags": ["<relevant tags>"]
37
+ }
38
+ ```
39
+
40
+ If the finding came from a connector (GitHub repo, Jira, etc.), set evidence to "documented" and fill in the connector field.
41
+
42
+ ## Run the compiler
43
+
44
+ ```bash
45
+ npx @grainulation/wheat compile --summary
46
+ ```
47
+
48
+ Check for new conflicts introduced. Report them to the user.
49
+
50
+ ## Generate HTML explainer
51
+
52
+ Create `research/<topic-slug>.html` — a self-contained HTML explainer using the dark scroll-snap template style. This should be:
53
+ - Beautiful and presentable (stakeholders will see this)
54
+ - Organized into logical sections (scroll-snap slides)
55
+ - Include key findings, comparisons, tradeoffs
56
+ - Reference claim IDs so findings are traceable
57
+
58
+ Also create `research/<topic-slug>.md` as the structured markdown source.
59
+
60
+ ## Git commit
61
+
62
+ Stage claims.json and all new files.
63
+
64
+ Commit: `wheat: /research "<topic>" — added <claim IDs>`
65
+
66
+ ## Tell the user
67
+
68
+ - Point them to the HTML file to open in browser
69
+ - Summarize key findings (3-5 bullets)
70
+ - Flag any conflicts with existing claims
71
+ - Suggest next steps: more `/research`, `/prototype`, or `/evaluate`
72
+
73
+ $ARGUMENTS
@@ -0,0 +1,42 @@
1
+ # /resolve — Manually adjudicate a conflict
2
+
3
+ You are manually resolving a conflict between claims that the compiler couldn't auto-resolve (same evidence tier).
4
+
5
+ ## Process
6
+
7
+ 1. **Run the compiler** to see current conflicts:
8
+ ```bash
9
+ npx @grainulation/wheat compile --summary
10
+ ```
11
+
12
+ 2. **If the user specified claim IDs** (e.g., `/resolve r012 e003`), focus on that conflict. Otherwise, show all unresolved conflicts and ask which to resolve.
13
+
14
+ 3. **Present both sides**: Show the conflicting claims with full context — content, evidence tier, source, when they were added.
15
+
16
+ 4. **Ask the user to decide** (or decide based on additional research if the user asks you to investigate).
17
+
18
+ 5. **Update claims.json**:
19
+ - Set the winning claim's status to `active`
20
+ - Set the losing claim's status to `superseded` and `resolved_by` to the winner's ID
21
+ - Remove the conflict references from `conflicts_with`
22
+
23
+ 6. **Run the compiler again**:
24
+ ```bash
25
+ npx @grainulation/wheat compile --summary
26
+ ```
27
+
28
+ Verify the conflict is resolved.
29
+
30
+ ## Git commit
31
+
32
+ Stage claims.json.
33
+
34
+ Commit: `wheat: /resolve <winner> over <loser> — "<reason>"`
35
+
36
+ ## Tell the user
37
+
38
+ - Confirm which claim won and why
39
+ - Show updated compilation status
40
+ - If all conflicts resolved, suggest `/brief` or `/present`
41
+
42
+ $ARGUMENTS
@@ -0,0 +1,56 @@
1
+ # /status — Render the sprint dashboard
2
+
3
+ You are generating the current status dashboard for this Wheat sprint.
4
+
5
+ ## Process
6
+
7
+ 1. **Run the compiler**:
8
+ ```bash
9
+ npx @grainulation/wheat compile --summary
10
+ ```
11
+
12
+ 2. **Read compilation.json** for all dashboard data.
13
+
14
+ 3. **Read git log** for recent activity:
15
+ ```bash
16
+ git log --oneline -20 claims.json
17
+ ```
18
+
19
+ 4. **Generate dashboard HTML**: Create/update `output/dashboard.html` — a self-contained dashboard page. The dashboard must show:
20
+
21
+ **Header**: Sprint question, current phase, compilation status (ready/blocked), days since initiation
22
+
23
+ **Phase Progress**: Visual progress through define -> research -> prototype -> evaluate -> compile. Show which phases have claims.
24
+
25
+ **Evidence Strength by Topic**: For each topic in coverage, show:
26
+ - Topic name
27
+ - Number of claims
28
+ - Highest evidence tier (with color coding: green=tested/production, amber=documented, red=web/stated)
29
+ - Visual bar representing depth
30
+
31
+ **Conflict Status**:
32
+ - Resolved conflicts with winner/loser and reason
33
+ - Unresolved conflicts highlighted as blockers
34
+ - "Compilation readiness" indicator
35
+
36
+ **Connected Sources**: List any connectors from meta
37
+
38
+ **Recent Activity**: From git log — the sprint timeline
39
+
40
+ **Claim Inventory**: Grouped by topic, showing type, evidence tier, and status for each claim
41
+
42
+ 5. **Also print a text summary to the terminal** so the user gets immediate feedback without opening a file.
43
+
44
+ ## Git commit
45
+
46
+ Only commit if the dashboard changed meaningfully. Don't commit for a status-only check.
47
+
48
+ Commit: `wheat: /status — updated dashboard`
49
+
50
+ ## Tell the user
51
+
52
+ - Print the text summary (phase, claim counts, conflicts, readiness)
53
+ - Point them to `output/dashboard.html` for the full visual dashboard
54
+ - Suggest next actions based on what's needed (resolve conflicts, fill coverage gaps, etc.)
55
+
56
+ $ARGUMENTS
@@ -0,0 +1,79 @@
1
+ # /witness — Targeted External Corroboration
2
+
3
+ You are corroborating (or contradicting) a specific claim using an external source. Read CLAUDE.md for sprint context and claims.json for existing claims.
4
+
5
+ ## Process
6
+
7
+ 1. **Parse arguments**: The user provides a claim ID and an external URL.
8
+ - Example: `/witness p001 https://nodejs.org/api/http.html`
9
+ - If only a claim ID is given, ask for the URL
10
+ - If only a URL is given, ask which claim to witness
11
+
12
+ 2. **Read the target claim** from claims.json. Understand what it asserts.
13
+
14
+ 3. **Fetch the external source**: Use web fetch to read the URL. If it's documentation, source code, or an article, extract the relevant content.
15
+
16
+ 4. **Classify the relationship** between the external evidence and the claim:
17
+ - **Full support** -> external source confirms the claim completely
18
+ - **Partial support** -> confirms some assertions but adds caveats
19
+ - **Partial contradiction** -> external source challenges some assertions
20
+ - **Full contradiction** -> external source directly contradicts the claim
21
+
22
+ 5. **Determine evidence tier** based on source type:
23
+ - Official docs (*.nodejs.org, docs.*, RFC) -> `documented`
24
+ - Blog posts, Stack Overflow, tutorials -> `web`
25
+ - GitHub source code, changelogs -> `documented`
26
+ - Production metrics, dashboards -> `production`
27
+
28
+ 6. **Create a witness claim**:
29
+
30
+ ```json
31
+ {
32
+ "id": "w001",
33
+ "type": "factual",
34
+ "topic": "<same topic as witnessed claim>",
35
+ "content": "<what the external source says, in relation to the witnessed claim>",
36
+ "source": {
37
+ "origin": "witness",
38
+ "witnessed_claim": "<target claim ID>",
39
+ "external_url": "<the URL>",
40
+ "relationship": "full_support|partial_support|partial_contradiction|full_contradiction",
41
+ "artifact": null,
42
+ "connector": null
43
+ },
44
+ "evidence": "<tier based on source type>",
45
+ "status": "active",
46
+ "phase_added": "<current phase>",
47
+ "timestamp": "<ISO timestamp>",
48
+ "conflicts_with": [],
49
+ "resolved_by": null,
50
+ "tags": ["witness", "<relevant tags>"]
51
+ }
52
+ ```
53
+
54
+ **Important relationship -> action mapping:**
55
+ - Full/partial support: No `conflicts_with`. The witness corroborates.
56
+ - Partial contradiction: Set `conflicts_with: ["<target claim ID>"]`. Explain the contradiction clearly in content.
57
+ - Full contradiction: Set `conflicts_with: ["<target claim ID>"]`. This becomes a challenge claim effectively.
58
+
59
+ 7. **Run the compiler**:
60
+ ```bash
61
+ npx @grainulation/wheat compile --summary
62
+ ```
63
+ Report corroboration count changes and any new conflicts.
64
+
65
+ ## Git commit
66
+
67
+ Stage claims.json.
68
+
69
+ Commit: `wheat: /witness <target claim ID> — added <witness claim IDs> (<relationship>)`
70
+
71
+ ## Tell the user
72
+
73
+ - What the external source says about the claim
74
+ - How you classified the relationship (and why, if ambiguous)
75
+ - Whether the witness introduced any conflicts
76
+ - The corroboration count for the witnessed claim
77
+ - Suggest: `/witness` for other uncorroborated claims, `/challenge` if partial contradiction warrants deeper investigation
78
+
79
+ $ARGUMENTS