@mrciphersmith/keryx 0.2.98 → 0.2.99

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 (182) hide show
  1. package/dist/cli.js +4057 -2510
  2. package/dist/core.js +39 -1
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  5. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  6. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +101 -11
  7. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  8. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  9. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +19 -3
  10. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +20 -4
  11. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +32 -9
  12. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +18 -4
  13. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +21 -5
  14. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +4 -4
  15. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  16. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +42 -2
  17. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +23 -9
  18. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +33 -31
  19. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  20. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  21. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  22. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  23. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  24. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  25. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  26. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +28 -3
  27. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  28. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  29. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  30. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  31. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  32. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +29 -7
  33. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +32 -6
  34. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  35. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  36. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  37. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  38. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  39. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  40. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +20 -3
  41. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  42. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  43. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  47. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  48. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  49. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  50. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  51. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  52. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  53. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  54. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +26 -2
  55. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +28 -3
  56. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  57. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +24 -4
  58. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +24 -3
  59. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +24 -3
  60. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +25 -4
  61. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +26 -3
  62. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  63. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  64. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  65. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +29 -8
  66. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +24 -4
  67. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +25 -2
  68. package/src/gdskills/bundled/skills/quality/push/SKILL.md +24 -3
  69. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  70. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  71. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +24 -3
  72. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +17 -2
  73. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +40 -5
  74. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +41 -1
  75. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +44 -2
  76. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +44 -4
  77. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +3 -3
  78. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +2 -3
  79. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +4 -4
  80. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +36 -2
  81. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +37 -3
  82. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -4
  83. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +36 -2
  84. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +3 -5
  85. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +23 -2
  86. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +3 -3
  87. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +9 -29
  88. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +9 -9
  89. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +3 -2
  90. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  91. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +4 -2
  92. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +2 -2
  93. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +40 -2
  94. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  95. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -330
  96. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -330
  97. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -330
  98. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -330
  99. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  100. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  101. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  102. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  103. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -424
  104. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -424
  105. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -424
  106. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -424
  107. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  108. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  109. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  110. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  111. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  112. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  113. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  114. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  115. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  116. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  117. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2232
  118. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2232
  119. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2232
  120. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2232
  121. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -668
  122. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -668
  123. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -668
  124. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -668
  125. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  126. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  127. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  128. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  129. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  130. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  131. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  132. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  133. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  134. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  135. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  136. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  137. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  138. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  139. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  140. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  141. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  142. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  143. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  144. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  145. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  146. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  147. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  148. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  149. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  150. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  151. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  152. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  153. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  154. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  155. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  156. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  157. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  158. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  159. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  160. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  161. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -80
  162. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -80
  163. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -345
  164. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -345
  165. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -345
  166. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -345
  167. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  168. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  169. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  170. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  171. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  172. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  173. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  174. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  175. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  176. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  177. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  178. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  179. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  180. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  181. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  182. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: api-truth
3
+ model_tier: deep
4
+ description: |
5
+ Use when code is about to call a dependency nobody has read today — a client
6
+ method, an option object, a config key, a CLI flag — and the only thing
7
+ vouching for the signature is somebody's recollection of it. Recollection has
8
+ a cutoff date; the version resolved in this project does not. Settles what
9
+ "checked" means: the version actually installed here rather than the newest
10
+ one, the artefacts that carry it in rank order, and which side wins when the
11
+ published documentation and the installed build disagree. Every call that went
12
+ out unchecked is MARKED as unchecked, so a later reader can tell a verified
13
+ signature from a remembered one.
14
+ NOT for: moving a project onto newer releases of the packages it already has,
15
+ and NOT for picking which library or architectural pattern to adopt before
16
+ anything is installed.
17
+ triggers:
18
+ - "check this against the installed version"
19
+ - "is that still the API"
20
+ - "did you make that signature up"
21
+ - "which version do we actually have"
22
+ - "look up the real API"
23
+ metadata:
24
+ author: "MrCipherSmith"
25
+ version: "1.0.0"
26
+ category: "quality"
27
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
28
+ license: "MIT"
29
+ ---
30
+
31
+ # API Truth
32
+
33
+ A remembered API call is a claim about a version. The claim is usually right,
34
+ which is the problem: it fails quietly, in the small fraction of cases where the
35
+ library moved, and it fails in the worst possible way — the code compiles, the
36
+ option object accepts the unknown key and ignores it, and nothing surfaces until
37
+ production or never.
38
+
39
+ Model weights have a cutoff date. A dependency does not. The gap between them
40
+ grows every day the project is alive, and no signal inside the editor announces
41
+ it.
42
+
43
+ This skill is not "look things up". Looking things up on every call is a rule
44
+ agents follow twice and abandon. It is four decisions: **when** the check is
45
+ worth its cost, **which version** counts as the truth, **what** counts as a
46
+ source, and **how** the unchecked calls are marked so somebody downstream can
47
+ see them.
48
+
49
+ ---
50
+
51
+ ## 1. The version is the one installed here, not the latest
52
+
53
+ "I checked the docs" means nothing until it names a version. The default failure
54
+ is checking the current documentation of a library this project pinned eighteen
55
+ months ago — same defect as recollection, with a citation attached.
56
+
57
+ Three different numbers exist, and only one of them runs:
58
+
59
+ | Number | Where | What it is |
60
+ |---|---|---|
61
+ | The range | `package.json` / `pyproject.toml` / `go.mod` | What the project will *accept*. Not a version. |
62
+ | The resolved version | `bun.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `poetry.lock`, `Cargo.lock`, `go.sum` | What a fresh install produces. |
63
+ | The installed version | `node_modules/<pkg>/package.json` → `"version"`; `pip show <pkg>`; `cargo tree -p <pkg>` | What is on disk and executing **now**. |
64
+
65
+ Read the third. When the third and the second disagree, the tree is stale and
66
+ that is itself worth reporting — a call verified against a stale tree is
67
+ verified against nothing anyone else has.
68
+
69
+ For a transitive dependency, the version your direct dependency pulls is often
70
+ not the version at the top level. Resolve the one on the actual path.
71
+
72
+ ## 2. When the check is worth paying for
73
+
74
+ A skill that says *always verify everything* is ignored by the third task. The
75
+ cost is real, so spend it where the failure is silent.
76
+
77
+ **Check before writing the call when any of these hold:**
78
+
79
+ - The symbol is not visible in types you can see — an untyped package, a config
80
+ object typed `Record<string, unknown>`, a CLI flag, an HTTP endpoint, a
81
+ template convention. Nothing will catch you.
82
+ - The option is a **key in a bag**. Unknown keys in option objects, YAML, and
83
+ env-var maps are ignored in silence; a typo and a removed option are
84
+ indistinguishable from working code.
85
+ - The call has an effect you cannot see locally — a write, a payment, an auth
86
+ decision, a migration, a cache invalidation, a webhook.
87
+ - You know a major version boundary sits between your recollection and the
88
+ installed number, or you cannot say which side of one you are on.
89
+ - Defaults matter to the behaviour you promised. Defaults change in *minor*
90
+ releases more often than signatures do, and no compiler mentions it.
91
+
92
+ **Do not pay for it when:**
93
+
94
+ - The call is typed and the type-checker runs on it. A strict `tsc --noEmit`
95
+ against the package's own shipped `.d.ts` **is** a check against the installed
96
+ version, performed by a machine, for free — that is §3's rank 1 already done.
97
+ - A test you watched fail and then pass exercises this exact call path.
98
+ - You read this same symbol, at this same version, earlier in this session.
99
+ Record it once; do not re-fetch per call site.
100
+ - It is the language or runtime standard library at a version the toolchain
101
+ already pins.
102
+
103
+ Everything outside both lists is a judgement call, and the tiebreaker is: how
104
+ long would this defect stay invisible? Loud and immediate — write it and let the
105
+ failure teach you. Silent — check first.
106
+
107
+ ## 3. What counts as a source, in rank order
108
+
109
+ 1. **The installed artefact itself** — the `.d.ts` beside the package, the
110
+ `node_modules` source, `inspect.signature`, the binary's `--help`. It cannot
111
+ be at the wrong version, because it *is* the version. Highest rank, and
112
+ usually the fastest to reach.
113
+ 2. **The package's own documentation, pinned to the installed version** — the
114
+ docs for the exact version installed, reached by whichever of these the
115
+ environment actually has. None of them ships with this skill or is installed
116
+ for you; check what is there before you reach for one:
117
+
118
+ - A versioned docs URL, or the repository at the tag matching that version.
119
+ - A docs-retrieval tool, where one is configured — a `ctx7`-style MCP server,
120
+ or `npx ctx7@latest library "Library Name" "<the actual question>"` then
121
+ `npx ctx7@latest docs /org/project/<installed-version> "<the question>"` if
122
+ that CLI is reachable. Official spelling ("Next.js", not "nextjs"), the real
123
+ question rather than one word, three commands of budget, no credentials.
124
+ - With neither, the docs shipped *inside* the installed artefact — its README,
125
+ its `docs/`, the binary's long help — pinned by construction. If that is
126
+ empty too, rank 2 is unavailable here: say so and rely on rank 1.
127
+ 3. **The package's own documentation, unpinned** — acceptable only after you
128
+ state the gap between it and the installed version, and treat everything it
129
+ says as provisional across that gap.
130
+ 4. **The changelog or migration guide**, for the narrow question of *what
131
+ changed between two versions you have named*. Not for what the API is now.
132
+ 5. **A blog post, a forum answer, another project's code, and your own
133
+ recollection** — all the same rank, which is *hypothesis*. They are worth
134
+ something: they tell you what to go and look at in ranks 1–3. They are worth
135
+ nothing as evidence, and a citation of one is not a check.
136
+
137
+ ## 4. When the documentation and the installed build disagree
138
+
139
+ This is common, and it is the point where a careless agent picks the wrong side.
140
+
141
+ **The installed artefact wins.** Documentation describes a version, usually the
142
+ newest; `node_modules` is what executes. If the docs show an option the types do
143
+ not have, the option does not exist here.
144
+
145
+ The disagreement is not noise to route around — it is a finding, and it has to
146
+ be named before you carry on:
147
+
148
+ - Say which version the docs were at and which is installed. Nine times out of
149
+ ten the gap explains the disagreement, and now the next person does not
150
+ re-derive it.
151
+ - Same version, still disagreeing? Then the docs are wrong, or you are reading a
152
+ different export path, or a patch/override is rewriting the package. Check the
153
+ path before concluding the docs are wrong.
154
+ - Never split the difference by writing the documented call and adding a
155
+ fallback for the installed one. Two paths, one of which has never run, is a
156
+ larger defect than the one you were avoiding.
157
+ - If the behaviour you need exists only in the documented version, that is an
158
+ upgrade decision and it belongs to whoever owns the dependency — say so, and
159
+ do not smuggle the bump in beside the feature.
160
+
161
+ ## 5. Marking what was not verified
162
+
163
+ This is the part that survives into review, and the part agents skip.
164
+
165
+ A checked call and a remembered call look identical in a diff. Unless the
166
+ difference is written down, the reviewer inherits a file where every line
167
+ carries the same implied confidence, and the one guess is camouflaged by forty
168
+ facts around it.
169
+
170
+ At the call site, on anything that went out unchecked:
171
+
172
+ ```
173
+ // unverified: <symbol> against <pkg>@<version> — from recollection,
174
+ // settle with: <the command or file that would settle it>
175
+ ```
176
+
177
+ In the report or PR body, a short section that lists them: the symbol, the
178
+ package and version, why the check was skipped (§2), and the one observation
179
+ that would close it. An empty list is a fine result and should be stated as
180
+ empty rather than omitted.
181
+
182
+ And the converse, which is the cheaper half: when you *did* check, say against
183
+ what. "Verified against `@aws-sdk/client-s3@3.620.0` types" is a sentence a
184
+ reviewer can re-run. "I checked the docs" is not.
185
+
186
+ Never mark a call verified on the strength of rank 5.
187
+
188
+ ## Red Flags
189
+
190
+ | Rationalization | Why it is wrong |
191
+ |---|---|
192
+ | "It compiled, so the API is right." | Compilation proves the shape the *types* declare, and the silent failures live where types do not reach: unknown keys in an option bag, a string enum the library parses at runtime, a config file, a CLI flag. Those compile perfectly and do nothing. |
193
+ | "I read the library's documentation, so this is checked." | Not until the version is named. The docs site serves the newest release; this project resolves whatever the lockfile says. An unversioned citation is a remembered call with a footnote — the same defect, harder to spot. |
194
+ | "`package.json` says `^4.2.0`, so we are on 4.x." | That is the range the project accepts, not the build that is running. Read `node_modules/<pkg>/package.json`, and when it disagrees with the lockfile, say so — the tree is stale and nobody else's is like it. |
195
+ | "The docs show this option but the types do not, so the types are out of date." | Backwards nearly every time. The types ship inside the installed package; the docs describe some version, usually a newer one. The artefact on disk is what executes — name the gap instead of overriding it. |
196
+ | "I will write the documented call and add a fallback for the old signature." | You have shipped two branches and exercised one. The dead branch is never run, never tested and wrong in a way nobody discovers, and you took on that debt to avoid reading one file. |
197
+ | "This is a well-known library, I have used it a hundred times." | Familiarity is the exposure, not the protection. The APIs recalled most confidently are the ones learned longest ago, so recollection is most stale exactly where it feels safest, and confident wrong calls skip their own review. |
198
+ | "A blog post shows this exact pattern working." | It worked, at some version, on some day, for somebody whose lockfile you cannot see. That makes it a lead worth thirty seconds against the installed types — it does not make it evidence, and citing it does not turn a guess into a check. |
199
+ | "Checking every call would take all day, so I checked none." | The list is not every call. It is the ones whose failure is silent — option bags, untyped surfaces, effects you cannot observe locally, changed defaults. Typed calls under a type-check are already verified; that is most of them. |
200
+ | "I was not sure about two of these, but the rest are solid." | Then the two are invisible, because a diff shows no difference between them and the forty around them. Mark them at the call site with what would settle them, or the reviewer's only options are re-check everything or trust everything. |
201
+
202
+ ## Verification
203
+
204
+ Do not report the work as done until all of these hold:
205
+
206
+ - Every dependency call this change introduced is either verified against a
207
+ named source at a named version, or carries an `unverified:` marker at the
208
+ call site.
209
+ - Each version named is the one installed on disk — read from the package's own
210
+ installed metadata, not from a manifest range — and any disagreement with the
211
+ lockfile is reported.
212
+ - Every check cites its rank (§3): which artefact or versioned document, not
213
+ "the docs". No call is reported as verified on rank 5 alone.
214
+ - Where documentation and the installed build disagreed, the report says which
215
+ versions were compared, which side was followed, and why — and no call site
216
+ branches across both.
217
+ - The report carries the unverified list — symbol, package, version, reason the
218
+ check was skipped, and the observation that would close it — stated as empty
219
+ when it is empty.
220
+ - Any needed behaviour that exists only in a newer release is written up as an
221
+ upgrade decision for the dependency's owner, and no version was bumped inside
222
+ this change to obtain it.
223
+
224
+ Credit: [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills)
225
+ (MIT) is where the pairing comes from — check the dependency before calling it,
226
+ and mark what went out unchecked. The ranks and the version rule are ours.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: changelog
3
- description: "Use when generating a changelog, release notes, or summarizing what changed between tags, versions, or date ranges."
3
+ description: "Use when generating a changelog, release notes, or summarizing what changed between tags, versions, or date ranges. NOT for describing a single pull request or its linked issue (use `pr-issue-documenter`)."
4
4
  triggers:
5
- - "/changelog"
6
- - "Generate changelog"
5
+ - "generate changelog"
6
+ - "release notes"
7
+ - "what changed"
7
8
  - "What changed since"
8
- - "Release notes"
9
9
  - "What's new"
10
10
  metadata:
11
11
  author: "MrCipherSmith"
@@ -82,3 +82,23 @@ If `gh` CLI available: fetch PR titles for merge commits, get authors and labels
82
82
  - If no conventional commits found, fall back to plain list by date
83
83
  - Breaking changes always go first
84
84
  - One line per change
85
+
86
+ ## Red Flags
87
+
88
+ | Rationalization | Why it is wrong |
89
+ |---|---|
90
+ | "This commit has no `feat:`/`fix:` prefix, but it reads like a feature — I'll file it under Features" | Classification comes from the commit's own prefix. Guessing a section invents a release note nobody wrote. Unprefixed commits go to the plain dated fallback list |
91
+ | "The subject is terse, so I'll describe what the change probably did" | You read the log, not the diff. A changelog entry that states an effect the commit never claimed is a false release note that ships to users |
92
+ | "No tag matches the range, so I'll start from the first commit" | That silently turns "since last release" into the project's whole history. State the range you could not resolve and ask, rather than emitting a thousand-line changelog |
93
+ | "The merge commit summarizes the branch nicely, keep it alongside the branch's commits" | It double-counts: the merge subject and the commits underneath describe the same work. Use the PR title, drop the merge |
94
+ | "The type is `fix:` so it belongs in Bug Fixes, even though the body says BREAKING CHANGE" | `BREAKING CHANGE` outranks the type prefix. A breaking change filed under Bug Fixes is the entry a reader upgrades past without noticing |
95
+
96
+ ## Verification
97
+
98
+ Do not report the changelog as done until all of the following hold:
99
+
100
+ - The range actually used (tag-to-tag, tag-to-HEAD, or `--since` date) is stated in the output, including when it was a fallback
101
+ - Every commit in `git log <range> --oneline` is either an entry or a deliberate skip (merge commit, exact duplicate) — none dropped silently
102
+ - No section header is emitted with zero entries under it
103
+ - Breaking Changes, when present, is the first section
104
+ - With `--output` / `--prepend`: the target file exists, the pre-existing content is still intact, and the new block sits at the top rather than replacing it
@@ -1,9 +1,10 @@
1
1
  ---
2
2
  name: commit
3
- description: "Use when committing code changes and a well-structured conventional commit message is needed, with optional amend or selective staging."
3
+ description: "Use when committing code changes and a well-structured conventional commit message is needed, with optional amend or selective staging. NOT for publishing the branch to the remote (use `push`) or opening a pull request (use `pr`)."
4
4
  triggers:
5
- - "/commit"
6
- - "Commit changes"
5
+ - "commit changes"
6
+ - "git commit"
7
+ - "conventional commit"
7
8
  - "Commit this"
8
9
  - "Save changes"
9
10
  metadata:
@@ -64,3 +65,23 @@ Show the result: `git log --oneline -1` and `git status`
64
65
  - NEVER add Co-Authored-By lines
65
66
  - If pre-commit hook fails: fix the issue, re-stage, create a NEW commit (don't amend)
66
67
  - Follow existing commit message conventions in the repository
68
+
69
+ ## Red Flags
70
+
71
+ | Rationalization | Why it is wrong |
72
+ |---|---|
73
+ | "Everything in the tree is my work, so staging it all is faster" | It is not all your work. A parallel agent, a running lane, or a half-finished edit of the user's rides along invisibly. Never stage by wildcard — list explicit pathspecs |
74
+ | "The pre-commit hook failed on a file I didn't touch, `--no-verify` gets me past it" | The hook is the repository's gate, not an obstacle to route around. Fix the issue, re-stage, commit again |
75
+ | "The last commit is mine and close enough — I'll amend it" | Amend only when the user explicitly asked. Amending a commit that is already pushed rewrites history someone else has fetched |
76
+ | "The diff shows what happened, so `chore: updates` is enough" | The subject line is all a `git log` reader gets. Name the change and its scope in under 72 chars |
77
+ | "The user is out of the loop on this untracked file, but it looks like mine" | Untracked files that look unrelated to recent work get a question, not a guess — that is how an `.env` or a scratch dump gets committed |
78
+
79
+ ## Verification
80
+
81
+ Do not report the commit as done until all of the following hold:
82
+
83
+ - `git log --oneline -1` shows the new commit, subject in `<type>(<scope>): <description>` form and under 72 chars
84
+ - `git show --stat HEAD` lists exactly the intended files — no `.env`, credential, key, or large binary file
85
+ - `git status` shows nothing else newly staged that you did not mean to include
86
+ - `git show HEAD` carries no `Co-Authored-By` or generated-by trailer
87
+ - Hooks ran — no `--no-verify` was passed; if a hook failed, a NEW commit exists rather than an amend
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: db-migrate
3
- description: "Use when creating, applying, rolling back, or checking the status of database migrations."
3
+ description: "Use when creating, applying, rolling back, or checking the status of database migrations. NOT for shipping the application release that carries the migration (use `deploy`)."
4
4
  triggers:
5
- - "/db-migrate"
5
+ - "database migration"
6
+ - "db migrate"
7
+ - "migration status"
6
8
  - "Create migration"
7
9
  - "Run migrations"
8
- - "Migration status"
9
10
  - "Rollback migration"
10
11
  metadata:
11
12
  author: "MrCipherSmith"
@@ -64,3 +65,23 @@ Search for: `prisma/schema.prisma`, `ormconfig.*`, `data-source.ts`, `knexfile.*
64
65
  - NEVER apply to production without explicit confirmation
65
66
  - For destructive operations (drop table, remove column), double-warn
66
67
  - If ORM can't be detected, ask the user
68
+
69
+ ## Red Flags
70
+
71
+ | Rationalization | Why it is wrong |
72
+ |---|---|
73
+ | "The ORM autogenerated it, so the SQL must be correct" | Autogenerate routinely emits drop-and-recreate for a change that could have been an in-place alter. The generated file is a draft to read, not an answer to trust |
74
+ | "It's only the dev database, no need to show the SQL first" | The same file is what runs against production later. The preview is the one moment the destructive statement can still be caught, and skipping it in dev means nobody ever read it |
75
+ | "A rollback is unlikely, so an empty `down` is fine" | An empty `down` is worse than a missing one: the rollback reports success while changing nothing, and the schema silently stays ahead of the code |
76
+ | "Two migration tools are configured; I'll use the one I know" | Each tool keeps its own history table. Picking the wrong one writes a migration the project's real tool will never see and cannot roll back. Ask which is authoritative |
77
+ | "`prisma migrate dev` is the standard create command, just run it" | On a database with any drift it offers to reset — i.e. drop the data. Know what the create command does to an existing database before pointing it at one |
78
+
79
+ ## Verification
80
+
81
+ Do not report the migration as done until all of the following hold:
82
+
83
+ - The status command shows the intended migration in the intended state (applied, or pending for `create`), and no other migration changed state
84
+ - The migration file carries both directions (up and down, or the ORM's equivalent) and the down path was read, not assumed
85
+ - Any destructive statement (`DROP`, `ALTER … DROP`, `TRUNCATE`, a column removal) was shown to the user and confirmed in this conversation before it ran
86
+ - The report names the detected tool, the migration name/id, and the environment the command ran against
87
+ - For a production target: an explicit confirmation exists in this conversation, and the SQL preview preceded it
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: dependency-update
3
- description: "Use when checking for outdated packages or upgrading dependencies with compatibility verification."
3
+ description: "Use when checking for outdated packages or upgrading dependencies with compatibility verification. NOT for finding which packages are vulnerable in the first place (use `security-audit`)."
4
4
  triggers:
5
- - "/dependency-update"
6
- - "Update dependencies"
7
- - "Upgrade packages"
5
+ - "update dependencies"
6
+ - "upgrade packages"
7
+ - "bump deps"
8
8
  - "Check outdated"
9
9
  - "Update npm packages"
10
10
  metadata:
@@ -79,3 +79,24 @@ npm run lint && npx tsc --noEmit && npm test && npm run build
79
79
  - Commit each group separately
80
80
  - Respect pinned versions
81
81
  - Check peer dependency warnings
82
+
83
+ ## Red Flags
84
+
85
+ | Rationalization | Why it is wrong |
86
+ |---|---|
87
+ | "The suite passes with all of them installed, so batching the majors saved five rounds" | When it breaks you cannot tell which major did it, and bisecting a batch costs more than the rounds you saved. Majors go one at a time, tests after each (Step 4) |
88
+ | "Tests broke after the major bump — I'll migrate the call sites while I'm here" | Two fix attempts, then rollback. An open-ended API migration is a separate task with its own review; smuggling it into a dependency bump hides it from everyone |
89
+ | "This version is pinned, but the pin looks stale" | A pin is a decision someone made, usually about a break you cannot see from `npm outdated`. Report it as pinned and let the user unpin it |
90
+ | "`npm outdated` printed nothing, so the project is up to date" | It prints nothing when the lockfile belongs to a different package manager. Detect from the lockfile (`bun.lock`, `pnpm-lock.yaml`, `yarn.lock`) before concluding "current" |
91
+ | "Peer dependency warnings are warnings, not errors" | They are the standard cause of the runtime failure that shows up two commits later, in something that was never touched. Carry them into the report |
92
+ | "One commit for the whole update is tidier than three" | It makes the one bad package unrevertable without dropping the good ones. Commit per risk group, as Step 4 specifies |
93
+
94
+ ## Exit Criteria
95
+
96
+ Do not report the update as done until all of the following hold:
97
+
98
+ - `npm run lint && npx tsc --noEmit && npm test && npm run build` — or the project's own equivalents — all pass on the final tree
99
+ - Every major was applied and tested on its own, with its own commit; no major shares a commit with another
100
+ - Every package the plan proposed is accounted for in the report as updated, skipped (with the reason), or rolled back
101
+ - `git status` is clean and the lockfile is committed alongside the manifest it belongs to
102
+ - Pinned versions are unchanged, and peer dependency warnings that appeared are listed in the report
@@ -1,8 +1,11 @@
1
1
  ---
2
2
  name: deploy
3
- description: "Use when deploying to any environment (staging, production) or when a deployment pipeline needs to run."
3
+ description: "Use when deploying to any environment (staging, production) or when a deployment pipeline needs to run. NOT for the database schema changes a release depends on (use `db-migrate`)."
4
4
  triggers:
5
- - "/deploy"
5
+ - "deploy"
6
+ - "deployment"
7
+ - "ship"
8
+ - "release"
6
9
  - "Deploy to"
7
10
  - "Push to production"
8
11
  - "Deploy staging"
@@ -41,7 +44,7 @@ Run in parallel where possible:
41
44
  2. **Branch check**: correct branch for target env (production → main/master)
42
45
  3. **Tests**: `npm test` / `pytest` / `go test ./...` (skip with `--skip-tests`)
43
46
  4. **Lint**: `npm run lint` if available
44
- 5. **Type-check**: `npx tsc --noEmit` if TypeScript
47
+ 5. **Type-check**: `keryx health run --source typescript` if TypeScript (`src/health/sources/typescript.ts` resolves the real invocation, never a hardcoded `npx tsc`; on a project with no keryx health config, fall back to its own configured type-check command)
45
48
  6. **Build**: `npm run build` / `docker build`
46
49
 
47
50
  If any check fails → stop and report.
@@ -68,3 +71,23 @@ If any check fails → stop and report.
68
71
  - NEVER deploy from dirty working tree without warning
69
72
  - Show summary before deploying: branch, env, target, version
70
73
  - If deploy target can't be detected, ask the user
74
+
75
+ ## Red Flags
76
+
77
+ | Rationalization | Why it is wrong |
78
+ |---|---|
79
+ | "That test is flaky, `--skip-tests` just this once" | `--skip-tests` is a flag the user passes, never one you add. Report the failing test and let them decide whether it is flaky — from inside the run you cannot tell flaky from newly broken |
80
+ | "The tree is dirty, but only with files unrelated to the deploy" | A deploy from a dirty tree ships an artifact that matches no commit, so it cannot be reproduced, diffed, or rolled back to a known state. Warn, and get an answer before proceeding |
81
+ | "The user said 'ship it', so production is confirmed" | Production takes a confirmation that names production. "Ship it" is how a staging deploy gets requested at least as often |
82
+ | "The deploy command exited 0 — done" | Exit 0 means the command ran, not that the process came up. Health-check the endpoint and read the startup logs before reporting success (Phase 4) |
83
+ | "I can't tell the target for certain, but `vercel.json` is here so Vercel is a fair bet" | A guessed deploy target deploys to a real environment. When detection is ambiguous, ask — the cost of the question is one message, the cost of the guess is an unplanned release |
84
+
85
+ ## Exit Criteria
86
+
87
+ Do not report the deploy as done until all of the following hold:
88
+
89
+ - Every Phase 2 pre-flight check either passed or was skipped by a flag the user passed — none skipped on your own judgment
90
+ - For a production target: an explicit confirmation naming production exists in this conversation, and the summary (branch, env, target, version) preceded it
91
+ - The health endpoint responded successfully after the deploy, and the startup logs show no errors
92
+ - The report states the environment, the detected target, the deployed version/commit, and the result of the health check
93
+ - For `--dry-run`: nothing was executed — the report shows only what would have run