task-pipeline-skill 1.85.2 → 1.86.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +2 -1
  4. package/SKILL-CARD.md +1 -1
  5. package/bin/task-pipeline.js +70 -9
  6. package/evals/cases/evidence-docs.json +188 -0
  7. package/evals/cases/project-audit.json +188 -0
  8. package/evals/cases/task-pipeline.json +191 -0
  9. package/package.json +5 -4
  10. package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
  11. package/plugins/task-pipeline/skills/evidence-docs/SKILL.md +16 -11
  12. package/plugins/task-pipeline/skills/evidence-docs/references/GENERATED.md +8 -0
  13. package/plugins/task-pipeline/skills/evidence-docs/references/documentation.md +472 -0
  14. package/plugins/task-pipeline/skills/evidence-docs/references/gates.md +645 -0
  15. package/plugins/task-pipeline/skills/evidence-docs/references/hooks.md +274 -0
  16. package/plugins/task-pipeline/skills/evidence-docs/references/learned.md +292 -0
  17. package/plugins/task-pipeline/skills/evidence-docs/references/retrospective.md +551 -0
  18. package/plugins/task-pipeline/skills/evidence-docs/references/setup.md +149 -0
  19. package/plugins/task-pipeline/skills/evidence-docs/templates/decisions.md +50 -0
  20. package/plugins/task-pipeline/skills/evidence-docs/templates/docgate.sh +537 -0
  21. package/plugins/task-pipeline/skills/project-audit/SKILL.md +66 -25
  22. package/plugins/task-pipeline/skills/project-audit/scripts/audit.py +11 -0
  23. package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +71 -54
  24. package/plugins/task-pipeline/skills/task-pipeline/execution-attempt.schema.json +68 -0
  25. package/plugins/task-pipeline/skills/task-pipeline/execution-packet.example.json +42 -0
  26. package/plugins/task-pipeline/skills/task-pipeline/execution-packet.schema.json +217 -0
  27. package/plugins/task-pipeline/skills/task-pipeline/execution-result.example.json +49 -0
  28. package/plugins/task-pipeline/skills/task-pipeline/execution-result.schema.json +261 -0
  29. package/plugins/task-pipeline/skills/task-pipeline/graph.example.json +10 -1
  30. package/plugins/task-pipeline/skills/task-pipeline/graph.schema.json +172 -2
  31. package/plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json +50 -1
  32. package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +7 -0
  33. package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +23 -0
  34. package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +6 -0
  35. package/plugins/task-pipeline/skills/task-pipeline/references/backlog.md +8 -1
  36. package/plugins/task-pipeline/skills/task-pipeline/references/browser.md +8 -0
  37. package/plugins/task-pipeline/skills/task-pipeline/references/build.md +32 -0
  38. package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +14 -3
  39. package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +83 -2
  40. package/plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md +53 -0
  41. package/plugins/task-pipeline/skills/task-pipeline/references/documentation.md +3 -0
  42. package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +27 -8
  43. package/plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md +19 -0
  44. package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +203 -26
  45. package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +1 -0
  46. package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +26 -8
  47. package/plugins/task-pipeline/skills/task-pipeline/references/work-graph.md +7 -1
  48. package/plugins/task-pipeline/skills/task-pipeline/scripts/context_packets.py +686 -0
  49. package/plugins/task-pipeline/skills/task-pipeline/scripts/execution_authority.py +271 -0
  50. package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +415 -18
  51. package/plugins/task-pipeline/skills/task-pipeline/scripts/packet.py +400 -0
  52. package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +2 -0
  53. package/plugins/task-pipeline/skills/task-pipeline/templates/browser-claims.json +54 -0
  54. package/plugins/task-pipeline/skills/task-pipeline/templates/finding-evidence.json +42 -0
  55. package/plugins/task-pipeline/skills/task-pipeline/templates/run.md +2 -2
@@ -0,0 +1,149 @@
1
+ # Setup — the entry audit, before the first feature
2
+
3
+ **One job: find out what is already wrong with this project's documentation before
4
+ building on top of it.** [`audit.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/audit.md)'s ladder runs at the *end* of a run,
5
+ over the change. This runs at the *start*, over what is already there — and until
6
+ this file existed, nothing did.
7
+
8
+ **Offered, never imposed.** Stage 0 asks once, when `docs/DOCMAP.md` is absent or its
9
+ regime line is older than the project's last release. The answer — including "no" —
10
+ is recorded in the brief's autonomy sweep and never asked again.
11
+
12
+ ## Contents
13
+
14
+ - When it runs
15
+ - First it says where the paperwork lives
16
+ - What it inspects
17
+ - The finding shape
18
+ - The output is a fix plan, not a lecture
19
+ - The inward check — what this project holds that belongs upstream
20
+ - The offer to install the routing rule
21
+ - Rationalizations
22
+
23
+ ## When it runs
24
+
25
+ | Situation | What happens |
26
+ |---|---|
27
+ | First run in a repository, no `docs/DOCMAP.md` | [`adoption.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/adoption.md) seeds; this audit runs against what the seeding found |
28
+ | Existing project, doc map present but stale | offered once at stage 0 |
29
+ | The operator asks for it — `/task-pipeline setup` | runs as the whole task; stages 3–5 produce findings and fixes rather than a feature |
30
+ | Every subsequent run | **not offered again.** The recorded answer stands until the doc map changes |
31
+
32
+ **Never as a recurring tax.** A check that runs before every feature is a check people
33
+ learn to dismiss. Once per project state, then it is the gate's job.
34
+
35
+ ## First it says where the paperwork lives
36
+
37
+ Before any pass, one line naming **the resolved artifact root and why it resolved that
38
+ way** ([`artifacts.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md) → *the root is resolved, not spelled*). Not a
39
+ finding — orientation, and the answer to the only question a rename can leave behind:
40
+
41
+ ```
42
+ artifacts: docs/superpowers/ (legacy name, resolved because the directory exists and
43
+ carries a register — the default is now docs/evidence/,
44
+ and moving is optional: npx task-pipeline
45
+ migrate-artifacts --dry-run)
46
+ artifacts: docs/evidence/ (default)
47
+ artifacts: docs/runs/ (configured — pipeline.json → paths.artifacts)
48
+ artifacts: docs/evidence/ (default, and the directory already exists without a
49
+ register — STOP AND ASK before writing into it)
50
+ ```
51
+
52
+ A project on the legacy name is **not behind and is never warned about it on a run**;
53
+ this line exists so nobody has to guess which of the two directories a gate will read.
54
+ Where records sit in both, the leftover is named here too — a partial migration is a
55
+ state somebody chose, not a fault.
56
+
57
+ ## What it inspects
58
+
59
+ Seven passes, cheapest first. Each either reports `ok`, a finding, or **`skipped —
60
+ <why>`**; a silent pass is indistinguishable from a clean one.
61
+
62
+ 1. **The decision home.** Exactly one, and the doc map names it. Two homes is a fork;
63
+ zero is a project whose decisions live only in commit messages.
64
+ 2. **Register integrity.** Ids unique and never renumbered · status vocabulary closed
65
+ · supersede/contradict targets annotated · no resolved question deleted.
66
+ 3. **Propagation.** Every document named in an entry's `Consequences / affects:` line
67
+ cites that entry — ratcheted, so history is a printed number and not a wall of
68
+ failures ([`adoption.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/adoption.md) → *Baseline the ratchets*).
69
+ 4. **The matrix.** It contains the **meta-row** — *a new document or rule* — without
70
+ which it cannot catch the change type the project makes most often. Every row has
71
+ a *Checked by* cell — a check, or `review` **with the
72
+ reason no check can decide it**. An empty cell is a finding, not a blank.
73
+ 5. **Terms.** Every term the doc map declares resolves to exactly one definition, and
74
+ the definition's home actually contains it. **Only declared terms are checked** —
75
+ a heuristic over every capitalised word cries wolf, and a gate that cries wolf is
76
+ removed by the third person who hits it ([`gates.md`](gates.md) → *The
77
+ false-positive budget*).
78
+ 6. **The UX chain**, when the project has a user-facing surface: scenarios exist,
79
+ trace to stories and flows, and the linter passes. A project with screens and no
80
+ scenarios is building interface before behaviour.
81
+ 7. **The gate itself.** It exists, it runs, it exits non-zero on a planted defect, and
82
+ its verdict prints its ratchets. **An unproven gate's green is worth nothing** —
83
+ plant one defect and watch it fail before quoting it as evidence.
84
+
85
+ ## The finding shape
86
+
87
+ Every finding carries three things and nothing else:
88
+
89
+ ```
90
+ docs/ARCHITECTURE.md:214 cites DEC-0081 (retired, superseded twice) without saying so
91
+ → add the marker beside the citation, or replace it with the live decision
92
+ seam: L1→L2 (the decision reached the doc and then stopped being true)
93
+ ```
94
+
95
+ `file:line` · the minimal fix · the seam it belongs to. **Ordered by seam, never by
96
+ file** — a file-ordered list reads as noise; a seam-ordered one tells you which layer
97
+ of the project's own process is leaking.
98
+
99
+ ## The output is a fix plan, not a lecture
100
+
101
+ The audit ends with `<artifacts>/plans/YYYY-MM-DD-doc-audit.md` — the findings
102
+ turned into tasks the pipeline can run, in the order that makes them terminate:
103
+
104
+ 1. everything the gate can enforce **after** the fix, so the class stops recurring;
105
+ 2. the ratchet floors, baselined at today;
106
+ 3. the rest, largest seam first.
107
+
108
+ An audit that hands over a list and no plan is a list somebody will read once.
109
+
110
+ **Nothing is fixed during the audit.** Reading and repairing in one pass is how a
111
+ pass starts finding its own edits ([`audit.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/audit.md) → *Every pass changes the axis, not the effort*).
112
+
113
+ ## The inward check — what this project holds that belongs upstream
114
+
115
+ The other direction, and the one nobody runs by themselves
116
+ ([`portability.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/references/portability.md) → *The two checks*).
117
+
118
+ Read the host's `CLAUDE.md`/`AGENTS.md`, its doc map and its standing instructions,
119
+ and ask of each rule: **would this be true in a repository I have never seen?**
120
+
121
+ - **Names a path, a command, a person, a service** → it is this project's answer.
122
+ Leave it.
123
+ - **Names none of those** → it is a workflow decision wearing a project's clothes.
124
+ Report it, and propose it upstream to the bundle rather than copying it by hand
125
+ into the next project.
126
+
127
+ That hand-copy is the fork: performed once per project, until two of them disagree and
128
+ neither is wrong.
129
+
130
+ ## The offer to install the routing rule
131
+
132
+ If the operator's configuration carries no routing rule, offer to append
133
+ [`../templates/routing-rule.md`](https://github.com/ssheleg/task-pipeline/blob/main/plugins/task-pipeline/skills/task-pipeline/templates/routing-rule.md) — the version that
134
+ travels with the bundle.
135
+
136
+ **Offer, never write.** It is the operator's configuration, and appending to it
137
+ without asking is the same class of act as pushing to a repository nobody asked you
138
+ to touch. Print the diff, ask once, record the answer.
139
+
140
+ ## Rationalizations
141
+
142
+ | Excuse | Reality |
143
+ |---|---|
144
+ | "The docs are fine, we'd know" | You would know about the contradictions. Absences have one side, and nobody notices a decision that was never written. |
145
+ | "Let's audit after we ship this feature" | Then the feature is built on the part that was wrong, and the audit's first finding is the feature. |
146
+ | "This will take a week" | Seven passes, most of them mechanical, and the ratchet step means you fix nothing today. What takes a week is the fix plan — and that is work you were going to do blind otherwise. |
147
+ | "We'll fix things as we find them" | Then the pass starts finding its own edits and never terminates. Read, then plan, then fix. |
148
+ | "The gate is green, so the docs are good" | The gate proves what it checks. Read its scope header, and plant a defect before quoting its green. |
149
+ | "Our conventions are ours, upstream doesn't need them" | Some of them are, and the inward check leaves those alone. The ones naming no path and no command are the pipeline's, and keeping them local costs you every future project. |
@@ -0,0 +1,50 @@
1
+ # Decisions — <project>
2
+
3
+ **Append-only.** Every settled thing that shapes the product, the architecture, the
4
+ scope, security, data, pricing or process. Doctrine:
5
+ `references/documentation.md`.
6
+
7
+ **Next free ID:** `DEC-0002`
8
+
9
+ Reading *"Next free ID"* is **not** reserving it — a second agent reading it in the
10
+ same minute gets the same answer. Reserve it, then write.
11
+
12
+ ## Format
13
+
14
+ ```markdown
15
+ ### DEC-0007 — <one line, in the present tense>
16
+
17
+ - **Date:** 2026-08-03
18
+ - **Status:** Accepted
19
+ - **Context:** what forced the choice
20
+ - **Decision:** what was chosen, stated so it can be obeyed
21
+ - **Consequences / affects:** `docs/SECURITY.md`, `docs/DATA_MODEL.md`
22
+ - **Source:** run `2026-08-03-<topic>` · commit `a1b2c3d`
23
+ - **Supersedes:** DEC-0004
24
+ ```
25
+
26
+ | Field | Rule |
27
+ |---|---|
28
+ | `Status` | `Accepted` · `Superseded by DEC-####` · `Reversed` · `Accepted · **Partially superseded by DEC-####** — <one line>` · `Accepted · **Refined by DEC-####**` |
29
+ | `Consequences / affects` | every document that must change. **Each one must cite this id** — the gate checks it |
30
+ | `Source` | the run that produced it **and the commit**; the commit is what survives a rename |
31
+ | edge markers | `Refines:` additive, target needs no annotation · `Contradicts:` a named clause falls, target **must** be annotated · `Supersedes:` the whole target retires, target **must** be annotated |
32
+
33
+ **To change your mind:** add a new entry, edit **only the status line** of the old
34
+ one, leave its body intact. Never renumber. Never delete.
35
+
36
+ ---
37
+
38
+ ### DEC-0001 — Documentation is governed: registers, a doc map and a gate
39
+
40
+ - **Date:** <YYYY-MM-DD>
41
+ - **Status:** Accepted
42
+ - **Context:** this repository had no addressable home for settled things, so
43
+ decisions lived in chat and in per-run specs and were re-litigated every time
44
+ somebody new arrived.
45
+ - **Decision:** decisions live here with stable `DEC-####` ids, append-only; open
46
+ questions live in `docs/OPEN_QUESTIONS.md`; `docs/DOCMAP.md` holds the single
47
+ homes, the propagation matrix and the gate; `scripts/check-docs.sh` enforces the
48
+ mechanical half and runs before every commit.
49
+ - **Consequences / affects:** `docs/DOCMAP.md`, `docs/OPEN_QUESTIONS.md`
50
+ - **Source:** run `<topic>` · commit `<sha>`