@1aboveio/skills 1.0.16 → 1.0.18
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 +178 -150
- package/README.md +1 -1
- package/package.json +5 -4
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-development/SKILL.md +14 -10
- package/skills/app-dev/android-development/references/diagnosis.md +4 -6
- package/skills/app-dev/android-development/references/feature-work.md +3 -2
- package/skills/app-dev/android-development/references/gotchas.md +7 -0
- package/skills/app-dev/android-development/references/init.md +5 -2
- package/skills/app-dev/android-development/references/setup.md +9 -5
- package/skills/app-dev/android-development/references/ui-journeys.md +12 -55
- package/skills/app-dev/android-development/scripts/failure_capture.py +23 -84
- package/skills/app-dev/android-development/scripts/init.mjs +2 -1
- package/skills/app-dev/android-development/scripts/maestro_failure.py +43 -387
- package/skills/app-dev/android-development/scripts/test_maestro_failure.py +113 -424
- 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/LICENSE +3 -0
- package/skills/app-dev/maestro/SKILL.md +112 -0
- package/skills/app-dev/maestro/references/android-connection.md +54 -0
- package/skills/app-dev/maestro/references/authoring.md +113 -0
- package/skills/app-dev/maestro/references/diagnosis.md +50 -0
- package/skills/app-dev/maestro/references/evidence.md +74 -0
- package/skills/app-dev/maestro/references/journeys.md +100 -0
- package/skills/app-dev/maestro/references/migration.md +35 -0
- package/skills/app-dev/maestro/release-check.mjs +95 -0
- package/skills/app-dev/maestro/scripts/failure_record.py +110 -0
- package/skills/app-dev/maestro/scripts/maestro_failure.py +481 -0
- package/skills/app-dev/maestro/scripts/test_maestro_failure.py +710 -0
- 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 +1 -1
- package/skills/cicd/github-flow/SKILL.md +1 -1
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +1 -1
- 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/e2e-test/SKILL.md +1 -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 +1 -1
- package/skills/engineering/golden-path/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/SKILL.md +1 -1
- package/skills/engineering/harness-runtime/agent-catalog.mjs +46 -12
- package/skills/engineering/harness-runtime/contracts.md +1 -1
- package/skills/engineering/resolve-issues/SKILL.md +11 -9
- package/skills/engineering/resolve-issues/references/exploration.md +60 -18
- package/skills/engineering/resolve-issues/references/implementation.md +1 -1
- package/skills/engineering/resolve-issues/references/preflight.md +47 -22
- package/skills/engineering/resolve-issues/references/review.md +2 -1
- package/skills/engineering/resolve-issues/references/shared-modules.md +58 -4
- package/skills/engineering/resolve-issues/references/task-plan.md +30 -10
- package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +1 -1
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +7 -7
- package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +1 -1
- package/skills/engineering/resolve-issues/scripts/size-check.mjs +6 -5
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- 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
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
// PI_AGENT_CATALOG_COMMAND JSON argv array: '["node","/abs/agent-catalog.mjs"]'
|
|
37
37
|
// (preferred when arguments are needed), or a bare
|
|
38
38
|
// executable token: 'pi-agent-catalog'.
|
|
39
|
-
// default pi-agent-catalog on PATH
|
|
39
|
+
// default pi-agent-catalog on PATH, then (Pi only) the
|
|
40
|
+
// catalog in Pi's installed npm packages on ENOENT.
|
|
40
41
|
// A bare token cannot carry arguments — that is deliberate, so no quoting rule
|
|
41
42
|
// sneaks shell semantics in. Nothing here runs npm/npx, resolves a sibling
|
|
42
43
|
// checkout, or reads a registry.
|
|
@@ -48,8 +49,9 @@
|
|
|
48
49
|
// install (`~/.agents/skills/{resolve-issues,harness-runtime}`). No path in this
|
|
49
50
|
// file is relative to a source-domain layout.
|
|
50
51
|
import { spawnSync } from 'node:child_process'
|
|
51
|
-
import { readFileSync } from 'node:fs'
|
|
52
|
-
import {
|
|
52
|
+
import { readFileSync, statSync } from 'node:fs'
|
|
53
|
+
import { homedir } from 'node:os'
|
|
54
|
+
import { join, resolve as resolvePath } from 'node:path'
|
|
53
55
|
|
|
54
56
|
export const AGENT_CATALOG_PROTOCOL_VERSION = 1
|
|
55
57
|
export const DEFAULT_AGENT_CATALOG_COMMAND = 'pi-agent-catalog'
|
|
@@ -210,6 +212,27 @@ export function resolveCatalogCommand(env = process.env) {
|
|
|
210
212
|
return parseCommandSpec(spec)
|
|
211
213
|
}
|
|
212
214
|
|
|
215
|
+
function installedPiCatalogCommand(request, env) {
|
|
216
|
+
if (request.harness !== 'pi' || env?.[AGENT_CATALOG_COMMAND_ENV]?.trim()) return null
|
|
217
|
+
const configuredRoot = request.userRoot || env?.PI_CODING_AGENT_DIR || join(homedir(), '.pi', 'agent')
|
|
218
|
+
const root = configuredRoot === '~' ? homedir()
|
|
219
|
+
: configuredRoot.startsWith('~/') ? join(homedir(), configuredRoot.slice(2)) : configuredRoot
|
|
220
|
+
for (const entry of [
|
|
221
|
+
['pi-better-harness', 'bin', 'pi-agent-catalog.mjs'],
|
|
222
|
+
['pi-better-subagents', 'agent-catalog.mjs'],
|
|
223
|
+
]) {
|
|
224
|
+
const script = resolvePath(root, 'npm', 'node_modules', ...entry)
|
|
225
|
+
try {
|
|
226
|
+
if (statSync(script).isFile()) {
|
|
227
|
+
return { executable: process.execPath, args: [script], source: 'pi-installed' }
|
|
228
|
+
}
|
|
229
|
+
} catch (error) {
|
|
230
|
+
if (error.code !== 'ENOENT' && error.code !== 'ENOTDIR') throw error
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return null
|
|
234
|
+
}
|
|
235
|
+
|
|
213
236
|
function normalizeAvailable(value, label = 'available') {
|
|
214
237
|
if (value === undefined) return { ok: true, available: [] }
|
|
215
238
|
if (!Array.isArray(value)) {
|
|
@@ -620,7 +643,8 @@ export function buildCatalogRequest({
|
|
|
620
643
|
if (normalizedAvailable.available.length === 0) {
|
|
621
644
|
return blocked(
|
|
622
645
|
AGENT_CATALOG_BLOCK_CODES.CAPABILITIES_MISSING,
|
|
623
|
-
'no current-turn models were supplied
|
|
646
|
+
'no current-turn models were supplied: the resolver input has no available[] entries; '
|
|
647
|
+
+ 'collect verified host model and effort evidence before retrying; this does not establish that the harness lacks worker support',
|
|
624
648
|
)
|
|
625
649
|
}
|
|
626
650
|
if (foregroundModel !== null && foregroundModel !== undefined && !nonEmptyString(foregroundModel)) {
|
|
@@ -863,17 +887,27 @@ export function resolveAgentCatalog({
|
|
|
863
887
|
}
|
|
864
888
|
const commandResult = resolveCatalogCommand(env)
|
|
865
889
|
if (!commandResult.ok) return commandResult
|
|
866
|
-
|
|
890
|
+
let { command } = commandResult
|
|
891
|
+
const invoke = () => runner({
|
|
892
|
+
executable: command.executable,
|
|
893
|
+
args: command.args,
|
|
894
|
+
input: `${JSON.stringify(request)}\n`,
|
|
895
|
+
timeoutMs,
|
|
896
|
+
env,
|
|
897
|
+
})
|
|
867
898
|
|
|
868
899
|
let run
|
|
869
900
|
try {
|
|
870
|
-
run =
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
901
|
+
run = invoke()
|
|
902
|
+
// Only a missing default command permits installed-package lookup. An
|
|
903
|
+
// explicit choice or a resolver that ran and failed stays authoritative.
|
|
904
|
+
if (run?.error?.code === 'ENOENT') {
|
|
905
|
+
const installed = installedPiCatalogCommand(request, env)
|
|
906
|
+
if (installed) {
|
|
907
|
+
command = installed
|
|
908
|
+
run = invoke()
|
|
909
|
+
}
|
|
910
|
+
}
|
|
877
911
|
} catch (error) {
|
|
878
912
|
return blocked(
|
|
879
913
|
AGENT_CATALOG_BLOCK_CODES.COMMAND_UNAVAILABLE,
|
|
@@ -14,4 +14,4 @@ When no supported native question tool is advertised, concise free-text input is
|
|
|
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
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,
|
|
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. For Pi only, when that default command is missing (`ENOENT`), it checks the installed `pi-better-harness` then standalone `pi-better-subagents` catalog under `<agent-dir>/npm/node_modules` and invokes the first installed entrypoint through the current Node executable. The agent directory is the request's `userRoot`, then `PI_CODING_AGENT_DIR`, then `~/.pi/agent`. Explicit commands and resolvers that execute but fail remain authoritative; there is no project-checkout search or second resolver after a catalog failure. The bridge runs 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,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
|
|
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.
|
|
11
|
+
release-version: 0.49.0
|
|
12
12
|
---
|
|
13
13
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
14
14
|
# Resolve issues
|
|
@@ -54,7 +54,7 @@ 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
|
-
->
|
|
57
|
+
-> preflight assessment (optional explorer) -> size check (only scope or an open question holds a unit, with a split)
|
|
58
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)
|
|
@@ -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,
|
|
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
|
-
|
|
|
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) |
|
|
@@ -105,7 +105,8 @@ Read each procedure right before its stage; never substitute your own.
|
|
|
105
105
|
check. When a journey or case you run fails, copy its `NATIVE_FAILURE` line (or the failing step, error and
|
|
106
106
|
evidence path) into the unit's plan row; an exit code alone is not a failure record.
|
|
107
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`).
|
|
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
|
|
109
110
|
full again before your next step: the summary keeps the run's state, not these rules. Fill
|
|
110
111
|
free slots before starting your own work, stay within [expire.md](references/expire.md)'s limit, and send
|
|
111
112
|
large output to files (read only the lines you need). Expect Pi's **Completions while busy: Steer active run**
|
|
@@ -149,12 +150,13 @@ Follow [preflight.md](references/preflight.md):
|
|
|
149
150
|
efforts are run metadata, never a question.
|
|
150
151
|
2. **Provisional target:** the default branch.
|
|
151
152
|
3. **Plan draft:** one unit per issue, links, delivery mode; show the board.
|
|
152
|
-
4. **
|
|
153
|
-
separately, its `proof`,
|
|
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
|
|
154
156
|
whose evidence did not change
|
|
155
157
|
([exploration.md](references/exploration.md#reuse-first)).
|
|
156
158
|
5. **Size check:** run `size-check.mjs` (exit 0; read `verdict`). On `hold` or `stop`, hold the listed
|
|
157
|
-
units (their dependents wait, not started) and draft their splits (yours when none is drafted); on `exploration-unfinished`,
|
|
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.
|
|
158
160
|
6. **Approval:** ask once for target, merge mode, scheduler mode, and plan;
|
|
159
161
|
record the answers; plan each unit's branch, workspace, base, and lifecycle
|
|
160
162
|
intent, and prepare a workspace only when its first worker is admitted
|
|
@@ -1,16 +1,44 @@
|
|
|
1
1
|
# Exploration
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
##
|
|
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
|
|
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
|
-
**
|
|
22
|
-
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
|
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`.
|
|
@@ -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,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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,9 +90,11 @@ posts them; they join this run's end-of-run review
|
|
|
78
90
|
|
|
79
91
|
## 1. Model slots
|
|
80
92
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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,
|
|
84
98
|
reviewer — and the harness agent catalog chooses the models, so rank nothing and
|
|
85
99
|
copy nothing from a ladder. The fills are run metadata: show each role's model
|
|
86
100
|
and effort on the board and never ask which model should implement. A model the
|
|
@@ -92,14 +106,23 @@ add the repository's deterministic domain checks and review depth, never change
|
|
|
92
106
|
the workflow or re-choose the model.
|
|
93
107
|
|
|
94
108
|
Pass a pinned implementer (`implementer=<id[@effort]>` in the invocation) as
|
|
95
|
-
`--implementer
|
|
96
|
-
and `reason`, starting nothing: `pinned-implementer-unavailable` means the
|
|
97
|
-
model is unavailable and no other implementer is substituted
|
|
98
|
-
`catalog-unavailable`
|
|
99
|
-
|
|
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.
|
|
100
117
|
Example: `/rush-issues 1aboveio/ai#1545 implementer=gpt-6-luna@high` on a host
|
|
101
118
|
whose catalog does not offer `gpt-6-luna` stops at preflight and starts nothing.
|
|
102
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.
|
|
125
|
+
|
|
103
126
|
## 2. Provisional target
|
|
104
127
|
|
|
105
128
|
Fetch remote heads; record the default branch as `targetBranch`.
|
|
@@ -118,11 +141,13 @@ Example: epic #12's #20 (signed release and go/no-go) and #21
|
|
|
118
141
|
(physical acceptance) stay out of the plan; the run ends when its code units
|
|
119
142
|
land instead of waiting on them.
|
|
120
143
|
|
|
121
|
-
## 4.
|
|
144
|
+
## 4. Assess the plan
|
|
122
145
|
|
|
123
|
-
|
|
124
|
-
prior findings for the same spec.
|
|
125
|
-
|
|
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.
|
|
126
151
|
|
|
127
152
|
## 5. Size check
|
|
128
153
|
|
|
@@ -154,7 +179,7 @@ by row 1 of [Never block on the human](#never-block-on-the-human).
|
|
|
154
179
|
| `ok`, `warn` | Continue |
|
|
155
180
|
| `hold` | Hold the `held` units (their dependents wait, not started); start the `runnable` units |
|
|
156
181
|
| `stop` | Run-wide failure or every unit held; draft the held units' splits |
|
|
157
|
-
| `exploration-unfinished` |
|
|
182
|
+
| `exploration-unfinished` | Complete the findings using step 4's owner routing |
|
|
158
183
|
| exit 2 | Fix the plan or command |
|
|
159
184
|
|
|
160
185
|
Only scope and open questions hold a unit; proof only warns. Add each
|
|
@@ -285,7 +310,7 @@ Example: `/resolve-issues` answered "run the rest" files nothing;
|
|
|
285
310
|
prerequisites keeps its unit, now depending on them.
|
|
286
311
|
Example: #30 splits into #50 and #51, so the sync adds both, drops 30,
|
|
287
312
|
and unit 34, `blocked_by` #30, now waits on 50 and 51.
|
|
288
|
-
4.
|
|
313
|
+
4. Assess the new units only using step 4's owner routing; rerun the size check.
|
|
289
314
|
5. Split a still-held slice again only while splitting makes progress: its
|
|
290
315
|
largest slice is smaller than the one before.
|
|
291
316
|
Example: a 7,287-line unit split into 3,455 and 2,150 lines; a held
|
|
@@ -348,16 +373,16 @@ in one interaction, with the native single-choice tool when there is one:
|
|
|
348
373
|
|
|
349
374
|
Record each answer in `decisions`, then:
|
|
350
375
|
|
|
351
|
-
- New target: fetch it,
|
|
376
|
+
- New target: fetch it, reassess affected findings using step 4's owner routing, rerun
|
|
352
377
|
the size check; ask again only if it worsens to `hold` or `stop`.
|
|
353
|
-
- Trim: drop the scope,
|
|
378
|
+
- Trim: drop the scope, remove its findings, questions and
|
|
354
379
|
handback items, rerun the size check.
|
|
355
380
|
- File the splits: follow [File a split](#file-a-split); ask again only if
|
|
356
381
|
the size check returns `stop`.
|
|
357
382
|
- Move to later: mark the units `blocked` (`blockedReason: human-decision`, `humanItem: 1`, the human's words as `humanNeed`); they stay in
|
|
358
383
|
this run's plan and resume with it (one run per spec). Never start a
|
|
359
384
|
separate follow-up run for the same spec.
|
|
360
|
-
- Answer: record it,
|
|
385
|
+
- Answer: record it, set the question
|
|
361
386
|
`resolved: true`, rerun the size check.
|
|
362
387
|
- Run the rest: mark held units `blocked` (`blockedReason: size-hold`) with the split path;
|
|
363
388
|
their dependents stay not started (`pending`).
|
|
@@ -11,7 +11,8 @@ restate its rules in the brief beyond the two below.
|
|
|
11
11
|
- Reviewer model: a different id from the implementer's
|
|
12
12
|
([preflight.md](preflight.md#1-model-slots)). Launch the reviewer with the
|
|
13
13
|
plan's recorded reviewer fill — its `launch`, `instructions`, `selection` and
|
|
14
|
-
`
|
|
14
|
+
native `catalogRevision` or portable `catalogDigest`
|
|
15
|
+
([task-plan.md](task-plan.md#worker-selection-on-resume)) — as
|
|
15
16
|
structured launch arguments, never as brief text and never a model id
|
|
16
17
|
hardcoded here. On Pi that `launch` is what the live role resolver receives,
|
|
17
18
|
`{ role }` unless an explicit task override or this host's own preference
|
|
@@ -37,9 +37,56 @@ Owner: the harness agent catalog. The workflow names four **roles** — implemen
|
|
|
37
37
|
explorer, diagnoser (escalation), reviewer — and the harness decides which model
|
|
38
38
|
fills each one and how that role is launched on this host. The shared bridge is
|
|
39
39
|
[`harness-runtime/agent-catalog.mjs`](../../harness-runtime/agent-catalog.mjs);
|
|
40
|
-
this skill owns no ladder, no tier ranking, and no model list.
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
this skill owns no ladder, no tier ranking, and no model list.
|
|
41
|
+
|
|
42
|
+
### Native Pi preflight
|
|
43
|
+
|
|
44
|
+
When Pi advertises `agents_catalog` and role-based spawning, use the live catalog
|
|
45
|
+
for a run with no task model/effort override or separately declared authoritative
|
|
46
|
+
host preference. Check those inputs before selecting this path: an unpinned task
|
|
47
|
+
can still have `hostPreferences`. The native catalog resolves roles against this
|
|
48
|
+
session's model registry and effort support; a second, caller-built inventory is
|
|
49
|
+
unnecessary.
|
|
50
|
+
|
|
51
|
+
1. Call `agents_catalog` with `action: "list"`, then `action: "inspect"` for
|
|
52
|
+
`developer`, `explorer`, and `reviewer`. Inspect all three even when the explorer
|
|
53
|
+
will not run. The diagnoser uses the same developer role.
|
|
54
|
+
2. Require each inspection's live `launchable: yes` and `availability: available`,
|
|
55
|
+
with its actual resolved model and effort. `definitionValid` and
|
|
56
|
+
`catalogLaunchable` alone establish only definition validity, not runtime
|
|
57
|
+
availability. A missing or blocked live decision stops preflight with that
|
|
58
|
+
diagnostic; saved defaults do not replace it.
|
|
59
|
+
3. Record the catalog revision and each role's **actual** model and effort as run
|
|
60
|
+
metadata. A tier fallback can differ from the displayed default. Use the
|
|
61
|
+
developer result for implementer and diagnoser. Require the reviewer's actual
|
|
62
|
+
model id to differ from the implementer's, regardless of effort; otherwise
|
|
63
|
+
stop and report the conflict without choosing a replacement.
|
|
64
|
+
Save each fill in `selections` as `source: "native-catalog"`, `role`, `id`
|
|
65
|
+
(actual model), `key` (`id@effort` when effort is present), `effort` (actual
|
|
66
|
+
effort), `launch: { role }`, `instructions`
|
|
67
|
+
from the inspection, and the observed `catalogRevision`. Retain the native
|
|
68
|
+
inspection as `selection` evidence, including requested/actual values and
|
|
69
|
+
availability. This is native provenance, not a fabricated portable
|
|
70
|
+
`selection` object or `catalogDigest`.
|
|
71
|
+
4. Record the later launch by role (`{ role: "developer" }`, `{ role: "explorer" }`, or
|
|
72
|
+
`{ role: "reviewer" }`), adding the task brief and authorized workspace/tool
|
|
73
|
+
controls. The native catalog applies its live instructions and defaults again
|
|
74
|
+
at admission. Record actual launch provenance if it differs from preflight.
|
|
75
|
+
|
|
76
|
+
This completes model preflight; continue to the provisional target without
|
|
77
|
+
running `preflight-models.mjs` or manufacturing `available[]`. Worker capacity is
|
|
78
|
+
a separate scheduling input, not model evidence. An explicit task model or effort
|
|
79
|
+
override or authoritative host model/effort preference still needs validation for
|
|
80
|
+
that exact request: use the portable path below when the native inspection cannot
|
|
81
|
+
validate it and preserve its structured launch fields. Keep the request; an
|
|
82
|
+
unresolved request does not authorize a default launch.
|
|
83
|
+
|
|
84
|
+
### Portable preflight
|
|
85
|
+
|
|
86
|
+
For a host without native role resolution, or a task override or authoritative
|
|
87
|
+
host preference requiring portable validation, write observed host capabilities
|
|
88
|
+
to a temporary JSON file (any writable path; the run directory does not exist yet
|
|
89
|
+
at step 1):
|
|
43
90
|
|
|
44
91
|
```json
|
|
45
92
|
{ "available": [{ "model": "provider/model", "nativeModel": "host-id", "supportedEfforts": ["medium", "high"] }],
|
|
@@ -54,7 +101,7 @@ a field you cannot observe is left out, and the bridge never completes one.
|
|
|
54
101
|
|
|
55
102
|
| Field | Meaning |
|
|
56
103
|
|---|---|
|
|
57
|
-
| `available[]` | This turn's models. `nativeModel` is required for a harness whose slots are launched by a bare host id (Codex); pass the
|
|
104
|
+
| `available[]` | This turn's models. Each entry needs verified `supportedEfforts`; IDs alone from configuration or `discover-models.mjs` do not supply effort support. `nativeModel` is required for a harness whose slots are launched by a bare host id (Codex); pass the advertised mapping unchanged. |
|
|
58
105
|
| `launchCapabilities` | The launch controls this host exposes: `model`, `effort`, `instructions`, each a boolean. All three must be stated; omission is not "probably true". A native id and an effort say what the catalog chose, never that the adapter can set it. |
|
|
59
106
|
| `hostPreferences` | This host's own role preferences, keyed by **role** (`developer`, `explorer`, `reviewer`), each `{ model?, effort? }`. Below a task override and above the role default: it is how a host says "this machine runs the developer role on this model". |
|
|
60
107
|
| `fallbackToForeground` | Set `true` only when this host may use the foreground model as a fallback. Pi always may; another harness must opt in. Absent, no foreground fallback happens for it. |
|
|
@@ -115,6 +162,13 @@ pick, never fall back to the skill-owned catalog, and never let the reviewer sha
|
|
|
115
162
|
the implementer's model id: the catalog enforces independence, and re-picking a
|
|
116
163
|
replacement here would silently break it.
|
|
117
164
|
|
|
165
|
+
`capabilities-missing` describes incomplete resolver input, not proof that the
|
|
166
|
+
host cannot launch workers. Check the supplied file and this turn's native
|
|
167
|
+
capability source before declaring a harness limitation. Repair an omitted field
|
|
168
|
+
from verified evidence and retry preflight; if that evidence is unavailable,
|
|
169
|
+
report the exact missing input. Never derive effort ranges from a selected role
|
|
170
|
+
default or use free worker slots as a model inventory.
|
|
171
|
+
|
|
118
172
|
**No fallback is invented.** The catalog substitutes only an available model from
|
|
119
173
|
the same tier's configured `candidates`, and never for an explicit request: an
|
|
120
174
|
unavailable pin or host preference blocks rather than sliding to a neighbour, and
|