@sjawhar/opencode-legion-envoy 8.17.0 → 8.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/dispatch/SKILL.md +107 -409
- package/skills/dispatch/references/api.md +16 -48
- package/skills/dispatch/references/asks.md +19 -78
- package/skills/dispatch/references/document-edits.md +38 -187
- package/skills/dispatch/references/documents.md +32 -224
- package/skills/dispatch/references/examples.md +10 -27
- package/skills/dispatch/references/issues.md +34 -196
- package/skills/dispatch/references/messages.md +13 -58
- package/skills/dispatch/references/reading.md +10 -45
- package/skills/dispatch-brainstorming/SKILL.md +34 -99
- package/skills/dispatch-first/SKILL.md +16 -34
- package/skills/thermonuclear-code-quality/SKILL.md +96 -185
- package/skills/thermonuclear-deep-review/SKILL.md +45 -69
|
@@ -1,98 +1,74 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: thermonuclear-deep-review
|
|
3
|
-
description:
|
|
3
|
+
description: Use when asked for a thermonuclear or deep review, or for a security and correctness audit of a branch or PR diff. Covers bugs, breaking changes, security issues, developer-experience regressions and feature-gate leaks.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Thermonuclear Deep Review
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
As a security reviewer, audit the changes of the checked-out branch for bugs, regressions and security vulnerabilities. Be rigorous. Report only what the evidence supports.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Scope
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Report only issues in code that the PR adds or modifies. Exception: unchanged code that consumes behavior the diff changes (check 2). A broken consumer is a defect of this diff, but the diff never shows it.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
ONLY report issues related to code that is being ADDED or MODIFIED in this PR.
|
|
17
|
-
Focus on changes in the diff.
|
|
18
|
-
DO NOT report vulnerabilities in existing code that is not being changed.
|
|
19
|
-
EXCEPT where that unchanged code CONSUMES behavior the diff alters — see Downstream Consumer
|
|
20
|
-
Guidelines. An unchanged consumer that silently breaks IS a defect in this diff, and it will
|
|
21
|
-
never appear in the diff itself.
|
|
15
|
+
## Checks
|
|
22
16
|
|
|
23
|
-
|
|
17
|
+
1. **Breakage.** Trace each change through its callers and contracts, across packages and modules.
|
|
18
|
+
2. **Consumers.** For each behavior the diff changes, name its consumers and show that each one still works. Behaviors: log level, status code, exception type, metric or field name, payload shape, identity or uniqueness key, timing, retry, default. Tracing callers does not find consumers, and many are outside the diff, the package or the repository:
|
|
19
|
+
- alert and monitor predicates (a monitor on `status:error` stops when a line goes down to WARNING)
|
|
20
|
+
- log-level contracts, structured-log field names, log-derived metric filters
|
|
21
|
+
- status codes and error-type strings in request logs, webhooks and audit records
|
|
22
|
+
- identity or uniqueness keys that a persistence layer arbitrates on (a new id for an existing row collides with a constraint)
|
|
23
|
+
- dashboards, SLOs, saved queries, downstream parsers
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
shape, an identity or uniqueness key, a timing/retry characteristic, a default — name its
|
|
33
|
-
downstream consumers and show each one still works. Consumers routinely live outside the diff,
|
|
34
|
-
outside the package, and outside the repository:
|
|
35
|
-
- alert/monitor predicates (a monitor keyed on `status:error` silently stops firing when a line is
|
|
36
|
-
downgraded to WARNING; the monitor appears nowhere in the diff that disables it)
|
|
37
|
-
- log-level contracts, structured-log field names, log-derived metric filters
|
|
38
|
-
- status codes and error-type strings written to request logs, webhooks, or audit records
|
|
39
|
-
- identity/uniqueness keys that a persistence layer arbitrates on (a fresh id for an existing
|
|
40
|
-
logical row collides against a constraint the diff never mentions)
|
|
41
|
-
- dashboards, SLOs, saved queries, downstream parsers
|
|
42
|
-
If you cannot locate a consumer, say so explicitly rather than assuming none exists.
|
|
43
|
-
A change that removes its own alarm is the highest-severity finding of this class, because it also
|
|
44
|
-
removes the signal that would have caught it.
|
|
45
|
-
|
|
46
|
-
## Breaking Devex Guidelines
|
|
47
|
-
It can be easy to break developers' ability to run / build the code locally. You MUST catch changes that will impact users' developer experience. Some examples (not exhaustive):
|
|
48
|
-
- Modifying how secrets are read / where they are read from
|
|
49
|
-
- Updating environment variable names / adding environment variables
|
|
50
|
-
- Remapping ports / networking
|
|
51
|
-
- Adding scripts that must be run for certain functionality to continue working. Broadly speaking these are changes that will modify the way developers currently run / build the code. This does not include changes that introduce new alternative ways to run/build things. Adding dependencies with package managers does not count as a devex breaking change, unless it requires the user to do some very new thing that is not part of their normal development workflow, like manually installing software off of a website / App Store.
|
|
52
|
-
|
|
53
|
-
## Feature Leak Guidelines
|
|
54
|
-
The codebase might gate features behind feature flags or internal-only checks. Do not allow a gated feature to leak. These leaks can be subtle, so trace the relevant gate and its callers.
|
|
55
|
-
|
|
56
|
-
## Intended Breakage Guidelines
|
|
57
|
-
If a high-risk effect is an intentional, well-constrained change, do not report it as a defect. Report it when the scope or consequences appear unclear, including when a safeguard or feature gate is removed.
|
|
58
|
-
|
|
59
|
-
## Claims in the PR body
|
|
60
|
-
|
|
61
|
-
A safety or correctness claim written in a PR body is a claim like any other, and the only reader who catches a wrong one is the reader told to ATTACK it. Verifying reviewers read the code against the claim and pass; that is what they are for. Attack the body's claims, not only its diff.
|
|
62
|
-
|
|
63
|
-
Two shapes to attack first:
|
|
64
|
-
|
|
65
|
-
- **Neutralization ORDER, not coverage.** Any pipeline that sanitizes and then edits can create what it sanitized. The test is not "did it neutralize everything" but "can any later pass CREATE what was being neutralized".
|
|
66
|
-
- **A severity resting on a third party's formatting is a dependency, not a mitigation.** Rate it as the bet it is, and fix rather than disclose.
|
|
25
|
+
If you cannot find a consumer, say so. Never assume that none exists. A change that removes its own alarm is the highest severity here, because it also removes the signal that would catch it.
|
|
26
|
+
3. **Developer experience.** Find changes to how developers run or build the code locally. Examples: where or how the code reads secrets, new or renamed environment variables, remapped ports or networking. A new script that must run for a feature to keep working is also a change. Not a break: a new alternative way to run or build, or a new package-manager dependency. Exception: a dependency that needs a step outside the usual workflow, such as a manual install from a website or app store, is a break.
|
|
27
|
+
4. **Feature leaks.** Trace each feature flag or internal-only check and its callers. Do not let a gated feature leak.
|
|
28
|
+
5. **Intended breakage.** An intended, well-constrained high-risk effect is not a defect. Report it when its scope or consequences are unclear, or when it removes a safeguard or feature gate.
|
|
29
|
+
6. **PR body claims.** Attack each safety or correctness claim in the PR body, not only the diff. Only a reviewer told to attack a claim finds a wrong one. Attack these first:
|
|
30
|
+
- Order, not coverage: after a pipeline sanitizes, can any later pass create or recreate what the sanitizer neutralized?
|
|
31
|
+
- A severity that relies on a third party's formatting is a dependency, not a mitigation. Rate it as that bet, and fix it, do not only disclose it.
|
|
67
32
|
|
|
68
33
|
## Security Guidelines
|
|
69
34
|
|
|
70
|
-
For each row whose surface the diff touches, answer with a file:line citation.
|
|
35
|
+
For each row whose surface the diff touches, answer with a file:line citation.
|
|
71
36
|
|
|
72
37
|
| Tag | If the diff touches… | Answer, with file:line |
|
|
73
38
|
| --- | --- | --- |
|
|
74
39
|
| `authz` | an authorization or refusal check, or a new route, command, or tool | who may call it, who may not, where the diff enforces that, and what the unauthorized caller gets |
|
|
75
40
|
| `secret` | a token, grant, secret file, credential helper, or its lifetime | what widened: who can read it, for how long, in which process |
|
|
76
|
-
| `untrusted-input` | a subprocess, argv, path, template, or query built from text an outside party controls (an issue body, a PR comment, a webhook payload, model output) | the boundary that neutralizes it, and whether any later pass can re-create what
|
|
41
|
+
| `untrusted-input` | a subprocess, argv, path, template, or query built from text an outside party controls (an issue body, a PR comment, a webhook payload, model output) | the boundary that neutralizes it, and whether any later pass can re-create what it neutralized (order, not coverage) |
|
|
77
42
|
| `prompt` | a prompt that embeds untrusted text into an agent's instructions | what delimits the untrusted region, and what the agent may do if it obeys that text (OWASP LLM01 prompt injection, LLM06 excessive agency) |
|
|
78
43
|
| `supply-chain` | a dependency, lockfile, base image, or GitHub Action | the version, the pin (a digest or a SHA checked against its tag), and the permissions the workflow runs with |
|
|
79
44
|
| `sandbox` | a sandbox or pod manifest, a capability, or a network policy | which isolation property changed, and against whom |
|
|
80
45
|
| `agent-def` | an agent definition, skill, role prompt, `.omp/` config, or `AGENTS.md` | whether this diff can steer its own reviewers, and why this edit is trustworthy anyway |
|
|
81
|
-
| `transport` | TLS
|
|
46
|
+
| `transport` | TLS or certificate verification, a signature, an HMAC, a randomness source, or a read or write that untrusted input sizes with no bound | what changed, the check or bound it relies on, and the ASVS V11 or V12 identifier it maps to |
|
|
47
|
+
|
|
48
|
+
- Cite an OWASP ASVS v5.0.0 identifier where one applies (`v5.0.0-1.2.5` style).
|
|
49
|
+
- A security finding with no stated exploit path is not a finding. Call it hardening and rank it Minor. A security finding that states an exploit path is always its own finding at its real priority. Never put it in the hardening items.
|
|
50
|
+
- Report at most two hardening items, ranked. Put the rest in one hardening paragraph.
|
|
51
|
+
- Start each security finding with its row's tag, `Security[<tag>]:`, so readers can count findings by row.
|
|
52
|
+
- End the report with one `Security:` line: each touched row's tag and its answer with file:line, or `Security: no sensitive surface in this diff.` when the diff touches none.
|
|
53
|
+
|
|
54
|
+
## Findings
|
|
55
|
+
|
|
56
|
+
- Never misreport priority. Developers who get false High findings stop listening. Trace each issue end to end.
|
|
57
|
+
- Never report a finding with research still open. If you can read the code that settles it, read it. Not: "the client has issue X, but if the backend handles it, this is ok."
|
|
58
|
+
|
|
59
|
+
## Verdict
|
|
60
|
+
|
|
61
|
+
Make the first line of the report the verdict, in exactly this form, with the short sha of the head commit you reviewed (`git rev-parse --short=8 HEAD`):
|
|
82
62
|
|
|
83
|
-
|
|
63
|
+
- `Verdict: CHANGES at <sha>` when the report has a finding that the author must fix before merge.
|
|
64
|
+
- `Verdict: APPROVE at <sha>` when it has none. Hardening items alone do not block.
|
|
84
65
|
|
|
85
|
-
|
|
86
|
-
If you report issues as High priority when they are not in fact high priority / meaningful issues, devs will lose trust in you and stop listening to you over time.
|
|
87
|
-
Never misreport priority or importance. Trace issues end to end and report only what the evidence supports.
|
|
66
|
+
A PR gate can read the verdict from the first line of a posted report, and it reads only that line. Put nothing before the verdict.
|
|
88
67
|
|
|
89
|
-
|
|
90
|
-
IF you have medium-to-high priority / risk findings, and there is a PR for this branch, then check the PR/MR discussion using gh/glab cli to see if there are comments from BugBot or others present.
|
|
91
|
-
If so, take their findings into account. If they found issues you missed, evaluate them to determine if they are valid and include them in your report. If they found some of the same issues you did, see if there is anything from their findings that are worth incorporating into your response.
|
|
92
|
-
Flag issues found by BugBot or others in the PR/MR discussion that you include in your report.
|
|
68
|
+
## PR discussion
|
|
93
69
|
|
|
70
|
+
Only after your independent audit, and only when you have Medium-to-High findings and the branch has a PR:
|
|
94
71
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
- Be rigorous, careful, and specific about what the evidence supports.
|
|
72
|
+
1. Read the PR/MR discussion with `gh` or `glab` for comments from BugBot or others.
|
|
73
|
+
2. Check their findings. Include the valid ones you missed, and add what is useful from the ones you share.
|
|
74
|
+
3. Mark each finding that came from that discussion.
|