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.
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +2 -1
- package/SKILL-CARD.md +1 -1
- package/bin/task-pipeline.js +70 -9
- package/evals/cases/evidence-docs.json +188 -0
- package/evals/cases/project-audit.json +188 -0
- package/evals/cases/task-pipeline.json +191 -0
- package/package.json +5 -4
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/skills/evidence-docs/SKILL.md +16 -11
- package/plugins/task-pipeline/skills/evidence-docs/references/GENERATED.md +8 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/documentation.md +472 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/gates.md +645 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/hooks.md +274 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/learned.md +292 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/retrospective.md +551 -0
- package/plugins/task-pipeline/skills/evidence-docs/references/setup.md +149 -0
- package/plugins/task-pipeline/skills/evidence-docs/templates/decisions.md +50 -0
- package/plugins/task-pipeline/skills/evidence-docs/templates/docgate.sh +537 -0
- package/plugins/task-pipeline/skills/project-audit/SKILL.md +66 -25
- package/plugins/task-pipeline/skills/project-audit/scripts/audit.py +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +71 -54
- package/plugins/task-pipeline/skills/task-pipeline/execution-attempt.schema.json +68 -0
- package/plugins/task-pipeline/skills/task-pipeline/execution-packet.example.json +42 -0
- package/plugins/task-pipeline/skills/task-pipeline/execution-packet.schema.json +217 -0
- package/plugins/task-pipeline/skills/task-pipeline/execution-result.example.json +49 -0
- package/plugins/task-pipeline/skills/task-pipeline/execution-result.schema.json +261 -0
- package/plugins/task-pipeline/skills/task-pipeline/graph.example.json +10 -1
- package/plugins/task-pipeline/skills/task-pipeline/graph.schema.json +172 -2
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json +50 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +7 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +23 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +6 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/backlog.md +8 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/browser.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/build.md +32 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +14 -3
- package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +83 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md +53 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/documentation.md +3 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +27 -8
- package/plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md +19 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +203 -26
- package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +1 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +26 -8
- package/plugins/task-pipeline/skills/task-pipeline/references/work-graph.md +7 -1
- package/plugins/task-pipeline/skills/task-pipeline/scripts/context_packets.py +686 -0
- package/plugins/task-pipeline/skills/task-pipeline/scripts/execution_authority.py +271 -0
- package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +415 -18
- package/plugins/task-pipeline/skills/task-pipeline/scripts/packet.py +400 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +2 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/browser-claims.json +54 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/finding-evidence.json +42 -0
- 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>`
|