task-pipeline-skill 1.85.2 → 1.86.3
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 +87 -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 +279 -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/hooks.md +10 -5
- 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/hooks.example.json +2 -2
- package/plugins/task-pipeline/skills/task-pipeline/templates/run.md +2 -2
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "outcome-case/1 (schemas/outcome-case.schema.json + test/outcome_harness.py in ssheleg/sshlg-skills)",
|
|
3
|
+
"note": "Outcome corpus for task-pipeline (FIX-EV-01.11). Judged on ARTIFACTS via the family harness: the runner records the actual output oracle verdict AND the raw result per case; with/without-skill arms are the harness's baseline contract. Nothing in the production skill was changed for grader convenience.",
|
|
4
|
+
"arms": {
|
|
5
|
+
"baseline": "same prompts, skill absent",
|
|
6
|
+
"current": "same prompts, skill installed"
|
|
7
|
+
},
|
|
8
|
+
"cases": [
|
|
9
|
+
{
|
|
10
|
+
"schema_version": "outcome-case/1",
|
|
11
|
+
"id": "TP-OUT-001-full-brief-no-extra-questions",
|
|
12
|
+
"skill": "task-pipeline",
|
|
13
|
+
"prompt": {
|
|
14
|
+
"text": "Given a fully specified brief (exact file, exact change, acceptance stated), run the pipeline and record in run-log.md that it asked ZERO clarifying questions and went straight to the plan (TP-01)."
|
|
15
|
+
},
|
|
16
|
+
"environment": {
|
|
17
|
+
"model": "inherit",
|
|
18
|
+
"host": "any",
|
|
19
|
+
"case_digest": "b69415f8f9515946adf5cacfe4e1e735885351d81f352444a8ab9885bc46eb96"
|
|
20
|
+
},
|
|
21
|
+
"checks": {
|
|
22
|
+
"tool": [
|
|
23
|
+
{
|
|
24
|
+
"name": "python3 present",
|
|
25
|
+
"command": "python3 -c 'pass'"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"load_trace": {
|
|
29
|
+
"expect_loaded": [
|
|
30
|
+
"task-pipeline"
|
|
31
|
+
],
|
|
32
|
+
"expect_not_loaded": []
|
|
33
|
+
},
|
|
34
|
+
"outcome": [
|
|
35
|
+
{
|
|
36
|
+
"name": "run-log exists",
|
|
37
|
+
"kind": "artifact-exists",
|
|
38
|
+
"target": "run-log.md"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "a full brief triggers no extra questions (TP-01)",
|
|
42
|
+
"kind": "artifact-contains",
|
|
43
|
+
"target": "run-log.md",
|
|
44
|
+
"expect": "0 questions"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"schema_version": "outcome-case/1",
|
|
51
|
+
"id": "TP-OUT-002-negative-routing",
|
|
52
|
+
"skill": "task-pipeline",
|
|
53
|
+
"prompt": {
|
|
54
|
+
"text": "Explain in two sentences what a webhook is."
|
|
55
|
+
},
|
|
56
|
+
"environment": {
|
|
57
|
+
"model": "inherit",
|
|
58
|
+
"host": "any",
|
|
59
|
+
"case_digest": "a5da94aa03520bb6226ea88328a75ab6d7e3985c73a0e90a1379bf168fead57e"
|
|
60
|
+
},
|
|
61
|
+
"checks": {
|
|
62
|
+
"tool": [
|
|
63
|
+
{
|
|
64
|
+
"name": "python3 present",
|
|
65
|
+
"command": "python3 -c 'pass'"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"load_trace": {
|
|
69
|
+
"expect_loaded": [],
|
|
70
|
+
"expect_not_loaded": [
|
|
71
|
+
"task-pipeline"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"outcome": [
|
|
75
|
+
{
|
|
76
|
+
"name": "no pipeline artifact appears",
|
|
77
|
+
"kind": "command-exit-0",
|
|
78
|
+
"target": "test ! -f run-log.md"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"schema_version": "outcome-case/1",
|
|
85
|
+
"id": "TP-OUT-003-custom-profile-no-forced-stages",
|
|
86
|
+
"skill": "task-pipeline",
|
|
87
|
+
"prompt": {
|
|
88
|
+
"text": "Validate a three-stage custom pipeline profile — it must pass without gaining forced stage 0/7/10, while the kernel invariants are still checked; write profile-check.md (TP-03)."
|
|
89
|
+
},
|
|
90
|
+
"environment": {
|
|
91
|
+
"model": "inherit",
|
|
92
|
+
"host": "any",
|
|
93
|
+
"case_digest": "5b1b98d485c4dc61cf6f1acf7bd071cb01ef512c5c802eafd6b6f450cb7dd38c"
|
|
94
|
+
},
|
|
95
|
+
"checks": {
|
|
96
|
+
"tool": [
|
|
97
|
+
{
|
|
98
|
+
"name": "python3 present",
|
|
99
|
+
"command": "python3 -c 'pass'"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"load_trace": {
|
|
103
|
+
"expect_loaded": [
|
|
104
|
+
"task-pipeline"
|
|
105
|
+
],
|
|
106
|
+
"expect_not_loaded": []
|
|
107
|
+
},
|
|
108
|
+
"outcome": [
|
|
109
|
+
{
|
|
110
|
+
"name": "a custom profile keeps its stages (TP-03)",
|
|
111
|
+
"kind": "artifact-contains",
|
|
112
|
+
"target": "profile-check.md",
|
|
113
|
+
"expect": "three-stage"
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"schema_version": "outcome-case/1",
|
|
120
|
+
"id": "TP-OUT-004-unused-rule-not-auto-removed",
|
|
121
|
+
"skill": "task-pipeline",
|
|
122
|
+
"prompt": {
|
|
123
|
+
"text": "Five runs happened with no payments. Do NOT remove the payment-safety rule for being unused; explain every removal you do make; write pruning.md (TP-04)."
|
|
124
|
+
},
|
|
125
|
+
"environment": {
|
|
126
|
+
"model": "inherit",
|
|
127
|
+
"host": "any",
|
|
128
|
+
"case_digest": "1e8f20941ef80ebc9a1a6c399b042c7a683564c30419b5bae1f585a9a3671123"
|
|
129
|
+
},
|
|
130
|
+
"checks": {
|
|
131
|
+
"tool": [
|
|
132
|
+
{
|
|
133
|
+
"name": "python3 present",
|
|
134
|
+
"command": "python3 -c 'pass'"
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"load_trace": {
|
|
138
|
+
"expect_loaded": [
|
|
139
|
+
"task-pipeline"
|
|
140
|
+
],
|
|
141
|
+
"expect_not_loaded": []
|
|
142
|
+
},
|
|
143
|
+
"outcome": [
|
|
144
|
+
{
|
|
145
|
+
"name": "an unused rule is not auto-removed (TP-04)",
|
|
146
|
+
"kind": "artifact-contains",
|
|
147
|
+
"target": "pruning.md",
|
|
148
|
+
"expect": "not removed"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"schema_version": "outcome-case/1",
|
|
155
|
+
"id": "TP-OUT-005-scenarios-without-super-ux",
|
|
156
|
+
"skill": "task-pipeline",
|
|
157
|
+
"prompt": {
|
|
158
|
+
"text": "With valid docs/ux/scenarios.md present but super-ux NOT installed, run the pipeline; it should honour the scenarios contract and complete; write scenario-check.md (TP-02)."
|
|
159
|
+
},
|
|
160
|
+
"environment": {
|
|
161
|
+
"model": "inherit",
|
|
162
|
+
"host": "any",
|
|
163
|
+
"case_digest": "d28ba54adac84d3234566b3eeb566a527b75aeb337fc4328a3455cf3448f328a"
|
|
164
|
+
},
|
|
165
|
+
"checks": {
|
|
166
|
+
"tool": [
|
|
167
|
+
{
|
|
168
|
+
"name": "python3 present",
|
|
169
|
+
"command": "python3 -c 'pass'"
|
|
170
|
+
}
|
|
171
|
+
],
|
|
172
|
+
"load_trace": {
|
|
173
|
+
"expect_loaded": [
|
|
174
|
+
"task-pipeline"
|
|
175
|
+
],
|
|
176
|
+
"expect_not_loaded": [
|
|
177
|
+
"super-ux"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
"outcome": [
|
|
181
|
+
{
|
|
182
|
+
"name": "valid scenarios satisfy the contract without super-ux (TP-02)",
|
|
183
|
+
"kind": "artifact-contains",
|
|
184
|
+
"target": "scenario-check.md",
|
|
185
|
+
"expect": "scenarios"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-pipeline-skill",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.86.3",
|
|
4
4
|
"description": "Full-cycle delivery pipeline for coding agents: a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine ships inside the skill — no companion plugin required. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"task-pipeline": "bin/task-pipeline.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
-
"test": "python3 test/validate.py && python3 test/graph_test.py && python3 test/project_audit_test.py",
|
|
10
|
-
"test:all": "python3 test/validate.py && python3 test/graph_test.py && python3 test/project_audit_test.py && python3 test/negatives.py && npm run test:certify && npm run test:exposure && npm run test:probe && npm run test:anchors && npm run test:runner && npm run test:hooks && npm run test:artifacts && npm run test:docs",
|
|
9
|
+
"test": "python3 test/validate.py && python3 test/graph_test.py && python3 test/project_audit_test.py && python3 test/packet_schema_test.py && python3 test/browser_claims_test.py && npm run test:audit-regressions",
|
|
10
|
+
"test:all": "python3 test/validate.py && python3 test/graph_test.py && python3 test/project_audit_test.py && python3 test/packet_schema_test.py && python3 test/browser_claims_test.py && python3 test/negatives.py && npm run test:certify && npm run test:exposure && npm run test:probe && npm run test:anchors && npm run test:runner && npm run test:hooks && npm run test:artifacts && npm run test:docs && npm run test:audit-regressions",
|
|
11
11
|
"test:negatives": "python3 test/negatives.py",
|
|
12
12
|
"test:exposure": "python3 test/exposure_test.py",
|
|
13
13
|
"test:probe": "python3 test/probe.py --self-test",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"test:artifacts": "python3 test/artifact_root_test.py && python3 test/migrate_artifacts_test.py",
|
|
18
18
|
"test:docs": "bash plugins/task-pipeline/skills/task-pipeline/templates/docgate.sh",
|
|
19
19
|
"test:certify": "python3 test/certify_mutations.py",
|
|
20
|
-
"test:audit": "python3 test/project_audit_test.py"
|
|
20
|
+
"test:audit": "python3 test/project_audit_test.py",
|
|
21
|
+
"test:audit-regressions": "for t in test/audit_regressions/*.py; do python3 \"$t\" || exit 1; done"
|
|
21
22
|
},
|
|
22
23
|
"files": [
|
|
23
24
|
"bin",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "task-pipeline",
|
|
4
4
|
"displayName": "Task Pipeline",
|
|
5
5
|
"description": "Runs a substantial task through a mandatory built-in intake grill, then 10 gated stages (docs, brainstorm+decompose, spec, plan, subagent build, tests, lint/deploy, post-deploy, docs/wiki, acceptance). Every stage's doctrine is built into the skill — no companion plugin required — with typed auto/judgment/manual gates, a frozen requirement spine that closes with evidence, a work board and a verification ledger that outlive a run, an exposure line naming what shipped unconfirmed, a progress rail computed from the project's own config, a loop guard whose review ceiling measures rather than stops, and stage-3 tracks for what a product does, how it sounds and how it looks. Two modes need no task: `checkup` (what is unverified) and `setup` (audit existing docs). Retro insights can publish upstream as issues, opt-in and redacted.",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.86.3",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "ssheleg",
|
|
9
9
|
"url": "https://x.com/sshlg93"
|
|
@@ -13,7 +13,7 @@ the standard and the map: ten canons, and where each is defined, enforced and se
|
|
|
13
13
|
It is a **navigator, not a second copy**. Every law below has exactly one home — that is
|
|
14
14
|
canon 3, and a navigator that restated the doctrine would break the rule it is indexing.
|
|
15
15
|
The full statement of each canon, its rationale and its enforcement live in
|
|
16
|
-
[`documentation.md`](
|
|
16
|
+
[`documentation.md`](references/documentation.md) → *The canons*.
|
|
17
17
|
|
|
18
18
|
## The ten canons
|
|
19
19
|
|
|
@@ -34,25 +34,25 @@ The full statement of each canon, its rationale and its enforcement live in
|
|
|
34
34
|
|
|
35
35
|
They are **epistemic**: what makes a claim documentation. The operational layer — what to
|
|
36
36
|
do at a given trigger, with a check and an exit criterion — is
|
|
37
|
-
[`learned.md`](
|
|
37
|
+
[`learned.md`](references/learned.md). When the two seem to say the same
|
|
38
38
|
thing, the canon is the *why* and the rule is the *how*.
|
|
39
39
|
|
|
40
40
|
## Where next
|
|
41
41
|
|
|
42
42
|
| You are about to… | Read | Because |
|
|
43
43
|
|---|---|---|
|
|
44
|
-
| set a project's documentation up from nothing | [`documentation.md`](
|
|
45
|
-
| record a decision so it survives its author | *Registers and ids* + [`templates/decisions.md`](
|
|
44
|
+
| set a project's documentation up from nothing | [`documentation.md`](references/documentation.md) → *The inventory* | four questions answered before the first line of work |
|
|
45
|
+
| record a decision so it survives its author | *Registers and ids* + [`templates/decisions.md`](templates/decisions.md) | append-only ids, edge markers, one decision home |
|
|
46
46
|
| change something and not orphan the docs | *The Doc Loop* + *The propagation matrix* | which documents a change owes, starting with the meta-row |
|
|
47
47
|
| decide where a fact belongs | *Single source of truth* | two homes disagree the day one of them is updated |
|
|
48
|
-
| build a check that cannot lie | [`gates.md`](
|
|
49
|
-
| trust a mechanism that reports success | [`gates.md`](
|
|
50
|
-
| wire a check into the agent's own tooling | [`hooks.md`](
|
|
51
|
-
| audit documentation a project already has | [`setup.md`](
|
|
52
|
-
| carry a lesson to the next run | [`retrospective.md`](
|
|
53
|
-
| seed a gate into a host project | [`templates/docgate.sh`](
|
|
48
|
+
| build a check that cannot lie | [`gates.md`](references/gates.md) | three axes, the enforcement ladder, progressive arming, probing |
|
|
49
|
+
| trust a mechanism that reports success | [`gates.md`](references/gates.md) → *False success* | the failure that removes the reason to look |
|
|
50
|
+
| wire a check into the agent's own tooling | [`hooks.md`](references/hooks.md) | the hook contract, and why a crashed guard **allows** the action |
|
|
51
|
+
| audit documentation a project already has | [`setup.md`](references/setup.md) | seven passes, cheapest first, output is a fix plan |
|
|
52
|
+
| carry a lesson to the next run | [`retrospective.md`](references/retrospective.md) | stamp first (the cold trigger reads it), then prune to a cap of ten; every lesson names its commit |
|
|
53
|
+
| seed a gate into a host project | [`templates/docgate.sh`](templates/docgate.sh) | it seeds **green**: dormant where there is no input yet |
|
|
54
54
|
| claim that an **agent** behaves | `tdd.md` → *When the thing under test is an agent* — named rather than linked, because this navigator's out-of-directory links break wherever a packager ships this skill alone | the address is a trace id and the assertion that ran (canon 1); a judge nobody watched disagree is a green nobody watched turn red (canon 5) |
|
|
55
|
-
| take a whole change through to acceptance |
|
|
55
|
+
| take a whole change through to acceptance | the `task-pipeline` skill (install it separately) | this skill is the standard; that one is how a change reaches the repository |
|
|
56
56
|
|
|
57
57
|
## When this applies
|
|
58
58
|
|
|
@@ -103,3 +103,8 @@ address, delete it, or **mark it as an unbacked claim the operator chose to make
|
|
|
103
103
|
it**. The third option is not a loophole; it is the reason the other two are worth
|
|
104
104
|
anything. A rule with no way to proceed under it becomes a rule people route around, and
|
|
105
105
|
then nothing carries an address.
|
|
106
|
+
|
|
107
|
+
**Editing these references.** The files under `references/` and `templates/` here are
|
|
108
|
+
GENERATED copies, so a single-skill install of this skill resolves every link without a
|
|
109
|
+
neighbouring checkout. Edit the source home, never the copy — which file is generated,
|
|
110
|
+
from where, and how to re-sync: [`GENERATED.md`](references/GENERATED.md).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Generated copies — do not edit here
|
|
2
|
+
|
|
3
|
+
The files in this directory (and `../templates/`) are GENERATED (a deterministic transform: in-set links stay relative, out-of-set links point at the source home’s canonical URL) from the
|
|
4
|
+
source home `skills/task-pipeline/references/` and `skills/task-pipeline/templates/`
|
|
5
|
+
so an isolated single-skill install of evidence-docs resolves every required
|
|
6
|
+
link without a neighbouring checkout (FIX-ED-01.01). Edit the source home and
|
|
7
|
+
re-run `python3 test/audit_regressions/fix-ed-01.01.py --sync`;
|
|
8
|
+
`test/validate.py`'s regression stage fails when a copy drifts.
|