@laitszkin/apollo-toolkit 3.8.4 → 3.9.0
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/CHANGELOG.md +5 -0
- package/align-project-documents/SKILL.md +49 -121
- package/analyse-app-logs/scripts/__pycache__/filter_logs_by_time.cpython-312.pyc +0 -0
- package/analyse-app-logs/scripts/__pycache__/log_cli_utils.cpython-312.pyc +0 -0
- package/analyse-app-logs/scripts/__pycache__/search_logs.cpython-312.pyc +0 -0
- package/commit-and-push/SKILL.md +52 -75
- package/develop-new-features/SKILL.md +53 -113
- package/docs-to-voice/scripts/__pycache__/docs_to_voice.cpython-312.pyc +0 -0
- package/enhance-existing-features/SKILL.md +59 -125
- package/generate-spec/SKILL.md +86 -195
- package/generate-spec/scripts/__pycache__/create-specscpython-312.pyc +0 -0
- package/implement-specs/SKILL.md +47 -43
- package/implement-specs-with-subagents/SKILL.md +69 -165
- package/implement-specs-with-worktree/SKILL.md +53 -102
- package/katex/scripts/__pycache__/render_katex.cpython-312.pyc +0 -0
- package/maintain-project-constraints/SKILL.md +53 -105
- package/maintain-skill-catalog/SKILL.md +46 -42
- package/open-github-issue/scripts/__pycache__/open_github_issue.cpython-312.pyc +0 -0
- package/package.json +1 -1
- package/read-github-issue/scripts/__pycache__/find_issues.cpython-312.pyc +0 -0
- package/read-github-issue/scripts/__pycache__/read_issue.cpython-312.pyc +0 -0
- package/resolve-review-comments/scripts/__pycache__/review_threads.cpython-312.pyc +0 -0
- package/review-spec-related-changes/SKILL.md +49 -82
- package/solve-issues-found-during-review/SKILL.md +46 -106
- package/text-to-short-video/scripts/__pycache__/enforce_video_aspect_ratio.cpython-312.pyc +0 -0
- package/version-release/SKILL.md +52 -88
|
@@ -1,110 +1,77 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-spec-related-changes
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Read-only spec compliance versus governing docs/plans: score each business-oriented requirement Met/Partial/Not-met using code/tests/commands—checked `tasks.md` boxes are never sufficient proof; ambiguity between two plausible plan roots halts execution; when runtime code exists, sequentially run **`review-change-set`**, **`discover-edge-cases`**, and **`harden-app-security`** on the same scoped diff afterward.
|
|
5
|
+
Use for questions like “does this PR satisfy coordination.md + spec.md R2?” or user pins a `{change}` folder.
|
|
6
|
+
Do not mutate repositories, reorder reports to bury missing goals, skip the tertiary review bundle on code-bearing diffs, or rely on intent without file evidence **BAD**, lead with refactor comments while R1 failing **FORBIDDEN**… GOOD pair every Not-met cite with `spec.md` ref + concrete path:test gap…
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Review Spec Related Changes
|
|
7
10
|
|
|
8
11
|
## Dependencies
|
|
9
12
|
|
|
10
|
-
- Required: `review-change-set`, `discover-edge-cases`, and `harden-app-security`
|
|
13
|
+
- Required: `review-change-set`, `discover-edge-cases`, and `harden-app-security` whenever the scope includes **code-affecting** implementation to assess.
|
|
11
14
|
- Conditional: none.
|
|
12
15
|
- Optional: none.
|
|
13
|
-
- Fallback: If any required
|
|
16
|
+
- Fallback: If any required dependency is unavailable for a **code-affecting** review, **MUST** stop and report the gap. **MUST NOT** emit a “full pass” verdict without those three passes when code is in scope.
|
|
14
17
|
|
|
15
|
-
##
|
|
18
|
+
## Non-negotiables
|
|
16
19
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
20
|
+
- **MUST NOT** edit implementation code, tests, or planning docs during this skill (read-only review).
|
|
21
|
+
- **MUST NOT** archive specs, commit, push, tag, or release from this skill.
|
|
22
|
+
- **MUST** resolve which spec set governs the change **before** concluding; if multiple candidates fit equally and cannot be disambiguated from repo evidence, **MUST** stop and report ambiguity—**MUST NOT** guess.
|
|
23
|
+
- **MUST** classify each business goal / acceptance item as `Met`, `Partially met`, `Not met`, or `Deferred/N/A` **only** using verifiable evidence (code, tests, commands, traces)—checked boxes in `tasks.md` are **not** proof by themselves.
|
|
24
|
+
- **MUST** treat **unmet or partially met required business goals** as **highest severity**. **MUST NOT** let edge-case, security, or style findings **outrank** those gaps in the reported order or implied priority.
|
|
25
|
+
- **MUST** finish the business-goal verdict **before** invoking secondary skills; **MUST** still run `review-change-set`, `discover-edge-cases`, and `harden-app-security` on the **same** implementation scope when code is involved (after step 1 verdict is written).
|
|
26
|
+
- **MUST NOT** rest conclusions on author intent, branch names, or chat memory unless **repository evidence** agrees.
|
|
27
|
+
- Prefer **fewer confirmed findings** over broad speculation; unproven items belong under **Residual uncertainty**, not as faux defects.
|
|
21
28
|
|
|
22
|
-
##
|
|
29
|
+
## Standards (summary)
|
|
23
30
|
|
|
24
|
-
|
|
31
|
+
- **Evidence**: Full read of governing docs + minimal code/diff context + spec-named verification commands when safe to run.
|
|
32
|
+
- **Execution**: Scope resolution → business compliance → required secondary reviews → ordered report.
|
|
33
|
+
- **Quality**: Business-first severity; secondary findings separated unless they also block an acceptance criterion.
|
|
34
|
+
- **Output**: Ordered list: business gaps → edge cases → security → code review → passing summary → residual uncertainty.
|
|
25
35
|
|
|
26
|
-
## Scope
|
|
36
|
+
## Scope resolution
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
**Chain-of-thought:** Before **`Workflow`**, answer **`Pause →`** for the governing spec you will use; equally plausible paths without disambiguation ⇒ **stop**.
|
|
29
39
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
40
|
+
**User-named path** — Read `spec.md`, `tasks.md`, `checklist.md`, `contract.md`, `design.md`, and batch `coordination.md` when present unless the user narrowed the list. Treat as authoritative unless the user pointed at a **newer** superseding plan. Map implementation via tasks, owned paths, diff, branch, commits.
|
|
41
|
+
- **Pause →** Did the user give a **filesystem path** or only a nickname that could map to multiple `docs/plans/...` trees?
|
|
42
|
+
- **Pause →** For each major business verdict later, what **exact** spec heading or requirement ID will I cite?
|
|
33
43
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- If the
|
|
37
|
-
```bash
|
|
38
|
-
git status -sb
|
|
39
|
-
git diff --name-only
|
|
40
|
-
git diff --cached --name-only
|
|
41
|
-
```
|
|
42
|
-
- Look for changed or recently touched planning documents under `docs/plans/`, `docs/archive/plans/`, or the repository's documented planning location.
|
|
43
|
-
- If no planning document changed, inspect recent commits and active plan directories to identify the most recent spec set that plausibly governs the current implementation.
|
|
44
|
-
- If multiple candidate spec sets remain plausible and cannot be separated by changed files or branch names, stop and report the ambiguity instead of guessing.
|
|
44
|
+
**User did not name a spec** — Inspect `git status -sb`, `git diff --name-only`, `git diff --cached --name-only`; search `docs/plans/`, `docs/archive/plans/`, or repo-documented plan dirs. If no plan file moved, infer from recent commits and plausible plan dirs; **if still ambiguous, stop** (see Non-negotiables).
|
|
45
|
+
- **Pause →** What **three** independent clues tie this implementation to **one** plan—not chat memory alone?
|
|
46
|
+
- **Pause →** If I withheld the conversation transcript, could another reviewer replicate my chosen spec folder from repo evidence?
|
|
45
47
|
|
|
46
48
|
## Workflow
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- Read the governing spec documents end-to-end.
|
|
51
|
-
- Extract the concrete business goals, acceptance criteria, non-goals, deferred work, and explicit verification requirements.
|
|
52
|
-
- Build a compact checklist of claims that can be proven or disproven from code, tests, docs, or command output.
|
|
53
|
-
- Keep business goals separate from implementation-quality expectations. A clean implementation does not compensate for an unmet business requirement.
|
|
54
|
-
|
|
55
|
-
### 2) Map implementation evidence
|
|
56
|
-
|
|
57
|
-
- Read the related diff, staged changes, commits, or changed files that correspond to the spec scope.
|
|
58
|
-
- Follow the minimum dependency chain needed to understand whether the behavior is actually implemented.
|
|
59
|
-
- Run or inspect the verification commands named by the spec when they are available and safe to run.
|
|
60
|
-
- Mark each business goal as:
|
|
61
|
-
- `Met`: direct implementation and verification evidence exists.
|
|
62
|
-
- `Partially met`: some required behavior exists, but an acceptance criterion, integration path, or verification proof is missing.
|
|
63
|
-
- `Not met`: implementation evidence is absent or contradicts the spec.
|
|
64
|
-
- `Deferred/N/A`: the spec explicitly excludes or defers the item.
|
|
65
|
-
|
|
66
|
-
### 3) Review business-goal completion first
|
|
67
|
-
|
|
68
|
-
- Report every `Not met` and `Partially met` business goal before secondary review findings.
|
|
69
|
-
- Assign the highest severity to business-goal failures because they mean the delivered change does not satisfy the requested work.
|
|
70
|
-
- Include exact spec evidence and code evidence for each gap.
|
|
71
|
-
- Do not continue into archival, submission, or release recommendations while business-goal failures remain unresolved.
|
|
72
|
-
|
|
73
|
-
### 4) Run secondary code-practice reviews
|
|
74
|
-
|
|
75
|
-
After the business-goal pass is complete, invoke the required review skills on the same code-affecting scope:
|
|
76
|
-
|
|
77
|
-
- Use `review-change-set` to identify architecture, abstraction, and simplification findings in the related diff.
|
|
78
|
-
- Use `discover-edge-cases` to identify reproducible boundary, failure-path, state, and observability risks.
|
|
79
|
-
- Use `harden-app-security` to identify reproducible vulnerabilities and adversarial trust-boundary failures.
|
|
50
|
+
**Chain-of-thought:** Answer **`Pause →`** after **each** step before moving down the list or calling dependent skills.
|
|
80
51
|
|
|
81
|
-
|
|
52
|
+
1. **Spec baseline** — Read governing docs end-to-end. Extract goals, acceptance criteria, non-goals, deferrals, required verifications. Build a compact claim list provable from repo evidence. Keep “what the product must do” separate from “how clean the code is.”
|
|
53
|
+
- **Pause →** Which items are **mandatory** acceptance vs explicitly **out of scope** or deferred?
|
|
54
|
+
- **Pause →** What observable failure would make me change a `Met` to `Not met` for the top risk requirement?
|
|
82
55
|
|
|
83
|
-
|
|
56
|
+
2. **Implementation evidence** — Read the relevant diff/staged/commits/files. Trace the minimum code path to validate claims. Run spec-named checks when available and safe.
|
|
57
|
+
- **Pause →** What is the **smallest** code path I have not yet read that could still falsify a `Met`?
|
|
58
|
+
- **Pause →** Am I about to score `Met` from **intent** or from **tests/commands** I actually ran or inspected?
|
|
84
59
|
|
|
85
|
-
|
|
60
|
+
3. **Business-goal verdict first** — Emit every `Not met` / `Partially met` **before** secondary findings, with **exact** spec cites and code/test evidence. While required goals stay failed, **MUST NOT** frame archival, release, or “done” narratives that imply compliance.
|
|
61
|
+
- **Pause →** If I sorted findings by “interesting” instead of business impact, which line would unfairly rise above a missing goal?
|
|
62
|
+
- **Pause →** For each `Partially met`, what single **missing proof** (test, wire-up, error path) am I naming explicitly?
|
|
86
63
|
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
2. Edge-case findings
|
|
91
|
-
- Include reproduction or concrete trigger evidence.
|
|
92
|
-
3. Security findings
|
|
93
|
-
- Include exploit path, protected asset, and reproducibility evidence.
|
|
94
|
-
4. Code-review findings
|
|
95
|
-
- Include architecture, abstraction, simplification, or maintainability evidence.
|
|
96
|
-
5. Passing evidence
|
|
97
|
-
- Summarize the business goals that were confirmed met.
|
|
98
|
-
6. Residual uncertainty
|
|
99
|
-
- List unverified checks, commands not run, ambiguous spec mappings, or external dependencies that could not be proven.
|
|
64
|
+
4. **Secondary reviews (code-affecting)** — On the same scope: `review-change-set` (architecture/simplification), `discover-edge-cases` (reproducible edge/observability risks), `harden-app-security` (reproducible security). Keep outputs labeled so they do not read as business-goal substitutions.
|
|
65
|
+
- **Pause →** Does this secondary finding **force** a business re-score—if yes, did I revise step 3 before publishing?
|
|
66
|
+
- **Pause →** Is the diff scope identical to what I used for business mapping (no silent file creep)?
|
|
100
67
|
|
|
101
|
-
|
|
68
|
+
5. **Final report (fixed order)** — (1) Business-goal failures (always top severity for required gaps). (2) Edge-case. (3) Security. (4) Code-review / maintainability. (5) Passing evidence for goals confirmed `Met`. (6) Residual uncertainty (skipped commands, unmapped spec text, unverifiable externals). If nothing actionable: state that explicitly **and** still cite docs and evidence reviewed.
|
|
69
|
+
- **Pause →** What commands or spec paragraphs remain **unverified**—are they all listed under residual uncertainty?
|
|
102
70
|
|
|
103
|
-
##
|
|
71
|
+
## Sample hints
|
|
104
72
|
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
- Prefer fewer confirmed findings over broad speculative feedback.
|
|
73
|
+
- **Business claim record**:
|
|
74
|
+
- `R3.2 refresh token rotation` → `Not met` — spec `spec.md` §3.2 requires one-time use; `src/auth/refresh.rs:40` still accepts same jti on replay; test `refresh_replay` not present.
|
|
75
|
+
- **Wrong ordering** — starting with “nice simplification in `foo.ts`” while `R1.0` is unmet: **wrong**; lead with the `R1.0` gap.
|
|
76
|
+
- **Tasks checked but behavior missing** — `tasks.md` shows `[x] implement rate limit` but no call site in `src/api/*` and no test: verdict stays **`Not met` / `Partially met`**, not `Met`.
|
|
77
|
+
- **Ambiguous scope** — two directories `docs/plans/2026-05-01/foo/` and `…/batch-a/foo/` both plausible; **stop** with “need user to name path” instead of picking one.
|
|
@@ -1,134 +1,74 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: solve-issues-found-during-review
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Operate strictly from a structured review/issue list containing confirmed findings: close items in descending severity order (Critical before High/Medium/Low), land the smallest corrective diff per finding, run targeted validation after each fix before continuing, forbid speculative polish or unsolicited doc edits unless a finding explicitly requires them, and document Deferred or Could-not-reproduce outcomes with reproducible rationale.
|
|
5
|
+
Use when prompts reference concrete review outputs (“fix Bugbot findings”, “resolve security audit bullets”) accompanied by reproducible excerpts—STOP if only vague “there were issues yesterday” survives.
|
|
6
|
+
Bad pattern: refactoring modules while unresolved Critical SSRF persists… Good pattern: `HIGH SSRF src/net/client.rs…` patched, `cargo test net::fetch` green, hashes recorded…
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Solve Issues Found During Review
|
|
7
10
|
|
|
8
11
|
## Dependencies
|
|
9
12
|
|
|
10
|
-
- Required: none
|
|
11
|
-
- Conditional: `review-change-set` for re-validation after
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- Fallback: If a required re-validation dependency is unavailable after a code-affecting fix, run `git diff --stat` and relevant tests manually and report what was verified.
|
|
13
|
+
- Required: none (caller **MUST** supply an existing review report or reconstructable finding list).
|
|
14
|
+
- Conditional: `review-change-set` for optional re-validation after **code-affecting** fixes; `systematic-debug` when a fix causes unexpected test or runtime failures.
|
|
15
|
+
- Optional: `discover-edge-cases` / `harden-app-security` when the user or report demands post-fix confirmation on those dimensions.
|
|
16
|
+
- Fallback: If `review-change-set` is unavailable after code fixes, **MUST** still verify via targeted tests and `git diff` (or equivalent) and **MUST** document exactly what was run.
|
|
15
17
|
|
|
16
|
-
##
|
|
18
|
+
## Non-negotiables
|
|
17
19
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
20
|
+
- **MUST** read the **full** report and the affected code **before** editing. **MUST** tie every code change to a **confirmed** finding (explicit severity/title/evidence). **MUST NOT** fix speculative, hypothetical, or “nice-to-have” items unless the report elevated them to confirmed findings.
|
|
21
|
+
- **MUST** process findings in strict severity order: complete **all** Critical before **any** High, then Medium, then Low—**MUST NOT** skip ahead for convenience. Within a tier, follow the reviewer’s stated ordering when present; if severities are missing, treat business-goal / correctness breaks as **High–Critical class** and cosmetic simplification as **Low**.
|
|
22
|
+
- **MUST** validate after each finding’s fix (tests, repro steps, or agreed oracle) **before** starting the next finding at the same or lower priority. **MUST NOT** mark a finding fixed without passing validation.
|
|
23
|
+
- **MUST** keep each fix **minimal** and scoped to the finding: **MUST NOT** bundle unrelated refactors, style sweeps, or scope expansion.
|
|
24
|
+
- This skill **defaults to product code**; **MUST NOT** edit specs, docs, or `AGENTS.md`/`CLAUDE.md` unless the **finding text** explicitly requires it.
|
|
25
|
+
- If a finding cannot be reproduced after investigation, **MUST** record `Could not reproduce` with evidence and **MUST** continue the queue without silently dropping the item.
|
|
22
26
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
### 1) Read the review report
|
|
26
|
-
|
|
27
|
-
- Read the review report or finding list that the user provides.
|
|
28
|
-
- If the user did not provide a review report but says "fix the review findings", inspect current git state and recent review outputs to reconstruct the finding list.
|
|
29
|
-
- If no review report can be found, stop and report that no review findings are available to act on.
|
|
30
|
-
- Extract every confirmed finding with its severity, title, evidence (`path:line`), and reproduction evidence.
|
|
31
|
-
|
|
32
|
-
### 2) Prioritize findings by severity
|
|
33
|
-
|
|
34
|
-
Group findings into ordered buckets:
|
|
35
|
-
|
|
36
|
-
1. Critical
|
|
37
|
-
2. High
|
|
38
|
-
3. Medium
|
|
39
|
-
4. Low
|
|
40
|
-
|
|
41
|
-
Within each bucket, order by the reviewer's stated priority. If the review does not assign severity, treat architecture/business-goal gaps as High and simplification/style suggestions as Low.
|
|
42
|
-
|
|
43
|
-
### 3) Classify findings by module and business logic chain
|
|
44
|
-
|
|
45
|
-
Before fixing, group findings by:
|
|
46
|
-
|
|
47
|
-
- **Module**: which subsystem, component, or layer each finding belongs to.
|
|
48
|
-
- **Business logic chain**: findings along the same data flow, request path, or feature pipeline.
|
|
49
|
-
|
|
50
|
-
This classification determines which findings can be fixed independently in parallel and which share dependencies that require coordinated treatment.
|
|
51
|
-
|
|
52
|
-
### 4) Deploy parallel fix work (when sub-agent capability is available)
|
|
53
|
-
|
|
54
|
-
If the runtime supports spawning sub-agents with isolated workspaces:
|
|
55
|
-
|
|
56
|
-
**a. Assign each module group to a sub-agent**
|
|
27
|
+
## Standards (summary)
|
|
57
28
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
29
|
+
- **Evidence**: Confirmed finding → code path → minimal patch → validation artifact.
|
|
30
|
+
- **Execution**: Order by severity; optional parallel module groups only when isolation is real; merge without losing fix intent.
|
|
31
|
+
- **Quality**: No speculative hardening; conflicts resolved conservatively unless the finding demands an aggressive change.
|
|
32
|
+
- **Output**: Per-finding status, validation proof, final re-validation summary, residual/deferred items with reasons.
|
|
61
33
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Each sub-agent independently:
|
|
65
|
-
|
|
66
|
-
- Reads its assigned findings and the affected code.
|
|
67
|
-
- Applies the minimal fix for each finding in severity order within its scope.
|
|
68
|
-
- Validates correctness (tests, reproduction steps, linting) before marking findings as resolved.
|
|
69
|
-
- Reports back which findings were fixed, deferred, or could not be reproduced, along with a summary of changes.
|
|
70
|
-
|
|
71
|
-
**c. Consolidate and resolve conflicts**
|
|
72
|
-
|
|
73
|
-
After all sub-agents complete:
|
|
74
|
-
|
|
75
|
-
- Merge changes from each isolated workspace back into the main workspace, one at a time.
|
|
76
|
-
- If conflicts arise, resolve them by keeping both sides of the fix intent — do not discard either party's changes unless they are truly contradictory.
|
|
77
|
-
- When two fixes touch the same code, prefer the more conservative change (less behavioral deviation) unless the review finding explicitly demands the more aggressive one.
|
|
78
|
-
- If a conflict cannot be resolved without deviating from the original fix intent, flag it for manual review and move on.
|
|
79
|
-
|
|
80
|
-
**d. Re-validate after consolidation**
|
|
81
|
-
|
|
82
|
-
Run all relevant tests across the consolidated changes to confirm the merged result is correct.
|
|
83
|
-
|
|
84
|
-
If the runtime does **not** support sub-agents with isolated workspaces, fall back to fixing findings sequentially in severity order as described in the next step.
|
|
85
|
-
|
|
86
|
-
### 5) Fix findings sequentially (fallback when sub-agents are unavailable)
|
|
87
|
-
|
|
88
|
-
For each finding in priority order, when parallel sub-agent capability is not available:
|
|
89
|
-
|
|
90
|
-
**a. Understand the finding and the fix target**
|
|
34
|
+
## Workflow
|
|
91
35
|
|
|
92
|
-
-
|
|
93
|
-
- Read the reviewer's reproduction evidence and hardening guidance.
|
|
94
|
-
- Determine the minimal fix that resolves the finding without changing unrelated behavior.
|
|
36
|
+
**Chain-of-thought:** After **each** phase, **`Pause →`** guards against speculative fixes and order violations—answer them before edits or merges.
|
|
95
37
|
|
|
96
|
-
|
|
38
|
+
### 1) Ingest findings
|
|
97
39
|
|
|
98
|
-
|
|
99
|
-
-
|
|
40
|
+
Read the supplied report. If the user says “fix review findings” but attached nothing, reconstruct from git/recent outputs; if **no** reconstructable list exists, **MUST** stop and report. Extract each finding: severity, title, evidence (`path:line` or equivalent), reproduction notes.
|
|
41
|
+
- **Pause →** Can I attach **severity + excerpt + repro** per row—is anything still vague “looks bad”?
|
|
42
|
+
- **Pause →** Is this finding **explicitly confirmed** by the reviewer, or only a hypothesis I must shelve?
|
|
100
43
|
|
|
101
|
-
|
|
44
|
+
### 2) Order and (optional) parallelize
|
|
102
45
|
|
|
103
|
-
-
|
|
104
|
-
- If tests fail, invoke `$systematic-debug` to resolve the failure before proceeding.
|
|
105
|
-
- If the finding includes reproduction steps, verify the reproduction no longer triggers.
|
|
106
|
-
- Only mark the finding as fixed when validation passes.
|
|
46
|
+
Sort into Critical → High → Medium → Low. Optionally group by **module** or **business chain** for parallel work **only** if sub-agents with **isolated workspaces** exist and groups do not share half-applied state.
|
|
107
47
|
|
|
108
|
-
**
|
|
48
|
+
**Parallel path** — One package per independent group; each worker fixes its findings **in severity order locally**, validates, returns branch/diff + status. Merge packages one at a time; on conflict, preserve both fix intents; prefer the **more conservative** behavior unless the finding required aggressiveness; **MUST** flag unresolvable conflicts instead of silently dropping a fix. After merge, run consolidated tests.
|
|
109
49
|
|
|
110
|
-
|
|
50
|
+
**Serial path (default)** — For each finding in global severity order: read code and repro → apply minimal fix → validate (`systematic-debug` if failures are unclear) → record status → next finding.
|
|
51
|
+
- **Pause →** Am I respecting **tier closure**—no High work started until every Critical has a settled status (`Fixed`, `Deferred`, `Could not reproduce`)?
|
|
52
|
+
- **Pause →** If parallelizing: could two workers touch **overlapping** symbols or files midway through—if unsure, serialize.
|
|
111
53
|
|
|
112
|
-
###
|
|
54
|
+
### 3) Full-scope re-validation
|
|
113
55
|
|
|
114
|
-
|
|
56
|
+
After all findings are processed: run relevant tests over touched areas; if code changed and `review-change-set` is available, run it on the post-fix diff; capture `git diff --stat` (or equivalent). **MUST** confirm no confirmed finding remains open without a recorded reason (`Deferred`, `Could not reproduce`, etc.).
|
|
57
|
+
- **Pause →** Would the **same** reviewer still see **actionable proof** closed for each `Fixed`, or did I rationalize failures away?
|
|
58
|
+
- **Pause →** Did my consolidated diff sneak in **bonus** unrelated changes—if yes, peel them back?
|
|
115
59
|
|
|
116
|
-
|
|
117
|
-
- Run all relevant tests across the changed files.
|
|
118
|
-
- Run `git diff --stat` to produce a summary of what changed.
|
|
60
|
+
### 4) Report
|
|
119
61
|
|
|
120
|
-
|
|
62
|
+
Deliver: (1) Summary by severity. (2) Per finding: `Fixed` / `Could not reproduce` / `Deferred` + location + validation evidence. (3) Final re-validation (review tool result if any, tests, diff stat). (4) Residual/deferred with reasons. (5) User-facing next checks before merge (manual QA, integration, etc.).
|
|
63
|
+
- **Pause →** Could the user rerun **exactly one** cited command per `Fixed` to trust me—is that cited?
|
|
121
64
|
|
|
122
|
-
|
|
65
|
+
## Notes
|
|
123
66
|
|
|
124
|
-
|
|
125
|
-
2. For each finding: status (`Fixed`, `Could not reproduce`, `Deferred`), path:line, and validation evidence.
|
|
126
|
-
3. Final re-validation: new review result (if run), test results, and git change summary.
|
|
127
|
-
4. Any residual findings that were deferred or could not be fixed, with reasons.
|
|
128
|
-
5. Next steps: what the user should verify before merging (e.g., manual QA, integration tests, deployment review).
|
|
67
|
+
- Hypotheses or “might be risky” lines in a report that were **not** confirmed as findings stay **out of scope** for fixes.
|
|
129
68
|
|
|
130
|
-
##
|
|
69
|
+
## Sample hints
|
|
131
70
|
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
71
|
+
- **Inbound finding slice** — `HIGH | SSRF via webhook URL | src/net/fetch.rs:112 | curl user-controlled URL without allowlist`.
|
|
72
|
+
- **Serial flow** — fix `HIGH #1`, run `cargo test net_fetch` (or the project’s narrowest test), mark `Fixed` **only after green** → then proceed to `HIGH #2`; do **not** batch three HIGH fixes then test once unless a single coherent patch is unavoidable and validation still proves each finding closed.
|
|
73
|
+
- **Status line**: `HIGH SSRF fetch · Fixed · fetch.rs:105-128 · Verified: cargo test net::fetch + manual blocklisted host`.
|
|
74
|
+
- **`Could not reproduce`**: reviewer cited `middleware.ts:77` leak; current tree shows no such path/commit — note commit inspected and bail with evidence, do **not** invent a finding to satisfy the report.
|
|
Binary file
|
package/version-release/SKILL.md
CHANGED
|
@@ -1,27 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: version-release
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
End-to-end semver delivery: prerequisites mirror **`commit-and-push`** gates (**`submission-readiness-check`**, reviews, changelog hygiene, optional `archive-specs`), derive next version/tag from tracked files plus explicit user semver words, relocate `CHANGELOG.md` Unreleased into dated release bump package/project metadata evenly commit tag push **`gh release create`** honoring prerelease/retarget rules verify remote refs **NEVER STOP at tag omitting GitHub release unless user waived publication**.
|
|
5
|
+
Keywords patch minor major release tag GH publish semver… misroute plain “push” absent release vocabulary **use commit-and-push**… BAD guessing version… GOOD inspect package.json+Cargo.toml… retarget prerelease relocate tag `--force-with-lease`… Unreleased emptiness ⇒ halt curated notes…
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Version Release
|
|
7
9
|
|
|
8
10
|
## Dependencies
|
|
9
11
|
|
|
10
|
-
- Required:
|
|
11
|
-
- Conditional:
|
|
12
|
+
- Required: **`commit-and-push`** (shared inspect/classify/readiness/commit/push mechanics); **`submission-readiness-check`** **before** version files, tags, or publication mutate.
|
|
13
|
+
- Conditional: **`archive-specs`** when specs/docs need alignment; **`review-change-set`** (+ **`discover-edge-cases`** / **`harden-app-security`** when risk triggers) on **code-affecting** release scope **before** version churn—blocking while findings open.
|
|
12
14
|
- Optional: none.
|
|
13
|
-
- Fallback:
|
|
15
|
+
- Fallback: Missing required skill ⇒ stop and report.
|
|
14
16
|
|
|
15
|
-
##
|
|
17
|
+
## Non-negotiables
|
|
16
18
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
19
|
+
- **ONLY** enter this workflow when release intent is **explicit** (semver bump wording, tag/release request, CI “publish release”—not a bare “push”). Else **`commit-and-push`** only.
|
|
20
|
+
- **MUST NOT** guess versions—read workspace version files + user-stated bump; state **current → next** + exact **tag string** before editing.
|
|
21
|
+
- **MUST NOT** publish if root **`CHANGELOG.md` `Unreleased`** is empty/has nothing to ship—stop or curate notes first.
|
|
22
|
+
- **MUST** align all version-bearing files consistently; formatting-only deltas elsewhere.
|
|
23
|
+
- **Tag format** (`v1.2.3` vs `1.2.3`) inferred from repo history—not invented per release ad hoc unless user dictates.
|
|
24
|
+
- **GitHub Release**: prefer `gh release create` / repo tooling; **MUST NOT** substitute “opened PR URL” as release completion. Draft vs prerelease vs **latest** follows **explicit** user/repo convention—not tag shape alone.
|
|
25
|
+
- **Prerelease retarget**: same version, **move** tag/release to new SHA when user asks; use force-with-lease **for tag only** as needed; if API rejects SHA for `target_commitish`, use branch identifier per GitHub rules.
|
|
26
|
+
- **MUST** verify **remote** has commit + tag before calling release **done**; **MUST NOT** trust UI git shortcuts.
|
|
27
|
+
- **Done** = version files + changelog section + **pushed** commit + **remote** tag + **published** GitHub release (unless user explicitly skips publication—then say so).
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
**Repository regression checks:** Before creating release metadata, inspect existing local and remote tags plus any existing GitHub Release for the target version so duplicates are caught early. Do not continue until you can state the current version, the intended next version, and the exact tag name that will be created. **`review-change-set` is required for code-affecting releases**—run `review-change-set` for the same release scope before continuing; treat unresolved review findings as blocking. Any conditional gate whose trigger is confirmed by this classification becomes mandatory before version bumping, tagging, or release publication. Treat every scenario-matched gate as blocking before versioning or release publication. **`discover-edge-cases` and `harden-app-security` are important review gates**—when their scenario is met, treat them as blocking review gates, not optional polish. Never stop after the release commit or tag alone; creating the matching GitHub release is part of done criteria unless the user explicitly says to skip release publication.
|
|
30
|
+
|
|
31
|
+
## Standards (summary)
|
|
23
32
|
|
|
24
|
-
|
|
33
|
+
- **Evidence**: Version files, tags local/remote, `Unreleased`, existing GH releases.
|
|
34
|
+
- **Execution**: Intent → gates (`commit-and-push` pattern) → semver → files → changelog move → commit/tag → push → GH release.
|
|
35
|
+
- **Quality**: No duplicate releases; notes from curated changelog, not raw diff guesswork.
|
|
36
|
+
- **Output**: Announced version, tag URL, release URL, automation status if any.
|
|
37
|
+
|
|
38
|
+
## References
|
|
25
39
|
|
|
26
40
|
- `references/semantic-versioning.md`
|
|
27
41
|
- `references/commit-messages.md`
|
|
@@ -31,100 +45,50 @@ Load only when needed:
|
|
|
31
45
|
|
|
32
46
|
## Workflow
|
|
33
47
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Use $commit-and-push for the standard git state inspection workflow.
|
|
37
|
-
|
|
38
|
-
### 2. Confirm Release Intent
|
|
39
|
-
|
|
40
|
-
- Use this skill only when the user explicitly requests version/tag/release work.
|
|
41
|
-
- Treat explicit semver-delivery wording such as `patch update`, `minor update`, `major update`, `patch release`, `bump the version`, or requests to trigger release-published automation as release intent even when the user does not separately say `make a release`.
|
|
42
|
-
- If no release intent is present, use `commit-and-push` instead.
|
|
43
|
-
|
|
44
|
-
### 3. Classify Changes and Run Dependencies
|
|
48
|
+
**Chain-of-thought:** Reuse **`commit-and-push`** for git inspection, classification, conditional reviews, **`submission-readiness-check`**, commit discipline, push verification—**do not duplicate** those rules here; **`Pause →`** applies to release-only decisions.
|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
### 1) Inspect git state
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
- For code-affecting changes, run `review-change-set` for the same release scope before continuing; treat unresolved review findings as blocking.
|
|
50
|
-
- Run `discover-edge-cases` and `harden-app-security` for the same release scope when the reviewed risk profile or repository context says their coverage is needed; treat them as blocking review gates, not optional polish, whenever that condition is met.
|
|
51
|
-
- Any conditional gate whose trigger is confirmed by this classification becomes mandatory before version bumping, tagging, or release publication, including review, spec archival, docs synchronization, and changelog readiness.
|
|
52
|
-
- Consolidate all confirmed findings before continuing.
|
|
53
|
-
- Resolve all confirmed findings before changing version files, tags, or release metadata.
|
|
52
|
+
- Follow **`commit-and-push`** step 1 (status/diff/clean semantics).
|
|
54
53
|
|
|
55
|
-
###
|
|
54
|
+
### 2) Confirm release intent
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
- Explicit semver/release language—or stop and use **`commit-and-push`**.
|
|
57
|
+
- **Pause →** Did the user only ask “commit”? If yes, **exit** this skill.
|
|
58
58
|
|
|
59
|
-
###
|
|
59
|
+
### 3) Gates before version churn
|
|
60
60
|
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- Inspect existing local and remote tags plus any existing GitHub Release for the target version before creating new release metadata, so duplicate or conflicting releases are caught early.
|
|
64
|
-
- Determine release channel explicitly before publishing: if the user did not say `prerelease`, `draft`, `latest`, or an equivalent repository-specific release state, default to asking or to the repository's already-documented convention instead of inferring from the tag text.
|
|
65
|
-
- If the user explicitly asks to keep the same prerelease version or to `repoint`, `retarget`, or `move` an existing prerelease after follow-up fixes, treat that as a retarget flow: keep the version unchanged, confirm the existing prerelease tag/release name, and plan to move that tag/release to the new commit instead of bumping semver.
|
|
66
|
-
- If the requested version tag and matching published GitHub release already exist and point at the intended commit, report that the release is already complete instead of creating duplicate metadata.
|
|
67
|
-
- If the user provides the target version, use it directly.
|
|
68
|
-
- If it is missing, ask the user for the target version or semver bump type.
|
|
69
|
-
- Provide recommendations only when explicitly requested.
|
|
70
|
-
- Do not continue until you can state the current version, the intended next version, and the exact tag name that will be created.
|
|
71
|
-
- For retarget flows, explicitly state that the intended next version stays unchanged and that the existing tag name will be moved to the new commit.
|
|
61
|
+
- Classify scope; code-affecting ⇒ `review-change-set` (+ conditional edge/security same as **`commit-and-push`**); **`submission-readiness-check`** (+ **`archive-specs`** when indicated). All blocking items closed.
|
|
62
|
+
- **Pause →** Am I versioning while `Unreleased`/readiness still wrong?
|
|
72
63
|
|
|
73
|
-
###
|
|
64
|
+
### 4) Decide version & tag
|
|
74
65
|
|
|
75
|
-
-
|
|
76
|
-
-
|
|
66
|
+
- Read files; inspect local/remote tags + existing GH release for collision; prerelease vs stable per user/doc; retarget flow leaves version unchanged.
|
|
67
|
+
- **Pause →** If tag+release already correct on intended SHA—report satisfied, duplicate nothing.
|
|
77
68
|
|
|
78
|
-
###
|
|
69
|
+
### 5) Bump files
|
|
79
70
|
|
|
80
|
-
-
|
|
81
|
-
- If `Unreleased` is empty, stop and report that there are no curated release notes to publish yet.
|
|
82
|
-
- Create the new version entry by moving the current `Unreleased` sections under the selected version heading and release date.
|
|
83
|
-
- Reset `Unreleased` to an empty placeholder after the version entry is created.
|
|
84
|
-
- Remove duplicate section headers or bullets only when the move would otherwise create repeated content.
|
|
85
|
-
- Update `README.md` only when behavior or usage changed.
|
|
86
|
-
- Update `AGENTS.md/CLAUDE.md` only when agent workflow/rules changed.
|
|
71
|
+
- Every locator of version bumped consistently.
|
|
87
72
|
|
|
88
|
-
###
|
|
73
|
+
### 6) Release docs
|
|
89
74
|
|
|
90
|
-
|
|
75
|
+
- Move **`Unreleased`** → new dated heading; reset `Unreleased` scaffold; **`README`** / **`AGENTS.md`**/`CLAUDE.md` only if behavior/agent workflow changed materially.
|
|
91
76
|
|
|
92
|
-
|
|
93
|
-
- Create a release-oriented commit message (for example `chore(release): publish 2.12.1`) when applicable.
|
|
94
|
-
- For new-version flows, create the version tag locally after commit.
|
|
95
|
-
- For prerelease retarget flows, move the existing tag locally only after the new fix commit exists, and verify the target commit hash before rewriting the tag.
|
|
96
|
-
- Re-read the version files after editing and before tagging to confirm they all match the intended release version.
|
|
77
|
+
### 7) Commit & tag
|
|
97
78
|
|
|
98
|
-
|
|
79
|
+
- Message e.g. `chore(release): publish X.Y.Z` per repo habit; tag after commit; retarget ⇒ move existing tag deliberately with hash discipline.
|
|
99
80
|
|
|
100
|
-
|
|
81
|
+
### 8) Push
|
|
101
82
|
|
|
102
|
-
|
|
103
|
-
- Push commit(s) and the release tag to the current branch before publishing the GitHub release when the hosting platform requires the tag to exist remotely.
|
|
104
|
-
- For prerelease retarget flows, push the rewritten tag explicitly (for example `--force-with-lease` for the single tag only), then verify the remote tag hash matches local `HEAD` before touching the GitHub release.
|
|
105
|
-
- After pushing, verify the release tag exists remotely via `git ls-remote --tags <remote> <tag>`.
|
|
83
|
+
- Push branch **and** tag; verify remote refs; retarget ⇒ `--force-with-lease` for tag only where appropriate, then verify.
|
|
106
84
|
|
|
107
|
-
###
|
|
85
|
+
### 9) Publish GitHub Release
|
|
108
86
|
|
|
109
|
-
- Create
|
|
110
|
-
-
|
|
111
|
-
- For prerelease retarget flows, update the existing GitHub prerelease so it points at the rewritten tag/commit and refresh its notes when the new fix changes the shipped behavior.
|
|
112
|
-
- If the release tool rejects a raw commit SHA while updating `target_commitish`, retry with the authoritative branch name or another GitHub-accepted target identifier, then verify the published release now resolves to the rewritten tag.
|
|
113
|
-
- Use the release notes from the new `CHANGELOG.md` entry unless the repository has a stronger established release-note source.
|
|
114
|
-
- If the repository has publish automation triggered by `release.published`, ensure the GitHub release is actually published rather than left as a draft.
|
|
115
|
-
- Prefer `gh release create <tag>` or the repository's existing release tool when available.
|
|
116
|
-
- Do not use PR-opening tools, PR directives, or placeholder URLs as a substitute for actual release publication.
|
|
117
|
-
- Confirm the GitHub release URL and any triggered publish workflow status in the final report.
|
|
118
|
-
- Never stop after the release commit or tag alone; creating the matching GitHub release is part of done criteria unless the user explicitly says to skip release publication.
|
|
87
|
+
- Create/update matching release body from changelog section; prerelease flag per explicit instruction; confirm non-draft unless automation needs draft—but user asked “publish” ⇒ actually publish.
|
|
88
|
+
- **Pause →** Can I paste **release URL** + prove tag points at **`HEAD`**?
|
|
119
89
|
|
|
120
|
-
##
|
|
90
|
+
## Sample hints
|
|
121
91
|
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
- Never downgrade `discover-edge-cases` or `harden-app-security` to optional follow-up when the release risk says they apply.
|
|
126
|
-
- Never claim a release is complete without checking the actual release version, creating the matching tag, and publishing the matching GitHub release.
|
|
127
|
-
- Never treat a PR creation step, release-page URL guess, or tag-only push as evidence that the GitHub release exists.
|
|
128
|
-
- Never treat `::git-stage`, `::git-commit`, `::git-push`, or similar UI helpers as proof that the release commit, pushed tag, or remote branch update actually happened.
|
|
129
|
-
- If tests are required by repository conventions, run them before commit.
|
|
130
|
-
- If a new branch is required, follow `references/branch-naming.md`.
|
|
92
|
+
- **`Unreleased` empty** ⇒ cannot ship “2.5.0” with honest notes—curate first.
|
|
93
|
+
- **Duplicate**: Tag `v2.5.0` exists on GH → **inspect SHA** before re-creating.
|
|
94
|
+
- **Retarget**: User “move prerelease to latest fix”—**no** semver bump; rewrite tag carefully.
|