I3167 — A campaign is a kind of the index: every pack under campaigns/ is an object with its manifest digest, served read-only
Make campaign a kind of the index through a tracked YAML index outside campaigns/ (one member per pack: id, path, date, origin, revision digest) read by the existing members mechanism of share/kinds.yaml, so every pack rides the index onto CLI, MCP, HTTP and OpenAPI; the revision digest is defined from campaigns/MANIFEST.sha256; the site keeps not publishing pack bodies.
READY wave 0 · 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.
Ready. Every dependency is done, so majordomus plan start I3167 will be accepted.
Objective
Make campaign a kind of the index through a tracked YAML index outside campaigns/ (one member per pack: id, path, date, origin, revision digest) read by the existing members mechanism of share/kinds.yaml, so every pack rides the index onto CLI, MCP, HTTP and OpenAPI; the revision digest is defined from campaigns/MANIFEST.sha256; the site keeps not publishing pack bodies.
Why
campaigns/README.md: 'Nothing here is loaded by the tool'. Owner, 2026-10-10: better integrate tracking of prompt packs and uploads. 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:c297#9.
Current state
52 packs (ls -d campaigns/*/ | wc -l at 707a04c), one campaigns/MANIFEST.sha256 for all of them, scripts/ci/campaigns-check and case 340; no kind; share/kinds.yaml reads one file per object or the members of one YAML list.
Desired state
majordomus://campaign/<id> for every pack.
Scope
- share/kinds.yaml
- campaigns/README.md
- share/allow
- .ai/repo/knowledge/sources.yaml
- apps/majordomus-cli/src/metadata/mod.rs
- docs/SCHEMAS.md
- test/cases/340_a_brief_is_kept_as_received.sh
Out of scope
- Publishing pack bodies
Dependencies
None. This issue is a root of the graph.
What waits on this
- I3168BLOCKED An intent, milestone or issue cites the campaign that drove it, and a campaign answers which records cite it
- I3169BLOCKED A new pack enters campaigns/ through one command that checks the archive before writing a byte
- I3272BLOCKED A received brief is a campaign revision pinned by its manifest digest, and the same bytes again are the same revision
Acceptance criteria
- Every pack resolves by id with its digest
- A pack missing from the manifest is a finding, as campaigns-check already holds
Validation
- bin/majordomus-cli generate --check
- bash test/run.sh 340_a_brief_is_kept_as_received
Evidence required
- test_campaign_kind
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/I3167.yaml. Read it back with majordomus plan show I3167.