@1aboveio/skills 1.0.0 → 1.0.2

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.
Files changed (84) hide show
  1. package/README.md +24 -7
  2. package/bin/select-core.mjs +182 -50
  3. package/extensions/hide-copies.ts +21 -0
  4. package/package.json +115 -3
  5. package/skills/app-dev/airflow/SKILL.md +1 -1
  6. package/skills/app-dev/android-foundation/SKILL.md +1 -1
  7. package/skills/app-dev/app-debug/SKILL.md +1 -1
  8. package/skills/app-dev/better-auth/SKILL.md +1 -1
  9. package/skills/app-dev/data-catalog/SKILL.md +10 -6
  10. package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +5 -3
  11. package/skills/app-dev/data-catalog/references/field-definitions.md +15 -7
  12. package/skills/app-dev/data-catalog/references/format.md +21 -8
  13. package/skills/app-dev/data-catalog/scripts/data_catalog.py +87 -32
  14. package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +58 -11
  15. package/skills/app-dev/data-quality/LICENSE +3 -0
  16. package/skills/app-dev/data-quality/SKILL.md +96 -0
  17. package/skills/app-dev/data-quality/agents/openai.yaml +3 -0
  18. package/skills/app-dev/data-quality/references/checks.md +56 -0
  19. package/skills/app-dev/data-quality/release-check.mjs +93 -0
  20. package/skills/app-dev/data-quality/scripts/data-quality.test.mjs +12 -0
  21. package/skills/app-dev/data-quality/scripts/data_quality.py +405 -0
  22. package/skills/app-dev/data-quality/scripts/test_data_quality.py +277 -0
  23. package/skills/app-dev/ios-foundation/SKILL.md +1 -1
  24. package/skills/app-dev/monorepo/SKILL.md +1 -1
  25. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  26. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  27. package/skills/app-dev/pyspark/SKILL.md +1 -1
  28. package/skills/app-dev/python-backend/SKILL.md +1 -1
  29. package/skills/app-dev/shadcn/SKILL.md +1 -1
  30. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  31. package/skills/cicd/cloud-build/SKILL.md +1 -1
  32. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  33. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  34. package/skills/cicd/docker/SKILL.md +1 -1
  35. package/skills/cicd/github-actions/SKILL.md +1 -1
  36. package/skills/cicd/github-flow/SKILL.md +1 -1
  37. package/skills/cicd/google-cloud/SKILL.md +1 -1
  38. package/skills/cicd/mergify/SKILL.md +1 -1
  39. package/skills/cicd/podman/SKILL.md +1 -1
  40. package/skills/content/article-review/SKILL.md +1 -1
  41. package/skills/content/article-to-image/SKILL.md +1 -1
  42. package/skills/content/flowchart-svg/SKILL.md +1 -1
  43. package/skills/content/image-gen/SKILL.md +1 -1
  44. package/skills/content/mermaid/SKILL.md +1 -1
  45. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  46. package/skills/content/wechat-publisher/SKILL.md +1 -1
  47. package/skills/content/wechat-search/SKILL.md +1 -1
  48. package/skills/content/xai-search/SKILL.md +1 -1
  49. package/skills/core/distill-writing/SKILL.md +1 -1
  50. package/skills/core/doc-to-md/SKILL.md +1 -1
  51. package/skills/core/editorial-review/SKILL.md +1 -1
  52. package/skills/core/house-style/SKILL.md +1 -1
  53. package/skills/core/plain-language/LICENSE +3 -0
  54. package/skills/core/plain-language/SKILL.md +57 -0
  55. package/skills/core/plain-language/release-check.mjs +93 -0
  56. package/skills/core/polish-cn/SKILL.md +1 -1
  57. package/skills/core/polish-cn/references/models.md +1 -1
  58. package/skills/core/reg-parser/SKILL.md +1 -1
  59. package/skills/core/terminology/SKILL.md +1 -1
  60. package/skills/core/write-doc/SKILL.md +1 -1
  61. package/skills/engineering/better-review/SKILL.md +1 -1
  62. package/skills/engineering/e2e-test/SKILL.md +1 -1
  63. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  64. package/skills/engineering/engineering-runtime/coherence/workflow.json +12 -12
  65. package/skills/engineering/ensure-coverage/SKILL.md +1 -1
  66. package/skills/engineering/golden-path/SKILL.md +1 -1
  67. package/skills/engineering/harness-runtime/SKILL.md +1 -1
  68. package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +4 -4
  69. package/skills/engineering/harness-runtime/references/model-catalog-seed.json +4 -4
  70. package/skills/engineering/resolve-issues/SKILL.md +1 -1
  71. package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +1 -1
  72. package/skills/engineering/resolve-release/SKILL.md +1 -1
  73. package/skills/engineering/rush-issues/SKILL.md +1 -1
  74. package/skills/engineering/rush-release/SKILL.md +1 -1
  75. package/skills/engineering/test-quality/SKILL.md +1 -1
  76. package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
  77. package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
  78. package/skills/risk-compliance/contract-review/SKILL.md +1 -1
  79. package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
  80. package/skills/risk-compliance/fraud-analysis/SKILL.md +1 -1
  81. package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
  82. package/skills/risk-compliance/report-writing/SKILL.md +1 -1
  83. package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
  84. package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: plain-language
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. Use for /plain-language, \"plain language mode\", \"talk plainly\", \"说人话\", or when the user's instructions say to use plain-language. Turn off with \"/plain-language off\" or \"normal mode\". NOT for writing a document (write-doc) or reviewing one (editorial-review)."
4
+ release-version: 0.39.0
5
+ ---
6
+ **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
+ # Plain language
8
+
9
+ Write every reply in this style for the rest of the session, including status lines and
10
+ summaries, until the user says `/plain-language off` or "normal mode". A switch to another
11
+ reply style (such as caveman) also ends it.
12
+
13
+ - Invoked with no other request: reply in one line that the mode is on. Otherwise do not
14
+ mention the mode; just answer in it.
15
+ - Invoked with `off`: reply in one line that the mode is off, and stop following this page.
16
+ - Code, commands, file paths, identifiers, error text and commit messages stay exact.
17
+ - Follow the section for the reply's language; a mixed reply follows both.
18
+
19
+ ## Every reply
20
+
21
+ - **Lead with the point.** The answer or recommendation first, then the reasons.
22
+ - **Cut every word that does no work.** No greeting, no restating the question, no recap
23
+ of what you just said.
24
+ - **Fit the length to the question.** A short question gets a short answer; add detail
25
+ only when the reader needs it to act.
26
+ - **Use the short everyday word.** Explain a needed technical term in a few words the first
27
+ time. Never leverage, robust, seamless, holistic, streamline, delve.
28
+ - **Name who does what.** "The script deletes the branch", not "the branch is deleted".
29
+ - **State findings plainly; hedge only real uncertainty, and say what it depends on.**
30
+ - **Write full sentences, not telegraphic notes.** Keep if, when, because and but.
31
+ Example: "It is 0 if there were no collections," not "0 when none."
32
+ - **Give every range its endpoints and say which are included.**
33
+ - **When "and" and "or" meet in one condition, group them.** Give each condition its subject.
34
+ - **Make every "it", "this" and "they" point to one obvious noun.**
35
+ - **Never add a number, date, condition or cause you do not have,** and never turn "may"
36
+ into "will".
37
+ - One thought per sentence; most sentences under 25 words.
38
+ - Between tool calls, write one plain sentence on what you are doing and why, or nothing.
39
+
40
+ ## 中文回复
41
+
42
+ - 先给结论,再给理由;不写问候式开场、宣传口号和空泛形容。
43
+ - 写完整的句子,不写电报体。示例:`若窗口内无收款,则为 0`,而不是 `无收款为 0`。
44
+ - 区间和阈值写明端点,并写明端点是否包含。
45
+ - 并列的条件逐个写全对象。示例:`客户已认证,且客户是个人或商户`,而不是 `客户是个人或商户且已认证`。
46
+ - 指代可能不清时,用具体名称替代「该」「其」「此」「上述」「相关」。
47
+ - 不用掩盖具体动作的词,改写为实际含义:赋能 → 提供;抓手 → 关键措施;对齐 → 统一、确认一致;拉通 / 打通 → 连接。
48
+ - 不用装饰性连接词:值得注意的是、不难看出、综上所述。
49
+ - 中文与英文、数字之间加一个半角空格。
50
+
51
+ ## When a rule makes a reply worse
52
+
53
+ Fix the sentence another way. Never shorten a warning, an irreversible step or an ordered
54
+ procedure to save words.
55
+
56
+ Full guides: [style-en](../house-style/references/style-en.md),
57
+ [style-zh](../house-style/references/style-zh.md) (from `house-style`, when installed).
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+
8
+ const DAY_MS = 24 * 60 * 60 * 1000;
9
+ const WEEK_MS = 7 * DAY_MS;
10
+ const here = dirname(fileURLToPath(import.meta.url));
11
+
12
+ function readJson(path, fallback = {}) {
13
+ try { return JSON.parse(readFileSync(path, 'utf8')); } catch { return fallback; }
14
+ }
15
+
16
+ function frontmatterValue(text, key) {
17
+ const frontmatter = /^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? '';
18
+ const match = new RegExp('^' + key + ':\\s*([^\\n]+)$', 'm').exec(frontmatter);
19
+ return match?.[1].trim().replace(/^['"]|['"]$/g, '') ?? null;
20
+ }
21
+
22
+ function repositoryOf(source) {
23
+ const value = String(source ?? '').trim();
24
+ const match = /^(?:git@github\.com:|https:\/\/github\.com\/)?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+?)(?:\.git)?$/.exec(value);
25
+ return match?.[1] ?? null;
26
+ }
27
+
28
+ function stableVersion(value) {
29
+ const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(String(value ?? '').trim());
30
+ return match ? match.slice(1).map(Number) : null;
31
+ }
32
+
33
+ function newer(left, right) {
34
+ for (let index = 0; index < 3; index += 1) {
35
+ if (left[index] !== right[index]) return left[index] > right[index];
36
+ }
37
+ return false;
38
+ }
39
+
40
+ function writeCache(path, value) {
41
+ try {
42
+ mkdirSync(dirname(path), { recursive: true });
43
+ writeFileSync(path, JSON.stringify(value));
44
+ } catch { /* A read-only cache must not block skill use. */ }
45
+ }
46
+
47
+ function main(now = Date.now()) {
48
+ if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
49
+ const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
50
+ const name = frontmatterValue(skill, 'name');
51
+ const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
52
+ if (!name || !localVersion) return;
53
+
54
+ const lock = readJson(join(process.env.HOME || homedir(), '.agents', '.skill-lock.json'));
55
+ const entry = lock.skills?.[name];
56
+ const repository = repositoryOf(entry?.sourceUrl || entry?.source);
57
+ if (!repository) return;
58
+
59
+ const cacheRoot = process.env.XDG_CACHE_HOME || join(process.env.HOME || homedir(), '.cache');
60
+ const cachePath = join(cacheRoot, '1aboveio-skills', 'release-check.json');
61
+ const all = readJson(cachePath);
62
+ const cache = all[repository] && typeof all[repository] === 'object' ? all[repository] : {};
63
+
64
+ if (!cache.lastCheck || now - cache.lastCheck >= DAY_MS) {
65
+ const result = spawnSync('gh', ['api', 'repos/' + repository + '/releases/latest', '--jq', '.tag_name'], {
66
+ encoding: 'utf8',
67
+ stdio: ['ignore', 'pipe', 'ignore'],
68
+ timeout: 1500,
69
+ });
70
+ cache.lastCheck = now;
71
+ if (result.status === 0 && stableVersion(result.stdout)) cache.latestTag = result.stdout.trim();
72
+ else delete cache.latestTag;
73
+ all[repository] = cache;
74
+ writeCache(cachePath, all);
75
+ }
76
+
77
+ const latestVersion = stableVersion(cache.latestTag);
78
+ if (!latestVersion || !newer(latestVersion, localVersion)) return;
79
+ if (cache.notifiedTag === cache.latestTag && cache.notifiedAt && now - cache.notifiedAt < WEEK_MS) return;
80
+
81
+ cache.notifiedTag = cache.latestTag;
82
+ cache.notifiedAt = now;
83
+ all[repository] = cache;
84
+ writeCache(cachePath, all);
85
+ const command = `npx skills@1.5.23 add '${repository}#${cache.latestTag}' --global --agent universal claude-code --skill ${name} --yes`;
86
+ process.stdout.write(
87
+ `UPDATE_AVAILABLE: A newer 1AboveIO skills release (${cache.latestTag}) is available; this skill is `
88
+ + `v${localVersion.join('.')}. Ask once whether to refresh ${name}. On approval run \`${command}\`. `
89
+ + 'The refreshed instructions apply next session. Either way, continue the current task and do not ask again this session.\n',
90
+ );
91
+ }
92
+
93
+ try { main(); } catch { /* Update checks are advisory and always fail silent. */ }
@@ -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)."
4
- release-version: 0.36.0
4
+ release-version: 0.39.0
5
5
  ---
6
6
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
7
  # Polish Chinese
@@ -29,7 +29,7 @@ Set the model in the call's structured model argument. A model name inside the p
29
29
  nothing.
30
30
 
31
31
  - **Pi:** start a subagent with the provider-qualified id from Pi's model catalog, such as
32
- `model: "deepseek/deepseek-v4-flash"`, and read-only tools.
32
+ `model: "deepseek/deepseek-flash"`, and read-only tools.
33
33
  - **Codex CLI**, with a Chinese provider configured in `~/.codex/config.toml`:
34
34
  `codex exec -m <model id> --sandbox read-only --ephemeral --skip-git-repo-check -o reply.txt "<brief and input>"`.
35
35
  Otherwise use option 2.
@@ -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), or writing the gap analysis or policy from the checklist (write-doc)."
5
- release-version: 0.36.0
5
+ release-version: 0.39.0
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 the code domain model (domain-modeling)."
4
- release-version: 0.36.0
4
+ release-version: 0.39.0
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 a Markdown document in the project's house style, using the nearest WRITING.md and a document template (BRD, PRD, gap analysis, technical spec, integration guide, commercial proposal, compliance policy, risk operations procedure, or the project's own); English, Chinese or bilingual. NOT for learning a style from samples (distill-writing), audit reports from findings (report-writing), or WeChat articles (wechat-article-writer)."
4
- release-version: 0.36.0
4
+ release-version: 0.39.0
5
5
  ---
6
6
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
7
  # Write a document
@@ -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.36.0
7
+ release-version: 0.39.0
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 standard: the 3-tier suite (render-health / functional / journey), generated route manifest, and presentation sweep. 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.36.0
4
+ release-version: 0.39.0
5
5
  ---
6
6
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
7
  # E2E Testing Standard
@@ -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.36.0
6
+ release-version: 0.39.0
7
7
  ---
8
8
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
9
9
  # Engineering Runtime
@@ -368,7 +368,7 @@
368
368
  "repository": "1aboveio/ai",
369
369
  "revision": "main"
370
370
  },
371
- "contentDigest": "65f5c1ea66766af0142b6dbb393ff78cbd0f76857a6a15f3d723a9a0e7781b5f",
371
+ "contentDigest": "2ab5f74d40dd23a789d969bb3a496093bb0c59e0779f93ab56520594f52263e8",
372
372
  "digestExcludes": []
373
373
  },
374
374
  {
@@ -381,7 +381,7 @@
381
381
  "repository": "1aboveio/ai",
382
382
  "revision": "main"
383
383
  },
384
- "contentDigest": "b9521718f15b2ca5a017985753636fa572afffa45fa2575781dc7df4c420b951",
384
+ "contentDigest": "c2dd5e6cbcb4fe7431ff9c76f64e3161a0542adadd3e1583b40ea9311e0325f2",
385
385
  "digestExcludes": []
386
386
  },
387
387
  {
@@ -394,7 +394,7 @@
394
394
  "repository": "1aboveio/ai",
395
395
  "revision": "main"
396
396
  },
397
- "contentDigest": "4ef4939700b85c5967d0e5a58a048362a811848ffece55127b721b067fa5f745",
397
+ "contentDigest": "3f03df4e4e13a0e7612a6e61f879d03f954262b71b38f4db0a74990c9d0207ef",
398
398
  "digestExcludes": []
399
399
  },
400
400
  {
@@ -407,7 +407,7 @@
407
407
  "repository": "1aboveio/ai",
408
408
  "revision": "main"
409
409
  },
410
- "contentDigest": "13c1a4ee34d6d6ab8e0a5f17cf2eb9b329f4bb5bb82c3b0779a69d114223ce6e",
410
+ "contentDigest": "1ac457031b530489676ef9cff0e2673bf128208ea71003c48538bdd3b8a6b52c",
411
411
  "digestExcludes": []
412
412
  },
413
413
  {
@@ -420,7 +420,7 @@
420
420
  "repository": "1aboveio/ai",
421
421
  "revision": "main"
422
422
  },
423
- "contentDigest": "f5eaad3c94aae6d1d0f8f73f8ba114960d3305251197639b32f0bfe281bd19de",
423
+ "contentDigest": "edecc0808b1a4e9942f7f9351a258cb55396119038133d93473f12e17c5f674d",
424
424
  "digestExcludes": []
425
425
  },
426
426
  {
@@ -433,7 +433,7 @@
433
433
  "repository": "1aboveio/ai",
434
434
  "revision": "main"
435
435
  },
436
- "contentDigest": "d56cd19cb929ae350cf27cfaf23d5ef657952f088b32462f2c7bcb1ec64938ef",
436
+ "contentDigest": "1bab372a4b5d1a94582aad5621244a88d440f883454dab36a78ba761dcc542f3",
437
437
  "digestExcludes": []
438
438
  },
439
439
  {
@@ -446,7 +446,7 @@
446
446
  "repository": "1aboveio/ai",
447
447
  "revision": "main"
448
448
  },
449
- "contentDigest": "ad6b8191d48dd87839f2d55bf9257fa0cd6dd42e6c794b4318c7f67e0d70eec8",
449
+ "contentDigest": "f3fdfb8a0fc271c89af97dc5ae181ffecb7ea14435f11defdcfe955cd18d3ba7",
450
450
  "digestExcludes": []
451
451
  },
452
452
  {
@@ -459,7 +459,7 @@
459
459
  "repository": "1aboveio/ai",
460
460
  "revision": "main"
461
461
  },
462
- "contentDigest": "87ffc2cee5960b54511e68b107e7606e4870b88d4708b7e8640d19581f864727",
462
+ "contentDigest": "1b2f489154398520dc81e3b900f7b602e29e3269dba41a458e61e83909d116c7",
463
463
  "digestExcludes": []
464
464
  },
465
465
  {
@@ -472,7 +472,7 @@
472
472
  "repository": "1aboveio/ai",
473
473
  "revision": "main"
474
474
  },
475
- "contentDigest": "4403cf6307c6be24dbaf599da80e9b1dd4b2fa88f07f5faae50b6cfa4f7ed9c7",
475
+ "contentDigest": "dc14758f5fcaad60dd9f51a7f28b43954d53d687d816034ca2cda39518b7323a",
476
476
  "digestExcludes": []
477
477
  },
478
478
  {
@@ -485,7 +485,7 @@
485
485
  "repository": "1aboveio/ai",
486
486
  "revision": "main"
487
487
  },
488
- "contentDigest": "4861516cb1e56b08b45598ce51420ac798c82048c131548501e7a1cae8334244",
488
+ "contentDigest": "78254999055badb626b2423046bc66704b8ebe324da83e9166242581b8d658f6",
489
489
  "digestExcludes": []
490
490
  },
491
491
  {
@@ -498,13 +498,13 @@
498
498
  "repository": "1aboveio/ai",
499
499
  "revision": "main"
500
500
  },
501
- "contentDigest": "05e84947b4ee2e6c0ef6d1821b025fda2bcccaa76119fbe0768f6e2380fc24eb",
501
+ "contentDigest": "b803a7a37fb23fa514dc5abee57244950248dc3a36d90480c785cca49a49332e",
502
502
  "digestExcludes": [
503
503
  "coherence/workflow.json"
504
504
  ]
505
505
  }
506
506
  ],
507
- "releaseIdentity": "c4adc38a256bef4923a461688b32c7aaae0660c937d010207ce766b8b042cc87",
507
+ "releaseIdentity": "d47473fb493e8ce0e8c44999c8f9dd9bad253087592ce0724d1391169bee2469",
508
508
  "lifecycleAuthority": "native-skills-cli",
509
509
  "repairRecipe": {
510
510
  "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.36.0
5
+ release-version: 0.39.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.36.0
6
+ release-version: 0.39.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.36.0
6
+ release-version: 0.39.0
7
7
  ---
8
8
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
9
9
  # Harness Runtime
@@ -252,13 +252,13 @@ test('the shipped seed keeps its remaining per-harness disagreements (not collap
252
252
  assert.ok(!grok47.ids.codex, 'codex holds no grok entry')
253
253
  assert.deepEqual(grok46.tiers.pi, { high: 'deep-reasoner' }, 'grok-4.7 does not re-tier grok-4.6')
254
254
 
255
- // deepseek-v4-flash moved 2026-08-13 from high:balanced-coder to max:balanced-coder.
255
+ // deepseek-flash moved 2026-08-13 from high:balanced-coder to max:balanced-coder.
256
256
  // The 55.4 figure previously cited as @high is the vendor max point (official board:
257
257
  // [max] 53%±4). Pinned so a silent restore of the high point has to be deliberate.
258
- const flash = seed.models.find((m) => m.canonical === 'deepseek-v4-flash')
259
- assert.ok(flash, 'seed must carry deepseek-v4-flash')
258
+ const flash = seed.models.find((m) => m.canonical === 'deepseek-flash')
259
+ assert.ok(flash, 'seed must carry deepseek-flash')
260
260
  for (const harness of ['claude-code', 'codex', 'pi']) {
261
- assert.deepEqual(flash.tiers[harness], { max: 'balanced-coder' }, `deepseek-v4-flash@${harness}`)
261
+ assert.deepEqual(flash.tiers[harness], { max: 'balanced-coder' }, `deepseek-flash@${harness}`)
262
262
  }
263
263
 
264
264
  // DeepSWE measured luna at high (44.2%±2.9), so its higher-effort results are not
@@ -315,12 +315,12 @@
315
315
  "note": "Agrees across both harnesses it is seeded from: deep-reasoner at max. CHANGED 2026-08-13: 0813 GA replaced the 2026-08-01 preview classification (claude-code high:scoped-coder, pi high:balanced-coder — that disagreement is now historical). BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 62.7 — DeepSeek V4 Pro 0813 Agent comparison table, 2026-08-12/13. BenchLM cites the same 62.7 as DeepSeek V4 Pro (Max); no CI, and DeepSeek did not publish a high-effort DeepSWE number for 0813. Banked at MAX because that is the only published operating point, so it is the model's pushed point, not a throttled seat (same posture as kimi-k3). Do NOT read 62.7 down onto high — measured max→high drops on this board have run 1 to 23 points, and a high point is unclaimed until someone measures it. Like-for-like against the official board's max/xhigh cluster: luna@max 67±4 (balanced-coder at max after the 2026-08-08 reband), gpt-5.5@xhigh 67±6 (deep-reasoner), opus-4.8@max 59±2 (deep-reasoner). 62.7 sits with that deep-reasoner band and above flash's official max 53±4 / vendor 54.4, so the name ordering now tracks the evidence (flash is now also banked at max: 53%±4 official / 54.4 vendor, balanced-coder). Not on the official DeepSWE v1.1 board (last updated 2026-08-07, 21 models) — vendor number, not an independent Datacurve run. No high point is claimed; do not restore the preview high bands from this score."
316
316
  },
317
317
  {
318
- "canonical": "deepseek-v4-flash",
318
+ "canonical": "deepseek-flash",
319
319
  "family": "deepseek",
320
320
  "ids": {
321
- "claude-code": "deepseek-v4-flash",
322
- "codex": "deepseek-v4-flash",
323
- "pi": "deepseek/deepseek-v4-flash"
321
+ "claude-code": "deepseek-flash",
322
+ "codex": "deepseek-flash",
323
+ "pi": "deepseek/deepseek-flash"
324
324
  },
325
325
  "tiers": {
326
326
  "claude-code": {
@@ -8,7 +8,7 @@ dependencies:
8
8
  - better-review
9
9
  - golden-path
10
10
  - harness-runtime
11
- release-version: 0.36.0
11
+ release-version: 0.39.0
12
12
  ---
13
13
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
14
14
  # Resolve issues
@@ -197,7 +197,7 @@ test('the ask lists the discovered ladder rungs first, in ladder order, before o
197
197
  ...points,
198
198
  { id: 'deepseek/deepseek-v4-pro', effort: 'max', tier: 'deep-reasoner', family: 'deepseek', key: 'deepseek/deepseek-v4-pro@max' },
199
199
  { id: 'kimi-coding/k3', effort: 'high', tier: 'deep-reasoner', family: 'kimi', key: 'kimi-coding/k3@high' },
200
- { id: 'deepseek/deepseek-v4-flash', effort: 'max', tier: 'balanced-coder', family: 'deepseek', key: 'deepseek/deepseek-v4-flash@max' },
200
+ { id: 'deepseek/deepseek-flash', effort: 'max', tier: 'balanced-coder', family: 'deepseek', key: 'deepseek/deepseek-flash@max' },
201
201
  ]
202
202
  const high = recommendImplementer(many, 'high', 'pi')
203
203
  const highAsk = buildAsk(many.find((p) => p.key === high.key), many, rankReviewers(many, high, 'pi'), { risk: 'high', harness: 'pi' })
@@ -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.36.0
7
+ release-version: 0.39.0
8
8
  ---
9
9
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
10
10
  # Resolve release
@@ -6,7 +6,7 @@ metadata:
6
6
  workflow-role: coordinator
7
7
  dependencies:
8
8
  - resolve-issues
9
- release-version: 0.36.0
9
+ release-version: 0.39.0
10
10
  ---
11
11
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
12
12
  # Rush issues (shortcut of resolve-issues)
@@ -6,7 +6,7 @@ metadata:
6
6
  workflow-role: coordinator
7
7
  dependencies:
8
8
  - resolve-release
9
- release-version: 0.36.0
9
+ release-version: 0.39.0
10
10
  ---
11
11
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
12
12
  # Rush release (shortcut of 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.36.0
4
+ release-version: 0.39.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.36.0
5
+ release-version: 0.39.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.36.0
4
+ release-version: 0.39.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.36.0
4
+ release-version: 0.39.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.36.0
6
+ release-version: 0.39.0
7
7
  ---
8
8
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
9
9
  # Document and Image Authenticity
@@ -10,7 +10,7 @@ description: >
10
10
  impact, and a business report. Use for fraud, scam, mule, account-takeover,
11
11
  chargeback, dispute, transfer, collection, or payout risk analysis even when the
12
12
  user does not name this skill.
13
- release-version: 0.36.0
13
+ release-version: 0.39.0
14
14
  ---
15
15
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
16
16
  # Fraud Analysis
@@ -14,7 +14,7 @@ description: >
14
14
  transactions" — even if they do not say payment-analysis. Do NOT use for
15
15
  supervised fraud-rule mining (fraud-analysis) or TLD / MCC-miscoding
16
16
  clusters (tld-detection).
17
- release-version: 0.36.0
17
+ release-version: 0.39.0
18
18
  ---
19
19
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
20
20
  # Payment Analysis
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: report-writing
3
3
  description: "Convert compliance audit findings into audience-formatted reports. Four styles: VARS Review Report (Visa's official 2025 template, required verbatim for VARS engagements), Audit Report (compliance team), External Assessment (regulators/external auditors), Management Report (board/C-suite). Use whenever audit output needs to become a deliverable, even just 'write up the findings'."
4
- release-version: 0.36.0
4
+ release-version: 0.39.0
5
5
  ---
6
6
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
7
  # Report Writing
@@ -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-analysis).
10
10
  disable-model-invocation: true
11
- release-version: 0.36.0
11
+ release-version: 0.39.0
12
12
  ---
13
13
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
14
14
  # Similar Domain
@@ -11,7 +11,7 @@ description: >
11
11
  with a ≤3-sentence summary.
12
12
  Not payment-analysis, fraud-analysis, or website research (similar-domain).
13
13
  disable-model-invocation: true
14
- release-version: 0.36.0
14
+ release-version: 0.39.0
15
15
  ---
16
16
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
17
17
  # TLD Detection