I3168 — An intent, milestone or issue cites the campaign that drove it, and a campaign answers which records cite it
Accept a campaign:<id>[/<path>] reference in the one provenance.derived_from of intent, milestone and issue records (ADR 0211), refuse a dangling one with the same finding in both plan engines, and derive the reverse relation on the campaign object.
BLOCKED wave 1 · p2 · implementation profile · parallel safe
Part of campaigns-are-read-as-provenance — A prompt pack is a campaign the index serves and the plan cites.
Blocked. This issue cannot start until I3167 is done. The status is derived from that, not declared.
Objective
Accept a campaign:<id>[/<path>] reference in the one provenance.derived_from of intent, milestone and issue records (ADR 0211), refuse a dangling one with the same finding in both plan engines, and derive the reverse relation on the campaign object.
Why
Owner, 2026-10-13: intent <=> prompt pack <=> milestones/issues reflected everywhere; ADR 0124: a derived item links back to the revision and section that justified it. Proposed in ADR 0180 (A prompt pack is a campaign: kept as received, indexed as a kind, and cited by the records it drove) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c245#9.
Current state
No reference type; packs and records are joined by nobody; plan validate dispatches to the shell engine and case 99_plan_capabilities compares both engines' findings.
Desired state
Citations validated both ways.
Scope
- share/schemas/majordomus/intent
- share/schemas/majordomus/milestone
- share/schemas/majordomus/issue
- apps/majordomus-cli/src/plan.rs
- apps/majordomus-cli/src/graph.rs
Out of scope
- The drag-and-drop upload view (ui-surfaces)
Dependencies
What waits on this
- I3170BLOCKED An execution of a record that cites a campaign pins the revision it ran, and a later revision changes nothing about it
- I3275BLOCKED An intent's inspector shows the campaign segments it was derived from
Acceptance criteria
- A dangling citation is refused
- The campaign lists citing records
- Each new case named here takes its number from `scripts/case-numbers next` and is announced on the board before the file is written (ADR 0053); a case number written in this record before that is provisional
Validation
- majordomus plan validate
- bash test/run.sh 99_plan_capabilities
Evidence required
- case_record_cites_campaign
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3168.yaml. Read it back with majordomus plan show I3168.