@1aboveio/skills 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/.codex-plugin/resources.json +150 -147
- package/package.json +4 -4
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-development/SKILL.md +1 -1
- package/skills/app-dev/app-debug/SKILL.md +1 -1
- package/skills/app-dev/better-auth/SKILL.md +1 -1
- package/skills/app-dev/data-catalog/SKILL.md +1 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +1 -1
- package/skills/app-dev/maestro/SKILL.md +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 +4 -2
- package/skills/cicd/github-actions/references/debugging.md +21 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +7 -0
- package/skills/cicd/github-actions/scripts/watch-run.mjs +511 -0
- package/skills/cicd/github-flow/SKILL.md +35 -9
- package/skills/cicd/github-flow/scripts/watch-checks.mjs +561 -0
- package/skills/cicd/google-cloud/SKILL.md +1 -1
- package/skills/cicd/mergify/SKILL.md +2 -2
- package/skills/cicd/mergify/references/diagnosis.md +6 -1
- package/skills/cicd/mergify/references/watch-contract.md +10 -7
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +15 -30
- package/skills/cicd/podman/SKILL.md +1 -1
- package/skills/content/article-review/SKILL.md +1 -1
- package/skills/content/article-to-image/SKILL.md +1 -1
- package/skills/content/flowchart-svg/SKILL.md +1 -1
- package/skills/content/image-gen/SKILL.md +1 -1
- package/skills/content/mermaid/SKILL.md +1 -1
- package/skills/content/wechat-article-writer/SKILL.md +1 -1
- package/skills/content/wechat-publisher/SKILL.md +1 -1
- package/skills/content/wechat-search/SKILL.md +1 -1
- package/skills/content/xai-search/SKILL.md +1 -1
- package/skills/core/distill-writing/SKILL.md +1 -1
- package/skills/core/doc-to-md/SKILL.md +1 -1
- package/skills/core/editorial-review/SKILL.md +1 -1
- package/skills/core/house-style/SKILL.md +1 -1
- package/skills/core/plain-language/SKILL.md +1 -1
- package/skills/core/polish-cn/SKILL.md +1 -1
- package/skills/core/reg-parser/SKILL.md +1 -1
- package/skills/core/terminology/SKILL.md +1 -1
- package/skills/core/write-doc/SKILL.md +1 -1
- package/skills/core/write-report/SKILL.md +1 -1
- package/skills/engineering/better-review/SKILL.md +1 -1
- package/skills/engineering/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 +2 -1
- package/skills/engineering/harness-runtime/contracts.md +2 -0
- package/skills/engineering/harness-runtime/references/subagent-sessions.md +75 -0
- package/skills/engineering/resolve-issues/SKILL.md +2 -2
- package/skills/engineering/resolve-issues/references/ci.md +2 -4
- package/skills/engineering/resolve-issues/references/delivery-progress.md +1 -1
- package/skills/engineering/resolve-issues/references/done.md +3 -6
- package/skills/engineering/resolve-issues/references/expire.md +2 -2
- package/skills/engineering/resolve-issues/references/implementation.md +52 -41
- package/skills/engineering/resolve-issues/references/review.md +18 -19
- package/skills/engineering/resolve-issues/references/shared-modules.md +7 -1
- package/skills/engineering/resolve-issues/references/task-plan.md +18 -10
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +42 -32
- package/skills/engineering/resolve-release/SKILL.md +1 -1
- package/skills/engineering/resolve-release/references/publish.md +12 -4
- package/skills/engineering/resolve-release/references/workspace-npm.md +6 -4
- package/skills/engineering/rush-issues/SKILL.md +1 -1
- package/skills/engineering/rush-release/SKILL.md +1 -1
- package/skills/engineering/test-quality/SKILL.md +1 -1
- package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
- package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
- package/skills/risk-compliance/contract-review/SKILL.md +1 -1
- package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
- package/skills/risk-compliance/fraud-detection/SKILL.md +1 -1
- package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +1 -1
- package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
- package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
|
@@ -319,9 +319,8 @@ export const DEFAULT_SLOW_JOB_MINUTES = 5
|
|
|
319
319
|
//
|
|
320
320
|
// Over-ceiling values are REFUSED (exit 2), not silently clamped. Clamping would let a caller
|
|
321
321
|
// believe it had a four-hour watch while getting one hour, and the two streams here are already
|
|
322
|
-
// committed: stdout is exactly one terminal JSON verdict
|
|
323
|
-
//
|
|
324
|
-
// exit-2 usage error is loud, immediate, and matches how every other bad bound is handled.
|
|
322
|
+
// committed: stdout is exactly one terminal JSON verdict; stderr contains NDJSON transitions
|
|
323
|
+
// and diagnostics. An exit-2 usage error is loud, immediate, and matches other bad bounds.
|
|
325
324
|
export const MAX_MINUTES_CEILING = 60
|
|
326
325
|
|
|
327
326
|
export function readTimeoutMs(intervalSeconds, boundMinutes, readsPerPoll = 1) {
|
|
@@ -730,28 +729,12 @@ export function classifyDequeue({ rawReason = null, failedChecks = [] } = {}) {
|
|
|
730
729
|
return 'unknown'
|
|
731
730
|
}
|
|
732
731
|
|
|
733
|
-
//
|
|
734
|
-
//
|
|
735
|
-
//
|
|
736
|
-
//
|
|
737
|
-
// `NOT_YET_QUEUED` or `QUEUED` — the overwhelmingly common case, and the entire healthy path —
|
|
738
|
-
// wrote zero bytes for its whole life. Reproduced live on PR #1396: 25 minutes of watching a
|
|
739
|
-
// PR that was never queued produced a log containing only the harness's own spawn banner, and
|
|
740
|
-
// the watch was killed 4 minutes short of the then-30-minute stall bound, so it never printed
|
|
741
|
-
// even its terminal verdict. (The bound is 10 now, so that same watch would settle on its own
|
|
742
|
-
// well before a human gave up on it — but the heartbeat is what makes the wait legible while
|
|
743
|
-
// it runs, and no bound short enough to substitute for it would be long enough to be correct.) A silent process is indistinguishable from a hung or dead one, which is
|
|
744
|
-
// exactly the state the caller is trying to resolve, and the hand-written shell watchers this
|
|
745
|
-
// script is meant to replace all printed a per-poll status line. Losing that on the way to a
|
|
746
|
-
// correct state machine traded one failure (wrong answers) for another (no answers).
|
|
747
|
-
//
|
|
748
|
-
// Deliberately stderr, not stdout: stdout is the machine contract — exactly one pretty-printed
|
|
749
|
-
// terminal JSON object, which callers parse whole — and interleaving heartbeats into it would
|
|
750
|
-
// break every such caller. stderr is unparsed by the contract and is merged into the log by
|
|
751
|
-
// every process supervisor that would run this, which is the place a human actually looks.
|
|
752
|
-
// `terminal: false` and the separate stream both distinguish these from the real verdict.
|
|
732
|
+
// Emit the initial delivery snapshot and subsequent delivery/readability transitions.
|
|
733
|
+
// Repeated snapshots stay quiet: process supervisors count newly written bytes as activity
|
|
734
|
+
// even when a record says progress:false. A readability transition remains visible without
|
|
735
|
+
// resetting the delivery change clock. stdout remains one terminal JSON verdict.
|
|
753
736
|
export function progressRecord({ payload, changed, sinceChangeMs, nowIso }) {
|
|
754
|
-
return JSON.stringify({ ...payload,
|
|
737
|
+
return JSON.stringify({ ...payload, activity: true, progress: changed, changed, sinceChangeMs, at: nowIso })
|
|
755
738
|
}
|
|
756
739
|
|
|
757
740
|
// Defaults. `stallMinutes` is a NO-CHANGE bound, not an elapsed-time one — any observable
|
|
@@ -813,11 +796,12 @@ Options:
|
|
|
813
796
|
--seen-queued Resume hint only: keep phases/callers aware the PR was queued.
|
|
814
797
|
Does NOT seed lost-membership counting — membership must be
|
|
815
798
|
observed in this process (everActive) before DEQUEUED can fire.
|
|
816
|
-
--quiet Suppress
|
|
799
|
+
--quiet Suppress delivery/readability transition records on stderr
|
|
817
800
|
|
|
818
801
|
Output:
|
|
819
802
|
stdout exactly one pretty-printed terminal JSON verdict, at exit
|
|
820
|
-
stderr one compact JSON
|
|
803
|
+
stderr one compact JSON record per delivery/readability change (activity:true, progress:<the delivery state
|
|
804
|
+
actually changed>), unless --quiet;
|
|
821
805
|
plus one {"warning":"slow-ci-job"} record per CI job that runs past
|
|
822
806
|
--slow-job-minutes (emitted even with --quiet); and, last of all, one
|
|
823
807
|
{"ciProfileSummary":true} line (outcome, profile verdict, slow jobs) so a
|
|
@@ -882,6 +866,7 @@ export async function runCli(argv) {
|
|
|
882
866
|
let missingActiveReads = 0
|
|
883
867
|
let stallObservationCache = null
|
|
884
868
|
let lastChangeMs = startedMs
|
|
869
|
+
let lastReadability = null
|
|
885
870
|
let observations = 0
|
|
886
871
|
let phases = []
|
|
887
872
|
let lastBatchPrNumber = null
|
|
@@ -890,7 +875,7 @@ export async function runCli(argv) {
|
|
|
890
875
|
const warnedSlowJobs = new Set()
|
|
891
876
|
const slowThresholdMs = args.slowJobMinutes * 60_000
|
|
892
877
|
// Warn once per slow job run. Warnings go to stderr even under --quiet: they are the point
|
|
893
|
-
// of profiling, and --quiet only silences
|
|
878
|
+
// of profiling, and --quiet only silences routine transition records.
|
|
894
879
|
const warnSlowJobs = () => {
|
|
895
880
|
for (const { key, job } of newSlowJobs(ciJobs, { thresholdMs: slowThresholdMs, warned: warnedSlowJobs })) {
|
|
896
881
|
warnedSlowJobs.add(key)
|
|
@@ -1025,12 +1010,12 @@ export async function runCli(argv) {
|
|
|
1025
1010
|
lastChangeMs = Date.now()
|
|
1026
1011
|
}
|
|
1027
1012
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
if (!args.quiet) {
|
|
1013
|
+
const readability = JSON.stringify([pr.readable !== false, queue.readable !== false])
|
|
1014
|
+
if (!args.quiet && (changed || readability !== lastReadability)) {
|
|
1031
1015
|
const now = Date.now()
|
|
1032
1016
|
console.error(progressRecord({ payload, changed, sinceChangeMs: now - lastChangeMs, nowIso: new Date(now).toISOString() }))
|
|
1033
1017
|
}
|
|
1018
|
+
lastReadability = readability
|
|
1034
1019
|
|
|
1035
1020
|
const elapsedMs = Date.now() - startedMs
|
|
1036
1021
|
if (elapsedMs >= args.maxMinutes * 60_000) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: podman
|
|
3
3
|
description: "Debug, design, or fix Podman: rootless/rootful containers, pods, podman-compose, the socket and systemd services, Docker-compatible API (DOCKER_HOST/CONTAINER_HOST), networking, volumes, SELinux labels, Docker migration, and CI/SSH provisioning of rootless sockets (user lingering, XDG_RUNTIME_DIR). Covers FailedToOpenSocket and systemctl --user DBUS/XDG errors."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Podman Operations
|
|
@@ -6,7 +6,7 @@ description: >
|
|
|
6
6
|
Use when a user shares an article, pastes article text, sends a URL, or asks to
|
|
7
7
|
review, rate, critique, evaluate, 评价, 点评, 分析, or 看看 any article, post, or 文章.
|
|
8
8
|
Default template is 公众号-支付行业.
|
|
9
|
-
release-version: 0.50.
|
|
9
|
+
release-version: 0.50.2
|
|
10
10
|
---
|
|
11
11
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
12
12
|
# 文章评审引擎
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: article-to-image
|
|
3
3
|
description: "Generate article cover images: WeChat banner/square (公众号封面), Xiaohongshu (小红书封面), LinkedIn banner, general wide. Brainstorms 4 visual directions from the article, then renders each format with correct aspect ratios and title-safe zones. Use when given an article and asked for covers, banners, or 出图."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Article-to-Image
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flowchart-svg
|
|
3
3
|
description: Create polished flowcharts directly as SVG and export PNG copies. Use when asked to draw, design, render, or deliver process diagrams, architecture diagrams, consulting workflows, decision flows, swimlanes, or other flowcharts as image files, especially when final outputs must include .svg and .png versions.
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Flowchart SVG
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: image-gen
|
|
3
3
|
description: Generate an image from a text prompt with OpenAI gpt-image-2 or Google Nano Banana (Gemini), saved to an image file. Use whenever the user asks to generate, create, make, draw, paint, render, or design an image, picture, illustration, photo, artwork, logo, icon, avatar, banner, hero image, thumbnail, poster, wallpaper, sticker, or concept art — including phrasings like "an image of X", "a picture of X", "show me what X would look like", or a request for a visual for a slide, blog post, README, or social post. Also triggers on Chinese phrasings such as 生成图片, 画一张图, 做一张海报, 设计一个 logo. NOT for charts or data visualizations (dataviz), flowcharts or architecture diagrams (flowchart-svg), or editing an existing image file.
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Image Generation
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: mermaid
|
|
3
3
|
description: Create and edit Mermaid diagrams for architecture, API flows, database schemas, workflows, and data models.
|
|
4
4
|
user-invocable: true
|
|
5
|
-
release-version: 0.50.
|
|
5
|
+
release-version: 0.50.2
|
|
6
6
|
---
|
|
7
7
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
8
8
|
# Mermaid Diagram Creation
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wechat-article-writer
|
|
3
3
|
description: "Write WeChat 公众号 articles in Chinese content styles — 踩坑型 (pitfall-story), 实操型 (how-to), 对比型 (comparison), 观察型 (industry insight) — in the account's house style from the nearest WRITING.md. Use for drafting from scratch, rewriting a draft, adapting source material into a publishable article, or picking the right style. NOT for business or technical documents (write-doc)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# WeChat Article Writer (公众号写作)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wechat-publisher
|
|
3
3
|
description: "Publish articles to a WeChat Official Account (公众号) via API: push Markdown to the draft box (or auto-publish with --publish), convert Markdown to WeChat HTML, upload images to the media library. Requires AppID + AppSecret + whitelisted server IP on a 认证订阅号/服务号. Consumes wechat-article-writer's Markdown."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# WeChat Publisher (公众号发布)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wechat-search
|
|
3
3
|
description: "Search WeChat 公众号 articles via Sogou Weixin, or read/summarize an article from a mp.weixin.qq.com URL (读/分析/总结) — suggest proactively when such a URL appears. Use for Chinese WeChat content, industry reports, competitor or trending topics. Requires Chrome Browser Relay. NOT general web search (web_search)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# WeChat Article Search & Reader (搜狗微信搜索)
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
type: secret
|
|
10
10
|
required: true
|
|
11
11
|
description: API key for direct xAI or the explicitly configured Responses gateway
|
|
12
|
-
release-version: 0.50.
|
|
12
|
+
release-version: 0.50.2
|
|
13
13
|
---
|
|
14
14
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
15
15
|
# xAI Search (X/Twitter + Web)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: distill-writing
|
|
3
3
|
description: "Learn a house writing style from approved sample documents, or save an explicitly stated project document preference, into WRITING.md and writing/templates/. Use for sample-based style learning, house-style setup or refresh, and requests such as 'remember this for future PRDs' or 'make this our report default', including handoffs from write-doc, write-report or plain-language. Preserve manual edits and separate document types. NOT for drafting a document (write-doc) or analytical report (write-report) or saving chat-only preferences (plain-language)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Distill a writing style
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: doc-to-md
|
|
3
3
|
description: "Convert documents (PDF, DOCX, PPTX, XLSX, images) to Markdown so agents can read them. Use as the preprocessing step whenever binary files need to enter agent context — contract review, compliance audit, document analysis, evidence review."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# doc-to-md
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: editorial-review
|
|
3
3
|
description: "Review a document or generated report for what it says (does the reader get the answer, is the argument sound, is anything unsupported, obvious or repeated), then fix the content. Use to review, tighten or clarify a doc or report, and as the review step of write-doc, write-report and domain report skills. NOT for Chinese wording (polish-cn) or code review (better-review)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Editorial review
|
|
@@ -3,7 +3,7 @@ name: house-style
|
|
|
3
3
|
description: "Shared reference the writing skills read by path: WRITING.md lookup and precedence, template choice, gap markers, template shape, the bundled templates, and the default English and Chinese style guides. Never select or invoke it as a task."
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: false
|
|
6
|
-
release-version: 0.50.
|
|
6
|
+
release-version: 0.50.2
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# House style
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plain-language
|
|
3
3
|
description: "Session mode: every reply and status line in plain language — lead with the point, everyday words, full sentences, no filler — in English or Chinese, until turned off. Enable by default when the project has an applicable WRITING.md, even without a slash command. Use for /plain-language, 'talk plainly', '说人话', and explicit requests to remember project reply preferences; /plain-language init persists the default and loading instructions. Save reply rules only under Agent replies; route document preferences to distill-writing. Ordinary mode toggles remain session-only. Turn off with '/plain-language off' or 'normal mode'. NOT for writing a document (write-doc) or analytical report (write-report) or reviewing one (editorial-review)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Plain language
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: polish-cn
|
|
3
3
|
description: "Polish the Chinese wording of a finished document or report, with a script proving every number, date, identifier, link and protected term is unchanged; prefers a Chinese model and records which ran. Use for '中文润色' or as a report skill's last step. NOT for cutting or restructuring content (editorial-review) or translating (write-doc or write-report)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Polish Chinese
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: reg-parser
|
|
3
3
|
version: 1.1.0
|
|
4
4
|
description: "Parse regulatory/scheme documents into structured outputs: convert a regulation (AML, VARS, PCI-DSS, KYC, GDPR) into an audit-ready compliance checklist, or trace contract clauses to a mandate source. Suggest proactively when a regulation PDF accompanies a contract review or compliance task. NOT general summarization (doc-to-md), writing a gap-analysis report (write-report), or writing a policy from the checklist (write-doc)."
|
|
5
|
-
release-version: 0.50.
|
|
5
|
+
release-version: 0.50.2
|
|
6
6
|
---
|
|
7
7
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
8
8
|
# reg-parser
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: terminology
|
|
3
3
|
description: "Build and keep a project's TERMINOLOGY.md: the preferred term per concept in English, 简体 and 繁體, and the terms to avoid. Use to set it up from the project's documents, when the user settles or corrects a term, or when another writing skill needs the format. NOT for writing documents (write-doc) or analytical reports (write-report) or the code domain model (domain-modeling)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Terminology
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-doc
|
|
3
3
|
description: "Write or edit documents that define or propose something: BRD, PRD, technical spec, integration guide, proposal, policy or risk procedure; English, Chinese or bilingual. Use automatically for drafting or revising these documents. Markdown by default; export when requested. NOT for analytical reports or writing up findings (write-report), ordinary chat replies (plain-language), learning style or saving preferences alone (distill-writing), performing an audit (compliance-audit), or WeChat articles (wechat-article-writer)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Write a document
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-report
|
|
3
3
|
description: "Write or edit analytical reports from data, research, analysis or findings: payment, fraud, operational, performance, research, gap-analysis, audit, external assessment, management and Visa VARS reports. Use whenever asked to report results, write up findings, or turn analysis into a report, even without naming this skill. English, Chinese or bilingual; Markdown by default, export when requested. NOT for defining requirements, policies or proposals (write-doc), performing the underlying domain analysis or audit, chat-only answers (plain-language), or learning house style (distill-writing)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Write an analytical report
|
|
@@ -4,7 +4,7 @@ description: "Slash/explicit-only (/better-review). Single-agent adversarial rev
|
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
dependencies:
|
|
6
6
|
- engineering-runtime
|
|
7
|
-
release-version: 0.50.
|
|
7
|
+
release-version: 0.50.2
|
|
8
8
|
---
|
|
9
9
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
10
10
|
# Better Review
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: e2e-test
|
|
3
3
|
description: "Playwright end-to-end guidance for affected browser journeys, render health and presentation checks, with route manifests and sweeps for broader audits. Use when browser routes or user flows ship or change, or a Playwright test flakes. NOT for non-browser tests, defining what to test (ensure-coverage), the curated ALIVE/DEAD golden-path gate (golden-path), or CI workflow YAML (github-actions)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# E2E Testing Standard
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: engineering
|
|
3
3
|
description: "Engineering conventions: feature-delivery priorities, focused verification and review, operational boundaries, and tracker routing. Standalone /engineering offers Global, Project, or Session setup and targeted resets for configured scopes; /engineering init keeps explicit project setup. Use when setting up AGENTS.md or CONTRIBUTING.md, saving or resetting engineering defaults, or before creating an engineering issue, spec, epic, ticket, or sub-issue on GitHub or Linear. Reads existing policy without writing during ordinary work. NOT the issue-to-PR workflow (resolve-issues), release execution (resolve-release), Git delivery (github-flow), or CI setup (github-actions)."
|
|
4
|
-
release-version: 0.50.
|
|
4
|
+
release-version: 0.50.2
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Engineering
|
|
@@ -3,7 +3,7 @@ name: engineering-runtime
|
|
|
3
3
|
description: Internal support package for shared Engineering Workflow executable behavior. Never select or invoke this package as a user capability.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: false
|
|
6
|
-
release-version: 0.50.
|
|
6
|
+
release-version: 0.50.2
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Engineering Runtime
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
"repository": "1aboveio/ai",
|
|
370
370
|
"revision": "main"
|
|
371
371
|
},
|
|
372
|
-
"contentDigest": "
|
|
372
|
+
"contentDigest": "522a4876e0519a4163ff85976caa478a024aaacb3115f1e0cb1b4ac2832c90df",
|
|
373
373
|
"digestExcludes": []
|
|
374
374
|
},
|
|
375
375
|
{
|
|
@@ -382,7 +382,7 @@
|
|
|
382
382
|
"repository": "1aboveio/ai",
|
|
383
383
|
"revision": "main"
|
|
384
384
|
},
|
|
385
|
-
"contentDigest": "
|
|
385
|
+
"contentDigest": "e1d2a60487eec9d1fd4fec1a4f0357069904db25577c08b811a72106da86c140",
|
|
386
386
|
"digestExcludes": []
|
|
387
387
|
},
|
|
388
388
|
{
|
|
@@ -395,7 +395,7 @@
|
|
|
395
395
|
"repository": "1aboveio/ai",
|
|
396
396
|
"revision": "main"
|
|
397
397
|
},
|
|
398
|
-
"contentDigest": "
|
|
398
|
+
"contentDigest": "81c172a2db0fe9750447af937247b8e6aed9c47928db1c0e003bba7e5c64bbc3",
|
|
399
399
|
"digestExcludes": []
|
|
400
400
|
},
|
|
401
401
|
{
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
"repository": "1aboveio/ai",
|
|
409
409
|
"revision": "main"
|
|
410
410
|
},
|
|
411
|
-
"contentDigest": "
|
|
411
|
+
"contentDigest": "351eaa56339849c1994c0d5735a287d5bb1aabc02225b93336b1bbc547696390",
|
|
412
412
|
"digestExcludes": []
|
|
413
413
|
},
|
|
414
414
|
{
|
|
@@ -421,7 +421,7 @@
|
|
|
421
421
|
"repository": "1aboveio/ai",
|
|
422
422
|
"revision": "main"
|
|
423
423
|
},
|
|
424
|
-
"contentDigest": "
|
|
424
|
+
"contentDigest": "6a1a1689ae2616d2f6f4afe4442ec72f0a54e8d829ddbf38546ed0d881a14da1",
|
|
425
425
|
"digestExcludes": []
|
|
426
426
|
},
|
|
427
427
|
{
|
|
@@ -434,7 +434,7 @@
|
|
|
434
434
|
"repository": "1aboveio/ai",
|
|
435
435
|
"revision": "main"
|
|
436
436
|
},
|
|
437
|
-
"contentDigest": "
|
|
437
|
+
"contentDigest": "b740e99373209a7691f412d5bf7e685d82f5a50a1943ef2fd75f0395048aec4a",
|
|
438
438
|
"digestExcludes": []
|
|
439
439
|
},
|
|
440
440
|
{
|
|
@@ -447,7 +447,7 @@
|
|
|
447
447
|
"repository": "1aboveio/ai",
|
|
448
448
|
"revision": "main"
|
|
449
449
|
},
|
|
450
|
-
"contentDigest": "
|
|
450
|
+
"contentDigest": "d6589a126bc271d6b7953fc68c316c3f5b229c34215c3624074c0ffe657ef718",
|
|
451
451
|
"digestExcludes": []
|
|
452
452
|
},
|
|
453
453
|
{
|
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
"repository": "1aboveio/ai",
|
|
461
461
|
"revision": "main"
|
|
462
462
|
},
|
|
463
|
-
"contentDigest": "
|
|
463
|
+
"contentDigest": "e38611409ef33c5b33ae489c43c476f85e176003db7d24b031891e52c2875d8e",
|
|
464
464
|
"digestExcludes": []
|
|
465
465
|
},
|
|
466
466
|
{
|
|
@@ -473,7 +473,7 @@
|
|
|
473
473
|
"repository": "1aboveio/ai",
|
|
474
474
|
"revision": "main"
|
|
475
475
|
},
|
|
476
|
-
"contentDigest": "
|
|
476
|
+
"contentDigest": "7f78a80abbadcc3bfdf9d70f477b26370758d4ad3a3f860c1b73db5d3166c10a",
|
|
477
477
|
"digestExcludes": []
|
|
478
478
|
},
|
|
479
479
|
{
|
|
@@ -486,7 +486,7 @@
|
|
|
486
486
|
"repository": "1aboveio/ai",
|
|
487
487
|
"revision": "main"
|
|
488
488
|
},
|
|
489
|
-
"contentDigest": "
|
|
489
|
+
"contentDigest": "ae28f9f440c015a3ac9935cd050f8d489d6355172cb3cff5df72ab50e1c7dc89",
|
|
490
490
|
"digestExcludes": []
|
|
491
491
|
},
|
|
492
492
|
{
|
|
@@ -499,7 +499,7 @@
|
|
|
499
499
|
"repository": "1aboveio/ai",
|
|
500
500
|
"revision": "main"
|
|
501
501
|
},
|
|
502
|
-
"contentDigest": "
|
|
502
|
+
"contentDigest": "ffc64d184a564bcc131edb40d2b71ecfb63ba96a53cb25d810235e09ad0222b4",
|
|
503
503
|
"digestExcludes": []
|
|
504
504
|
},
|
|
505
505
|
{
|
|
@@ -512,13 +512,13 @@
|
|
|
512
512
|
"repository": "1aboveio/ai",
|
|
513
513
|
"revision": "main"
|
|
514
514
|
},
|
|
515
|
-
"contentDigest": "
|
|
515
|
+
"contentDigest": "3f11192933319bed874a91b004a2f41629a74b3d5f44e0c27d6a8ba2b31ce2dd",
|
|
516
516
|
"digestExcludes": [
|
|
517
517
|
"coherence/workflow.json"
|
|
518
518
|
]
|
|
519
519
|
}
|
|
520
520
|
],
|
|
521
|
-
"releaseIdentity": "
|
|
521
|
+
"releaseIdentity": "40e572635a1e002b4ab249a50b88a1e07cc59a64d8fcb39b5efa91c3bd6091ff",
|
|
522
522
|
"lifecycleAuthority": "native-skills-cli",
|
|
523
523
|
"repairRecipe": {
|
|
524
524
|
"id": "engineering-workflow-dependency-first",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: ensure-coverage
|
|
3
3
|
description: "Define or audit behavior-first test criteria — ACs, required test levels, mock/integration/E2E policy — across three axes: breadth (Coverage Ledger), depth (over-mocking), presentation (perceivability of browser surfaces). NOT judging whether a single test is any good (test-quality), authoring browser tests (e2e-test), reviewing a PR (better-review), or delivering issues (resolve-issues)."
|
|
4
4
|
disable-model-invocation: true
|
|
5
|
-
release-version: 0.50.
|
|
5
|
+
release-version: 0.50.2
|
|
6
6
|
---
|
|
7
7
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
8
8
|
# Ensure Coverage
|
|
@@ -3,7 +3,7 @@ name: golden-path
|
|
|
3
3
|
description: "Golden-path E2E: the short list of user journeys whose failure blocks a release, kept in a repo as one contract (golden-paths.json) with a generated GOLDEN_PATHS.md and a generated GitHub Actions workflow, and run against a local build or a deployed URL for an ALIVE/DEAD verdict. Use to set golden paths up in a repo ('init golden paths', 'add golden-path CI'), to migrate an older smoke.manifest.json or a hand-built smoke setup ('audit', 'migrate smoke'), to add, change, or remove a golden path, to ask 'is the build alive?' or run them before a PR or release, or when a change touches a flow listed in GOLDEN_PATHS.md. NOT for writing the Playwright specs themselves (e2e-test), deciding what a change must prove (ensure-coverage), or general workflow YAML (github-actions)."
|
|
4
4
|
dependencies:
|
|
5
5
|
- e2e-test
|
|
6
|
-
release-version: 0.50.
|
|
6
|
+
release-version: 0.50.2
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Golden path
|
|
@@ -3,7 +3,7 @@ name: harness-runtime
|
|
|
3
3
|
description: Internal import-only library shared by first-party engineering packages. Not a workflow skill; never select or invoke it as a user capability.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: false
|
|
6
|
-
release-version: 0.50.
|
|
6
|
+
release-version: 0.50.2
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Harness Runtime
|
|
@@ -14,6 +14,7 @@ This support-only runtime package exposes shared programmatic contracts plus can
|
|
|
14
14
|
|
|
15
15
|
- `contracts.md` defines the neutral values, planner boundary, discovery handoff, and topology rules.
|
|
16
16
|
- `native-question-contracts.md` pins the Pi, Codex, and Claude Code adapter schemas and response behavior.
|
|
17
|
+
- Read [references/subagent-sessions.md](references/subagent-sessions.md) when continuing a Pi worker: it distinguishes attempt ids from native session ids, checks the active spawn schema, and defines local/global discovery.
|
|
17
18
|
- `index.mjs` exports neutral constructors plus pure question planning and response normalization.
|
|
18
19
|
- `agent-catalog.mjs` is the consumer bridge to the harness-owned agent catalog: it resolves the four worker roles for a harness, with no skill-owned ladder and an explicit blocked result when no resolver is available.
|
|
19
20
|
- `discover-models.mjs` enumerates model evidence; `model-catalog.mjs` manages per-harness classifications. Both remain import-compatible for existing consumers and are no longer used to select model slots.
|
|
@@ -8,6 +8,8 @@ Question and answer values are harness-neutral immutable data. `planStructuredQu
|
|
|
8
8
|
|
|
9
9
|
Model discovery unions explicit current-turn spawn ids and human-named runnable ids with configured or credentialed evidence. Its `{ discovered: [{ id, source }] }` output is evidence, not a neutral model-availability value: callers map each item to `{ id, sources: [source] }`, preserve `harness` and `completeness`, then pass that shape to `defineModelAvailability`; discovery `notes` remain operator diagnostics. Pi labels configuration discovery `full` even when it finds no runnable ids because its credential-aware configuration is the complete evidence class. Codex and Claude Code static configuration remains partial unless current-turn or runtime-enumeration evidence completes it. Catalog writes remain isolated to each harness's user directory, and the installation-relative team seed is read-only.
|
|
10
10
|
|
|
11
|
+
For saved Pi worker conversations, read [subagent session contracts](references/subagent-sessions.md) before choosing a continuation call. The active spawn schema determines capability; the native session id selects the conversation, while the returned attempt id tracks one execution. This reference adds no inferred tools to the neutral capability value.
|
|
12
|
+
|
|
11
13
|
Shell code cannot invoke a native question tool inside the agent's current turn. It may validate and plan data; the agent performs each planned native tool call and passes the responses back for normalization.
|
|
12
14
|
|
|
13
15
|
When no supported native question tool is advertised, concise free-text input is permitted only for one optionless question. Textual multiple-choice emulation is forbidden. Unsupported multi-select and all secret input fail explicitly rather than degrading silently.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Saved subagent conversations on Pi
|
|
2
|
+
|
|
3
|
+
Use this contract when an engineering workflow continues a Pi worker after its
|
|
4
|
+
attempt has finished. Other harnesses use their advertised continuation API.
|
|
5
|
+
|
|
6
|
+
## Check the active interface
|
|
7
|
+
|
|
8
|
+
Read the tool schema advertised in the current turn. Continuation requires
|
|
9
|
+
`subagent_spawn` with `session_id`; a tool name or an installed package version
|
|
10
|
+
alone does not establish that the running extension has loaded that parameter.
|
|
11
|
+
A stale running extension may need the human's `/reload` after an update. Report
|
|
12
|
+
that mismatch and use the workflow's documented fallback; updating packages or
|
|
13
|
+
changing tool permissions is a separate authorized action.
|
|
14
|
+
|
|
15
|
+
## Record the conversation separately from the attempt
|
|
16
|
+
|
|
17
|
+
Keep these values from the actual launch receipt:
|
|
18
|
+
|
|
19
|
+
- `runId`: the attempt used for results, failures, logs, and the active worker slot.
|
|
20
|
+
- `sessionId`: the native Pi conversation used for later follow-up.
|
|
21
|
+
- `cwd`: the worker's recorded workspace.
|
|
22
|
+
|
|
23
|
+
Every continuation creates a new `runId` while keeping `sessionId`. Read the
|
|
24
|
+
native session id from the structured receipt, batch launch entry, or explicit
|
|
25
|
+
`session_id` in list output. An attempt id is not a substitute, even when the two
|
|
26
|
+
happen to match on the first launch.
|
|
27
|
+
|
|
28
|
+
For an older plan missing `sessionId`, locate the exact recorded `runId` in
|
|
29
|
+
`subagent_list` and record its native `session_id` before continuing. Use
|
|
30
|
+
`all: true` when it is outside the caller's folder. If that identity cannot be
|
|
31
|
+
verified, report unavailable continuity and follow the workflow's explicit
|
|
32
|
+
replacement path with its saved evidence.
|
|
33
|
+
|
|
34
|
+
## Continue through spawn
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
subagent_spawn({ session_id: owner.sessionId, prompt: "Fix the remaining findings." })
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The prompt is the next turn, not a repetition of the original assignment or role.
|
|
41
|
+
Keep the saved worker configuration; pass model or effort only for an explicit,
|
|
42
|
+
authorized escalation supported by the current schema. Record the returned new
|
|
43
|
+
attempt id and verify that its session id is still the selected conversation.
|
|
44
|
+
Per-job `session_id` in `subagent_spawn_batch` has the same meaning; the shared
|
|
45
|
+
batch options do not select one conversation for every job.
|
|
46
|
+
|
|
47
|
+
The caller may be a different foreground session. Completion reports to that
|
|
48
|
+
caller. Continue from a completed attempt; a running or orphaned writer must
|
|
49
|
+
settle before another continuation starts. A failed, killed, lost, or otherwise
|
|
50
|
+
refused attempt follows the workflow's recovery or replacement rules rather than
|
|
51
|
+
selecting an older completion. Current mandatory permissions still apply.
|
|
52
|
+
Missing history or workspace is a refusal, not permission to create a replacement
|
|
53
|
+
conversation under the same identity.
|
|
54
|
+
|
|
55
|
+
## Discover locally or globally
|
|
56
|
+
|
|
57
|
+
`subagent_list()` searches the current folder and descendants across foreground
|
|
58
|
+
sessions. `subagent_list({ all: true })` searches globally. Each row identifies
|
|
59
|
+
both the attempt and the saved conversation. `session_name` is a convenience for
|
|
60
|
+
one exact, unambiguous name in the local folder scope; a workflow with recorded
|
|
61
|
+
ownership uses its exact `sessionId` rather than choosing a worker by name.
|
|
62
|
+
Duplicate names require an explicit session id.
|
|
63
|
+
|
|
64
|
+
## Keep the lifecycle small
|
|
65
|
+
|
|
66
|
+
Native session history and completed launch recipes persist by default.
|
|
67
|
+
`subagent_resume`, `subagent_release`, and `retain_session` are not part of this
|
|
68
|
+
contract. A completed attempt frees its capacity slot automatically. Ordinary
|
|
69
|
+
workspace/resource cleanup remains owned by the workflow; no session-release
|
|
70
|
+
acknowledgement is required. Preserving history does not keep a deleted workspace
|
|
71
|
+
available for later continuation.
|
|
72
|
+
|
|
73
|
+
Keep the implementation conversation through repairs. An unfinished review may
|
|
74
|
+
continue only within the workflow's existing HEAD and scope rules. A completed
|
|
75
|
+
independent review round gets a fresh reviewer for the next required round.
|
|
@@ -8,7 +8,7 @@ dependencies:
|
|
|
8
8
|
- better-review
|
|
9
9
|
- golden-path
|
|
10
10
|
- harness-runtime
|
|
11
|
-
release-version: 0.50.
|
|
11
|
+
release-version: 0.50.2
|
|
12
12
|
---
|
|
13
13
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
14
14
|
# Resolve issues
|
|
@@ -187,7 +187,7 @@ efforts are run metadata, never a question.
|
|
|
187
187
|
### 2. Implement and open the PR
|
|
188
188
|
|
|
189
189
|
Give each unit a branch, its prepared workspace, and an implementer with its findings entry
|
|
190
|
-
and parents' contracts;
|
|
190
|
+
and parents' contracts; keep its [implementation owner](references/implementation.md#implementation-owner)
|
|
191
191
|
through review/CI fixes, separately from its active worker slot. State outcome and validation, not method. Refill
|
|
192
192
|
slots at once. At a unit's first coherent commit its PR opens as a draft, so CI
|
|
193
193
|
starts and the work is safe; later work goes to the same PR (in a Mergify stack
|
|
@@ -117,10 +117,8 @@ provider shows that PR merged.
|
|
|
117
117
|
|
|
118
118
|
Clean that unit's workspace and resources, then finish it, in every scheduler
|
|
119
119
|
mode: `next-actions.mjs` prints `cleanup-workspace` until its cleanup settles.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
nothing to release. Then record the intent through the [checkpoint mechanism](task-plan.md#checkpoints) (`lifecycle.cleanup`
|
|
123
|
-
`{state: applying, headSha: <the unit's headSha>}`), then run:
|
|
120
|
+
Record the intent through the [checkpoint mechanism](task-plan.md#checkpoints) (`lifecycle.cleanup`
|
|
121
|
+
`{state: applying, headSha: <the unit's headSha>}`), while other units remain active, then run:
|
|
124
122
|
|
|
125
123
|
```bash
|
|
126
124
|
node <skill-base-dir>/scripts/cleanup-runs.mjs cleanup --run <run> --unit <unit> \
|