@1aboveio/skills 1.0.15 → 1.0.17

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 (97) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/.codex-plugin/resources.json +156 -152
  3. package/package.json +4 -4
  4. package/skills/app-dev/airflow/SKILL.md +1 -1
  5. package/skills/app-dev/android-development/SKILL.md +30 -1
  6. package/skills/app-dev/android-development/references/diagnosis.md +50 -0
  7. package/skills/app-dev/android-development/references/feature-work.md +3 -2
  8. package/skills/app-dev/android-development/references/gotchas.md +13 -0
  9. package/skills/app-dev/android-development/references/init.md +31 -2
  10. package/skills/app-dev/android-development/references/setup.md +16 -7
  11. package/skills/app-dev/android-development/references/ui-journeys.md +130 -0
  12. package/skills/app-dev/android-development/scripts/device-run.sh +93 -2
  13. package/skills/app-dev/android-development/scripts/failure_capture.py +331 -0
  14. package/skills/app-dev/android-development/scripts/init.mjs +129 -9
  15. package/skills/app-dev/android-development/scripts/maestro_failure.py +401 -0
  16. package/skills/app-dev/android-development/scripts/test_failure_capture.py +378 -0
  17. package/skills/app-dev/android-development/scripts/test_maestro_failure.py +462 -0
  18. package/skills/app-dev/app-debug/SKILL.md +1 -1
  19. package/skills/app-dev/better-auth/SKILL.md +1 -1
  20. package/skills/app-dev/data-catalog/SKILL.md +1 -1
  21. package/skills/app-dev/data-quality/SKILL.md +1 -1
  22. package/skills/app-dev/ios-foundation/SKILL.md +1 -1
  23. package/skills/app-dev/monorepo/SKILL.md +1 -1
  24. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  25. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  26. package/skills/app-dev/pyspark/SKILL.md +1 -1
  27. package/skills/app-dev/python-backend/SKILL.md +1 -1
  28. package/skills/app-dev/shadcn/SKILL.md +1 -1
  29. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  30. package/skills/cicd/cloud-build/SKILL.md +1 -1
  31. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  32. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  33. package/skills/cicd/docker/SKILL.md +1 -1
  34. package/skills/cicd/github-actions/SKILL.md +1 -1
  35. package/skills/cicd/github-flow/SKILL.md +1 -1
  36. package/skills/cicd/google-cloud/SKILL.md +1 -1
  37. package/skills/cicd/mergify/SKILL.md +1 -1
  38. package/skills/cicd/podman/SKILL.md +1 -1
  39. package/skills/content/article-review/SKILL.md +1 -1
  40. package/skills/content/article-to-image/SKILL.md +1 -1
  41. package/skills/content/flowchart-svg/SKILL.md +1 -1
  42. package/skills/content/image-gen/SKILL.md +1 -1
  43. package/skills/content/mermaid/SKILL.md +1 -1
  44. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  45. package/skills/content/wechat-publisher/SKILL.md +1 -1
  46. package/skills/content/wechat-search/SKILL.md +1 -1
  47. package/skills/content/xai-search/SKILL.md +1 -1
  48. package/skills/core/distill-writing/SKILL.md +1 -1
  49. package/skills/core/doc-to-md/SKILL.md +1 -1
  50. package/skills/core/editorial-review/SKILL.md +1 -1
  51. package/skills/core/house-style/SKILL.md +1 -1
  52. package/skills/core/plain-language/SKILL.md +1 -1
  53. package/skills/core/polish-cn/SKILL.md +1 -1
  54. package/skills/core/reg-parser/SKILL.md +1 -1
  55. package/skills/core/terminology/SKILL.md +1 -1
  56. package/skills/core/write-doc/SKILL.md +1 -1
  57. package/skills/core/write-report/SKILL.md +1 -1
  58. package/skills/engineering/better-review/SKILL.md +1 -1
  59. package/skills/engineering/e2e-test/SKILL.md +1 -1
  60. package/skills/engineering/engineering/SKILL.md +1 -1
  61. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  62. package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
  63. package/skills/engineering/ensure-coverage/SKILL.md +1 -1
  64. package/skills/engineering/golden-path/SKILL.md +1 -1
  65. package/skills/engineering/harness-runtime/SKILL.md +4 -3
  66. package/skills/engineering/harness-runtime/agent-catalog.mjs +929 -0
  67. package/skills/engineering/harness-runtime/contracts.md +2 -0
  68. package/skills/engineering/harness-runtime/references/model-catalog.md +7 -1
  69. package/skills/engineering/resolve-issues/SKILL.md +18 -13
  70. package/skills/engineering/resolve-issues/references/delivery-progress.md +2 -0
  71. package/skills/engineering/resolve-issues/references/expire.md +6 -3
  72. package/skills/engineering/resolve-issues/references/exploration.md +60 -18
  73. package/skills/engineering/resolve-issues/references/implementation.md +7 -2
  74. package/skills/engineering/resolve-issues/references/preflight.md +65 -31
  75. package/skills/engineering/resolve-issues/references/review.md +22 -9
  76. package/skills/engineering/resolve-issues/references/shared-modules.md +142 -20
  77. package/skills/engineering/resolve-issues/references/task-plan.md +62 -8
  78. package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +1 -1
  79. package/skills/engineering/resolve-issues/scripts/next-actions.mjs +7 -7
  80. package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +1 -1
  81. package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +382 -592
  82. package/skills/engineering/resolve-issues/scripts/size-check.mjs +6 -5
  83. package/skills/engineering/resolve-release/SKILL.md +1 -1
  84. package/skills/engineering/rush-issues/SKILL.md +4 -4
  85. package/skills/engineering/rush-release/SKILL.md +1 -1
  86. package/skills/engineering/test-quality/SKILL.md +1 -1
  87. package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
  88. package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
  89. package/skills/risk-compliance/contract-review/SKILL.md +1 -1
  90. package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
  91. package/skills/risk-compliance/fraud-detection/SKILL.md +1 -1
  92. package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
  93. package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +1 -1
  94. package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
  95. package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
  96. package/skills/engineering/resolve-issues/scripts/discover-models.mjs +0 -9
  97. package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +0 -9
@@ -13,3 +13,5 @@ Shell code cannot invoke a native question tool inside the agent's current turn.
13
13
  When no supported native question tool is advertised, concise free-text input is permitted only for one optionless question. Textual multiple-choice emulation is forbidden. Unsupported multi-select and all secret input fail explicitly rather than degrading silently.
14
14
 
15
15
  Model discovery and catalog persistence remain separate from question planning. Current-turn tool availability is never inferred from model or harness configuration. Source-tree imports outside `skills/engineering` are unsupported until an installation-aware adapter entrypoint exists; consumers must not copy the runtime to work around that boundary.
16
+
17
+ `agent-catalog.mjs` is the consumer bridge to the harness-owned agent catalog: one versioned JSON request on stdin (`version`, `harness`, `cwd`, `available`, `foregroundModel`, `fallbackToForeground`, `launchCapabilities`, `hostPreferences`, `overrides`, `tiers`, …) and one JSON response on stdout with four worker slots. It resolves the resolver command from `PI_AGENT_CATALOG_COMMAND` (a JSON argv array, or one bare executable token) or defaults to `pi-agent-catalog` on PATH, runs it with no shell, bounds its output and runtime, and validates the response. Those host fields are validated and forwarded unchanged — nothing is inferred or completed here, so an unstated launch control or tier stays unstated. A missing, broken, or declining resolver is a reported block; the bridge never falls back to a skill-owned model ladder and never installs anything. `discover-models.mjs` and `model-catalog.mjs` remain for consumers that still import them and are no longer part of model-slot selection.
@@ -1,6 +1,12 @@
1
1
  # Model catalog (skill-owned baseline, per-harness overrides)
2
2
 
3
- resolve-issues preflight must classify every discovered model (family · tier) before it can recommend a pick for each slot. The installed `harness-runtime` package provides the shared catalog baseline at `references/model-catalog-seed.json`; the per-harness JSON files below hold only **explicit, human-confirmed overrides**. A skill install or update replaces the shipped baseline, so its newer classifications apply on the next pre-flight wherever no local override exists. It never copies that baseline into a user file or silently changes an override. Training-data knowledge is not a discovery source, and neither is this file's *absence* of a model: only discovered or explicitly human-named models are eligible ([resolve-issues shared modules](../../resolve-issues/references/shared-modules.md)).
3
+ > **Legacy compatibility surface.** Model-slot selection now belongs to the harness agent catalog,
4
+ > reached through [`agent-catalog.mjs`](../agent-catalog.mjs); `resolve-issues` names roles and reads
5
+ > that bridge instead of classifying models. This document and `model-catalog.mjs` stay for other
6
+ > consumers that still import them, and for the shipped baseline data. Do not use this doctrine to
7
+ > re-derive a model ladder for a workflow.
8
+
9
+ The legacy resolve-issues preflight classified every discovered model (family · tier) before it could propose a pick for each slot. The installed `harness-runtime` package provides the shared catalog baseline at `references/model-catalog-seed.json`; the per-harness JSON files below hold only **explicit, human-confirmed overrides**. A skill install or update replaces the shipped baseline, so its newer classifications apply on the next pre-flight wherever no local override exists. It never copies that baseline into a user file or silently changes an override. Training-data knowledge is not a discovery source, and neither is this file's *absence* of a model: only discovered or explicitly human-named models are eligible ([resolve-issues shared modules](../../resolve-issues/references/shared-modules.md)).
4
10
 
5
11
  **Read and write through [`model-catalog.mjs`](../model-catalog.mjs)** rather than hand-editing the JSON — it single-sources the prune predicate and the write paths. Run `model-catalog.mjs help`; the script is the source of truth for the precedence composition, the write-guards, and the shapes. At pre-flight step 2 **prefer `tiers --seen <ids>`**: it composes all three evidence arms (banked → cross-harness → team seed) with the precedence applied *inside* the command. A precedence or filtering rule stated only in prose is applied by an agent mid-gate from memory, and the failure is silent — exactly how rules 5 and 7 went wrong before 2026-07-20.
6
12
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: resolve-issues
3
- description: "Slash/explicit-only (/resolve-issues). Drive an issue, epic, or feature spec to reviewed, green PRs, one per issue, merged or handed back merge-ready: preflight, task map, exploration and a per-issue slice check, isolated implementers within live host capacity, then per issue its PR, independent better-review, CI, and queue/merge (or merge-ready hand-back) as soon as it is done. Asks once, at the end of preflight (implementer, target branch, merge mode, scheduler mode, plan), then never blocks on the human; small non-blocking problems collect in a dropbox, posted at the end as grouped ready-for-agent issues. /rush-issues is its no-questions shortcut. Do not auto-select. Use for whole-spec delivery, including high-risk work; risk changes model and validation depth, never the workflow. NOT for release work (resolve-release)."
3
+ description: "Slash/explicit-only (/resolve-issues). Drive an issue, epic, or feature spec to reviewed, green PRs, one per issue, merged or handed back merge-ready: preflight assessment with an explorer only for planning unknowns, a per-issue slice check, isolated implementers within live host capacity, then per issue its PR, independent better-review, CI, and queue/merge (or merge-ready hand-back) as soon as it is done. Asks once, at the end of preflight (target branch, merge mode, scheduler mode, plan) and resolves the worker roles' models as run metadata instead of asking, then never blocks on the human; small non-blocking problems collect in a dropbox, posted at the end as grouped ready-for-agent issues. /rush-issues is its no-questions shortcut. Do not auto-select. Use for whole-spec delivery, including high-risk work; risk changes model and validation depth, never the workflow. NOT for release work (resolve-release)."
4
4
  disable-model-invocation: true
5
5
  metadata:
6
6
  workflow-role: coordinator
@@ -8,7 +8,7 @@ dependencies:
8
8
  - better-review
9
9
  - golden-path
10
10
  - harness-runtime
11
- release-version: 0.47.0
11
+ release-version: 0.48.1
12
12
  ---
13
13
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
14
14
  # Resolve issues
@@ -54,8 +54,8 @@ after 2 fix rounds without a new low of open P0/P1 path rows; no fixed round cap
54
54
 
55
55
  ```text
56
56
  preflight: ready label -> model fills -> plan draft
57
- -> exploration -> size check (only scope or an open question holds a unit, with a split)
58
- -> one approval (implementer, target branch, merge mode, scheduler mode, plan)
57
+ -> preflight assessment (optional explorer) -> size check (only scope or an open question holds a unit, with a split)
58
+ -> one approval (target branch, merge mode, scheduler mode, plan)
59
59
  -> schedule runnable units within live host capacity:
60
60
  prepare a unit's workspace when its first worker is admitted (never all units up front)
61
61
  -> implement -> first coherent commit: draft PR (CI starts) once parents' PRs are open
@@ -77,9 +77,9 @@ Read each procedure right before its stage; never substitute your own.
77
77
 
78
78
  | Stage | Procedure |
79
79
  |---|---|
80
- | Preflight: ready label, models, plan draft, exploration, size check, approval; what any filed text may say | [references/preflight.md](references/preflight.md) ([Filed text](references/preflight.md#filed-text)) |
80
+ | Preflight: ready label, models, plan draft, assessment, size check, approval; what any filed text may say | [references/preflight.md](references/preflight.md) ([Filed text](references/preflight.md#filed-text)) |
81
81
  | Task plan shape and live board | [references/task-plan.md](references/task-plan.md) |
82
- | Exploration (preflight step 4) | [references/exploration.md](references/exploration.md) |
82
+ | Preflight assessment and optional exploration (step 4) | [references/exploration.md](references/exploration.md) |
83
83
  | Implementation loop and opening each PR | [references/implementation.md](references/implementation.md) |
84
84
  | Read-only warehouse canary | [references/canary.md](references/canary.md) |
85
85
  | Owned workspaces: plan, prepare, cleanup, recover, inventory | [references/workspaces.md](references/workspaces.md) |
@@ -102,8 +102,11 @@ Read each procedure right before its stage; never substitute your own.
102
102
  started (`pending`), never `blocked`; what stays blocked ends deferred on its owning issue, never done.
103
103
  - **Your role.** Coordinate first ([principle 7](references/principles.md)); between notices you may do bounded work
104
104
  yourself: reproduce a failing browser or emulator journey, investigate an infrastructure failure, run a short
105
- check. Leave code changes to workers so your attention stays on scheduling, and record each worker as the
106
- unit's `workerKind` (`implement`, `fix`, `review`). Exploration continues the run's one explorer. After a context compaction, read this file in
105
+ check. When a journey or case you run fails, copy its `NATIVE_FAILURE` line (or the failing step, error and
106
+ evidence path) into the unit's plan row; an exit code alone is not a failure record.
107
+ Leave code changes to workers so your attention stays on scheduling, and record each worker as the
108
+ unit's `workerKind` (`implement`, `fix`, `review`). You own preflight findings;
109
+ delegate unresolved planning unknowns under [exploration.md](references/exploration.md#choose-the-owner). After a context compaction, read this file in
107
110
  full again before your next step: the summary keeps the run's state, not these rules. Fill
108
111
  free slots before starting your own work, stay within [expire.md](references/expire.md)'s limit, and send
109
112
  large output to files (read only the lines you need). Expect Pi's **Completions while busy: Steer active run**
@@ -143,16 +146,18 @@ Follow [preflight.md](references/preflight.md):
143
146
  0. **Ready label:** resume the spec's run if one exists; run `ready-check.mjs`;
144
147
  stop on an `unreadable` outcome; ask at step 6 on `unlabeled` or a `missing` compaction
145
148
  hook (`install-hooks.mjs --check`; shortcut: warn).
146
- 1. **Model slots:** record the fast-path fills without asking.
149
+ 1. **Model slots:** record the fast-path fills without asking; the models and
150
+ efforts are run metadata, never a question.
147
151
  2. **Provisional target:** the default branch.
148
152
  3. **Plan draft:** one unit per issue, links, delivery mode; show the board.
149
- 4. **Exploration:** have one explorer record each unit's `slice` and,
150
- separately, its `proof`, in every run; reuse prior findings for units
153
+ 4. **Preflight assessment:** record each unit's `slice` and,
154
+ separately, its `proof`, yourself for clear work; use an explorer only
155
+ for concrete planning unknowns. Reuse prior findings for units
151
156
  whose evidence did not change
152
157
  ([exploration.md](references/exploration.md#reuse-first)).
153
158
  5. **Size check:** run `size-check.mjs` (exit 0; read `verdict`). On `hold` or `stop`, hold the listed
154
- units (their dependents wait, not started) and draft their splits (yours when none is drafted); on `exploration-unfinished`, continue the explorer.
155
- 6. **Approval:** ask once for implementer, target, merge mode, scheduler mode, and plan;
159
+ units (their dependents wait, not started) and draft their splits (yours when none is drafted); on `exploration-unfinished`, complete the findings using step 4's owner routing.
160
+ 6. **Approval:** ask once for target, merge mode, scheduler mode, and plan;
156
161
  record the answers; plan each unit's branch, workspace, base, and lifecycle
157
162
  intent, and prepare a workspace only when its first worker is admitted
158
163
  ([workspaces.md](references/workspaces.md#prepare-at-admission-once)).
@@ -49,6 +49,8 @@ issue or automatic scheduler gate. They do not waive required validation.
49
49
  - the [immediate acceptance checkpoint](#delivery-progress), existing baseline (or none),
50
50
  and, for a continuation, the last result, remaining uncertainty and next distinguishing
51
51
  test; retain the same checkpoint/history when changing workers
52
+ - for a fix after a failed check or case, the last `failure` block (case, step, error,
53
+ evidence path) verbatim, so the worker starts from the cause
52
54
  - a concise worker-specific contract: business outcome and context, full acceptance,
53
55
  security and quality requirements, and principles relevant to the assigned work; a
54
56
  reviewer gets review.md's two rules instead. Do not forward coordinator scheduling
@@ -220,9 +220,12 @@ secret the repository lacks is item 5: hand it back.
220
220
  Spawn no separate diagnosis worker for a known failure kind, and write no
221
221
  diagnosis document; an unknown infrastructure failure gets one fix worker
222
222
  ([Infrastructure failures](#infrastructure-failures)). The failure kind
223
- is already known from the reason code, the failing check, or
224
- `review-verdict.mjs`; take its response, keep the branch, workspace, and
225
- logs, and record one line, with the reason code, in the unit's plan row.
223
+ is already known from the reason code, the failing check, the result's
224
+ `failure` block, or `review-verdict.mjs`; take its response, keep the branch,
225
+ workspace, and logs, and record one line, with the reason code, in the unit's
226
+ plan row. A failed case whose `failure` names the step and error goes straight
227
+ to a fix worker with that block. Assign investigation only when the record is
228
+ missing, or names a step without a reason.
226
229
 
227
230
  | Failure | Response |
228
231
  |---|---|
@@ -1,16 +1,44 @@
1
1
  # Exploration
2
2
 
3
- **One explorer per run, after the plan draft, records what sizes, orders, and
4
- blocks the units: behaviors, missing prerequisites, proof, line estimates,
5
- dependencies, contracts, and the questions that hold a unit.**
3
+ **Every run gets a coordinator-owned preflight assessment after the plan draft:**
4
+ behaviors, missing prerequisites, proof, line estimates, dependencies, contracts,
5
+ and the questions that hold a unit. A dedicated explorer is optional.
6
6
  In a one-unit run, leave `contracts`, `dependsOn`, and `stacksOn` empty.
7
7
 
8
- ## Spawn
8
+ ## Choose the owner
9
+
10
+ Read the issues, applicable repository guidance, and the few code or test paths
11
+ needed to check the plan. For clear, bounded work, write the findings yourself.
12
+ The findings are planning state, not product code; keep detailed code discovery
13
+ with implementers.
14
+
15
+ Delegate when a concrete unknown could change the plan: uncertain cross-unit
16
+ dependencies or contracts, unclear boundaries or likely splitting, or an unfamiliar
17
+ validation setup. Name the unknown and the affected units in the explorer's brief.
18
+ Multiple units or a high-risk label alone do not require an explorer; unresolved
19
+ planning uncertainty does. An unanswered product decision stays an open question,
20
+ not an invitation for the explorer to invent a requirement.
21
+
22
+ Use the same record and size check for both paths. Resolve each unit's planning
23
+ unknowns or record its open human decision before approval. On later scope or base
24
+ changes, apply this routing again only to affected units.
25
+
26
+ Resolve the assessment target to an exact commit before reading code: initially
27
+ the provisional target, then the approved target after a branch change. Record
28
+ that SHA as findings `base`; use it explicitly for reuse checks and any explorer
29
+ checkout. The coordinator's current branch is not evidence of the assessment target.
30
+
31
+ ## Optional explorer
32
+
33
+ Use at most one explorer at a time per run, on the fleet `explore` row, within
34
+ live host capacity. Reuse that explorer for further investigation when available.
35
+ Give it only the affected units and unknowns. While it writes findings, it owns
36
+ that file exclusively; collect its result before the coordinator updates it.
9
37
 
10
38
  | Field | Value |
11
39
  |---|---|
12
40
  | Model | The explorer fill ([preflight.md](preflight.md#1-model-slots)) |
13
- | Workspace | Read-only checkout of the provisional target; write only the findings directory |
41
+ | Workspace | Read-only checkout at the assessment target SHA; write only the findings directory |
14
42
  | Task plan | Absolute `task-plan.json` path; its unit ids key the findings |
15
43
  | Prior findings | Newest `.resolve-issues/rush/*/exploration/findings.json` for the same spec locator, if any |
16
44
  | Deadline | 15 minutes, plus 1 minute per unit beyond 4 |
@@ -18,15 +46,23 @@ In a one-unit run, leave `contracts`, `dependsOn`, and `stacksOn` empty.
18
46
 
19
47
  ## Reuse first
20
48
 
21
- **When prior findings exist, explore only the units whose evidence changed.**
22
- Run, before spawning, and give the explorer its output:
49
+ **Reuse requires unchanged requirements as well as unchanged code evidence.**
50
+ First compare each unit's current criteria, dependency contracts, relevant guidance,
51
+ and recorded decisions with the prior assessment. Reassess affected units even if
52
+ the helper below says `reuse`; it checks Git evidence paths, not those inputs.
53
+ When the prior inputs cannot be established, reassess that unit.
54
+
55
+ Run the code-evidence check against the exact assessment target, not the caller's
56
+ `HEAD`; include the output and any forced reassessments in an explorer brief:
23
57
 
24
58
  ```bash
25
59
  node <skill-base-dir>/scripts/findings-reuse.mjs \
26
- --prior <prior findings.json> --units <this run's unit ids, comma-separated>
60
+ --prior <prior findings.json> --units <this run's unit ids, comma-separated> \
61
+ --head <assessment-target-SHA>
27
62
  ```
28
63
 
29
- - `reuse`: copy the entry unchanged, with the new `base`.
64
+ - `reuse`: copy the entry unchanged only when the non-code inputs above also
65
+ match, with the new `base`.
30
66
  - `recheck`: re-explore the entry; its `changed` files are where to look.
31
67
  - `new`: explore from scratch.
32
68
 
@@ -34,7 +70,9 @@ Example: a resumed run starts after earlier units merged `src/charge/`; only
34
70
  the two units whose evidence names `src/charge/` are re-explored, the other
35
71
  four are copied.
36
72
 
37
- ## Brief
73
+ ## Assessment record
74
+
75
+ The coordinator and any delegated explorer use these rules:
38
76
 
39
77
  1. **Scaffold, then save one unit at a time.** Keep an existing
40
78
  `findings.json`; otherwise create it with `version: 2`, the `base` SHA,
@@ -106,7 +144,7 @@ four are copied.
106
144
  journey; `local` runs that Charge journey script on an owned emulator,
107
145
  not the repository's default phone journey.
108
146
  - Findings saved before `local` and `skill` existed are unfinished:
109
- continue the explorer to add them, even when reusing the rest.
147
+ add them before the size check, even when reusing the rest.
110
148
  - `physical`: evidence only a real device gives; else empty.
111
149
 
112
150
  - `groups` and `setups` (only when `slice.newProductBehaviorCount` is
@@ -193,10 +231,14 @@ it then.
193
231
 
194
232
  ## Completion
195
233
 
196
- Confirm the findings exist, the model read-back matches, and no product source
197
- changed. Never edit the findings yourself. Run the size check; on `exploration-unfinished` or
198
- tool failures, continue the explorer with the errors. At the deadline, have it
199
- save what it has and stop; continue it in the same directory for the units
200
- still empty while size-check problems plus empty units reach new lows, then follow
201
- [expire.md](expire.md). Never skip exploration;
202
- reuse is not skipping.
234
+ Confirm the findings exist and no product source changed. For delegated work,
235
+ also confirm the model read-back matches and inspect the result. Run the size
236
+ check; `exploration-unfinished` means complete or repair the findings, not spawn
237
+ a worker automatically. Correct a missing field yourself when the evidence is
238
+ clear; continue the explorer only for unresolved investigation.
239
+
240
+ At an explorer's deadline, have it save what it has and stop. Inspect its partial
241
+ findings, complete clear entries yourself, and continue investigation only for
242
+ remaining unknowns while size-check problems plus empty units reach new lows;
243
+ then follow [expire.md](expire.md). Finish the fleet `explore` row once the
244
+ assessment and size check are complete, even when no explorer was needed.
@@ -76,7 +76,7 @@ the same work. A passing setup check is not a substitute for the blocked behavio
76
76
  No additional report or result schema is required.
77
77
 
78
78
  Have the implementer treat findings as leads, find its own code, and report
79
- any `product`, `scope`, `design`, or `approval` question the explorer missed and any
79
+ any `product`, `scope`, `design`, or `approval` question the assessment missed and any
80
80
  human-only proof. Report each question in the result's `decisionNeeded`
81
81
  ([expire.md](expire.md#decide-before-you-defer)); add each proof as a
82
82
  handback step. Never edit `findings.json`.
@@ -101,7 +101,12 @@ implementer in its kept workspace with the brief and its findings entry.
101
101
  line, kind, one-line summary, whether it needs a human decision), and
102
102
  `decisionNeeded`: `null`, or the choice that stops the unit (question,
103
103
  options, recommendation; options are ways to proceed, and staying
104
- blocked is never one). Fix workers write the same file. Return
104
+ blocked is never one). When a check or case fails, add
105
+ `failure`: `{case, step, error, evidenceDir}`, copied from the harness's
106
+ `NATIVE_FAILURE` line or failure record when it prints one; otherwise the failing
107
+ step, error message and evidence path the worker observed. An exit code alone is
108
+ not a failure; keep the first failure separate from cleanup errors. Fix workers
109
+ write the same file. Return
105
110
  nothing else: no artifact hashes, version inventories, screenshots,
106
111
  copied logs, or earlier attempts. For a continuation, include the current checkpoint,
107
112
  outcome and relevant prior-result links in the existing integration notes; do not
@@ -11,10 +11,22 @@ until step 6.
11
11
  node <skill-base-dir>/scripts/plan-sync.mjs --find-run --runs .resolve-issues/rush --issue <owner/name#123>
12
12
  ```
13
13
 
14
- When it prints a directory, resume that run (`next-actions.mjs --run <dir> --resume` with
15
- [fresh capacity](implementation.md#live-capacity))
16
- instead of starting another; its plan picks up whatever the tree gained
17
- since. It exits 0 whether or not it found a run: no run prints nothing on stdout
14
+ When it prints a directory, reuse that run instead of starting another. Before
15
+ calling the scheduler, reload its plan, decisions and standing orders. Refresh the
16
+ source requirements as described under [issue-tree sync](task-plan.md#issue-tree-sync)
17
+ and resolve the recorded target to its current exact SHA. Apply
18
+ [assessment reuse](exploration.md#reuse-first) against those inputs.
19
+
20
+ If assessment was interrupted, findings are incomplete, or affected requirements or
21
+ target evidence changed, complete step 4 and rerun step 5 for those units before
22
+ scheduling them. Finish any outstanding step 6 approval once; preserve choices
23
+ already approved. A saved size stop remains held until reassessment clears it or
24
+ its `runWhole` recommendation is accepted. Do not treat a scheduler action as proof
25
+ that assessment or approval finished.
26
+
27
+ Then resume with `next-actions.mjs --run <dir> --resume` and
28
+ [fresh capacity](implementation.md#live-capacity); its plan picks up whatever the
29
+ tree gained since. The run finder exits 0 whether or not it found a run: no run prints nothing on stdout
18
30
  (`--json`: `{"found":false}`). Example: `/rush-issues #12` finds the run whose saved tree holds
19
31
  #12 and resumes it, never a second run beside it.
20
32
 
@@ -28,7 +40,7 @@ The script exits 0 whenever it ran (2 if it could not); read `outcome` in its JS
28
40
 
29
41
  - **`ready`:** continue. An open issue is work, whatever its sub-issues
30
42
  say: each `rollups` entry (open, every sub-issue closed) is a unit; the
31
- explorer records what is left, or that nothing is, and then the handback
43
+ assessment records what is left, or that nothing is, and then the handback
32
44
  says "close #N". Example: held #40's filed prerequisite #41 closed;
33
45
  #40 is a rollup and stays a unit.
34
46
  - **`unlabeled`:** continue as on `ready`, and record the `missing` issues for
@@ -78,16 +90,38 @@ posts them; they join this run's end-of-run review
78
90
 
79
91
  ## 1. Model slots
80
92
 
81
- Run the fast path and record its fills by exact id and effort, using the
82
- ladders in [shared-modules.md](shared-modules.md#model-catalog). Never give
83
- the reviewer the implementer's id, at any effort. Let risk raise the tier and
84
- add the repository's deterministic domain checks, never change the workflow.
93
+ Follow [model slots](shared-modules.md#model-slots): on Pi, inspect the live native
94
+ catalog first after checking task overrides and authoritative host preferences;
95
+ use the portable resolver when native role resolution is unavailable or cannot
96
+ validate either exact request. Record the actual fills by
97
+ exact id and effort. The skill names the roles — implementer, explorer, diagnoser,
98
+ reviewer — and the harness agent catalog chooses the models, so rank nothing and
99
+ copy nothing from a ladder. The fills are run metadata: show each role's model
100
+ and effort on the board and never ask which model should implement. A model the
101
+ human names is an explicit override, resolved by rerunning this step with
102
+ `--implementer`, never by offering a list. Never give the reviewer the
103
+ implementer's id, at any effort: the catalog enforces that, and the run blocks
104
+ when it cannot. Let risk
105
+ add the repository's deterministic domain checks and review depth, never change
106
+ the workflow or re-choose the model.
85
107
 
86
108
  Pass a pinned implementer (`implementer=<id[@effort]>` in the invocation) as
87
- `--implementer`; when the result is `ok: false` with code `pinned-implementer-unavailable`, end the run as "pinned implementer unavailable"
88
- and never substitute another model.
89
- Example: `/rush-issues 1aboveio/ai#1545 implementer=gpt-6-luna@high` with no
90
- `gpt-6-luna` discovered stops at preflight and starts nothing.
109
+ `--implementer` on the portable path. A declined result stops preflight with its
110
+ `code` and `reason`, starting nothing: `pinned-implementer-unavailable` means the
111
+ pinned model is unavailable and no other implementer is substituted;
112
+ `catalog-unavailable` means the portable resolver could not be invoked.
113
+ `capabilities-missing` means its input lacks model evidence: repair an omitted
114
+ field from current host evidence and retry, or report precisely what could not
115
+ be obtained. It does not establish a missing harness capability. Never revive
116
+ the old picker or reuse an earlier run's pick.
117
+ Example: `/rush-issues 1aboveio/ai#1545 implementer=gpt-6-luna@high` on a host
118
+ whose catalog does not offer `gpt-6-luna` stops at preflight and starts nothing.
119
+
120
+ **Catalog limitation:** optional exploration skips the worker, not catalog
121
+ resolution. Both paths still require all four fills, including
122
+ the explorer, even for coordinator-only assessment. Report a missing explorer as
123
+ a catalog block; do not extract other fills from a declined response or substitute
124
+ a model. Explorer-independent resolution needs a supported upstream protocol.
91
125
 
92
126
  ## 2. Provisional target
93
127
 
@@ -107,11 +141,13 @@ Example: epic #12's #20 (signed release and go/no-go) and #21
107
141
  (physical acceptance) stay out of the plan; the run ends when its code units
108
142
  land instead of waiting on them.
109
143
 
110
- ## 4. Explore
144
+ ## 4. Assess the plan
111
145
 
112
- Run [exploration.md](exploration.md) on the provisional target, with any
113
- prior findings for the same spec. On tool failures or a size-check `exploration-unfinished` verdict,
114
- continue the explorer with the errors. Add the links the findings show.
146
+ Follow [exploration.md](exploration.md#choose-the-owner) on the provisional
147
+ target, reusing prior findings for the same spec. Write findings yourself for
148
+ clear work; delegate concrete planning unknowns to an optional explorer.
149
+ On tool failures or `exploration-unfinished`, complete the affected findings
150
+ using the same owner routing. Add the links the findings show.
115
151
 
116
152
  ## 5. Size check
117
153
 
@@ -143,7 +179,7 @@ by row 1 of [Never block on the human](#never-block-on-the-human).
143
179
  | `ok`, `warn` | Continue |
144
180
  | `hold` | Hold the `held` units (their dependents wait, not started); start the `runnable` units |
145
181
  | `stop` | Run-wide failure or every unit held; draft the held units' splits |
146
- | `exploration-unfinished` | Continue the explorer with the error |
182
+ | `exploration-unfinished` | Complete the findings using step 4's owner routing |
147
183
  | exit 2 | Fix the plan or command |
148
184
 
149
185
  Only scope and open questions hold a unit; proof only warns. Add each
@@ -274,7 +310,7 @@ Example: `/resolve-issues` answered "run the rest" files nothing;
274
310
  prerequisites keeps its unit, now depending on them.
275
311
  Example: #30 splits into #50 and #51, so the sync adds both, drops 30,
276
312
  and unit 34, `blocked_by` #30, now waits on 50 and 51.
277
- 4. Continue the explorer for the new units only; rerun the size check.
313
+ 4. Assess the new units only using step 4's owner routing; rerun the size check.
278
314
  5. Split a still-held slice again only while splitting makes progress: its
279
315
  largest slice is smaller than the one before.
280
316
  Example: a 7,287-line unit split into 3,455 and 2,150 lines; a held
@@ -295,7 +331,8 @@ Example: `/resolve-issues` answered "run the rest" files nothing;
295
331
  Show the board: units, delivery mode, verdict and reasons by consideration,
296
332
  each unit's behaviors, missing prerequisites, proof and suite, environment
297
333
  checks, held units with splits, the pending device record, the
298
- issues missing `ready-for-agent`, and handback steps. Ask
334
+ issues missing `ready-for-agent`, and handback steps. Show each role's resolved
335
+ model and effort as run metadata; no question asks for one. Ask
299
336
  in one interaction, with the native single-choice tool when there is one:
300
337
 
301
338
  0. **Ready label** (only after step 0 `unlabeled`): list the `missing` issues,
@@ -304,20 +341,18 @@ in one interaction, with the native single-choice tool when there is one:
304
341
  proceed, record it in `decisions`; on stop, end the run with the list.
305
342
  **Compaction hook** (only when `install-hooks.mjs --check` printed `missing:`):
306
343
  install it (recommended), or run without it.
307
- 1. **Implementer:** the payload's `options`, recommended first, each with its
308
- reviewer. A pinned implementer is already decided: show it, don't ask.
309
- 2. **Target branch:** up to four fetched heads, provisional first.
310
- 3. **Merge mode:** `autonomous` (recommended): merge each
344
+ 1. **Target branch:** up to four fetched heads, provisional first.
345
+ 2. **Merge mode:** `autonomous` (recommended): merge each
311
346
  reviewed, green PR, fixing blockers outside the plan
312
347
  ([expire.md](expire.md#infrastructure-failures)); or
313
348
  `supervised`: hand each back merge-ready.
314
- 4. **Scheduler mode:** how much `next-actions.mjs` prescribes, recorded as
349
+ 3. **Scheduler mode:** how much `next-actions.mjs` prescribes, recorded as
315
350
  the plan's `schedulerMode`. `full` (recommended): do every step it
316
351
  prints. `narrow`: it prints whether the run is done, the units with work,
317
352
  and the guards; you choose each unit's step. `off`: it prints only whether
318
353
  the run is done; you plan every step. In every mode the run ends only when
319
354
  it reports done.
320
- 5. **Plan:**
355
+ 4. **Plan:**
321
356
  - `ok`/`warn`: proceed or trim.
322
357
  - `hold`: file the splits and run them with the rest (recommended when a
323
358
  held unit has a split), run the rest, proceed anyway, or trim; offer to
@@ -336,18 +371,18 @@ in one interaction, with the native single-choice tool when there is one:
336
371
  grew to 7,544 lines and was closed. Re-cut as two issues, it merged as
337
372
  437 and 341 lines.
338
373
 
339
- Record each answer in `decisions`, sync the catalog, then:
374
+ Record each answer in `decisions`, then:
340
375
 
341
- - New target: fetch it, continue the explorer to recheck the findings, rerun
376
+ - New target: fetch it, reassess affected findings using step 4's owner routing, rerun
342
377
  the size check; ask again only if it worsens to `hold` or `stop`.
343
- - Trim: drop the scope, continue the explorer to remove its questions and
378
+ - Trim: drop the scope, remove its findings, questions and
344
379
  handback items, rerun the size check.
345
380
  - File the splits: follow [File a split](#file-a-split); ask again only if
346
381
  the size check returns `stop`.
347
382
  - Move to later: mark the units `blocked` (`blockedReason: human-decision`, `humanItem: 1`, the human's words as `humanNeed`); they stay in
348
383
  this run's plan and resume with it (one run per spec). Never start a
349
384
  separate follow-up run for the same spec.
350
- - Answer: record it, continue the explorer to set the question
385
+ - Answer: record it, set the question
351
386
  `resolved: true`, rerun the size check.
352
387
  - Run the rest: mark held units `blocked` (`blockedReason: size-hold`) with the split path;
353
388
  their dependents stay not started (`pending`).
@@ -389,7 +424,6 @@ asking nothing at any point:
389
424
  |---|---|
390
425
  | Ready label | Proceed: show the `missing` issues as a warning on the board and in the handback |
391
426
  | Compaction hook | Run without it: warn on the board with the install command |
392
- | Implementer | The first `options` entry (the pinned one, when pinned) |
393
427
  | Target branch | The default branch |
394
428
  | Merge mode | `autonomous` |
395
429
  | Scheduler mode | `full`, unless the invocation names `scheduler=narrow` or `scheduler=off` |
@@ -9,10 +9,21 @@ restate its rules in the brief beyond the two below.
9
9
  ## Brief
10
10
 
11
11
  - Reviewer model: a different id from the implementer's
12
- ([preflight.md](preflight.md#1-model-slots)). Take its model id and effort from
13
- the plan's recorded reviewer slot, a model or effort the human named included,
14
- and pass them as structured launch arguments (the spawn's model and effort
15
- fields), never as brief text and never a model id hardcoded here.
12
+ ([preflight.md](preflight.md#1-model-slots)). Launch the reviewer with the
13
+ plan's recorded reviewer fill — its `launch`, `instructions`, `selection` and
14
+ native `catalogRevision` or portable `catalogDigest`
15
+ ([task-plan.md](task-plan.md#worker-selection-on-resume)) — as
16
+ structured launch arguments, never as brief text and never a model id
17
+ hardcoded here. On Pi that `launch` is what the live role resolver receives,
18
+ `{ role }` unless an explicit task override or this host's own preference
19
+ asked for a model or effort; never rebuild a pin from a recorded model id. On
20
+ another host it is the recorded payload, carrying only the controls that host
21
+ advertised. Check independence from what actually launched, not from the
22
+ recorded ids: the catalog preflight checks planned independence only, since
23
+ runtime prepares each launch without knowing the implementer's model. Verify
24
+ actual launch provenance yourself, on Pi and on other hosts, and block the
25
+ round if the actual reviewer matches the implementer or its actual identity
26
+ cannot be established, rather than yielding a review.
16
27
  - Context: spec, repository standards, target branch, unit branch and HEAD,
17
28
  parent PR when stacked or chained, exploration path, and the contracts the unit
18
29
  provides and builds on.
@@ -103,16 +114,18 @@ completed commands and findings, and why the review stopped. Resolve an open
103
114
  `executionIncident` first; ask the reviewer to record missing continuation details.
104
115
 
105
116
  For the same valid HEAD and scope, resume the same reviewer in the same round
106
- using its result file, review clone and retained context. Give it the unfinished
107
- work rather than repeating the whole assignment; preserve completed valid passes.
108
- A wrong HEAD or invalid scope must be corrected, not carried as completed proof.
117
+ using its result file, review clone, recorded launch and retained context. Give it
118
+ the unfinished work rather than repeating the whole assignment; preserve completed
119
+ valid passes. A wrong HEAD or invalid scope must be corrected, not carried as
120
+ completed proof.
109
121
 
110
122
  If that reviewer cannot continue, state why replacement is necessary, which
111
123
  retained evidence the replacement reads, and what it redoes before launching it.
112
124
  The replacement reviews every pass with `tier: "full"`. Keep the round number,
113
125
  `fixRound`, unit `attempt` and earlier round files; incompleteness neither resets
114
- history nor counts as progress. Use the plan's recorded model and effort in
115
- structured launch arguments as [the brief](#brief) requires.
126
+ history nor counts as progress. Launch the replacement from the same recorded
127
+ reviewer fill, in the same structured launch arguments as [the brief](#brief)
128
+ requires; never invent or re-pick a model id for it.
116
129
 
117
130
  ## GitHub reviews
118
131