@1aboveio/skills 1.0.16 → 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.
- package/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +143 -143
- package/package.json +4 -4
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-development/SKILL.md +9 -7
- package/skills/app-dev/android-development/references/feature-work.md +3 -2
- package/skills/app-dev/android-development/references/gotchas.md +13 -0
- package/skills/app-dev/android-development/references/setup.md +8 -5
- package/skills/app-dev/android-development/references/ui-journeys.md +83 -11
- 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/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 +2 -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
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Task plan
|
|
2
2
|
|
|
3
|
-
Draft the plan in preflight, before
|
|
3
|
+
Draft the plan in preflight, before the assessment, and update it on every
|
|
4
4
|
worker and stage transition.
|
|
5
5
|
|
|
6
6
|
## Initialize the run
|
|
@@ -92,7 +92,7 @@ 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
|
-
| `estimatedLines` |
|
|
95
|
+
| `estimatedLines` | Preflight assessment estimate |
|
|
96
96
|
| `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 |
|
|
97
97
|
| `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)) |
|
|
98
98
|
| `pr`, `headSha`, `reviewedHead` | PR URL, current HEAD (recorded from the implementer's first pushed commit on, so the draft PR opens early), last HEAD whose verdict was `pass` (reviewed or carried) |
|
|
@@ -123,10 +123,14 @@ rehydrate read it, and `next-actions.mjs` exits 2 without it), `planRevision`, `
|
|
|
123
123
|
(`owner/name#N` or an issue URL; any other name turns off the issue-tree sync),
|
|
124
124
|
exploration path, `decisions`, `standingOrders`, `schedulerMode` (`full`, `narrow`, or `off`), timestamps, and `excluded` (issues in the
|
|
125
125
|
tree that are deliberately not units, each `{issue, reason}`: release or
|
|
126
|
-
approval gates, and rollups the
|
|
126
|
+
approval gates, and rollups the assessment found empty). A run resumed from an
|
|
127
127
|
older wave run keeps `merged` (unit ids merged by earlier runs).
|
|
128
128
|
|
|
129
|
-
`selections` records each slot's fill
|
|
129
|
+
`selections` records each slot's fill from the selected
|
|
130
|
+
[model-preflight path](shared-modules.md#model-slots). A native Pi fill records
|
|
131
|
+
`source: "native-catalog"`, `role`, actual `id`, `key` and `effort`, `launch: { role }`,
|
|
132
|
+
inspected `instructions`, `catalogRevision` and the retained native inspection
|
|
133
|
+
as `selection`. A portable fill is what `preflight-models.mjs` returned —
|
|
130
134
|
`id`, `key`, `effort`, `role`, `launch`, `instructions`, `selection`, and the
|
|
131
135
|
`catalogDigest` it was resolved under — beside the explicit task or host override
|
|
132
136
|
that produced it, when one did
|
|
@@ -162,10 +166,10 @@ to another launch or rewrite them.
|
|
|
162
166
|
A plan saved before `selections` holds model ids and efforts and nothing saying
|
|
163
167
|
who chose them. Read such a value as evidence of what ran, never as a pin: do
|
|
164
168
|
not pass it as an explicit Pi model or effort. Before launching new workers,
|
|
165
|
-
|
|
169
|
+
repeat this host's model-preflight path ([preflight.md](preflight.md#1-model-slots))
|
|
166
170
|
with only the overrides the run can evidence — a `standingOrders` line, a
|
|
167
171
|
human-authored decision, or an explicit override in the invocation, never an
|
|
168
|
-
agent recommendation or stored metadata alone — and record
|
|
172
|
+
agent recommendation or stored metadata alone — and record its resolved fills
|
|
169
173
|
as `selections`. When an override's provenance, or a launch control the current
|
|
170
174
|
host must advertise, cannot be established, block the new launch and name what
|
|
171
175
|
is missing: report the code and reason and start nothing, rather than guessing a
|
|
@@ -173,6 +177,15 @@ pin. Workers already running or finished keep their configuration and history.
|
|
|
173
177
|
A resume asks no model question; a human who changes one does so as a separate
|
|
174
178
|
task input, recorded as a decision and resolved the same way.
|
|
175
179
|
|
|
180
|
+
For `source: "native-catalog"`, recheck current task overrides and authoritative
|
|
181
|
+
host preferences on resume. With neither, repeat live native inspection rather
|
|
182
|
+
than demanding a portable `catalogDigest` or running the portable script. A newly
|
|
183
|
+
declared preference or override returns through the exact-request validation path;
|
|
184
|
+
do not replay role-only defaults in its place. Keep
|
|
185
|
+
the old inspection as historical evidence; refresh preflight selection metadata
|
|
186
|
+
without rewriting any worker's actual launch history. A native inspection is not
|
|
187
|
+
an override, and its saved model and effort never become launch arguments.
|
|
188
|
+
|
|
176
189
|
### Standing orders
|
|
177
190
|
|
|
178
191
|
**`standingOrders` are the run's only constraints.** A numbered list, one
|
|
@@ -212,14 +225,20 @@ Example: someone files #61 under epic #12 mid-run; the next resume prints
|
|
|
212
225
|
- A failed fetch keeps the saved tree; a partial one never drops a unit or
|
|
213
226
|
changes dependencies. A failed fetch before finishing never finishes:
|
|
214
227
|
`next-actions.mjs` with [live capacity](implementation.md#live-capacity) prints `sync` until a fetch reads the tree.
|
|
215
|
-
-
|
|
228
|
+
- At start and resume, fetch current spec and existing unit issue bodies from
|
|
229
|
+
their source and compare their criteria with the saved requirements, decisions,
|
|
230
|
+
contracts and relevant guidance. The tree fetch updates membership and links,
|
|
231
|
+
not issue bodies; unchanged sync output does not establish unchanged criteria.
|
|
232
|
+
Reassess affected units under [assessment reuse](exploration.md#reuse-first),
|
|
233
|
+
or reassess when the prior inputs cannot be established, before scheduling them.
|
|
234
|
+
- `set-deps` only adds; a dependency recorded in findings stays.
|
|
216
235
|
- `cycle`: units depend on, or are chained on, each other, so none can move.
|
|
217
236
|
Remove the link that is not a real dependency (on GitHub and in the plan);
|
|
218
237
|
for a `stacksOn` loop, restack the unit it names onto the target.
|
|
219
238
|
- `blocked-outside`: put the blocker into the tree (as a sibling of the
|
|
220
239
|
waiting issue) or remove the link; never leave a unit waiting on an issue
|
|
221
240
|
the run cannot see.
|
|
222
|
-
- A rollup the
|
|
241
|
+
- A rollup the assessment finds empty goes to `excluded` with "nothing left:
|
|
223
242
|
close it", and into the handback.
|
|
224
243
|
- A unit that depends on an `excluded` issue waits for a human: it stays
|
|
225
244
|
`pending` (not started), `next-actions.mjs` with [live capacity](implementation.md#live-capacity) gives it no action, and
|
|
@@ -230,7 +249,7 @@ Example: someone files #61 under epic #12 mid-run; the next resume prints
|
|
|
230
249
|
## Scope changes
|
|
231
250
|
|
|
232
251
|
Record a new requirement as a decision, update the affected criteria,
|
|
233
|
-
|
|
252
|
+
reassess affected and new units using [owner routing](exploration.md#choose-the-owner), rerun the size check, and
|
|
234
253
|
show the board. Put the change in in-flight units' next brief; never copy
|
|
235
254
|
files into a running workspace. Add new units as rows and schedule them
|
|
236
255
|
normally.
|
|
@@ -313,7 +332,8 @@ text board. Keep the board and file in agreement. Never show an unsaved transiti
|
|
|
313
332
|
|
|
314
333
|
## Board
|
|
315
334
|
|
|
316
|
-
Show the first board before the
|
|
335
|
+
Show the first board before the preflight assessment, as a record. The fleet
|
|
336
|
+
`explore` row tracks that assessment, with a worker only when one is delegated.
|
|
317
337
|
|
|
318
338
|
```text
|
|
319
339
|
resolve-issues rev 12 workers 2 elapsed 18m delivery stack
|
|
@@ -66,7 +66,7 @@ export function findingsReuse({ prior, units, head = 'HEAD' }) {
|
|
|
66
66
|
let baseKnown = typeof prior?.base === 'string' && prior.base.trim() !== ''
|
|
67
67
|
let changed = []
|
|
68
68
|
if (baseKnown) {
|
|
69
|
-
try { changed = git(['diff', '--name-only', prior.base, headSha]).split('\n').filter(Boolean) } catch { baseKnown = false }
|
|
69
|
+
try { changed = git(['diff', '--name-only', '--no-renames', prior.base, headSha]).split('\n').filter(Boolean) } catch { baseKnown = false }
|
|
70
70
|
}
|
|
71
71
|
const ids = units?.length ? units : Object.keys(prior?.units ?? {})
|
|
72
72
|
return { base: prior?.base ?? null, head: headSha, ...decideReuse(prior, ids, changed, baseKnown) }
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
// GitHub call. Sync after the run files an issue
|
|
17
17
|
// unblock a unit marked blocked without a reason from BLOCK_REASONS
|
|
18
18
|
// (`blockedReason`), or human-decision without `humanItem` (1-5) and
|
|
19
|
-
// `humanNeed`: reopen it now;
|
|
20
|
-
//
|
|
19
|
+
// `humanNeed`: reopen it now; on --resume, reopen prior blocks with fresh
|
|
20
|
+
// limits except a current size stop without accepted runWhole. A note never keeps a
|
|
21
21
|
// unit blocked. A complete review at the unit's HEAD that holds a P0/P1 but
|
|
22
22
|
// wrote no fix brief and awaits no GitHub reviewer (a handback) gets a
|
|
23
23
|
// fresh full round, so review-verdict hands it back again only if its
|
|
@@ -122,7 +122,7 @@ import { BLOCKING } from './review-verdict.mjs'
|
|
|
122
122
|
export const WORKER_KINDS = Object.freeze(['implement', 'fix', 'review'])
|
|
123
123
|
export const SKILL_PATH = join(dirname(dirname(fileURLToPath(import.meta.url))), 'SKILL.md')
|
|
124
124
|
// Printed after every text call, and by rehydrate.mjs after a compaction.
|
|
125
|
-
export const RULES = 'Per unit, run only implement, fix, and review workers, recorded as workerKind: no planning, architecture, product, or setup workers.
|
|
125
|
+
export const RULES = 'Per unit, run only implement, fix, and review workers, recorded as workerKind: no planning, architecture, product, or setup workers. You own preflight findings; use an optional explorer on the fleet explore row only for concrete planning unknowns (exploration.md). You coordinate: never edit product code. In full mode take every step from next-actions.mjs; in every mode the run ends only when it reports done. A HEAD after a passing review is carried; any other new HEAD takes the tier rereview-scope.mjs picks, never yours. Decide before you defer: a question a worker or review raises is answered and recorded, then the unit continues; retrying or deferring never answers it. Never block on the human: take the automatic answer and keep going. Fix the root cause, never only its symptom. Before each scheduling pass, refresh subagent_settings and pass its snapshot with --capacity-json; do not reuse a run-start budget or subtract workflow workers again.'
|
|
126
126
|
export const DEFAULT_QUIET_MINUTES = 45
|
|
127
127
|
// The reasons a unit may stay blocked (expire.md#reason-codes). Waiting on another unit, an
|
|
128
128
|
// infrastructure or external blocker (a tree issue the unit waits on), and a size hold in a rush
|
|
@@ -205,15 +205,15 @@ export function nextActions(plan, reviews = {}, capacity, { resume = false, now,
|
|
|
205
205
|
if (!Array.isArray(saved) || saved.length === 0) throw new NextActionsError('task plan has no units')
|
|
206
206
|
const excluded = excludedIds(plan)
|
|
207
207
|
const gates = (u) => (u.dependsOn ?? []).map(String).filter((d) => excluded.has(d))
|
|
208
|
-
//
|
|
209
|
-
// drops it (split into sub-issues) or a rerun size check clears it.
|
|
208
|
+
// A current size stop survives resume. Rush splits it; a normal run may hand it back.
|
|
210
209
|
const shortcut = plan.skill === 'rush-issues'
|
|
211
|
-
const
|
|
210
|
+
const heldForSize = (u) => (u.sizeCheck?.verdict ?? u.sizeCheck?.scope) === 'stop' && u.sizeCheck?.runWhole !== true && !codeDone(u)
|
|
212
211
|
&& !hasWorker(u) && u.status !== 'succeeded' && u.status !== 'cancelled' && gates(u).length === 0
|
|
213
212
|
&& !excluded.has(String(u.id))
|
|
213
|
+
const sizeHeld = (u) => shortcut && heldForSize(u)
|
|
214
214
|
const reasonOk = (u) => BLOCK_REASONS.includes(u.blockedReason) && !(shortcut && u.blockedReason === 'size-hold')
|
|
215
215
|
&& (u.blockedReason !== 'human-decision' || namesHumanItem(u))
|
|
216
|
-
const reopen = (u) => (resume || !reasonOk(u)) && u.status === 'blocked' && !hasWorker(u) && gates(u).length === 0 && !
|
|
216
|
+
const reopen = (u) => (resume || !reasonOk(u)) && u.status === 'blocked' && !hasWorker(u) && gates(u).length === 0 && !heldForSize(u)
|
|
217
217
|
// `stack` and `chain` both open a child's PR once its parents' PRs are open; only the PR base differs.
|
|
218
218
|
if (plan.deliveryMode !== undefined && !['stack', 'chain', 'wait'].includes(plan.deliveryMode)) throw new NextActionsError(`deliveryMode must be stack, chain, or wait: ${JSON.stringify(plan.deliveryMode)}`)
|
|
219
219
|
const chain = plan.deliveryMode === 'chain'
|
|
@@ -139,7 +139,7 @@ export function planSync(plan, tree) {
|
|
|
139
139
|
const { deps } = wants(key)
|
|
140
140
|
const id = idFor(key, repo)
|
|
141
141
|
const rollup = (node.children ?? []).length > 0
|
|
142
|
-
add('add-unit', id, `add unit ${id} for ${key} "${node.title}"${deps.length ? ` with dependsOn [${deps.join(', ')}]` : ''}: fetch its issue into the run,
|
|
142
|
+
add('add-unit', id, `add unit ${id} for ${key} "${node.title}"${deps.length ? ` with dependsOn [${deps.join(', ')}]` : ''}: fetch its issue into the run, assess it using exploration.md's owner routing, rerun the size check${rollup ? '; every sub-issue is closed, so record what is left or that nothing is (then hand back "close it")' : ''}`, { issue: key, dependsOn: deps })
|
|
143
143
|
}
|
|
144
144
|
for (const [key, u] of byKey) {
|
|
145
145
|
if (DONE.has(u.status)) continue
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
// (ok, warn, hold, stop, or exploration-unfinished); 2 for a bad plan or command.
|
|
31
31
|
// `exploration-unfinished` (printed as `{ verdict, reason }`) means findings that are unreadable,
|
|
32
32
|
// not version 2, or missing a planned unit, its `slice`, its `proof`, or its `estimatedLines`;
|
|
33
|
-
//
|
|
33
|
+
// complete the preflight findings using exploration.md's owner routing.
|
|
34
|
+
// --exit-verdict restores the old exit codes for one release
|
|
34
35
|
// (deprecated): 0 for ok/warn, 4 for hold, 1 for stop, 3 for exploration-unfinished.
|
|
35
36
|
|
|
36
37
|
import { readFileSync } from 'node:fs'
|
|
@@ -78,7 +79,7 @@ export const FINDINGS_VERSION = 2
|
|
|
78
79
|
|
|
79
80
|
export class SizeCheckError extends Error {}
|
|
80
81
|
|
|
81
|
-
// Unfinished
|
|
82
|
+
// Unfinished assessment; keep the exported error and verdict compatible with saved runs.
|
|
82
83
|
export class ExplorationUnfinished extends SizeCheckError {}
|
|
83
84
|
|
|
84
85
|
function unitsOf(plan) {
|
|
@@ -262,9 +263,9 @@ function environmentChecks(units, byUnit) {
|
|
|
262
263
|
// ---- The whole check ----
|
|
263
264
|
|
|
264
265
|
// A unit counts as explored once its entry carries a valid `slice`, `proof`,
|
|
265
|
-
// and `estimatedLines`;
|
|
266
|
+
// and `estimatedLines`; a scaffold (an empty entry per unit) does not pass.
|
|
266
267
|
function findingsUnitsOf(findings, units) {
|
|
267
|
-
const unfinished = (why) => new ExplorationUnfinished(`exploration unfinished: ${why};
|
|
268
|
+
const unfinished = (why) => new ExplorationUnfinished(`exploration unfinished: ${why}; complete the preflight findings`)
|
|
268
269
|
if (findings?.version !== FINDINGS_VERSION) throw unfinished(`findings version is ${JSON.stringify(findings?.version)}, expected ${FINDINGS_VERSION}`)
|
|
269
270
|
const byUnit = findings.units
|
|
270
271
|
if (!byUnit || typeof byUnit !== 'object' || Array.isArray(byUnit)) throw unfinished('findings has no units map')
|
|
@@ -481,7 +482,7 @@ if (isMainModule(import.meta.url)) {
|
|
|
481
482
|
process.exitCode = opts.exitVerdict ? EXIT[result.verdict] : 0
|
|
482
483
|
} catch (error) {
|
|
483
484
|
if (error instanceof ExplorationUnfinished) {
|
|
484
|
-
//
|
|
485
|
+
// Incomplete findings are an answer, not a failure of the script.
|
|
485
486
|
process.stdout.write(`${JSON.stringify({ verdict: 'exploration-unfinished', reason: error.message }, null, 2)}\n`)
|
|
486
487
|
process.exitCode = process.argv.includes('--exit-verdict') ? 3 : 0
|
|
487
488
|
} else {
|
|
@@ -4,7 +4,7 @@ description: "Slash/explicit-only (/resolve-release). Full GitHub Flow release f
|
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
metadata:
|
|
6
6
|
workflow-role: coordinator
|
|
7
|
-
release-version: 0.48.
|
|
7
|
+
release-version: 0.48.1
|
|
8
8
|
---
|
|
9
9
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
10
10
|
# Resolve release
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-quality
|
|
3
3
|
description: "Seven principles for tests that catch real bugs, and an audit that reports weak, redundant, and not-coverage tests without fixing them. Use when writing, changing, or reviewing tests, or when asked whether tests are useful, redundant, over-mocked, flaky, only assert static text, or test config files, or asked to make a slow test suite faster without losing coverage, or when the user asks to write the testing conventions into a repo's CONTRIBUTING.md. NOT defining what a spec must prove (ensure-coverage) or authoring browser tests (e2e-test)."
|
|
4
|
-
release-version: 0.48.
|
|
4
|
+
release-version: 0.48.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Test Quality
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: compliance-audit
|
|
3
3
|
version: 2.9.0
|
|
4
4
|
description: "Audit operations against financial-compliance checklists (AML/KYC, VARS, PCI-DSS, TPA oversight, onboarding, transaction monitoring). Produces tracker.md (with a tracker.xlsx export) and phase-trail.md with layered validation; cites evidence by original filename. Input: reg-parser or the built-in VARS checklist."
|
|
5
|
-
release-version: 0.48.
|
|
5
|
+
release-version: 0.48.1
|
|
6
6
|
---
|
|
7
7
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
8
8
|
# Compliance Audit
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contract-compare
|
|
3
3
|
description: "Compare two or more contracts side-by-side for structured diff, gap analysis, and benchmarking. Use when: comparing contracts or agreements, contract diff, compare terms, vendor-vs-vendor, compare our template vs theirs, compliance gap between contracts. NOT for single-contract risk review — use contract-review for that."
|
|
4
|
-
release-version: 0.48.
|
|
4
|
+
release-version: 0.48.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Contract Compare
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contract-review
|
|
3
3
|
description: "Review contracts for legal, commercial, and compliance risks via convert → chunk review → merge → validate (+ optional mandate preprocessing). Use for reviewing, auditing, or checking any contract, agreement, NDA, MSA, or SLA; input a file path (PDF/DOCX/TXT) or pasted text."
|
|
4
|
-
release-version: 0.48.
|
|
4
|
+
release-version: 0.48.1
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Contract Review
|
|
@@ -3,7 +3,7 @@ name: doc-authenticity
|
|
|
3
3
|
version: 0.4.1
|
|
4
4
|
description: "Screen PDF documents and raster images for fabrication, tampering, Photoshop or other image-editor use, and content validity. Detects file type, runs format-specific authenticity forensics, classifies bank statements, conversation logs, invoices, agreements, and other documents, then applies type-specific validity checks. Produces separate authenticity (NO_EVIDENCE_OF_MODIFICATION / SUSPICIOUS / LIKELY_MODIFIED / INCONCLUSIVE) and validity (VALID / INVALID / INCONCLUSIVE) verdicts. Use whenever a user asks whether a document, screenshot, scan, statement, invoice, contract, chat log, receipt, or payment evidence is genuine, original, edited, Photoshopped, manipulated, fake, or valid."
|
|
5
5
|
disable-model-invocation: true
|
|
6
|
-
release-version: 0.48.
|
|
6
|
+
release-version: 0.48.1
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Document and Image Authenticity
|
|
@@ -12,7 +12,7 @@ description: >
|
|
|
12
12
|
impact, and a business report. Use for fraud, scam, mule, account-takeover,
|
|
13
13
|
chargeback, dispute, transfer, collection, or payout risk analysis even when the
|
|
14
14
|
user does not name this skill.
|
|
15
|
-
release-version: 0.48.
|
|
15
|
+
release-version: 0.48.1
|
|
16
16
|
---
|
|
17
17
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
18
18
|
# Fraud Detection
|
|
@@ -14,7 +14,7 @@ description: >
|
|
|
14
14
|
transactions" — even if they do not say payment-analysis. Do NOT use for
|
|
15
15
|
fraud rule discovery (fraud-detection) or TLD / MCC-miscoding
|
|
16
16
|
clusters (tld-detection).
|
|
17
|
-
release-version: 0.48.
|
|
17
|
+
release-version: 0.48.1
|
|
18
18
|
---
|
|
19
19
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
20
20
|
# Payment Analysis
|
|
@@ -5,7 +5,7 @@ description: >
|
|
|
5
5
|
and investigate selected merchants' authorization, settlement and disputes,
|
|
6
6
|
including descriptor mapping and overlapping exports. Portfolio-level payment
|
|
7
7
|
overviews belong to payment-analysis; fraud rule discovery belongs to fraud-detection.
|
|
8
|
-
release-version: 0.48.
|
|
8
|
+
release-version: 0.48.1
|
|
9
9
|
---
|
|
10
10
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
11
11
|
# Portfolio payment analysis
|
|
@@ -8,7 +8,7 @@ description: >
|
|
|
8
8
|
links, an entity chain, and a watchlist for the operator's next domains.
|
|
9
9
|
Not transaction data (tld-detection) or fraud rules (fraud-detection).
|
|
10
10
|
disable-model-invocation: true
|
|
11
|
-
release-version: 0.48.
|
|
11
|
+
release-version: 0.48.1
|
|
12
12
|
---
|
|
13
13
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
14
14
|
# Similar Domain
|
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
patterns, with USD and BIN-country currency views, group profiles and priorities.
|
|
7
7
|
Not payment-analysis, fraud-detection, or website research.
|
|
8
8
|
disable-model-invocation: true
|
|
9
|
-
release-version: 0.48.
|
|
9
|
+
release-version: 0.48.1
|
|
10
10
|
---
|
|
11
11
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
12
12
|
# TLD detection
|