@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.
- package/dist/cli.js +4057 -2510
- package/dist/core.js +39 -1
- package/package.json +1 -1
- package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
- package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +101 -11
- package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
- package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +19 -3
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +20 -4
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +32 -9
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +18 -4
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +21 -5
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +42 -2
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +23 -9
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +33 -31
- package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
- package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +28 -3
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
- package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
- package/src/gdskills/bundled/skills/planning/interview/SKILL.md +29 -7
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +32 -6
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +20 -3
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +26 -2
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +28 -3
- package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +24 -4
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +26 -3
- package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
- package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
- package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +29 -8
- package/src/gdskills/bundled/skills/quality/pr/SKILL.md +24 -4
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +25 -2
- package/src/gdskills/bundled/skills/quality/push/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +17 -2
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +40 -5
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +41 -1
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +44 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +44 -4
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +2 -3
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +4 -4
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +36 -2
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -4
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +36 -2
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +3 -5
- package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +23 -2
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +9 -29
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +9 -9
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +3 -2
- package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +4 -2
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +40 -2
- package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -668
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
- package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
- package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
- package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -80
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -80
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -345
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
- 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
|
-
- "
|
|
6
|
-
- "
|
|
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
|
-
- "
|
|
6
|
-
- "
|
|
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
|
-
- "
|
|
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
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
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
|
-
- "
|
|
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**: `
|
|
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
|