@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
|
@@ -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.
|
|
7
|
+
release-version: 0.49.0
|
|
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.
|
|
4
|
+
release-version: 0.49.0
|
|
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.
|
|
5
|
+
release-version: 0.49.0
|
|
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.
|
|
4
|
+
release-version: 0.49.0
|
|
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.
|
|
4
|
+
release-version: 0.49.0
|
|
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.
|
|
6
|
+
release-version: 0.49.0
|
|
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.
|
|
15
|
+
release-version: 0.49.0
|
|
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.
|
|
17
|
+
release-version: 0.49.0
|
|
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.
|
|
8
|
+
release-version: 0.49.0
|
|
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.
|
|
11
|
+
release-version: 0.49.0
|
|
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.
|
|
9
|
+
release-version: 0.49.0
|
|
10
10
|
---
|
|
11
11
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
12
12
|
# TLD detection
|