@1aboveio/skills 1.0.20 → 1.0.22
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/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +154 -151
- package/package.json +4 -4
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-development/SKILL.md +1 -1
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +1 -1
- package/skills/app-dev/maestro/SKILL.md +8 -1
- package/skills/app-dev/monorepo/SKILL.md +1 -1
- package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
- package/skills/app-dev/prisma-setup/SKILL.md +1 -1
- package/skills/app-dev/pyspark/SKILL.md +1 -1
- package/skills/app-dev/python-backend/SKILL.md +1 -1
- package/skills/app-dev/shadcn/SKILL.md +1 -1
- package/skills/app-dev/zod-v4/SKILL.md +1 -1
- package/skills/cicd/cloud-build/SKILL.md +1 -1
- package/skills/cicd/cloud-debug/SKILL.md +1 -1
- package/skills/cicd/cloud-deploy/SKILL.md +1 -1
- package/skills/cicd/docker/SKILL.md +1 -1
- package/skills/cicd/github-actions/SKILL.md +8 -2
- package/skills/cicd/github-actions/references/debugging.md +21 -0
- package/skills/cicd/github-actions/references/pipeline.md +26 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +7 -0
- package/skills/cicd/github-actions/scripts/watch-run.mjs +511 -0
- package/skills/cicd/github-flow/SKILL.md +35 -9
- package/skills/cicd/github-flow/scripts/watch-checks.mjs +561 -0
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +2 -2
- package/skills/cicd/mergify/references/diagnosis.md +6 -1
- package/skills/cicd/mergify/references/watch-contract.md +10 -7
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +15 -30
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +1 -1
- package/skills/core/house-style/SKILL.md +1 -1
- package/skills/core/plain-language/SKILL.md +1 -1
- package/skills/core/polish-cn/SKILL.md +1 -1
- package/skills/core/reg-parser/SKILL.md +1 -1
- package/skills/core/terminology/SKILL.md +1 -1
- package/skills/core/write-doc/SKILL.md +1 -1
- package/skills/core/write-report/SKILL.md +1 -1
- package/skills/engineering/better-review/SKILL.md +1 -1
- package/skills/engineering/better-review/references/passes.md +5 -0
- package/skills/engineering/e2e-test/SKILL.md +8 -1
- package/skills/engineering/engineering/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/SKILL.md +1 -1
- package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
- package/skills/engineering/ensure-coverage/SKILL.md +8 -1
- package/skills/engineering/golden-path/SKILL.md +5 -1
- package/skills/engineering/harness-runtime/SKILL.md +2 -1
- package/skills/engineering/harness-runtime/contracts.md +2 -0
- package/skills/engineering/harness-runtime/references/subagent-sessions.md +75 -0
- package/skills/engineering/resolve-issues/SKILL.md +25 -6
- package/skills/engineering/resolve-issues/references/ci.md +14 -4
- package/skills/engineering/resolve-issues/references/delivery-progress.md +3 -1
- package/skills/engineering/resolve-issues/references/done.md +8 -6
- package/skills/engineering/resolve-issues/references/expire.md +2 -2
- package/skills/engineering/resolve-issues/references/exploration.md +10 -3
- package/skills/engineering/resolve-issues/references/implementation.md +73 -51
- package/skills/engineering/resolve-issues/references/preflight.md +6 -0
- package/skills/engineering/resolve-issues/references/review.md +18 -19
- package/skills/engineering/resolve-issues/references/shared-modules.md +7 -1
- package/skills/engineering/resolve-issues/references/task-plan.md +18 -10
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +42 -32
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/resolve-release/references/publish.md +12 -4
- package/skills/engineering/resolve-release/references/workspace-npm.md +6 -4
- package/skills/engineering/rush-issues/SKILL.md +1 -1
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
- package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
- package/skills/risk-compliance/contract-review/SKILL.md +1 -1
- package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
- package/skills/risk-compliance/fraud-detection/SKILL.md +1 -1
- package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
- package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Saved subagent conversations on Pi
|
|
2
|
+
|
|
3
|
+
Use this contract when an engineering workflow continues a Pi worker after its
|
|
4
|
+
attempt has finished. Other harnesses use their advertised continuation API.
|
|
5
|
+
|
|
6
|
+
## Check the active interface
|
|
7
|
+
|
|
8
|
+
Read the tool schema advertised in the current turn. Continuation requires
|
|
9
|
+
`subagent_spawn` with `session_id`; a tool name or an installed package version
|
|
10
|
+
alone does not establish that the running extension has loaded that parameter.
|
|
11
|
+
A stale running extension may need the human's `/reload` after an update. Report
|
|
12
|
+
that mismatch and use the workflow's documented fallback; updating packages or
|
|
13
|
+
changing tool permissions is a separate authorized action.
|
|
14
|
+
|
|
15
|
+
## Record the conversation separately from the attempt
|
|
16
|
+
|
|
17
|
+
Keep these values from the actual launch receipt:
|
|
18
|
+
|
|
19
|
+
- `runId`: the attempt used for results, failures, logs, and the active worker slot.
|
|
20
|
+
- `sessionId`: the native Pi conversation used for later follow-up.
|
|
21
|
+
- `cwd`: the worker's recorded workspace.
|
|
22
|
+
|
|
23
|
+
Every continuation creates a new `runId` while keeping `sessionId`. Read the
|
|
24
|
+
native session id from the structured receipt, batch launch entry, or explicit
|
|
25
|
+
`session_id` in list output. An attempt id is not a substitute, even when the two
|
|
26
|
+
happen to match on the first launch.
|
|
27
|
+
|
|
28
|
+
For an older plan missing `sessionId`, locate the exact recorded `runId` in
|
|
29
|
+
`subagent_list` and record its native `session_id` before continuing. Use
|
|
30
|
+
`all: true` when it is outside the caller's folder. If that identity cannot be
|
|
31
|
+
verified, report unavailable continuity and follow the workflow's explicit
|
|
32
|
+
replacement path with its saved evidence.
|
|
33
|
+
|
|
34
|
+
## Continue through spawn
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
subagent_spawn({ session_id: owner.sessionId, prompt: "Fix the remaining findings." })
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The prompt is the next turn, not a repetition of the original assignment or role.
|
|
41
|
+
Keep the saved worker configuration; pass model or effort only for an explicit,
|
|
42
|
+
authorized escalation supported by the current schema. Record the returned new
|
|
43
|
+
attempt id and verify that its session id is still the selected conversation.
|
|
44
|
+
Per-job `session_id` in `subagent_spawn_batch` has the same meaning; the shared
|
|
45
|
+
batch options do not select one conversation for every job.
|
|
46
|
+
|
|
47
|
+
The caller may be a different foreground session. Completion reports to that
|
|
48
|
+
caller. Continue from a completed attempt; a running or orphaned writer must
|
|
49
|
+
settle before another continuation starts. A failed, killed, lost, or otherwise
|
|
50
|
+
refused attempt follows the workflow's recovery or replacement rules rather than
|
|
51
|
+
selecting an older completion. Current mandatory permissions still apply.
|
|
52
|
+
Missing history or workspace is a refusal, not permission to create a replacement
|
|
53
|
+
conversation under the same identity.
|
|
54
|
+
|
|
55
|
+
## Discover locally or globally
|
|
56
|
+
|
|
57
|
+
`subagent_list()` searches the current folder and descendants across foreground
|
|
58
|
+
sessions. `subagent_list({ all: true })` searches globally. Each row identifies
|
|
59
|
+
both the attempt and the saved conversation. `session_name` is a convenience for
|
|
60
|
+
one exact, unambiguous name in the local folder scope; a workflow with recorded
|
|
61
|
+
ownership uses its exact `sessionId` rather than choosing a worker by name.
|
|
62
|
+
Duplicate names require an explicit session id.
|
|
63
|
+
|
|
64
|
+
## Keep the lifecycle small
|
|
65
|
+
|
|
66
|
+
Native session history and completed launch recipes persist by default.
|
|
67
|
+
`subagent_resume`, `subagent_release`, and `retain_session` are not part of this
|
|
68
|
+
contract. A completed attempt frees its capacity slot automatically. Ordinary
|
|
69
|
+
workspace/resource cleanup remains owned by the workflow; no session-release
|
|
70
|
+
acknowledgement is required. Preserving history does not keep a deleted workspace
|
|
71
|
+
available for later continuation.
|
|
72
|
+
|
|
73
|
+
Keep the implementation conversation through repairs. An unfinished review may
|
|
74
|
+
continue only within the workflow's existing HEAD and scope rules. A completed
|
|
75
|
+
independent review round gets a fresh reviewer for the next required round.
|
|
@@ -8,7 +8,7 @@ dependencies:
|
|
|
8
8
|
- better-review
|
|
9
9
|
- golden-path
|
|
10
10
|
- harness-runtime
|
|
11
|
-
release-version: 0.50.
|
|
11
|
+
release-version: 0.50.2
|
|
12
12
|
---
|
|
13
13
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
14
14
|
# Resolve issues
|
|
@@ -119,15 +119,31 @@ Read each procedure right before its stage; never substitute your own.
|
|
|
119
119
|
- **Proof.** Treat producer reports as claims until the reviewer or CI checks them. Tests and diagnostic probes
|
|
120
120
|
encode failure in their exit status under [Proof](references/implementation.md#proof); printing an exception
|
|
121
121
|
and returning 0 is not a passing check. Coordination CLIs keep their documented structured-verdict contracts.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
no evidence documents; the plan, findings, and reviews are the only records.
|
|
122
|
+
Apply the [Acceptance criteria](#acceptance-criteria) contract below. Use the plan,
|
|
123
|
+
findings, reviews and CI artifacts as the records; produce an additional checklist or
|
|
124
|
+
evidence document only when the issue or repository requires it, deriving results from actual runs.
|
|
126
125
|
- **Delivery.** A dependent starts on its parent's finished code. Stack its PR on the parent's (a GitHub-native
|
|
127
126
|
stack) under a live Mergify queue; chain it when the merge keeps commits; else open it once the parent merges. Live
|
|
128
127
|
steps are only the read-only warehouse canary (never blocks) and the isolated, run-owned resources
|
|
129
128
|
[preflight.md](references/preflight.md#never-block-on-the-human) allows.
|
|
130
129
|
|
|
130
|
+
## Acceptance criteria
|
|
131
|
+
|
|
132
|
+
Treat Acceptance Criteria, other issue requirements and later corrections as the contract.
|
|
133
|
+
Reuse or implement automated tests at the lowest sufficient level. Workers deliver behavior
|
|
134
|
+
and tests, run focused local checks, and return with CI pending. CI qualifies the candidate;
|
|
135
|
+
the coordinator verifies results. Human or hardware criteria stay pending until their step passes.
|
|
136
|
+
|
|
137
|
+
At preflight, record coverage, missing automation, the CI lane and manual remainder in
|
|
138
|
+
findings. Reuse sufficient tests; one may cover several criteria. Acceptance-focused issues
|
|
139
|
+
are supported: automate criteria, fix in-scope defects and qualify results in CI.
|
|
140
|
+
Tests added or code merged alone do not satisfy acceptance.
|
|
141
|
+
|
|
142
|
+
Defer acceptance only when the issue or agreed policy assigns it to a later gate; link
|
|
143
|
+
its owner. An issue requesting the campaign remains incomplete until its criteria pass.
|
|
144
|
+
Preserve required checks and merge rules. Surface missing execution or enforcement;
|
|
145
|
+
change neither branch protection nor acceptance scope without authorization.
|
|
146
|
+
|
|
131
147
|
## Delivery progress
|
|
132
148
|
|
|
133
149
|
Before briefing or continuing a unit, read [delivery-progress.md](references/delivery-progress.md).
|
|
@@ -171,7 +187,7 @@ efforts are run metadata, never a question.
|
|
|
171
187
|
### 2. Implement and open the PR
|
|
172
188
|
|
|
173
189
|
Give each unit a branch, its prepared workspace, and an implementer with its findings entry
|
|
174
|
-
and parents' contracts;
|
|
190
|
+
and parents' contracts; keep its [implementation owner](references/implementation.md#implementation-owner)
|
|
175
191
|
through review/CI fixes, separately from its active worker slot. State outcome and validation, not method. Refill
|
|
176
192
|
slots at once. At a unit's first coherent commit its PR opens as a draft, so CI
|
|
177
193
|
starts and the work is safe; later work goes to the same PR (in a Mergify stack
|
|
@@ -219,6 +235,9 @@ that same `planRevision`.
|
|
|
219
235
|
|
|
220
236
|
## Done
|
|
221
237
|
|
|
238
|
+
Check each issue's [acceptance contract](#acceptance-criteria) against qualifying results;
|
|
239
|
+
record later-gate obligations. A merged PR does not close pending acceptance.
|
|
240
|
+
|
|
222
241
|
First [clean every delivered unit's environment](references/done.md#clean-before-handoff), then
|
|
223
242
|
[settle blocked units](references/done.md#settle-blocked-units). Every PR is reviewed, green on its exact HEAD, and merged (`autonomous`) or
|
|
224
243
|
handed back merge-ready (`supervised`). For a blocked unit, hand back it, its
|
|
@@ -7,6 +7,18 @@ the queue owner's watcher where applicable. Workers may make short status reads
|
|
|
7
7
|
fetch failed logs for diagnosis, but must not run `gh run watch`,
|
|
8
8
|
`gh pr checks --watch`, a delivery watcher, or create background monitoring.
|
|
9
9
|
|
|
10
|
+
Qualify the issue's Acceptance Criteria as well as required repository checks.
|
|
11
|
+
Verify that the mapped tests actually ran in the assigned lane against the intended
|
|
12
|
+
candidate and their assertions cover the claimed behavior. A skipped case, missing
|
|
13
|
+
acceptance job, or green unrelated check is not acceptance. Use CI results and artifacts
|
|
14
|
+
for any required checklist; retain manual or explicitly later-gate obligations with
|
|
15
|
+
their owner. Worker completion with CI pending is not issue acceptance. Queue checks
|
|
16
|
+
qualify the combined candidate; post-deploy checks qualify the deployed revision.
|
|
17
|
+
Require each result at its assigned stage: PR admission checks before enqueue,
|
|
18
|
+
queue acceptance before merge, and deployed acceptance after deployment or before
|
|
19
|
+
promotion as specified. Queue-only acceptance is pending at admission, not missing
|
|
20
|
+
PR CI; it cannot be required to pass before the queue candidate exists.
|
|
21
|
+
|
|
10
22
|
1. Watch the required checks for every pushed HEAD. Pushes to the unit's own
|
|
11
23
|
PR branch need no approval. Green means every required check ran and passed
|
|
12
24
|
on that HEAD: a check that never reported is missing, not passed. Example: a
|
|
@@ -105,10 +117,8 @@ provider shows that PR merged.
|
|
|
105
117
|
|
|
106
118
|
Clean that unit's workspace and resources, then finish it, in every scheduler
|
|
107
119
|
mode: `next-actions.mjs` prints `cleanup-workspace` until its cleanup settles.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
nothing to release. Then record the intent through the [checkpoint mechanism](task-plan.md#checkpoints) (`lifecycle.cleanup`
|
|
111
|
-
`{state: applying, headSha: <the unit's headSha>}`), then run:
|
|
120
|
+
Record the intent through the [checkpoint mechanism](task-plan.md#checkpoints) (`lifecycle.cleanup`
|
|
121
|
+
`{state: applying, headSha: <the unit's headSha>}`), while other units remain active, then run:
|
|
112
122
|
|
|
113
123
|
```bash
|
|
114
124
|
node <skill-base-dir>/scripts/cleanup-runs.mjs cleanup --run <run> --unit <unit> \
|
|
@@ -45,7 +45,7 @@ issue or automatic scheduler gate. They do not waive required validation.
|
|
|
45
45
|
|
|
46
46
|
## Every brief contains
|
|
47
47
|
|
|
48
|
-
Use the full checklist for a fresh or replacement worker. For a
|
|
48
|
+
Use the full checklist for a fresh or replacement worker. For a continued conversation,
|
|
49
49
|
send the new feedback, current checkpoint, latest failure/fix brief and local evidence,
|
|
50
50
|
current standing orders and changed decisions, affected skill/proof pointers, and new
|
|
51
51
|
result path. Re-read the saved source/criteria after context loss; do not resend the original
|
|
@@ -59,6 +59,8 @@ acceptance bar, launch-authority rules and history; it is not a new setup or pro
|
|
|
59
59
|
- model id, effort, and a required read-back
|
|
60
60
|
- an absolute skill path when the stage invokes a leaf skill; for validating, the unit's `proof.suite` `skill` (read it first) and `local`, when set
|
|
61
61
|
- the outcome and validation, with no prescribed method or evidence format
|
|
62
|
+
- the Acceptance Criteria mapping: existing or missing tests, qualifying CI lane,
|
|
63
|
+
and manual or explicitly later-gate obligations; include any issue-required checklist
|
|
62
64
|
- the [immediate acceptance checkpoint](#delivery-progress), existing baseline (or none),
|
|
63
65
|
and, for a continuation, the last result, remaining uncertainty and next distinguishing
|
|
64
66
|
test; retain the same checkpoint/history when changing workers
|
|
@@ -15,12 +15,9 @@ nothing is left to settle.
|
|
|
15
15
|
|
|
16
16
|
## Clean before handoff
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
recorded only where protection was actually held. Record any
|
|
22
|
-
resource intentionally kept under the existing lifecycle; never claim it was cleaned
|
|
23
|
-
because its worker exited.
|
|
18
|
+
Clean each delivered unit's workspace and resources at its settlement; this also applies at
|
|
19
|
+
each merge while other units continue. Record any resource intentionally kept under the
|
|
20
|
+
existing lifecycle; never claim it was cleaned because its worker exited.
|
|
24
21
|
|
|
25
22
|
Clean every delivered unit's workspace and resources before the report, in every
|
|
26
23
|
scheduler mode ([workspaces.md](workspaces.md#cleanup-after-delivery-before-finish)).
|
|
@@ -31,6 +28,11 @@ cancelled, pending, or merge-ready handed-back unit that keeps its environment.
|
|
|
31
28
|
|
|
32
29
|
## Close the run
|
|
33
30
|
|
|
31
|
+
Before closing, distinguish run completion from issue acceptance. Verify the issue's
|
|
32
|
+
Acceptance Criteria against qualifying CI results and required manual results. Keep
|
|
33
|
+
an issue open when its own acceptance remains pending, even if its automation PR
|
|
34
|
+
merged or its human-only remainder was excluded. Link that obligation in the report.
|
|
35
|
+
|
|
34
36
|
After the report ([SKILL.md](../SKILL.md#done)):
|
|
35
37
|
|
|
36
38
|
The run is done when nothing it can do is left: every unit landed,
|
|
@@ -242,10 +242,10 @@ missing, or names a step without a reason.
|
|
|
242
242
|
| A capability the unit needs is missing and no unit builds it (a shared driver, fixture, or hook) | Build it inside the first unit that needs it; units that need it later get `dependsOn` on that unit. Only when that puts the unit past the size check's line limit, file it as its own issue beside them, with `blocked_by` on the units that use it, never on their parent issue. Example: three proof units each need a device-state reader: the first builds it, the other two depend on the first. |
|
|
243
243
|
| [Human-only](#human-only) blocker | Take its automatic answer ([preflight.md](preflight.md#never-block-on-the-human)); when that defers it, mark `blocked` (`blockedReason: human-decision`, its `humanItem` and `humanNeed`), keep the work, and record what is needed on its owning issue; never ship part of the unit. |
|
|
244
244
|
|
|
245
|
-
Continue the
|
|
245
|
+
Continue the saved owner in the kept workspace with the current checkpoint, findings
|
|
246
246
|
and failure evidence. If its process state or required selection prevents continuation,
|
|
247
247
|
use an explicit replacement under the [owner contract](implementation.md#implementation-owner),
|
|
248
|
-
keeping
|
|
248
|
+
keeping the replaced reference as evidence; replacement briefs use those local facts
|
|
249
249
|
rather than an old transcript. Keep the response limits and history above. Record a queue stall with the
|
|
250
250
|
provider pending as a wait and watch again. End the run only when
|
|
251
251
|
`next-actions.mjs`, invoked with [live capacity](implementation.md#live-capacity), prints `finish`, and never claim the spec complete.
|
|
@@ -125,6 +125,12 @@ The coordinator and any delegated explorer use these rules:
|
|
|
125
125
|
5. **`layers`:** the parts changed (`backend`, `web`, `android`, `shared`,
|
|
126
126
|
`migration`).
|
|
127
127
|
6. **`proof`:**
|
|
128
|
+
Map the issue's Acceptance Criteria and other binding requirements to existing
|
|
129
|
+
tests, missing automation, the qualifying CI lane, and any manual remainder in
|
|
130
|
+
the existing notes/proof fields. Preserve criterion identifiers when supplied;
|
|
131
|
+
no new ledger or schema is required. For acceptance-focused issues, include
|
|
132
|
+
implementing the cases and connecting their execution to CI in the unit's scope.
|
|
133
|
+
|
|
128
134
|
- `level`: the weakest the run can reach that shows the behaviors work:
|
|
129
135
|
`unit`, `database`, `browser`, or `emulator`.
|
|
130
136
|
- `suite` (`browser`/`emulator` only): the repository's end-to-end suite
|
|
@@ -157,9 +163,10 @@ The coordinator and any delegated explorer use these rules:
|
|
|
157
163
|
Example: a campaign's 25 scenario groups each cover one feature issue; 20
|
|
158
164
|
share "owned emulator, database, and fixture pool" (900 lines).
|
|
159
165
|
|
|
160
|
-
`level`
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
`level` selects the test depth for automated acceptance. Put integrated acceptance
|
|
167
|
+
in `handback`, naming its gate and owner, only when the issue or agreed repository
|
|
168
|
+
policy assigns it to a later gate. A cross-feature or device journey is not deferred
|
|
169
|
+
merely because it is expensive; an issue requesting that acceptance still owes it.
|
|
163
170
|
7. **`estimatedLines`: your honest estimate of changed source and test
|
|
164
171
|
lines,** excluding generated files and docs, including every missing
|
|
165
172
|
prerequisite. Do not pad it: the size check scales it by 1.3.
|
|
@@ -27,7 +27,8 @@ the coordinator.
|
|
|
27
27
|
not the backend suite.
|
|
28
28
|
5. **Run focused checks locally; CI runs the rest.**
|
|
29
29
|
Example: run the touched package's tests and typecheck, push, and let CI
|
|
30
|
-
run the full matrix.
|
|
30
|
+
run the full matrix. Run release campaigns only at their assigned gate;
|
|
31
|
+
implement campaign automation when the current issue requests it.
|
|
31
32
|
6. **Report in one short record and return.**
|
|
32
33
|
Example: "Persists the Charge layout per installation. Ran charge tests
|
|
33
34
|
and typecheck: pass. CI: pending. Pending: release device campaign
|
|
@@ -55,51 +56,62 @@ accepts unrestricted writes.
|
|
|
55
56
|
|
|
56
57
|
## Implementation owner
|
|
57
58
|
|
|
59
|
+
On Pi, read the shared [saved conversation contract](../../harness-runtime/references/subagent-sessions.md)
|
|
60
|
+
for the active schema check, discovery scope, and conversation lifecycle. The rules below
|
|
61
|
+
bind that contract to unit ownership and review repairs.
|
|
62
|
+
|
|
58
63
|
Keep one implementation conversation per unit through local proof, independent review,
|
|
59
64
|
review fixes and CI repairs. Its saved conversation outlives the active worker slot: launch
|
|
60
65
|
each worker normally, single or batch as the assignment needs, and record the receipt as
|
|
61
|
-
`implementationOwner` ([task-plan.md](task-plan.md#shape))
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
`implementationOwner` ([task-plan.md](task-plan.md#shape)): the native `sessionId` and that
|
|
67
|
+
attempt's `runId`, kept as separate fields. A parked owner has no live process and reserves
|
|
68
|
+
no slot. The coordinator still owns scheduling, plan writes, external CI, readiness and
|
|
69
|
+
delivery; reviewers use separate conversations.
|
|
70
|
+
|
|
71
|
+
Continuation is a spawn into the saved session, not a resume call:
|
|
72
|
+
`subagent_spawn({session_id: owner.sessionId, prompt: <current brief>})` continues that exact
|
|
73
|
+
native session and returns a new attempt `runId` with the same `sessionId`. Record the new
|
|
74
|
+
`runId` as `implementationOwner.runId` and keep the `sessionId`. Never pass an attempt `runId`
|
|
75
|
+
as `session_id`, and never invent a session id a receipt does not hold: a first launch can show
|
|
76
|
+
similar-looking ids, which is not evidence they are interchangeable. Continue from a completed
|
|
77
|
+
attempt: a running or orphaned writer settles first. A conversation started
|
|
78
|
+
from another foreground session still continues: the launch origin does not restrict
|
|
79
|
+
continuation. `subagent_list()` covers the caller's folder and descendants across foreground
|
|
80
|
+
sessions; `all: true` searches globally.
|
|
81
|
+
In a batch, the job's own selector continues that job's session.
|
|
82
|
+
|
|
83
|
+
`next-actions.mjs` supplies `continuation`, `workerKind`, and, for `owner-resume` or
|
|
84
|
+
`owner-recovery`, `owner`.
|
|
85
|
+
Selection follows [continuation versus new launch](task-plan.md#worker-selection-on-resume):
|
|
86
|
+
omit model/effort for ordinary continuation. Use only authorized, supported explicit
|
|
87
|
+
overrides; when a required role-only fill cannot be expressed by the continuation call,
|
|
88
|
+
replace from that fill with the retained evidence instead of creating a pin from its resolved
|
|
89
|
+
model ID. `session_name` selects an existing conversation by an exact, unambiguous name
|
|
90
|
+
within the caller's folder and descendants; it does not name a new conversation. Fresh
|
|
91
|
+
launches omit both session selectors and may use an advertised fresh-launch naming control.
|
|
92
|
+
A workflow that records ids continues
|
|
93
|
+
`implementationOwner.sessionId` rather than looking a session up by name. Clear `worker` when
|
|
94
|
+
an attempt ends, but keep `implementationOwner` while review or CI is pending. Keep all
|
|
95
|
+
counters and earlier results across attempts. `one-by-one` fixes findings sequentially in this
|
|
96
|
+
owner.
|
|
79
97
|
|
|
80
98
|
A missing history/workspace, an unusable saved owner, or an owner that cannot continue
|
|
81
99
|
requires an explicit replacement reason and the retained checkpoint, failures and reproducer
|
|
82
|
-
references in the replacement brief.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
recorded as done.
|
|
98
|
-
|
|
99
|
-
Reopening is the ordinary case: resume the saved conversation even when its protection was
|
|
100
|
-
released, because release stops protection and leaves the history in place. Start a fresh
|
|
101
|
-
replacement only when continuation is genuinely unavailable, and carry the original
|
|
102
|
-
checkpoint/findings/counters into it. The same rule covers a released unfinished review,
|
|
100
|
+
references in the replacement brief. Report lost continuity; never label a new conversation a
|
|
101
|
+
resume. Existing recovery/stop rules still apply, and old plans without an owner use the
|
|
102
|
+
fresh-worker path. Do not install or update the harness during a run merely to obtain
|
|
103
|
+
continuation.
|
|
104
|
+
|
|
105
|
+
A plan written before this contract may hold `implementationOwner {runId}` and no `sessionId`.
|
|
106
|
+
`next-actions.mjs` prints `continuation: "owner-recovery"` for it: first match that exact
|
|
107
|
+
`runId` in `subagent_list({all: true})` or in the verified spawn receipt. A match that names
|
|
108
|
+
its session continues that session and records both ids; with no match, launch an explicit
|
|
109
|
+
replacement with the retained evidence and say why. A `retentionReleased` field left on an old
|
|
110
|
+
plan is inert history: no step reads it, reverses it, or owes a release for it.
|
|
111
|
+
|
|
112
|
+
Reopening is the ordinary case: continue the saved session; there is no release step in the way.
|
|
113
|
+
Start a fresh replacement only when continuation is genuinely unavailable, and carry the
|
|
114
|
+
original checkpoint/findings/counters into it. The same rule covers an unfinished review,
|
|
103
115
|
keeping its round and existing full-review fallback.
|
|
104
116
|
|
|
105
117
|
## Brief
|
|
@@ -156,8 +168,10 @@ On `resume` (in flight, no worker, code not done), continue the unit's
|
|
|
156
168
|
step, error message and evidence path the worker observed. An exit code alone is
|
|
157
169
|
not a failure; keep the first failure separate from cleanup errors. Fix workers
|
|
158
170
|
write the same file. Return
|
|
159
|
-
|
|
160
|
-
|
|
171
|
+
only that result by default. When the issue or repository requires a checklist
|
|
172
|
+
or evidence document, produce it from actual results and link CI artifacts;
|
|
173
|
+
otherwise omit artifact hashes, inventories, screenshots and copied logs.
|
|
174
|
+
For a continuation, include the current checkpoint,
|
|
161
175
|
outcome and relevant prior-result links in the existing integration notes; do not
|
|
162
176
|
duplicate the full attempt history. After focused validation, the permitted push,
|
|
163
177
|
and the result, return without waiting for external CI or PR monitoring. Report
|
|
@@ -168,14 +182,19 @@ On `resume` (in flight, no worker, code not done), continue the unit's
|
|
|
168
182
|
not prohibit long local tests or builds needed for the assigned validation.
|
|
169
183
|
|
|
170
184
|
After 2 fix cycles without progress, or a stuck or late worker, follow
|
|
171
|
-
[expire.md](expire.md). Apply the next response through the
|
|
185
|
+
[expire.md](expire.md). Apply the next response through the saved owner where its
|
|
172
186
|
completed conversation and required launch controls permit continuation. A replacement
|
|
173
187
|
uses the same workspace and the findings entry, failing command/output and `git diff <base>`;
|
|
174
|
-
record why it replaces the owner and
|
|
188
|
+
record why it replaces the owner and keep the replaced reference as evidence. Give replacement
|
|
175
189
|
workers those local facts rather than copying the old transcript. Keep all progress counters.
|
|
176
190
|
|
|
177
191
|
## Proof
|
|
178
192
|
|
|
193
|
+
- **Implement the acceptance contract.** Read the issue's Acceptance Criteria and
|
|
194
|
+
the preflight mapping. Reuse sufficient tests and add missing assertions at the
|
|
195
|
+
lowest level that exercises the required behavior. Ensure CI selects and executes
|
|
196
|
+
them in the assigned lane. Return test/criterion references and pending CI or manual
|
|
197
|
+
obligations in the existing result; the coordinator qualifies acceptance.
|
|
179
198
|
- **Make diagnostic failures executable.** Reuse the existing test runner/assertions.
|
|
180
199
|
A standalone probe exits nonzero for an unexpected exception, failed assertion or
|
|
181
200
|
result outside the expected contract. A catch used to add context rethrows or sets
|
|
@@ -226,12 +245,11 @@ workers those local facts rather than copying the old transcript. Keep all progr
|
|
|
226
245
|
failure ([expire.md](expire.md#infrastructure-failures)): one bounded
|
|
227
246
|
investigation that fixes what the run can; a shared blocker issue only
|
|
228
247
|
when the cause stays unfound or its fix is human-only. Keep the rest moving.
|
|
229
|
-
- Keep `proof.physical` and
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
passed.
|
|
248
|
+
- Keep `proof.physical` and explicitly assigned later release acceptance pending
|
|
249
|
+
at their named gate and owning issue. Build the automated tests the current issue
|
|
250
|
+
requests even when CI runs them as a campaign. If the current issue requests the
|
|
251
|
+
campaign's result, test implementation alone is not completion. Report manual or
|
|
252
|
+
unavailable checks as pending, never passed.
|
|
235
253
|
|
|
236
254
|
## Scheduling
|
|
237
255
|
|
|
@@ -384,11 +402,15 @@ parent another child holds.
|
|
|
384
402
|
line's PRs bottom first (`--base <targetBranch>` when it is not the default
|
|
385
403
|
branch); with the Mergify stack hooks installed, push with the `mergify`
|
|
386
404
|
skill's `stack-push.mjs` instead. Keep the body to one short record:
|
|
387
|
-
|
|
405
|
+
the issue link, the behavior delivered, the checks run with their
|
|
388
406
|
results, and any outstanding blocker or pending obligation as an issue
|
|
389
407
|
link; add the parent PR in `stack` and `chain` mode. CI posts its own run link; cite
|
|
390
408
|
CI-generated artifacts where provenance is required, never hashes or
|
|
391
409
|
logs copied by hand.
|
|
410
|
+
Use `Closes #<issue>` only when merging this PR will satisfy that issue's own
|
|
411
|
+
acceptance contract. With outstanding manual or post-merge acceptance, use
|
|
412
|
+
`Refs #<issue>` in both the PR body and commit message so merging automation
|
|
413
|
+
does not close the original issue. The coordinator closes it after acceptance.
|
|
392
414
|
3. Record the PR URL and `headSha`; once the code is done, start review while CI runs. Mark the
|
|
393
415
|
PR ready only when review passes and CI is green on the same HEAD
|
|
394
416
|
([ci.md](ci.md)).
|
|
@@ -155,6 +155,12 @@ Example: epic #12's #20 (signed release and go/no-go) and #21
|
|
|
155
155
|
(physical acceptance) stay out of the plan; the run ends when its code units
|
|
156
156
|
land instead of waiting on them.
|
|
157
157
|
|
|
158
|
+
An automated browser or emulator acceptance campaign is implementable work, including
|
|
159
|
+
when it proves already-merged features. Include its tests, CI execution and requested
|
|
160
|
+
results in scope. For mixed automated/manual criteria, keep the automation unit and
|
|
161
|
+
record the human-only remainder with its owner; report the original issue incomplete
|
|
162
|
+
until that remainder passes. Exclusion records a pending obligation, not acceptance.
|
|
163
|
+
|
|
158
164
|
## 4. Assess the plan
|
|
159
165
|
|
|
160
166
|
Follow [exploration.md](exploration.md#choose-the-owner) on the provisional
|
|
@@ -11,10 +11,10 @@ restate its rules in the brief beyond the two below.
|
|
|
11
11
|
- Start a fresh reviewer conversation after each completed review round; the existing
|
|
12
12
|
scope script still chooses delta/full/skip, so freshness adds no review round or test
|
|
13
13
|
campaign. Give it retained records and code evidence as claims to verify, not an
|
|
14
|
-
implementer transcript. Launch it normally and keep its
|
|
15
|
-
`reviewSession`, separate from `implementationOwner`, so an unfinished
|
|
16
|
-
can continue in that saved
|
|
17
|
-
|
|
14
|
+
implementer transcript. Launch it normally and keep its `sessionId` and latest attempt
|
|
15
|
+
`runId` as `reviewSession`, separate from `implementationOwner`, so an unfinished
|
|
16
|
+
same-HEAD round can continue in that saved session; a round after a completed review is a
|
|
17
|
+
fresh conversation.
|
|
18
18
|
- Reviewer model: a different id from the implementer's
|
|
19
19
|
([preflight.md](preflight.md#1-model-slots)). Launch the reviewer with the
|
|
20
20
|
plan's recorded reviewer fill — its `launch`, `instructions`, `selection` and
|
|
@@ -126,23 +126,22 @@ the unfinished work rather than repeating the whole assignment; preserve complet
|
|
|
126
126
|
valid passes. A wrong HEAD or invalid scope must be corrected, not carried as
|
|
127
127
|
completed proof.
|
|
128
128
|
|
|
129
|
-
On Pi, use `
|
|
130
|
-
when that attempt completed as a process and its saved
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
129
|
+
On Pi, use `subagent_spawn({session_id: reviewSession.sessionId, prompt: <unfinished work>})`
|
|
130
|
+
when that attempt completed as a process and its saved session is available; it returns a new
|
|
131
|
+
attempt `runId` on the same session, so record that `runId` and keep the `sessionId`, preserving
|
|
132
|
+
this review's round, HEAD and counter. A saved record holding only `runId` needs recovery first:
|
|
133
|
+
match that exact attempt in `subagent_list({all: true})` or the verified spawn receipt, continue
|
|
134
|
+
the session it names, and replace it with retained evidence if nothing matches; never pass the
|
|
135
|
+
attempt id as `session_id`. A killed/lost attempt or an unavailable continuation follows
|
|
136
|
+
replacement below. Once the review record is complete, the next required review is a fresh
|
|
137
|
+
conversation. Clear `reviewSession` when the round completes; keep a replaced reviewer's
|
|
138
|
+
reference in `retiredSessions` as evidence, with no release operation owed. Never use a
|
|
139
|
+
reviewer as the implementation owner.
|
|
138
140
|
|
|
139
141
|
If that reviewer cannot continue, state why replacement is necessary, which
|
|
140
|
-
retained evidence the replacement reads, and what it redoes before launching it.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
While an old reference is still worth resuming or still needs release, keep it as an entry
|
|
144
|
-
in `retiredSessions` ([task-plan.md](task-plan.md#shape)) rather than dropping it; a later
|
|
145
|
-
release of the new session does not release the old conversation. The replacement reviews every pass with `tier: "full"`. Keep the round number,
|
|
142
|
+
retained evidence the replacement reads, and what it redoes before launching it. A
|
|
143
|
+
`retentionReleased` field on an old reference is inert history, not a replacement reason.
|
|
144
|
+
The replacement reviews every pass with `tier: "full"`. Keep the round number,
|
|
146
145
|
`fixRound`, unit `attempt` and earlier round files; incompleteness neither resets
|
|
147
146
|
history nor counts as progress. Launch the replacement from the same recorded
|
|
148
147
|
reviewer fill, in the same structured launch arguments as [the brief](#brief)
|
|
@@ -157,7 +157,13 @@ and substitute nothing.
|
|
|
157
157
|
|
|
158
158
|
**A blocked result ends the run.** `ok: false` — no resolver, no capabilities,
|
|
159
159
|
a declined request, an unadvertised launch control, a missing native selection —
|
|
160
|
-
means report its `code` and `reason` and start nothing.
|
|
160
|
+
means report its `code` and `reason` and start nothing. An unsupported control
|
|
161
|
+
required by the fresh-launch fill is the same block. A missing continuation selector
|
|
162
|
+
alone makes the saved conversation unavailable: report the active schema and use the
|
|
163
|
+
[explicit evidenced replacement](implementation.md#implementation-owner) from the
|
|
164
|
+
authorized fresh-launch fill. It does not block other runnable units. Refreshing a stale
|
|
165
|
+
runtime (`/reload`) is the user's action; never fabricate a call or install/update the
|
|
166
|
+
harness mid-run. Never reuse an earlier
|
|
161
167
|
pick, never fall back to the skill-owned catalog, and never let the reviewer share
|
|
162
168
|
the implementer's model id: the catalog enforces independence, and re-picking a
|
|
163
169
|
replacement here would silently break it.
|
|
@@ -92,9 +92,9 @@ Fleet `status`: `pending`, `in-flight`, `succeeded`, `failed`,
|
|
|
92
92
|
| `attempt`, `retries`, `escalations` | Attempt number; cycle counts; escalation-model attempts |
|
|
93
93
|
| `worker`, `workerSince`, `clock` | Slot identifier of any worker running for the unit (implementer, reviewer, fix), `null` when none; when that worker started (ISO time, for [stuck-worker checks](expire.md#waits)); attempt and cumulative wall time |
|
|
94
94
|
| `workerKind` | `implement`, `fix`, or `review`, set with `worker`; the [live-capacity scheduler](implementation.md#live-capacity) (`next-actions.mjs`) prints `worker-kind` for any other kind or none. An infrastructure diagnosis or a test-first worker is a `fix` worker. The explorer is the `explore` fleet row's worker, never a unit's; a merge-queue watcher is not a worker |
|
|
95
|
-
| `implementationOwner` |
|
|
96
|
-
| `reviewSession` | Optional `{
|
|
97
|
-
| `retiredSessions` | Optional references kept beside a replaced implementation owner or unfinished reviewer: `{
|
|
95
|
+
| `implementationOwner` | Saved implementation conversation: `{sessionId, runId?, cwd?, kind?}`. `sessionId` is the native session to continue and is what `subagent_spawn({session_id})` takes; `runId` is that session's latest attempt, never a `session_id`. `kind` is `implement` (default) or `fix`, never `review`; `cwd`, when recorded, matches `workspace`. Save the spawn receipt here, independently of `worker`; a parked owner occupies no slot. The scheduler emits `owner-resume` for a usable owner, `owner-recovery` for a legacy record that holds only an attempt id, or an explicit `ownerUnavailable` reason for replacement. `retentionReleased` on an old plan is inert history: nothing reads or releases it. Old plans remain readable. See [ownership](implementation.md#implementation-owner). |
|
|
96
|
+
| `reviewSession` | Optional `{sessionId, runId?, head, round}` for the current unfinished review: the same session/attempt split, continued only for the same HEAD and scope. Clear it when that round completes, so the next completed-review round starts fresh. It is never an implementation owner or a slot reservation. |
|
|
97
|
+
| `retiredSessions` | Optional references kept beside a replaced implementation owner or unfinished reviewer: `{sessionId?, runId?, kind, reason?}`. Only as evidence for the replacement brief and for the record; no release operation is owed. |
|
|
98
98
|
| `estimatedLines` | Preflight assessment estimate |
|
|
99
99
|
| `sizeCheck` | Measures, `verdict` (the size check's per-unit verdict; `stop` means held), scope and proof verdicts, split or verification path; `runWhole: true` once a recommendation to run a held unit whole is accepted |
|
|
100
100
|
| `note` | SHA, expiry reason code, failure and response, or blocker; for active debugging, the immediate acceptance checkpoint, baseline/result link and next distinguishing test ([delivery progress](../SKILL.md#delivery-progress)) |
|
|
@@ -160,13 +160,21 @@ recommendation's reason; its human's words are the invocation.
|
|
|
160
160
|
### Worker selection on resume
|
|
161
161
|
|
|
162
162
|
Distinguish resuming the workflow from continuing one saved conversation. For an ordinary
|
|
163
|
-
same-conversation
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
163
|
+
same-conversation continuation call `subagent_spawn({session_id: <saved sessionId>, prompt:
|
|
164
|
+
<new feedback>})`: it continues that exact native session and returns a new attempt id, so omit
|
|
165
|
+
role, model and effort and let the harness preserve its recorded recipe. An attempt `runId` is
|
|
166
|
+
never a `session_id`, and no session id is invented for a record that lacks one. A batch carries
|
|
167
|
+
its selector per job: each job in `subagent_spawn_batch({shared, jobs})` names its own session;
|
|
168
|
+
the shared part does not. There is no public resume, release or retain-session call in this
|
|
169
|
+
contract, so never invoke one. If only the continuation selector is missing, report the
|
|
170
|
+
actual schema and lost continuity, then use the explicit evidenced replacement from the
|
|
171
|
+
authorized fresh-launch fill. If that fresh fill requires an unsupported control, the
|
|
172
|
+
catalog's blocked-result rule applies. `/reload` is the user's action; never install or
|
|
173
|
+
update the harness mid-run to gain a capability. A required changed selection can continue only through controls both explicitly
|
|
174
|
+
authorized and advertised by that call; otherwise record why replacement is needed and launch
|
|
175
|
+
fresh from the required fill with its retained evidence. A resolved role default alone never
|
|
176
|
+
authorizes a model pin. Keep the original model/effort as run evidence and preserve all
|
|
177
|
+
review/progress counters.
|
|
170
178
|
|
|
171
179
|
**A fresh or replacement launch repeats the saved fill, never a reconstruction of it.** On Pi the
|
|
172
180
|
launch authority stays the live role resolver ([shared-modules.md](shared-modules.md#model-slots)):
|