task-pipeline-skill 1.94.1 → 1.96.0
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 +73 -0
- package/CONTRIBUTING.md +32 -0
- package/HOW-IT-WORKS.md +4 -3
- package/README.md +19 -7
- package/SKILL-CARD.md +2 -2
- package/evals/RESULTS.md +55 -8
- package/evals/cases/task-pipeline.json +139 -0
- package/evals/fixtures/lessons/expect-match.sh +30 -0
- package/evals/fixtures/lessons/index.jsonl +2 -0
- package/evals/fixtures/waves-unclaimed/expect-refusal.sh +26 -0
- package/evals/fixtures/waves-unclaimed/inventory.json +33 -0
- package/evals/fixtures/waves-unclaimed/modules.json +4 -0
- package/evals/fixtures/waves-unclaimed/plan.json +5 -0
- package/evals/task-pipeline.evals.json +104 -0
- package/package.json +1 -1
- package/plugins/task-pipeline/.claude-plugin/plugin.json +1 -1
- package/plugins/task-pipeline/agents/verifier.md +1 -1
- package/plugins/task-pipeline/commands/task-pipeline.md +3 -2
- package/plugins/task-pipeline/hooks/release-gate.sh +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +16 -11
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +4 -0
- package/plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json +19 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/audit.md +5 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/browser.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/certification.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +3 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/continuity.md +10 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/doctrine-map.md +20 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/finish-line.md +145 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/iteration.md +9 -5
- package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +5 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +13 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/progress.md +8 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/review.md +7 -2
- package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +7 -5
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-00-intake.md +158 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-01-docs-study.md +10 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-02-brainstorm.md +52 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-03-spec.md +66 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-04-plan.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-05-dev.md +55 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-06-tests.md +11 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-07-lint-deploy.md +15 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-08-post-deploy.md +29 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-09-docs-wiki.md +45 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stage-10-acceptance.md +91 -0
- package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +49 -484
- package/plugins/task-pipeline/skills/task-pipeline/references/verification.md +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/references/waves.md +9 -6
- package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +1 -1
- package/plugins/task-pipeline/skills/task-pipeline/scripts/stage_checkpoint.py +156 -33
- package/plugins/task-pipeline/skills/task-pipeline/scripts/waves.py +219 -3
- package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +14 -0
- package/plugins/task-pipeline/skills/task-pipeline/templates/inventory.schema.json +15 -1
- package/plugins/task-pipeline/skills/task-pipeline/templates/run.md +26 -2
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Stage 10 detail
|
|
2
|
+
|
|
3
|
+
The full gate and freedom level remain in [stages.md](stages.md).
|
|
4
|
+
|
|
5
|
+
## 10 — Acceptance
|
|
6
|
+
- **What:** the closing stage — go back to the brief and account for **every**
|
|
7
|
+
requirement. Doctrine: [`acceptance.md`](acceptance.md).
|
|
8
|
+
- **Every REQ this run shipped has a verification row, and every row names a REQ some
|
|
9
|
+
brief carries.** Both directions: a shipped feature that entered no ledger and a
|
|
10
|
+
ledger row about nothing are different failures ([`verification.md`](verification.md)).
|
|
11
|
+
- **The ledger's open rows are resolved onto the board.** Every carry-over row still
|
|
12
|
+
`open` leaves with a `B-NNN` id on `<artifacts>/backlog.md`, and the ledger row
|
|
13
|
+
is updated to name it ([`backlog.md`](backlog.md)). Both directions, because they are
|
|
14
|
+
different failures: a ledger row pointing at an id nobody issued, and a board row
|
|
15
|
+
traceable to nothing. Measured before this was built: across the ledgers in
|
|
16
|
+
this repository, **twenty-four rows sat `open` with no home at all** — deferred out
|
|
17
|
+
loud and filed nowhere. The first count said sixteen across six ledgers; it read the
|
|
18
|
+
status column by position and was wrong wherever a ledger carried two of them. Then the board's priority is re-derived, because `age` moved while the
|
|
19
|
+
run was happening. Every earlier gate asks
|
|
20
|
+
"is this artifact good?"; none asks "does this still contain everything that was
|
|
21
|
+
asked for?" The loss happens on the seams between stages, and this is where it
|
|
22
|
+
surfaces.
|
|
23
|
+
- **Runs last**, after docs and wiki — those are deliverables too, and a REQ may
|
|
24
|
+
name them.
|
|
25
|
+
- **The ladder walk runs FIRST** ([`audit.md`](audit.md)). The REQ table can only
|
|
26
|
+
find what was named and lost; it cannot find what was never named, because a
|
|
27
|
+
comparison needs two sides and an absence has one. So before the table: walk each
|
|
28
|
+
REQ bottom-up through its rungs (decision → spec section → contract **and its
|
|
29
|
+
failure behavior** → task → change → executed test → surface/docs), check the
|
|
30
|
+
seam at each step, and order the findings **by seam, not by file**. On UI work
|
|
31
|
+
designed visually, the frame is a **second, parallel statement of the same
|
|
32
|
+
surface**: read it against the spec section that covers its `SCR-` id and against
|
|
33
|
+
what shipped. The super-ux linter proves a frame link exists, is named right and
|
|
34
|
+
is not stale — it cannot read the picture, so a frame promising a limit, a meter
|
|
35
|
+
or a tier nobody built passes every lint there is. **Where the VISUAL track ran, the
|
|
36
|
+
walk carries one more row: visual intent ↔ final render** — the director record (the
|
|
37
|
+
brief's falsifier, the signature moment, the rubric written before any render) read
|
|
38
|
+
against the **approved contact sheet**. On a `flagship`, `product` or `ad` surface the
|
|
39
|
+
sheet is approved (`visual_gate.py sheet … --require-approval` exits 0), and the last
|
|
40
|
+
`review:` line per surface — how many human rounds it took — is copied into the
|
|
41
|
+
acceptance file, because `.task-pipeline/run.md` does not outlive the run
|
|
42
|
+
([`audit.md`](audit.md) → the `V→R` seam). An absence
|
|
43
|
+
becomes a **new REQ row with its check** and *then* the table is written;
|
|
44
|
+
appending after the table is how acceptance goes green over a gap. Findings that
|
|
45
|
+
belong to a lower layer go back to that layer (spec → stage 3, plan → stage 4).
|
|
46
|
+
Record the pass's two counts — new findings, and findings caused by this run's
|
|
47
|
+
own fixes — so the next pass can tell whether the axis is exhausted.
|
|
48
|
+
- **How it runs:** built in. Read the brief's REQ table, the carry-over ledger in
|
|
49
|
+
full, the plan's task statuses, git log, the final suite output, stage-8 notes and
|
|
50
|
+
stage-9 doc changes (plus `docs/ux/scenarios.md` + `/ux-lint` for UI tasks). Write
|
|
51
|
+
`<artifacts>/specs/YYYY-MM-DD-<topic>-acceptance.md` — one row per REQ,
|
|
52
|
+
status `verified` / `partial` / `deferred` / `dropped`, each with **evidence** (a
|
|
53
|
+
passing test name, `file:line`, a command and its output, or a scenario ID).
|
|
54
|
+
"Done" without evidence is not done: downgrade to `partial` and say so rather
|
|
55
|
+
than upgrading the claim.
|
|
56
|
+
- Then ask the operator the closing question out loud, list in hand: *here's what
|
|
57
|
+
you asked for, here's what shipped, here's what's deferred and where it lives —
|
|
58
|
+
what's missing?* Ask it even when the table is green; the operator holds context
|
|
59
|
+
the brief never captured, and this is the cheapest moment in the run to hear it.
|
|
60
|
+
- **Several repositories: a submodule is finished when its parent says so.** A
|
|
61
|
+
parent records each submodule as a **pointer to one commit**, and moving the
|
|
62
|
+
submodule does not move the pointer — so the work is committed, pushed, CI green
|
|
63
|
+
and done in its own roadmap, while a clone of the parent still gets the commit
|
|
64
|
+
before it. Neither repo looks wrong alone; the disagreement lives between them,
|
|
65
|
+
which is why it survives every check that runs inside one. Before closing, this
|
|
66
|
+
reports nothing **for the parent as well as every submodule**:
|
|
67
|
+
`git submodule status` (no line starting `+`), plus `git -C <repo> status
|
|
68
|
+
--porcelain` and `git -C <repo> log @{u}..HEAD --oneline` per repo. With
|
|
69
|
+
[agent-sync](https://github.com/ssheleg/agent-sync) installed,
|
|
70
|
+
`/agent-sync finish` runs exactly that. The fix is two commands and the second is
|
|
71
|
+
the forgotten one: `git -C <submodule> push`, then
|
|
72
|
+
`git add <submodule> && git commit`.
|
|
73
|
+
- **The retrospective is the run's last act** ([`retrospective.md`](retrospective.md)),
|
|
74
|
+
written to `<artifacts>/retro.md` — one file per project, not per run. The
|
|
75
|
+
pipeline's gates are good at *this* run and blind across runs: the same class of
|
|
76
|
+
failure can be caught, fixed and forgotten five times and nothing in the flow
|
|
77
|
+
notices it is the same one. So, in this order: **stamp the run first** (one line,
|
|
78
|
+
with its commit — and the only thing that makes the next step computable), **then
|
|
79
|
+
prune** (every standing instruction against its three retirement triggers — it
|
|
80
|
+
became a check, its surface is gone, it hasn't fired in five run stamps or in sixty days — and the
|
|
81
|
+
list held to its cap of ten, every deletion logged **in the archive, with the
|
|
82
|
+
commit that retired it**), then **write an entry only if
|
|
83
|
+
the run diverged** (symptom · the stage it surfaced at · the stage that *owned* it
|
|
84
|
+
· root cause · fix, mechanical before instruction before expiring note · the check
|
|
85
|
+
that catches it next time). An entry whose class would be true in another project
|
|
86
|
+
carries a `**Lesson:**` line, and **`scripts/lessons.py add --retro <retro> --entry
|
|
87
|
+
<anchor>` puts it in the local lesson index** — and, where the session lists a shared
|
|
88
|
+
store, `emit-observatory` → the tool → `record` ([`iteration.md`](iteration.md) → *The
|
|
89
|
+
learning loop*). Every run stamps and prunes; a retro left empty after
|
|
90
|
+
a messy run is the failure the file exists to stop. Stage 0 reads the standing
|
|
91
|
+
instructions in full next time, which is why the cap is not negotiable.
|