I1985 — A knowledge candidate relates to its own decision and commit, not to the whole episode
Derive each candidate's relates_to and derived_from from the decision or event it records, deduplicate against facts the ledger already states, and skip decisions a later decision superseded.
DONE wave 1 · p2 · implementation profile · parallel safe
Objective
Derive each candidate's relates_to and derived_from from the decision or event it records, deduplicate against facts the ledger already states, and skip decisions a later decision superseded.
Why
In OSCILLA every candidate of one episode carries the same 52 relates_to targets and the same derived_from commits, so a decision of 10-01 cites commits from 10-04. Fact candidates restate a ledger line ('Task ... completed; verified by ...'), and a decision a later one superseded is copied verbatim.
Current state
lib/knowledge.sh relates each candidate to the episode's whole footprint.
Desired state
Each candidate cites what it is about. Superseded decisions and pure ledger echoes produce no candidate.
Scope
- lib/knowledge.sh
- lib/decision.sh
- test/cases
Dependencies
- I1984DONE Knowledge candidates never leave untracked files on a trunk that only pull requests change
Acceptance criteria
- A fixture episode with two decisions at two commits yields two candidates, each citing only its own commit
- A superseded decision yields no candidate
Validation
- bin/majordomus plan validate
- MJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>
Evidence required
- candidate_provenance_case
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| candidate_provenance_case | ci | gh run view --job 118758854505 --log (validate run 39438896504, suite-shard (3), runs bash test/run.sh 3210_a_candidate_cites_its_own_commit) | ok 3210_a_candidate_cites_its_own_commit 15s in suite-shard (3) of validate run 39438896504 on master 9a5a9b77520 (carries merge 2d3ee66dacf; case blob 10cdb3dfd0c identical on origin/master). The case proves both criteria: D1 cites only commit A and alpha.md, D3 only B and beta.md; superseded D2 yields no candidate ('2 written, 0 unchanged, 1 skipped'), knowledge check passes and a re-derive writes nothing | 91c0b5d |
Timeline
- started
- 2026-10-17T10:00:20Z
- verified
- —
- completed
- 2026-10-20T21:53:17Z
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/I1985.yaml. Read it back with majordomus plan show I1985.