@1aboveio/skills 1.0.13 → 1.0.15
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 +157 -154
- package/README.md +1 -1
- package/package.json +5 -5
- package/skills/app-dev/airflow/SKILL.md +1 -1
- package/skills/app-dev/android-development/SKILL.md +127 -0
- package/skills/app-dev/android-development/references/android-conventions.md +117 -0
- package/skills/app-dev/{android-foundation → android-development}/references/ci.md +10 -6
- package/skills/app-dev/{android-foundation → android-development}/references/diagnosis.md +44 -15
- package/skills/app-dev/android-development/references/feature-work.md +186 -0
- package/skills/app-dev/android-development/references/framework-choice.md +88 -0
- package/skills/app-dev/{android-foundation → android-development}/references/gotchas.md +43 -6
- package/skills/app-dev/android-development/references/init.md +126 -0
- package/skills/app-dev/android-development/references/setup.md +389 -0
- package/skills/app-dev/android-development/references/workspace.md +156 -0
- package/skills/app-dev/android-development/scripts/init.mjs +477 -0
- 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 +53 -16
- package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +231 -21
- package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +12 -1
- package/skills/app-dev/data-quality/SKILL.md +1 -1
- package/skills/app-dev/ios-foundation/SKILL.md +2 -2
- 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 +10 -1
- package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +231 -21
- package/skills/cicd/github-flow/scripts/persist-conventions.mjs +18 -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 +7 -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/house-style/references/persistence.md +8 -3
- package/skills/core/house-style/scripts/init-guidance.mjs +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/terminology/references/init.md +11 -0
- 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 +25 -4
- package/skills/engineering/engineering/references/init-scope.md +10 -3
- package/skills/engineering/engineering/references/scope-management.md +11 -0
- package/skills/engineering/engineering/scripts/init.mjs +65 -17
- package/skills/engineering/engineering/scripts/persist-conventions-core.mjs +231 -21
- package/skills/engineering/engineering/scripts/persist-conventions.mjs +48 -21
- 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/resolve-issues/SKILL.md +1 -1
- package/skills/engineering/resolve-issues/references/exploration.md +1 -1
- package/skills/engineering/resolve-issues/references/review.md +27 -4
- 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 +3 -1
- package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +231 -21
- package/skills/engineering/test-quality/scripts/persist-conventions.mjs +13 -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
- package/skills/app-dev/android-foundation/SKILL.md +0 -248
- package/skills/app-dev/android-foundation/references/delivery-focus.md +0 -31
- package/skills/app-dev/android-foundation/references/feature-work.md +0 -50
- package/skills/app-dev/android-foundation/references/setup.md +0 -188
- package/skills/app-dev/android-foundation/references/workspace.md +0 -81
- /package/skills/app-dev/{android-foundation → android-development}/LICENSE +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/assets/android-ci-job.yml +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/release-check.mjs +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/scripts/device-run.sh +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/bin/workspaces.mjs +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/native-workspace.mjs +0 -0
- /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/workspace-lifecycle.mjs +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// persist-conventions — the tracker routing rules as the `## Issue tracking`
|
|
2
|
-
// section of a repo's CONTRIBUTING.md (../SKILL.md,
|
|
2
|
+
// section of a repo's CONTRIBUTING.md (../SKILL.md, Tracker routing).
|
|
3
3
|
// Previews unless --write; --if-missing leaves an existing section alone.
|
|
4
|
+
// --write also adds the skill's task-entry loader for issue and spec creation to
|
|
5
|
+
// AGENTS.md (and to a regular CLAUDE.md that does not reach AGENTS.md).
|
|
4
6
|
//
|
|
5
7
|
// node persist-conventions.mjs [--repo-root <dir>] [--github-repo <owner/name>]
|
|
6
8
|
// [--linear-project <name>]... [--if-missing] [--write]
|
|
@@ -10,11 +12,24 @@ import fs from 'node:fs'
|
|
|
10
12
|
import path from 'node:path'
|
|
11
13
|
import { spawnSync } from 'node:child_process'
|
|
12
14
|
import { fileURLToPath } from 'node:url'
|
|
13
|
-
import { CONTRIBUTING_FILE,
|
|
15
|
+
import { CONTRIBUTING_FILE, markers, persistIndex, runCli } from './persist-conventions-core.mjs'
|
|
14
16
|
|
|
15
17
|
const ID = 'tracker'
|
|
16
18
|
const TEMPLATE = fs.readFileSync(fileURLToPath(new URL('../references/tracker-conventions.md', import.meta.url)), 'utf8')
|
|
17
19
|
|
|
20
|
+
// Scoped to issue and spec creation: this is tracker persistence, not a general
|
|
21
|
+
// invitation to load the engineering defaults into every task.
|
|
22
|
+
const LOADER = {
|
|
23
|
+
id: 'tracker',
|
|
24
|
+
skill: 'engineering',
|
|
25
|
+
title: 'Tracker task entry',
|
|
26
|
+
body: [
|
|
27
|
+
'Before creating an issue, spec, epic, or sub-issue, read and apply the installed',
|
|
28
|
+
"`engineering` skill's tracker routing. This setup installs tracker routing only;",
|
|
29
|
+
"the project's routing rules stay in its contributor guide. It selects no other workflow.",
|
|
30
|
+
].join('\n'),
|
|
31
|
+
}
|
|
32
|
+
|
|
18
33
|
function githubRepoFromRemote(url) {
|
|
19
34
|
const m = /github\.com[:/]([\w.-]+\/[\w.-]+?)(?:\.git)?\/?$/.exec(url.trim())
|
|
20
35
|
return m ? m[1] : null
|
|
@@ -27,22 +42,18 @@ function renderBody(githubRepo, linearProjects) {
|
|
|
27
42
|
return TEMPLATE.replaceAll('{{githubRepo}}', githubRepo).replaceAll('{{linearProjects}}', linear)
|
|
28
43
|
}
|
|
29
44
|
|
|
30
|
-
// The section stays as it is; only a missing AGENTS.md
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
changed++
|
|
40
|
-
log(` ${name}: ${write ? 'written' : 'would change'}`)
|
|
41
|
-
if (!write) continue
|
|
42
|
-
if (next === LINK_TO_AGENTS) fs.symlinkSync('AGENTS.md', file)
|
|
43
|
-
else fs.writeFileSync(file, next)
|
|
45
|
+
// The section stays as it is; only a missing AGENTS.md pointer or CLAUDE.md link and
|
|
46
|
+
// the missing task-entry loader are added.
|
|
47
|
+
function indexOnly(repoRoot, section, write, log) {
|
|
48
|
+
const results = persistIndex(repoRoot, section, { write })
|
|
49
|
+
const conflicts = results.flatMap(result => result.conflicts ?? [])
|
|
50
|
+
for (const result of results) {
|
|
51
|
+
for (const conflict of result.conflicts ?? []) log(` ${result.file}: ${conflict}`)
|
|
52
|
+
if (result.action === 'blocked') log(` ${result.file}: blocked`)
|
|
53
|
+
else if (result.action !== 'unchanged') log(` ${result.file}: ${write ? 'written' : 'would change'}`)
|
|
44
54
|
}
|
|
45
|
-
|
|
55
|
+
const changed = results.filter((result) => !['unchanged', 'blocked'].includes(result.action)).length
|
|
56
|
+
return { summary: changed ? `${changed} index file(s) ${write ? 'written' : 'would change'}` : 'nothing written', blocked: conflicts.length > 0 }
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
function main(argv, { log = console.log } = {}) {
|
|
@@ -73,12 +84,28 @@ function main(argv, { log = console.log } = {}) {
|
|
|
73
84
|
const file = path.join(repoRoot, CONTRIBUTING_FILE)
|
|
74
85
|
const current = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : ''
|
|
75
86
|
if (current.includes(markers(ID)[0])) {
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
const section = sectionFor(githubRepo, linearProjects)
|
|
88
|
+
const indexed = indexOnly(repoRoot, section, argv.includes('--write'), log)
|
|
89
|
+
log(`persist-conventions: Issue tracking: section already present; ${indexed.summary}`)
|
|
90
|
+
return indexed.blocked ? 2 : 0
|
|
78
91
|
}
|
|
79
92
|
}
|
|
80
|
-
const section =
|
|
93
|
+
const section = sectionFor(githubRepo, linearProjects)
|
|
81
94
|
return runCli(rest, section, { log })
|
|
82
95
|
}
|
|
83
96
|
|
|
84
|
-
|
|
97
|
+
function sectionFor(githubRepo, linearProjects) {
|
|
98
|
+
return {
|
|
99
|
+
id: ID,
|
|
100
|
+
owner: 'engineering',
|
|
101
|
+
title: 'Issue tracking',
|
|
102
|
+
body: renderBody(githubRepo, linearProjects),
|
|
103
|
+
loader: LOADER,
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
try { process.exitCode = main(process.argv.slice(2)) }
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(`persist-conventions: setup refused: ${error.message}`)
|
|
110
|
+
process.exitCode = 2
|
|
111
|
+
}
|
|
@@ -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.
|
|
6
|
+
release-version: 0.47.0
|
|
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": "a91694b84a0cfd014714c53a7b91e3a470fd76daccf85582c21620a4d91523fb",
|
|
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": "8c4c6f21ea637ce24245cf6f20d0aa46d811c35cb8f4b81a78d07907a8c3e8af",
|
|
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": "f66eee222aef4ca965a2e9fbfbfc16a95a69213fa30472485519799e9dc99487",
|
|
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": "647fb4c57154f3e84d4adff0dd44f32a09c8fd6eb0145afbe1141d674e7965db",
|
|
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": "a9085e135bfbe535f96c4915f8402303e98e663f182b3508376799bff1013763",
|
|
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": "e21ef0dbc6f4d423b310f78ca342a20aeb672a5fb517a27f3d318e14dacd3f45",
|
|
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": "435361dd2f0aecda06c751825f75d918520203c53ba245b63630eeaa390ae0c5",
|
|
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": "fb0eadc4b382a5e6b863d76638949052d24f8c378a74971a0a28ccf43de49e0f",
|
|
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": "86660760773ae4869968f5e85efdab6d23e179a02f8c7066bf497f9cc64275c5",
|
|
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": "35fc60a6348784ca9b269516a0afddcc8f8e6a2dbb2f281afa657b3abe459450",
|
|
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": "826e64ed07b75f1ba24da7cac6c6e67b4f8152f5c34e067548f1af24038a3fa0",
|
|
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": "0fc35665e627e1c1698ba10a1c9d00a3745df10c22562b7a3ef72267e2309c4b",
|
|
516
516
|
"digestExcludes": [
|
|
517
517
|
"coherence/workflow.json"
|
|
518
518
|
]
|
|
519
519
|
}
|
|
520
520
|
],
|
|
521
|
-
"releaseIdentity": "
|
|
521
|
+
"releaseIdentity": "30ddab5b3c21191385d102158a2eb2bd3dcbd6e82d350777722543931e01ad44",
|
|
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.
|
|
5
|
+
release-version: 0.47.0
|
|
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.
|
|
6
|
+
release-version: 0.47.0
|
|
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.
|
|
6
|
+
release-version: 0.47.0
|
|
7
7
|
---
|
|
8
8
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
9
9
|
# Harness Runtime
|
|
@@ -100,7 +100,7 @@ four are copied.
|
|
|
100
100
|
reproduce a failed journey with it before they push a fix; never a CI
|
|
101
101
|
dispatch (`gh workflow run`, `gh run rerun`). `check` may be one.
|
|
102
102
|
- `skill` (every suite, present or missing): the absolute `SKILL.md` path of the installed skill for this
|
|
103
|
-
kind of journey (an emulator journey: `android-
|
|
103
|
+
kind of journey (an emulator journey: `android-development`; a browser
|
|
104
104
|
one: `e2e-test`), or `null` when none is installed.
|
|
105
105
|
Example: `check` dispatches the workflow input that runs the Charge
|
|
106
106
|
journey; `local` runs that Charge journey script on an owned emulator,
|
|
@@ -9,7 +9,10 @@ restate its rules in the brief beyond the two below.
|
|
|
9
9
|
## Brief
|
|
10
10
|
|
|
11
11
|
- Reviewer model: a different id from the implementer's
|
|
12
|
-
([preflight.md](preflight.md#1-model-slots)).
|
|
12
|
+
([preflight.md](preflight.md#1-model-slots)). Take its model id and effort from
|
|
13
|
+
the plan's recorded reviewer slot, a model or effort the human named included,
|
|
14
|
+
and pass them as structured launch arguments (the spawn's model and effort
|
|
15
|
+
fields), never as brief text and never a model id hardcoded here.
|
|
13
16
|
- Context: spec, repository standards, target branch, unit branch and HEAD,
|
|
14
17
|
parent PR when stacked or chained, exploration path, and the contracts the unit
|
|
15
18
|
provides and builds on.
|
|
@@ -92,6 +95,25 @@ pass (incomplete, an open P0/P1, a GitHub re-review awaited): pick the tier
|
|
|
92
95
|
instead. Example: round 2 passed on
|
|
93
96
|
`5f63348`; CI failed and the fix pushed `2035c74`: carry, no reviewer.
|
|
94
97
|
|
|
98
|
+
### Resume an incomplete review
|
|
99
|
+
|
|
100
|
+
An incomplete review is unfinished work, not evidence of a bad patch: start no
|
|
101
|
+
fix round. Before another launch, read the retained record for unfinished passes,
|
|
102
|
+
completed commands and findings, and why the review stopped. Resolve an open
|
|
103
|
+
`executionIncident` first; ask the reviewer to record missing continuation details.
|
|
104
|
+
|
|
105
|
+
For the same valid HEAD and scope, resume the same reviewer in the same round
|
|
106
|
+
using its result file, review clone and retained context. Give it the unfinished
|
|
107
|
+
work rather than repeating the whole assignment; preserve completed valid passes.
|
|
108
|
+
A wrong HEAD or invalid scope must be corrected, not carried as completed proof.
|
|
109
|
+
|
|
110
|
+
If that reviewer cannot continue, state why replacement is necessary, which
|
|
111
|
+
retained evidence the replacement reads, and what it redoes before launching it.
|
|
112
|
+
The replacement reviews every pass with `tier: "full"`. Keep the round number,
|
|
113
|
+
`fixRound`, unit `attempt` and earlier round files; incompleteness neither resets
|
|
114
|
+
history nor counts as progress. Use the plan's recorded model and effort in
|
|
115
|
+
structured launch arguments as [the brief](#brief) requires.
|
|
116
|
+
|
|
95
117
|
## GitHub reviews
|
|
96
118
|
|
|
97
119
|
Count reviews posted on the PR by any account with write access other than
|
|
@@ -135,8 +157,9 @@ the PR author; `github-reviews.mjs` reads them and decides what blocks.
|
|
|
135
157
|
completed review left a P0/P1 open, so skips, and any review that follows
|
|
136
158
|
a passing one, never consume a fix cycle; another attempt after a
|
|
137
159
|
completed blocker does, even with an unchanged patch, so fix first.
|
|
138
|
-
Resume an incomplete review in the same round
|
|
139
|
-
|
|
160
|
+
Resume an incomplete review in the same round
|
|
161
|
+
([Resume an incomplete review](#resume-an-incomplete-review)); a new
|
|
162
|
+
reviewer that replaces it reviews in full and keeps
|
|
140
163
|
the prior counter. Legacy records without
|
|
141
164
|
`fixRound` use their attempt number; never reset history. The verdict checks the counter against the immediate prior, given
|
|
142
165
|
with `--prior` when the review's filename is not `<unit>-r<N>.json`. The
|
|
@@ -178,7 +201,7 @@ the PR author; `github-reviews.mjs` reads them and decides what blocks.
|
|
|
178
201
|
| `handback` | `not-converging`: stop fixing; mark the unit `blocked` (`blockedReason: review-handback`) and defer the PR and its open findings on its issue |
|
|
179
202
|
| `decide` | `spec-question`: the printed `decide` file holds the question. Answer it ([expire.md](expire.md#decide-before-you-defer)) as a `decisions` entry whose `answers` names that file, then rerun this step with `--decision <its id>`: it writes a `test-first` fix brief that carries the decision |
|
|
180
203
|
| `wait` | No P0/P1 is open, but `awaiting` names a reviewer whose changes request a fix already answered: request their re-review (`gh pr edit <N> --add-reviewer <login>`) and keep the other units shipping; rerun step 3 on each completion notice, or every 5 minutes when nothing else runs; after 30 minutes, mark the unit `blocked` (`blockedReason: review-handback`) and defer it on its issue |
|
|
181
|
-
| `review-again` | Review incomplete (`complete` not true, passes, unresolved incident, no checks, P2 with neither a URL nor a dropbox id, wrong HEAD, or a skip the rerun no longer confirms): resolve any incident, then resume or
|
|
204
|
+
| `review-again` | Review incomplete (`complete` not true, passes, unresolved incident, no checks, P2 with neither a URL nor a dropbox id, wrong HEAD, or a skip the rerun no longer confirms): resolve any incident, then [resume the same reviewer, or replace it and say what changes](#resume-an-incomplete-review), for the same round; start no fix round |
|
|
182
205
|
| (exit 2, no verdict) | The script could not run: fix the command or path |
|
|
183
206
|
|
|
184
207
|
## What blocks
|
|
@@ -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.47.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.47.0
|
|
5
5
|
---
|
|
6
6
|
**Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
|
|
7
7
|
# Test Quality
|
|
@@ -82,6 +82,8 @@ node "$SKILL_DIR/scripts/persist-conventions.mjs" --write # write, once the us
|
|
|
82
82
|
|
|
83
83
|
It writes the seven principles ([references/testing-conventions.md](references/testing-conventions.md)) as the `## Testing conventions` section of `CONTRIBUTING.md`, between `conventions:testing` markers: a re-run replaces only that section and keeps everything else, including the `## CI conventions` and `## Delivery` sections `github-flow` writes. It adds a pointer to `AGENTS.md` unless that already names `CONTRIBUTING.md`, and creates a missing `CLAUDE.md` as a symlink to `AGENTS.md` (a regular `CLAUDE.md` that names neither file gets the pointer); missing files are created. `CONTRIBUTING.md` is the file `code-review` reads as a standards source, so the principles then apply in review too. Report each file's result line; committing is the user's call.
|
|
84
84
|
|
|
85
|
+
The same run also adds one `## Testing task entry` rule to `AGENTS.md`, between `conventions:testing-task-entry` markers: when writing, changing, or reviewing tests, read and apply this skill. It is a separate check from the guide pointer — a repo whose `AGENTS.md`, or whose regular `CLAUDE.md`, already names `CONTRIBUTING.md` still gets it, because a link says where the rules live, not that the skill is loaded. The rule routes to this skill and states no new requirements; the principles stay in `CONTRIBUTING.md`. An entrypoint that already loads `test-quality`, an unmanaged section with that heading, or malformed markers is preserved and reported instead of duplicated, and a `CLAUDE.md` that points at `AGENTS.md` inherits the rule rather than a copy. Repeating the run changes nothing.
|
|
86
|
+
|
|
85
87
|
## The lint
|
|
86
88
|
|
|
87
89
|
Scripts live under **this skill's directory**: set `SKILL_DIR` to the directory you read this file from, never your CWD. `node "$SKILL_DIR/scripts/lint-tests.mjs"` scans the tree; `--diff <base>` only lines changed since the merge-base. A tool-local **gate** rule fails the command's exit status; it is not automatically a repository merge requirement. Assess optional hits in context and preserve existing adopted gates. Rules, flags, and what a clean run proves (little, for Python and Go): [references/lint.md](references/lint.md).
|