Direct port of research/tracing-knowledge-lineages (obra/superpowers-skills, not yet vendored). Distinct from the traceability skill (that's forward spec→ADR→commit linkage; this is backward "why does X exist, was Y tried before and abandoned, is a 'new' idea actually a revival").
Techniques to port: decision archaeology (search docs/adr, git log --all --grep, ask the author), failed-attempt analysis (don't assume a past failure means the approach is flawed — trace context that may no longer apply), revival detection, paradigm-shift mapping. Full SKILL.md content already fetched during research — reuse it, adapt phrasing away from obra's generic "your human partner" tone to this workspace's conventions.
Direct port of `research/tracing-knowledge-lineages` (obra/superpowers-skills, not yet vendored). Distinct from the `traceability` skill (that's forward spec→ADR→commit linkage; this is backward "why does X exist, was Y tried before and abandoned, is a 'new' idea actually a revival").
Techniques to port: decision archaeology (search docs/adr, `git log --all --grep`, ask the author), failed-attempt analysis (don't assume a past failure means the approach is flawed — trace context that may no longer apply), revival detection, paradigm-shift mapping. Full SKILL.md content already fetched during research — reuse it, adapt phrasing away from obra's generic "your human partner" tone to this workspace's conventions.
Shipped in 39ac61c, with the tool #19 asks for rather than prose about running git by hand.
lineage.sh
Runs the archaeology searches and — the part that matters — states what it could not search. Seven tests against a synthetic repo where a thing is built, documented, then deleted.
The RED baseline was strong: fourteen steps, correct verdict, and it split the proposal into "a goal worth having and a mechanism that cannot work here", which is the finding. But it never ran git log -S, and it leaned hardest on the issue tracker. Both facts shaped the skill more than the original issue's technique list did.
The GREEN run broke the tool live, which is the best outcome available
Asked about a feature this repo removed and argued about at length, lineage.sh "per repo" printed:
no trace of "per repo" in . — not in any commit message, any diff, or any decision record. That is a real finding: it means this is new here, not that the search was wrong.
Flatly wrong — the term had a space in it. And as the run pointed out, the skill's own anti-pattern table forbids exactly that inference:
The tool's output asserts exactly the inference the table forbids.
A tool printing, in its own voice, the mistake its skill warns against. A no-match now says it is one string against one repo and names the variants to try; the test asserts the refusal rather than the old message.
Three more, all real
The decision-record search looked in docs/adr/*. This repo has no docs/, and this estate keeps decisions in the brain and in gitea comments — so that section silently searched nothing on every run, and its null was indistinguishable from a real one. It now names both unsearchable sources every time, and brain_query is a step in the sequence: the single best artifact in the GREEN run, the generalized rule with detection one-liners, came from the brain and nowhere else.
Step 1 steered readers away from what actually works. It said -S was for when you do not know where the code lived, and recommended path-scoped log otherwise. Backwards — a function deleted from a file that still exists is the dominant removal shape, and the path search buries it under every other commit touching that file. -S<identifier> returns birth and death on one screen. Rewritten to lead with it.
"Which conditions still hold" had no method. The run answered it by running four commands against the live host in twenty seconds — readlink on a tracked symlink, grep on the ignore file, grep on doctor's scan scope — and that is what converted "the record claims X" into "X is true right now". Step 4 is now a table: one command per claim.
Also: the tool defaulted to the cwd and would return a confident null against the wrong repo in a worktree-heavy setup. It prints which repo it searched, every run.
Honest note on the tool's value
The run's assessment, which I have kept in the header rather than argued with:
the tool's real value is that it makes you run -S at all — which is a nudge, not a capability.
The --diff-filter=D section fired zero times out of four terms in that run, and structurally could not, because the removal was a function deleted from a surviving file. It stays because it catches the other shape, but the header no longer claims these are searches nobody can type.
Shipped in `39ac61c`, with the tool #19 asks for rather than prose about running git by hand.
## `lineage.sh`
Runs the archaeology searches and — the part that matters — states what it could not search. Seven tests against a synthetic repo where a thing is built, documented, then deleted.
The RED baseline was strong: fourteen steps, correct verdict, and it split the proposal into *"a goal worth having and a mechanism that cannot work here"*, which is the finding. But it never ran `git log -S`, and it leaned hardest on the issue tracker. Both facts shaped the skill more than the original issue's technique list did.
## The GREEN run broke the tool live, which is the best outcome available
Asked about a feature this repo removed and argued about at length, `lineage.sh "per repo"` printed:
> `no trace of "per repo" in . — not in any commit message, any diff, or any decision record.`
> `That is a real finding: it means this is new here, not that the search was wrong.`
Flatly wrong — the term had a space in it. And as the run pointed out, the skill's own anti-pattern table forbids exactly that inference:
> The tool's output asserts exactly the inference the table forbids.
A tool printing, in its own voice, the mistake its skill warns against. A no-match now says it is one string against one repo and names the variants to try; the test asserts the refusal rather than the old message.
## Three more, all real
- **The decision-record search looked in `docs/adr/*`.** This repo has no `docs/`, and this estate keeps decisions in the brain and in gitea comments — so that section silently searched nothing on every run, and its null was indistinguishable from a real one. It now names both unsearchable sources every time, and `brain_query` is a step in the sequence: the single best artifact in the GREEN run, the generalized rule with detection one-liners, came from the brain and nowhere else.
- **Step 1 steered readers away from what actually works.** It said `-S` was for when you do not know where the code lived, and recommended path-scoped log otherwise. Backwards — a function deleted from a file that still exists is the dominant removal shape, and the path search buries it under every other commit touching that file. `-S<identifier>` returns birth and death on one screen. Rewritten to lead with it.
- **"Which conditions still hold" had no method.** The run answered it by running four commands against the live host in twenty seconds — `readlink` on a tracked symlink, `grep` on the ignore file, `grep` on doctor's scan scope — and that is what converted *"the record claims X"* into *"X is true right now"*. Step 4 is now a table: one command per claim.
Also: the tool defaulted to the cwd and would return a confident null against the wrong repo in a worktree-heavy setup. It prints which repo it searched, every run.
## Honest note on the tool's value
The run's assessment, which I have kept in the header rather than argued with:
> the tool's real value is that it makes you run `-S` at all — which is a nudge, not a capability.
The `--diff-filter=D` section fired zero times out of four terms in that run, and structurally could not, because the removal was a function deleted from a surviving file. It stays because it catches the other shape, but the header no longer claims these are searches nobody can type.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Direct port of
research/tracing-knowledge-lineages(obra/superpowers-skills, not yet vendored). Distinct from thetraceabilityskill (that's forward spec→ADR→commit linkage; this is backward "why does X exist, was Y tried before and abandoned, is a 'new' idea actually a revival").Techniques to port: decision archaeology (search docs/adr,
git log --all --grep, ask the author), failed-attempt analysis (don't assume a past failure means the approach is flawed — trace context that may no longer apply), revival detection, paradigm-shift mapping. Full SKILL.md content already fetched during research — reuse it, adapt phrasing away from obra's generic "your human partner" tone to this workspace's conventions.Shipped in
39ac61c, with the tool #19 asks for rather than prose about running git by hand.lineage.shRuns the archaeology searches and — the part that matters — states what it could not search. Seven tests against a synthetic repo where a thing is built, documented, then deleted.
The RED baseline was strong: fourteen steps, correct verdict, and it split the proposal into "a goal worth having and a mechanism that cannot work here", which is the finding. But it never ran
git log -S, and it leaned hardest on the issue tracker. Both facts shaped the skill more than the original issue's technique list did.The GREEN run broke the tool live, which is the best outcome available
Asked about a feature this repo removed and argued about at length,
lineage.sh "per repo"printed:Flatly wrong — the term had a space in it. And as the run pointed out, the skill's own anti-pattern table forbids exactly that inference:
A tool printing, in its own voice, the mistake its skill warns against. A no-match now says it is one string against one repo and names the variants to try; the test asserts the refusal rather than the old message.
Three more, all real
The decision-record search looked in
docs/adr/*. This repo has nodocs/, and this estate keeps decisions in the brain and in gitea comments — so that section silently searched nothing on every run, and its null was indistinguishable from a real one. It now names both unsearchable sources every time, andbrain_queryis a step in the sequence: the single best artifact in the GREEN run, the generalized rule with detection one-liners, came from the brain and nowhere else.Step 1 steered readers away from what actually works. It said
-Swas for when you do not know where the code lived, and recommended path-scoped log otherwise. Backwards — a function deleted from a file that still exists is the dominant removal shape, and the path search buries it under every other commit touching that file.-S<identifier>returns birth and death on one screen. Rewritten to lead with it."Which conditions still hold" had no method. The run answered it by running four commands against the live host in twenty seconds —
readlinkon a tracked symlink,grepon the ignore file,grepon doctor's scan scope — and that is what converted "the record claims X" into "X is true right now". Step 4 is now a table: one command per claim.Also: the tool defaulted to the cwd and would return a confident null against the wrong repo in a worktree-heavy setup. It prints which repo it searched, every run.
Honest note on the tool's value
The run's assessment, which I have kept in the header rather than argued with:
The
--diff-filter=Dsection fired zero times out of four terms in that run, and structurally could not, because the removal was a function deleted from a surviving file. It stays because it catches the other shape, but the header no longer claims these are searches nobody can type.