I3415 — knowledge promote refuses evidence that names no reference existing in this checkout, and knowledge.promoted records the references it stood on
Require the promote evidence on stdin to contain at least one typed reference (file:, test:, commit:, issue:, claim:, knowledge:, rule: or adr:) that resolves through the existing resolver (mj_knowledge_resolve_refs, lib/knowledge.sh:1832). Otherwise refuse with exit 10 and write nothing. Add the resolved references to the knowledge.promoted ledger line as an evidence array declared in share/events.yaml. Update the documented examples and the fixtures that promote with prose. A reference that resolves exists; it is not proof, and the promoted record reads as decided.
BLOCKED wave 4 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until I3414, milestone:knowledge-is-reconciled-before-it-is-reviewed are done. The status is derived from that, not declared.
Objective
Require the promote evidence on stdin to contain at least one typed reference (file:, test:, commit:, issue:, claim:, knowledge:, rule: or adr:) that resolves through the existing resolver (mj_knowledge_resolve_refs, lib/knowledge.sh:1832). Otherwise refuse with exit 10 and write nothing. Add the resolved references to the knowledge.promoted ledger line as an evidence array declared in share/events.yaml. Update the documented examples and the fixtures that promote with prose. A reference that resolves exists; it is not proof, and the promoted record reads as decided.
Why
The owner's 2026-10-19 Cognitive Fabric pack rules out promotion on the ground that models agree (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/03_KNOWLEDGE.md). verification/ACCEPTANCE.md has a row on absent evidence and a force-promote negative fixture, and contracts/ARCHITECTURE.md asks to verify before promoting.
Current state
lib/knowledge.sh:1586-1591 accepts any non-blank stdin without a transcript marker, and the knowledge.promoted line at :1616 carries id and path only. Case 709:60 promotes with free prose, and case 3004:77 with prose naming a case. docs/CLI.md:1560 documents a prose example, projected into site/content/docs/cli-specification.md and site/data/generated/commands.json.
Desired state
A promoted record always stands on at least one reference that existed when it was promoted, and the ledger says which.
Scope
- lib/knowledge.sh
- test/cases/709_knowledge_promotion_is_an_act.sh
- test/cases/3004_evolve_is_a_procedure_of_existing_commands.sh
- docs/CLI.md
- site/content/docs/cli-specification.md
- site/data/generated/commands.json
- docs/KNOWLEDGE.md
- site/content/docs/knowledge.md
- docs/claims/knowledge-promotion-is-an-act.md
- site/content/guarantees/knowledge-promotion-is-an-act.md
- .ai/repo/skills/evolve/SKILL.md
- share/events.yaml
Out of scope
- Deciding whether an agent may promote (an owner question)
- Judging whether the evidence proves the statement
- Bulk promotion
Dependencies
What waits on this
Acceptance criteria
- Prose with no typed reference is refused with exit 10, and the candidate stays unchanged
- A typed reference that does not resolve is refused with exit 10 and is named in the message
- Evidence citing a tracked test path promotes, and knowledge.promoted carries that reference in the declared evidence array
- knowledge check passes on the promoted record in a fresh clone
- Every documented example promotes with a resolvable reference, and the projected pages follow from scripts/derive
Validation
- bash test/run.sh 709_knowledge_promotion_is_an_act 3004_evolve_is_a_procedure_of_existing_commands 707_knowledge_check_refuses_malformed_records
- majordomus knowledge check
- majordomus plan validate
Evidence required
- case_promotion_cites_resolvable_evidence
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/I3415.yaml. Read it back with majordomus plan show I3415.