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.
Files changed (57) hide show
  1. package/CHANGELOG.md +87 -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 +279 -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/hooks.md +10 -5
  44. package/plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md +19 -0
  45. package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +203 -26
  46. package/plugins/task-pipeline/skills/task-pipeline/references/portability.md +1 -0
  47. package/plugins/task-pipeline/skills/task-pipeline/references/retrospective.md +26 -8
  48. package/plugins/task-pipeline/skills/task-pipeline/references/work-graph.md +7 -1
  49. package/plugins/task-pipeline/skills/task-pipeline/scripts/context_packets.py +686 -0
  50. package/plugins/task-pipeline/skills/task-pipeline/scripts/execution_authority.py +271 -0
  51. package/plugins/task-pipeline/skills/task-pipeline/scripts/graph.py +415 -18
  52. package/plugins/task-pipeline/skills/task-pipeline/scripts/packet.py +400 -0
  53. package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +2 -0
  54. package/plugins/task-pipeline/skills/task-pipeline/templates/browser-claims.json +54 -0
  55. package/plugins/task-pipeline/skills/task-pipeline/templates/finding-evidence.json +42 -0
  56. package/plugins/task-pipeline/skills/task-pipeline/templates/hooks.example.json +2 -2
  57. package/plugins/task-pipeline/skills/task-pipeline/templates/run.md +2 -2
@@ -0,0 +1,217 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/ssheleg/task-pipeline/main/plugins/task-pipeline/skills/task-pipeline/execution-packet.schema.json",
4
+ "title": "task-pipeline execution packet",
5
+ "description": "The family's versioned task/context contract (CTX-01). One packet is one dispatchable unit of work: what to do, under which module decisions, reading which inputs, inside which budget. Packets are IMMUTABLE once issued — a change is a new packet with a new id, never an edit. What ships is this schema, one example, and `scripts/packet.py`, the dependency-free validator every consumer runs before acting: a packet whose mandatory version major is unknown, whose input lacks a digest, or whose decision ref is unbound must be rejected at the door, because acting on a packet you could not verify is how two agents build different things from one plan.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "id",
11
+ "module",
12
+ "intent",
13
+ "inputs",
14
+ "decision_refs",
15
+ "source_scope",
16
+ "budgets"
17
+ ],
18
+ "properties": {
19
+ "schema_version": {
20
+ "type": "string",
21
+ "pattern": "^execution-packet/[0-9]+$",
22
+ "description": "Contract version, `execution-packet/<major>`. A consumer that does not know the major REJECTS the packet — an unknown mandatory version is not a warning."
23
+ },
24
+ "id": {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "description": "Stable packet id. Immutable: revising the work issues a new id."
28
+ },
29
+ "parent_id": {
30
+ "type": "string",
31
+ "description": "The parent outcome or plan node this packet serves, when one exists."
32
+ },
33
+ "module": {
34
+ "type": "string",
35
+ "minLength": 1,
36
+ "description": "The owning module/repository the packet's edits belong to."
37
+ },
38
+ "intent": {
39
+ "type": "string",
40
+ "minLength": 1,
41
+ "description": "One sentence of what this packet changes and why — the contract, not the diff."
42
+ },
43
+ "inputs": {
44
+ "type": "array",
45
+ "items": {
46
+ "$ref": "#/definitions/contextRef"
47
+ },
48
+ "description": "Every context document the work READS. Each is content-addressed: an input without a digest cannot be verified fresh, so it does not dispatch."
49
+ },
50
+ "decision_refs": {
51
+ "type": "array",
52
+ "items": {
53
+ "$ref": "#/definitions/decisionRef"
54
+ },
55
+ "description": "The module decisions this packet is bound by. BOUND means address+digest present — a decision named without its bytes is a rumour, and the packet is rejected."
56
+ },
57
+ "source_scope": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "required": [
61
+ "edit_targets"
62
+ ],
63
+ "properties": {
64
+ "edit_targets": {
65
+ "type": "array",
66
+ "items": {
67
+ "$ref": "#/definitions/editTarget"
68
+ },
69
+ "description": "The exact files the packet may change. A baseline digest per Edit target is what makes 'the source moved under the plan' detectable before dispatch."
70
+ },
71
+ "claim": {
72
+ "type": "string",
73
+ "description": "The coordination scope to claim before editing, where the project has agent-sync on."
74
+ }
75
+ }
76
+ },
77
+ "budgets": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "minProperties": 1,
81
+ "properties": {
82
+ "context_bytes": {
83
+ "type": "integer",
84
+ "minimum": 1
85
+ },
86
+ "token_note": {
87
+ "type": "string",
88
+ "description": "How tokens were measured or estimated — a named tokenizer or the estimate's basis. A bare token count nothing computed is not a budget."
89
+ }
90
+ },
91
+ "description": "At least one bound. Budgets cut appendix material, never the packet's decisions or acceptance."
92
+ },
93
+ "acceptance": {
94
+ "type": "array",
95
+ "items": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ },
99
+ "description": "Observable acceptance cases. Never truncated to fit a budget."
100
+ },
101
+ "dependencies": {
102
+ "type": "array",
103
+ "items": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": [
107
+ "task_id",
108
+ "kind",
109
+ "rationale"
110
+ ],
111
+ "properties": {
112
+ "task_id": {
113
+ "type": "string",
114
+ "minLength": 1
115
+ },
116
+ "kind": {
117
+ "type": "string",
118
+ "enum": [
119
+ "data",
120
+ "control",
121
+ "resource"
122
+ ],
123
+ "description": "data: this packet consumes the other's output; control: ordering only — no payload, and the edge is PRESERVED, never pruned for being payload-less; resource: both touch one thing that tolerates one writer."
124
+ },
125
+ "rationale": {
126
+ "type": "string",
127
+ "minLength": 1,
128
+ "description": "Why the edge exists — an edge nobody can explain is an edge nobody dares remove or trust."
129
+ },
130
+ "satisfaction": {
131
+ "type": "string",
132
+ "description": "What marks it satisfied: an artifact address, a state, a receipt. A control edge may leave this empty — ordering is its whole payload."
133
+ },
134
+ "owner": {
135
+ "type": "string"
136
+ }
137
+ }
138
+ },
139
+ "description": "Typed edges into the plan's graph. Uniqueness of packet ids, resolution of every task_id and acyclicity are properties of the packet SET — `scripts/packet.py validate-graph` owns them."
140
+ }
141
+ },
142
+ "definitions": {
143
+ "contextRef": {
144
+ "type": "object",
145
+ "additionalProperties": false,
146
+ "required": [
147
+ "address",
148
+ "sha256"
149
+ ],
150
+ "properties": {
151
+ "address": {
152
+ "type": "string",
153
+ "minLength": 1,
154
+ "description": "Where the bytes live: a repo-relative path or a portable `scheme://` address."
155
+ },
156
+ "sha256": {
157
+ "type": "string",
158
+ "pattern": "^[0-9a-f]{64}$",
159
+ "description": "Digest of the exact bytes the plan was made against. Freshness is checked against this before dispatch; a mismatch blocks, it never silently becomes permission to use stale context."
160
+ },
161
+ "role": {
162
+ "type": "string"
163
+ }
164
+ }
165
+ },
166
+ "decisionRef": {
167
+ "type": "object",
168
+ "additionalProperties": false,
169
+ "required": [
170
+ "id",
171
+ "address",
172
+ "sha256"
173
+ ],
174
+ "properties": {
175
+ "id": {
176
+ "type": "string",
177
+ "minLength": 1
178
+ },
179
+ "address": {
180
+ "type": "string",
181
+ "minLength": 1
182
+ },
183
+ "sha256": {
184
+ "type": "string",
185
+ "pattern": "^[0-9a-f]{64}$"
186
+ }
187
+ }
188
+ },
189
+ "editTarget": {
190
+ "type": "object",
191
+ "additionalProperties": false,
192
+ "required": [
193
+ "address",
194
+ "mode"
195
+ ],
196
+ "properties": {
197
+ "address": {
198
+ "type": "string",
199
+ "minLength": 1
200
+ },
201
+ "mode": {
202
+ "type": "string",
203
+ "enum": [
204
+ "Edit",
205
+ "Create",
206
+ "Create_or_extend"
207
+ ]
208
+ },
209
+ "baseline_sha256": {
210
+ "type": "string",
211
+ "pattern": "^[0-9a-f]{64}$",
212
+ "description": "Required when mode is Edit: the bytes the plan reviewed. Creates have no baseline."
213
+ }
214
+ }
215
+ }
216
+ }
217
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "schema_version": "execution-result/1",
3
+ "packet_id": "FIX-EX-01.01",
4
+ "grant": {
5
+ "grant_id": "g-000042",
6
+ "packet_id": "FIX-EX-01.01",
7
+ "revision": 7,
8
+ "fence": 12,
9
+ "holder": "r-7f3a91",
10
+ "issued_at": "2026-09-08T21:14:00Z"
11
+ },
12
+ "built_against_revision": 7,
13
+ "candidate": {
14
+ "commit": "aabec96",
15
+ "changed": [
16
+ {
17
+ "address": "plugins/example/skills/example/SKILL.md",
18
+ "sha256": "a0dcc36937f50a8da38261c1c39afe6caeb0f31674cdf3baaac48c4c81defe32"
19
+ }
20
+ ]
21
+ },
22
+ "checks": [
23
+ {
24
+ "name": "focused regression",
25
+ "command": "python3 test/audit_regressions/fix-ex-01.01.py",
26
+ "status": "PASS",
27
+ "observed": "7/7 cases"
28
+ },
29
+ {
30
+ "name": "browser smoke",
31
+ "command": "npx playwright test smoke",
32
+ "status": "NOT_RUN",
33
+ "observed": "no browser on this host — needs playwright installed"
34
+ }
35
+ ],
36
+ "evidence": [
37
+ {
38
+ "class": "fact",
39
+ "statement": "the crash fixture reproduces the loss before the fix and passes after",
40
+ "source": "test output, this run"
41
+ },
42
+ {
43
+ "class": "unknown_effect",
44
+ "statement": "behaviour under the provider's real rate limits was not observed",
45
+ "source": "no live account in this environment"
46
+ }
47
+ ],
48
+ "status": "completed"
49
+ }
@@ -0,0 +1,261 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/ssheleg/task-pipeline/main/plugins/task-pipeline/skills/task-pipeline/execution-result.schema.json",
4
+ "title": "task-pipeline execution result",
5
+ "description": "The answer half of the family's task contract (CTX-01, beside execution-packet.schema.json). An attempt starts with an AttemptGrant — a structured object from the single authority, carrying the graph revision it was issued at and the fence that supersedes it; a bare boolean is NOT a grant, because `true` cannot say who granted what, against which revision, or whether it has since been superseded. The attempt answers with this envelope: the candidate change (content-addressed), every check actually run with its honest status (NOT_RUN is never PASS), and the evidence rows in the fact/defect/unknown-effect union. A candidate built against an older revision than the current one is STALE and cannot validate as current — it goes back through re-planning, never quietly forward. `scripts/packet.py validate-result` is the dependency-free runtime half.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "packet_id",
11
+ "grant",
12
+ "built_against_revision",
13
+ "candidate",
14
+ "checks",
15
+ "evidence",
16
+ "status"
17
+ ],
18
+ "properties": {
19
+ "schema_version": {
20
+ "type": "string",
21
+ "pattern": "^execution-result/[0-9]+$",
22
+ "description": "Contract version. An unknown major is rejected, never skimmed — same rule as the packet."
23
+ },
24
+ "packet_id": {
25
+ "type": "string",
26
+ "minLength": 1
27
+ },
28
+ "grant": {
29
+ "$ref": "#/definitions/attemptGrant"
30
+ },
31
+ "built_against_revision": {
32
+ "type": "integer",
33
+ "minimum": 0,
34
+ "description": "The graph revision the candidate was built against. Compared to the CURRENT revision at validation: older means stale, and stale means re-plan."
35
+ },
36
+ "candidate": {
37
+ "type": "object",
38
+ "additionalProperties": false,
39
+ "required": [
40
+ "changed"
41
+ ],
42
+ "properties": {
43
+ "commit": {
44
+ "type": "string",
45
+ "description": "The candidate commit, where one exists."
46
+ },
47
+ "changed": {
48
+ "type": "array",
49
+ "items": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "required": [
53
+ "address",
54
+ "sha256"
55
+ ],
56
+ "properties": {
57
+ "address": {
58
+ "type": "string",
59
+ "minLength": 1
60
+ },
61
+ "sha256": {
62
+ "type": "string",
63
+ "pattern": "^[0-9a-f]{64}$"
64
+ }
65
+ }
66
+ },
67
+ "description": "Every path the candidate changed, content-addressed — the receipt a reviewer can verify against the tree."
68
+ }
69
+ }
70
+ },
71
+ "checks": {
72
+ "type": "array",
73
+ "items": {
74
+ "$ref": "#/definitions/check"
75
+ },
76
+ "description": "Every check actually run — and the ones that could not run, as NOT_RUN with what it would take. An empty list is a result nobody verified, which the consumer may refuse."
77
+ },
78
+ "evidence": {
79
+ "type": "array",
80
+ "items": {
81
+ "$ref": "#/definitions/evidenceRow"
82
+ },
83
+ "description": "Observations in the union evidence-docs and project-audit share: a FACT (observed, with its receipt), a DEFECT (observed wrong), or an UNKNOWN_EFFECT (could not be established) — three different verdicts that never blend."
84
+ },
85
+ "status": {
86
+ "type": "string",
87
+ "enum": [
88
+ "completed",
89
+ "partial",
90
+ "blocked",
91
+ "abandoned"
92
+ ],
93
+ "description": "The attempt's own verdict about itself. `completed` with failing checks is a contradiction the validator refuses."
94
+ },
95
+ "outputs": {
96
+ "type": "array",
97
+ "items": {
98
+ "type": "object",
99
+ "additionalProperties": false,
100
+ "required": [
101
+ "name",
102
+ "kind",
103
+ "address",
104
+ "sha256"
105
+ ],
106
+ "properties": {
107
+ "name": {
108
+ "type": "string",
109
+ "minLength": 1,
110
+ "description": "What the output IS to a consumer. Never a credential — a name that reads as one (token, secret, password, api_key, credential, cookie, private_key) is refused by the validator: a result outlives its session exactly like the packet (FIX-PF-05.03)."
111
+ },
112
+ "kind": {
113
+ "type": "string",
114
+ "enum": [
115
+ "artifact",
116
+ "report",
117
+ "decision",
118
+ "metric"
119
+ ]
120
+ },
121
+ "address": {
122
+ "type": "string",
123
+ "minLength": 1
124
+ },
125
+ "sha256": {
126
+ "type": "string",
127
+ "pattern": "^[0-9a-f]{64}$"
128
+ }
129
+ }
130
+ },
131
+ "description": "TYPED outputs the attempt produced, content-addressed. A consumer binds to a named output's digest — which is what makes a changed predecessor output DETECTABLE downstream (see `consumed`)."
132
+ },
133
+ "packet_digest": {
134
+ "type": "string",
135
+ "pattern": "^[0-9a-f]{64}$",
136
+ "description": "sha256 of the immutable dispatch packet this attempt ran from (FIX-PF-05.01). Ties the answer to the exact question; a result naming a packet digest the coordinator does not recognise is a result about different work."
137
+ },
138
+ "consumed": {
139
+ "type": "array",
140
+ "items": {
141
+ "type": "object",
142
+ "additionalProperties": false,
143
+ "required": [
144
+ "name",
145
+ "sha256"
146
+ ],
147
+ "properties": {
148
+ "name": {
149
+ "type": "string",
150
+ "minLength": 1
151
+ },
152
+ "producer": {
153
+ "type": "string"
154
+ },
155
+ "sha256": {
156
+ "type": "string",
157
+ "pattern": "^[0-9a-f]{64}$"
158
+ }
159
+ }
160
+ },
161
+ "description": "The predecessor outputs this attempt READ, by name + digest. Freshness is a comparison, not a feeling: when a predecessor re-runs and its output digest changes, every result that consumed the old digest is STALE and the node rebuilds at a new revision."
162
+ }
163
+ },
164
+ "definitions": {
165
+ "attemptGrant": {
166
+ "type": "object",
167
+ "additionalProperties": false,
168
+ "required": [
169
+ "grant_id",
170
+ "packet_id",
171
+ "revision",
172
+ "fence",
173
+ "holder"
174
+ ],
175
+ "description": "What the single authority issued. A boolean confirmation is not a grant: it names no issuer, no revision, no fence — nothing a later reader could check.",
176
+ "properties": {
177
+ "grant_id": {
178
+ "type": "string",
179
+ "minLength": 1
180
+ },
181
+ "packet_id": {
182
+ "type": "string",
183
+ "minLength": 1
184
+ },
185
+ "revision": {
186
+ "type": "integer",
187
+ "minimum": 0
188
+ },
189
+ "fence": {
190
+ "type": "integer",
191
+ "minimum": 0,
192
+ "description": "Monotonic token from the authority. A newer fence supersedes this grant: a result carrying an old fence lost its exclusivity mid-flight and must not land as current."
193
+ },
194
+ "holder": {
195
+ "type": "string",
196
+ "minLength": 1
197
+ },
198
+ "issued_at": {
199
+ "type": "string"
200
+ }
201
+ }
202
+ },
203
+ "check": {
204
+ "type": "object",
205
+ "additionalProperties": false,
206
+ "required": [
207
+ "name",
208
+ "command",
209
+ "status"
210
+ ],
211
+ "properties": {
212
+ "name": {
213
+ "type": "string",
214
+ "minLength": 1
215
+ },
216
+ "command": {
217
+ "type": "string",
218
+ "minLength": 1
219
+ },
220
+ "status": {
221
+ "type": "string",
222
+ "enum": [
223
+ "PASS",
224
+ "FAIL",
225
+ "ERROR",
226
+ "NOT_RUN"
227
+ ],
228
+ "description": "NOT_RUN and ERROR are their own statuses — never upgraded to PASS, never folded into FAIL."
229
+ },
230
+ "observed": {
231
+ "type": "string"
232
+ }
233
+ }
234
+ },
235
+ "evidenceRow": {
236
+ "type": "object",
237
+ "additionalProperties": false,
238
+ "required": [
239
+ "class",
240
+ "statement"
241
+ ],
242
+ "properties": {
243
+ "class": {
244
+ "type": "string",
245
+ "enum": [
246
+ "fact",
247
+ "defect",
248
+ "unknown_effect"
249
+ ]
250
+ },
251
+ "statement": {
252
+ "type": "string",
253
+ "minLength": 1
254
+ },
255
+ "source": {
256
+ "type": "string"
257
+ }
258
+ }
259
+ }
260
+ }
261
+ }
@@ -29,7 +29,16 @@
29
29
  ],
30
30
  "serves": "REQ-002",
31
31
  "check": "python3 test/graph_test.py — the validate fixtures",
32
- "evidence": null
32
+ "evidence": null,
33
+ "claim": {
34
+ "owner": "sess-7f3a:attempt-1",
35
+ "attempt": 1,
36
+ "revision": 4,
37
+ "fence": 12,
38
+ "expiry": "2026-08-14T18:30:00Z",
39
+ "state": "claimed",
40
+ "installed_at": "2026-08-14T18:00:00Z"
41
+ }
33
42
  },
34
43
  {
35
44
  "id": "N-003",