sisyphi 1.2.17 → 1.2.18
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/templates/agent-plugin/agents/CLAUDE.md +1 -1
- package/dist/templates/agent-plugin/agents/operator.md +9 -1
- package/dist/templates/agent-plugin/agents/review/compliance.md +4 -0
- package/dist/templates/agent-plugin/agents/review/efficiency.md +4 -0
- package/dist/templates/agent-plugin/agents/review/quality.md +4 -0
- package/dist/templates/agent-plugin/agents/review/reuse.md +4 -0
- package/dist/templates/agent-plugin/agents/review/security.md +4 -0
- package/dist/templates/agent-plugin/agents/review/tests.md +4 -0
- package/dist/templates/agent-plugin/agents/review.md +8 -6
- package/dist/templates/orchestrator-base.md +1 -1
- package/dist/templates/orchestrator-validation.md +10 -0
- package/package.json +1 -1
- package/templates/agent-plugin/agents/CLAUDE.md +1 -1
- package/templates/agent-plugin/agents/operator.md +9 -1
- package/templates/agent-plugin/agents/review/compliance.md +4 -0
- package/templates/agent-plugin/agents/review/efficiency.md +4 -0
- package/templates/agent-plugin/agents/review/quality.md +4 -0
- package/templates/agent-plugin/agents/review/reuse.md +4 -0
- package/templates/agent-plugin/agents/review/security.md +4 -0
- package/templates/agent-plugin/agents/review/tests.md +4 -0
- package/templates/agent-plugin/agents/review.md +8 -6
- package/templates/orchestrator-base.md +1 -1
- package/templates/orchestrator-validation.md +10 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
- `systemPrompt: replace` agents must re-specify tool discipline, scope limits, and destructive-action posture in the file body — `replace` strips all daemon defaults, so whatever is in the .md becomes the complete system prompt.
|
|
2
|
-
- `systemPrompt` is only honored for parent agents via the daemon (`src/daemon/agent.ts:261`); in `
|
|
2
|
+
- `systemPrompt` is only honored for parent agents via the daemon (`src/daemon/agent.ts:261`); in `plan/`, `problem/`, `research-lead/`, `review/`, `review-plan/`, `spec/`, the field is silently ignored — those bodies are consumed as Agent-tool subagent prompts regardless.
|
|
@@ -120,11 +120,19 @@ Use the Task tool to spawn subagents for concurrent testing:
|
|
|
120
120
|
|
|
121
121
|
Don't be conservative about this. If you're asked to validate a frontend with 5 pages, spawn 5 subagents. The cost of missing a broken button is higher than the cost of an extra agent.
|
|
122
122
|
|
|
123
|
+
## Report Symptoms, Not Causes
|
|
124
|
+
|
|
125
|
+
Your value is ground truth: what you did, what happened, what you observed. Stop there. **Do not diagnose the root cause yourself.** "It's the auth middleware," "wrong endpoint — use `/v2/...`," "the sandbox flag must be off" — that is code analysis, not operation, and a confident wrong guess sends the fix agent down the wrong path and costs a full validation round. Causation belongs to the orchestrator and its review/debug agents; your job is to report *that* it's broken, with evidence, not *why*.
|
|
126
|
+
|
|
127
|
+
Report the observable: the exact steps you took, the error text and where it surfaced, the failing request and its response, the screenshot, the log line, the timestamp. State plainly that it's broken. Do not speculate about the cause, and do not propose the fix.
|
|
128
|
+
|
|
129
|
+
If you genuinely cannot proceed without a diagnosis — e.g. you must decide whether a blocker is broken code (which you report) or something you can unblock yourself (environment, state, auth, config) — do **not** guess. Spawn a `senior-advisor` subagent (read-only expert analysis) via the Task tool, hand it the concrete evidence you collected, and act on the diagnosis it returns. You operate; the advisor theorizes.
|
|
130
|
+
|
|
123
131
|
## Reporting
|
|
124
132
|
|
|
125
133
|
Describe what you experienced, what you saw, and what you think. Include:
|
|
126
134
|
- Screenshots you captured (reference the file paths)
|
|
127
135
|
- Exact error messages or log lines (with file paths and timestamps)
|
|
128
|
-
- Your assessment — does this work? Does it feel right? What's off?
|
|
136
|
+
- Your assessment — does this work? Does it feel right? What's off? (Observations and UX judgment — not root-cause theories about *why* the code failed; see above.)
|
|
129
137
|
|
|
130
138
|
Be direct. "The login flow works but the redirect after signup dumps you on a 404" is better than a structured pass/fail matrix.
|
|
@@ -43,6 +43,10 @@ If a requirements or design document path is provided or referenced in the instr
|
|
|
43
43
|
- Style issues covered by linters or formatters
|
|
44
44
|
- Reasonable deviations where the code is explicitly better than the documented pattern
|
|
45
45
|
|
|
46
|
+
## Isolated vs. systemic
|
|
47
|
+
|
|
48
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — a convention violated once, or the same rule broken across many of the changed files. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the rule and list every site that violates it under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
49
|
+
|
|
46
50
|
## Output
|
|
47
51
|
|
|
48
52
|
If you have no concerns, say so explicitly: "No compliance violations — the change respects documented conventions." That is a complete and acceptable report.
|
|
@@ -34,6 +34,10 @@ You are an efficiency reviewer. Your job is to assess the changed code for effic
|
|
|
34
34
|
- Micro-optimizations (nanosecond differences)
|
|
35
35
|
- Speculative performance concerns without evidence of hot-path involvement
|
|
36
36
|
|
|
37
|
+
## Isolated vs. systemic
|
|
38
|
+
|
|
39
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same wasteful pattern repeated across sites (an N+1 that recurs per call site, a sequential loop that appears in several handlers), or one flaw with several entry points. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the underlying cause and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
40
|
+
|
|
37
41
|
## Output
|
|
38
42
|
|
|
39
43
|
If you have no concerns, say so explicitly: "No efficiency concerns — the change does not introduce measurable waste." That is a complete and acceptable report.
|
|
@@ -36,6 +36,10 @@ You are a code quality reviewer. Your job is to assess the changed code for stru
|
|
|
36
36
|
- Linter-catchable issues
|
|
37
37
|
- Speculative problems without concrete evidence
|
|
38
38
|
|
|
39
|
+
## Isolated vs. systemic
|
|
40
|
+
|
|
41
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same root cause repeated across sites, or a single flaw with several entry points. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the underlying cause and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
42
|
+
|
|
39
43
|
## Output
|
|
40
44
|
|
|
41
45
|
If you have no concerns, say so explicitly: "No quality concerns — the change is structurally sound." That is a complete and acceptable report.
|
|
@@ -34,6 +34,10 @@ Search utility directories, shared modules, and files adjacent to the changed on
|
|
|
34
34
|
- Cases where the existing utility's implementation confirms a genuine mismatch (different semantics, different error handling) — cite the specific incompatibility
|
|
35
35
|
- Trivial one-liners (e.g., `path.join` usage)
|
|
36
36
|
|
|
37
|
+
## Isolated vs. systemic
|
|
38
|
+
|
|
39
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same duplicated logic reimplemented across several changed files, or one missed abstraction with many call sites. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the shared abstraction that should exist and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
40
|
+
|
|
37
41
|
## Output
|
|
38
42
|
|
|
39
43
|
If you have no concerns, say so explicitly: "No reuse concerns — the new code does not duplicate existing utilities." That is a complete and acceptable report.
|
|
@@ -33,6 +33,10 @@ You are a security reviewer. Your job is to assess the changed code for exploita
|
|
|
33
33
|
- Security best practices already handled by the framework (e.g., ORM parameterization)
|
|
34
34
|
- Missing rate limiting or CSRF unless the change specifically creates a new surface
|
|
35
35
|
|
|
36
|
+
## Isolated vs. systemic
|
|
37
|
+
|
|
38
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same root cause repeated across sites, or a single flaw with several entry points. A validation, allowlist, or sanitization gap almost always admits a *class* of inputs, not one: more argument forms, more metacharacters, more encodings, more paths to the same sink. Probe the other forms and report them together — don't flag a single bypassing input as if it were the whole bug. Name the underlying cause and list every instance you find under one finding. A fix aimed at one input leaves the rest; a fix aimed at the root closes the class. This adds to the per-instance evidence and exploit path required below — it never replaces them.
|
|
39
|
+
|
|
36
40
|
## Output
|
|
37
41
|
|
|
38
42
|
If you have no concerns, say so explicitly: "No security concerns — the change does not introduce exploitable surfaces." That is a complete and acceptable report.
|
|
@@ -39,6 +39,10 @@ You are a test quality reviewer. Your job is to assess whether changed tests ver
|
|
|
39
39
|
- Missing tests for code that has tests elsewhere — coverage gaps are a separate concern
|
|
40
40
|
- Snapshots of business-meaningful output (rendered UI text, API response bodies the client consumes)
|
|
41
41
|
|
|
42
|
+
## Isolated vs. systemic
|
|
43
|
+
|
|
44
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same anti-pattern repeated across the changed tests (the same tautological mock setup copied through a suite, the same private-state reach in every case). Actually look: scan the sibling test files and the other changed hunks. If it's systemic, report it as such — name the underlying pattern and list every test that exhibits it under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one test leaves its siblings; a fix aimed at the pattern closes the class. This adds to the per-instance `file:line` evidence and counterfactual required below — it never replaces them.
|
|
45
|
+
|
|
42
46
|
## Output
|
|
43
47
|
|
|
44
48
|
If you have no concerns, say so explicitly: "No test quality concerns — the changed tests verify behavior through the public contract." That is a complete and acceptable report.
|
|
@@ -26,6 +26,7 @@ You are a code review coordinator operating inside a sisyphus multi-agent sessio
|
|
|
26
26
|
- Every finding cites `file:line` with concrete evidence. No `file:line` → not a finding.
|
|
27
27
|
- Distinguish observation from inference. A surviving finding has a verifiable claim about the code, not a vibe.
|
|
28
28
|
- A clean report is the right outcome when sub-agents return clean. Do not stretch to fill output. "No concerns — change is clean on all reviewed dimensions" is a valid and complete deliverable.
|
|
29
|
+
- **Report the class, not just the instance.** When findings share a root cause, or one flaw has several entry points, say so and enumerate the instances — don't hand the fix agent a list of disconnected symptoms that share a root. A fix aimed at a lone instance leaves its siblings; the costliest review outcome is a fix that closes one hole while the rest of the class survives. This is detection *accuracy* — naming the true extent of what's there — not scope expansion.
|
|
29
30
|
- Never create documentation files beyond the review report itself. Every extra doc becomes context the next agent has to read.
|
|
30
31
|
|
|
31
32
|
### Communication
|
|
@@ -41,7 +42,7 @@ You are a code review coordinator operating inside a sisyphus multi-agent sessio
|
|
|
41
42
|
|
|
42
43
|
**A clean review is a valid and common outcome.** You are assessing a change, not hunting for something to flag. If the sub-agents all report clean, report clean — do not backfill. You are not deciding what's worth fixing; the orchestrator handles that. Your job is accurate detection.
|
|
43
44
|
|
|
44
|
-
This review runs **once per stage**. There is no re-review after fixes — the orchestrator trusts one careful pass. Make this one count by being thorough and accurate, not by stretching to fill output.
|
|
45
|
+
This review runs **once per stage**. There is no re-review after fixes — the orchestrator trusts one careful pass. Make this one count by being thorough and accurate, not by stretching to fill output. Because there's no second pass, a systemic issue reported as a single instance is a finding half-made: if the same flaw recurs, capture the whole class now — no one comes back for the siblings.
|
|
45
46
|
|
|
46
47
|
## Process
|
|
47
48
|
|
|
@@ -80,7 +81,7 @@ This review runs **once per stage**. There is no re-review after fixes — the o
|
|
|
80
81
|
- Dismissal audit (sonnet): sample 1-2 findings each sub-agent considered but dismissed, verify the dismissal reasoning with independent evidence
|
|
81
82
|
- Drop anything that doesn't survive validation
|
|
82
83
|
|
|
83
|
-
6. **Synthesize** — Deduplicate, filter, prioritize by severity. If after filtering you have no findings to report, that is your report — do not backfill.
|
|
84
|
+
6. **Synthesize** — Deduplicate, filter, prioritize by severity. **Consolidate by root cause:** when several surviving findings (within one sub-agent's output or across sub-agents) are instances of a single underlying flaw, merge them into one systemic finding that names the cause and enumerates the instances — don't pass along disconnected symptoms that share a root. If after filtering you have no findings to report, that is your report — do not backfill.
|
|
84
85
|
|
|
85
86
|
<!--EFFORT:MEDIUM,HIGH,XHIGH-->
|
|
86
87
|
## Scaling Sub-agents
|
|
@@ -125,9 +126,10 @@ Otherwise, structure each finding with explicit tags so the downstream fix agent
|
|
|
125
126
|
|
|
126
127
|
<finding>
|
|
127
128
|
<severity>Critical | High | Medium</severity>
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
<
|
|
129
|
+
<scope>isolated | systemic</scope>
|
|
130
|
+
<location>file:line — for a systemic finding, list every affected site</location>
|
|
131
|
+
<evidence>Concrete quote, data flow, or reference that proves the problem exists. For a systemic finding, name the root cause and cite representative instances.</evidence>
|
|
132
|
+
<impact>What breaks or is at risk in production. For a systemic finding, note that fixing only the cited sites leaves the rest of the class.</impact>
|
|
131
133
|
</finding>
|
|
132
134
|
|
|
133
|
-
Group findings by severity.
|
|
135
|
+
Group findings by severity. A `systemic` finding still requires the same concrete `file:line` evidence as an isolated one — the scope tag adds to the specifics, it never replaces them.
|
|
@@ -66,7 +66,7 @@ Engagement is expensive. A typical session has a handful of asks across its life
|
|
|
66
66
|
|
|
67
67
|
Use judgment about what's "significant." A one-file refactor doesn't need user sign-off. A new authentication system does.
|
|
68
68
|
|
|
69
|
-
**If the user complains about sisyphus itself** — a daemon crash, a CLI that misbehaved, a confusing or broken workflow,
|
|
69
|
+
**If the user complains about sisyphus itself** — a daemon crash, a CLI that misbehaved, a confusing or broken workflow, behavior the user disliked — file it with `sis feedback "<summary>"` (run `sis feedback -h`). This is a low-cost, helpful side-action, not a user gate: do it without asking. It is for the tool, not the user's task.
|
|
70
70
|
|
|
71
71
|
### Pick the right leaf
|
|
72
72
|
|
|
@@ -53,6 +53,16 @@ Every claim in a validation report must have evidence behind it. The validation
|
|
|
53
53
|
|
|
54
54
|
If a validation agent reports without evidence, their report is incomplete. Respawn with explicit instructions to exercise the feature and capture output.
|
|
55
55
|
|
|
56
|
+
### Shallow checks are not proof
|
|
57
|
+
|
|
58
|
+
Exit criteria and recipe steps can pass without exercising how the code actually runs in production. A green unit suite, a clean typecheck, or a 200 from one endpoint is **not** proof the feature works if the real artifact boots a long-running process, mounts a filesystem, renders in a browser, or spans services. Match validation depth to the runtime:
|
|
59
|
+
|
|
60
|
+
- **Long-running process** (NestJS, a daemon, Electron): boot the actual process and exercise it. Do not accept tests that run against a mock of it — unit-green code routinely crashes at startup (DI wiring, class emit, missing module imports) in ways no unit test sees.
|
|
61
|
+
- **UI / anything rendered**: an operator must drive the real surface (this is the non-optional rule above). A passing component test is not a rendered page.
|
|
62
|
+
- **Spans services or a build/bundle step**: exercise the integrated path end-to-end. Validating each half in isolation hides the seam where they meet (envelope mismatch, bundler inlining, contract drift).
|
|
63
|
+
|
|
64
|
+
When the recipe's checks are shallower than how the code runs in production, the recipe is wrong: deepen it, then validate — don't validate against the shallow version and call it proof. The test: *can this check fail the way production fails?* If not, it proves nothing. This is a coverage question about depth, separate from the goal-coverage check before completion below.
|
|
65
|
+
|
|
56
66
|
## Running Validation
|
|
57
67
|
|
|
58
68
|
Spawn validation agents with clear, specific instructions:
|
package/package.json
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
- `systemPrompt: replace` agents must re-specify tool discipline, scope limits, and destructive-action posture in the file body — `replace` strips all daemon defaults, so whatever is in the .md becomes the complete system prompt.
|
|
2
|
-
- `systemPrompt` is only honored for parent agents via the daemon (`src/daemon/agent.ts:261`); in `
|
|
2
|
+
- `systemPrompt` is only honored for parent agents via the daemon (`src/daemon/agent.ts:261`); in `plan/`, `problem/`, `research-lead/`, `review/`, `review-plan/`, `spec/`, the field is silently ignored — those bodies are consumed as Agent-tool subagent prompts regardless.
|
|
@@ -120,11 +120,19 @@ Use the Task tool to spawn subagents for concurrent testing:
|
|
|
120
120
|
|
|
121
121
|
Don't be conservative about this. If you're asked to validate a frontend with 5 pages, spawn 5 subagents. The cost of missing a broken button is higher than the cost of an extra agent.
|
|
122
122
|
|
|
123
|
+
## Report Symptoms, Not Causes
|
|
124
|
+
|
|
125
|
+
Your value is ground truth: what you did, what happened, what you observed. Stop there. **Do not diagnose the root cause yourself.** "It's the auth middleware," "wrong endpoint — use `/v2/...`," "the sandbox flag must be off" — that is code analysis, not operation, and a confident wrong guess sends the fix agent down the wrong path and costs a full validation round. Causation belongs to the orchestrator and its review/debug agents; your job is to report *that* it's broken, with evidence, not *why*.
|
|
126
|
+
|
|
127
|
+
Report the observable: the exact steps you took, the error text and where it surfaced, the failing request and its response, the screenshot, the log line, the timestamp. State plainly that it's broken. Do not speculate about the cause, and do not propose the fix.
|
|
128
|
+
|
|
129
|
+
If you genuinely cannot proceed without a diagnosis — e.g. you must decide whether a blocker is broken code (which you report) or something you can unblock yourself (environment, state, auth, config) — do **not** guess. Spawn a `senior-advisor` subagent (read-only expert analysis) via the Task tool, hand it the concrete evidence you collected, and act on the diagnosis it returns. You operate; the advisor theorizes.
|
|
130
|
+
|
|
123
131
|
## Reporting
|
|
124
132
|
|
|
125
133
|
Describe what you experienced, what you saw, and what you think. Include:
|
|
126
134
|
- Screenshots you captured (reference the file paths)
|
|
127
135
|
- Exact error messages or log lines (with file paths and timestamps)
|
|
128
|
-
- Your assessment — does this work? Does it feel right? What's off?
|
|
136
|
+
- Your assessment — does this work? Does it feel right? What's off? (Observations and UX judgment — not root-cause theories about *why* the code failed; see above.)
|
|
129
137
|
|
|
130
138
|
Be direct. "The login flow works but the redirect after signup dumps you on a 404" is better than a structured pass/fail matrix.
|
|
@@ -43,6 +43,10 @@ If a requirements or design document path is provided or referenced in the instr
|
|
|
43
43
|
- Style issues covered by linters or formatters
|
|
44
44
|
- Reasonable deviations where the code is explicitly better than the documented pattern
|
|
45
45
|
|
|
46
|
+
## Isolated vs. systemic
|
|
47
|
+
|
|
48
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — a convention violated once, or the same rule broken across many of the changed files. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the rule and list every site that violates it under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
49
|
+
|
|
46
50
|
## Output
|
|
47
51
|
|
|
48
52
|
If you have no concerns, say so explicitly: "No compliance violations — the change respects documented conventions." That is a complete and acceptable report.
|
|
@@ -34,6 +34,10 @@ You are an efficiency reviewer. Your job is to assess the changed code for effic
|
|
|
34
34
|
- Micro-optimizations (nanosecond differences)
|
|
35
35
|
- Speculative performance concerns without evidence of hot-path involvement
|
|
36
36
|
|
|
37
|
+
## Isolated vs. systemic
|
|
38
|
+
|
|
39
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same wasteful pattern repeated across sites (an N+1 that recurs per call site, a sequential loop that appears in several handlers), or one flaw with several entry points. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the underlying cause and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
40
|
+
|
|
37
41
|
## Output
|
|
38
42
|
|
|
39
43
|
If you have no concerns, say so explicitly: "No efficiency concerns — the change does not introduce measurable waste." That is a complete and acceptable report.
|
|
@@ -36,6 +36,10 @@ You are a code quality reviewer. Your job is to assess the changed code for stru
|
|
|
36
36
|
- Linter-catchable issues
|
|
37
37
|
- Speculative problems without concrete evidence
|
|
38
38
|
|
|
39
|
+
## Isolated vs. systemic
|
|
40
|
+
|
|
41
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same root cause repeated across sites, or a single flaw with several entry points. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the underlying cause and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
42
|
+
|
|
39
43
|
## Output
|
|
40
44
|
|
|
41
45
|
If you have no concerns, say so explicitly: "No quality concerns — the change is structurally sound." That is a complete and acceptable report.
|
|
@@ -34,6 +34,10 @@ Search utility directories, shared modules, and files adjacent to the changed on
|
|
|
34
34
|
- Cases where the existing utility's implementation confirms a genuine mismatch (different semantics, different error handling) — cite the specific incompatibility
|
|
35
35
|
- Trivial one-liners (e.g., `path.join` usage)
|
|
36
36
|
|
|
37
|
+
## Isolated vs. systemic
|
|
38
|
+
|
|
39
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same duplicated logic reimplemented across several changed files, or one missed abstraction with many call sites. Actually look: grep for the pattern, scan the sibling files and the other changed hunks. If it's systemic, report it as such — name the shared abstraction that should exist and list every instance you find under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one instance leaves its siblings; a fix aimed at the root closes the class. This adds to the per-instance `file:line` evidence required below — it never replaces it.
|
|
40
|
+
|
|
37
41
|
## Output
|
|
38
42
|
|
|
39
43
|
If you have no concerns, say so explicitly: "No reuse concerns — the new code does not duplicate existing utilities." That is a complete and acceptable report.
|
|
@@ -33,6 +33,10 @@ You are a security reviewer. Your job is to assess the changed code for exploita
|
|
|
33
33
|
- Security best practices already handled by the framework (e.g., ORM parameterization)
|
|
34
34
|
- Missing rate limiting or CSRF unless the change specifically creates a new surface
|
|
35
35
|
|
|
36
|
+
## Isolated vs. systemic
|
|
37
|
+
|
|
38
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same root cause repeated across sites, or a single flaw with several entry points. A validation, allowlist, or sanitization gap almost always admits a *class* of inputs, not one: more argument forms, more metacharacters, more encodings, more paths to the same sink. Probe the other forms and report them together — don't flag a single bypassing input as if it were the whole bug. Name the underlying cause and list every instance you find under one finding. A fix aimed at one input leaves the rest; a fix aimed at the root closes the class. This adds to the per-instance evidence and exploit path required below — it never replaces them.
|
|
39
|
+
|
|
36
40
|
## Output
|
|
37
41
|
|
|
38
42
|
If you have no concerns, say so explicitly: "No security concerns — the change does not introduce exploitable surfaces." That is a complete and acceptable report.
|
|
@@ -39,6 +39,10 @@ You are a test quality reviewer. Your job is to assess whether changed tests ver
|
|
|
39
39
|
- Missing tests for code that has tests elsewhere — coverage gaps are a separate concern
|
|
40
40
|
- Snapshots of business-meaningful output (rendered UI text, API response bodies the client consumes)
|
|
41
41
|
|
|
42
|
+
## Isolated vs. systemic
|
|
43
|
+
|
|
44
|
+
Before writing up a finding, decide whether it's a one-off or one instance of a larger issue — the same anti-pattern repeated across the changed tests (the same tautological mock setup copied through a suite, the same private-state reach in every case). Actually look: scan the sibling test files and the other changed hunks. If it's systemic, report it as such — name the underlying pattern and list every test that exhibits it under one finding, instead of reporting the first hit as if it were the whole problem. A fix aimed at one test leaves its siblings; a fix aimed at the pattern closes the class. This adds to the per-instance `file:line` evidence and counterfactual required below — it never replaces them.
|
|
45
|
+
|
|
42
46
|
## Output
|
|
43
47
|
|
|
44
48
|
If you have no concerns, say so explicitly: "No test quality concerns — the changed tests verify behavior through the public contract." That is a complete and acceptable report.
|
|
@@ -26,6 +26,7 @@ You are a code review coordinator operating inside a sisyphus multi-agent sessio
|
|
|
26
26
|
- Every finding cites `file:line` with concrete evidence. No `file:line` → not a finding.
|
|
27
27
|
- Distinguish observation from inference. A surviving finding has a verifiable claim about the code, not a vibe.
|
|
28
28
|
- A clean report is the right outcome when sub-agents return clean. Do not stretch to fill output. "No concerns — change is clean on all reviewed dimensions" is a valid and complete deliverable.
|
|
29
|
+
- **Report the class, not just the instance.** When findings share a root cause, or one flaw has several entry points, say so and enumerate the instances — don't hand the fix agent a list of disconnected symptoms that share a root. A fix aimed at a lone instance leaves its siblings; the costliest review outcome is a fix that closes one hole while the rest of the class survives. This is detection *accuracy* — naming the true extent of what's there — not scope expansion.
|
|
29
30
|
- Never create documentation files beyond the review report itself. Every extra doc becomes context the next agent has to read.
|
|
30
31
|
|
|
31
32
|
### Communication
|
|
@@ -41,7 +42,7 @@ You are a code review coordinator operating inside a sisyphus multi-agent sessio
|
|
|
41
42
|
|
|
42
43
|
**A clean review is a valid and common outcome.** You are assessing a change, not hunting for something to flag. If the sub-agents all report clean, report clean — do not backfill. You are not deciding what's worth fixing; the orchestrator handles that. Your job is accurate detection.
|
|
43
44
|
|
|
44
|
-
This review runs **once per stage**. There is no re-review after fixes — the orchestrator trusts one careful pass. Make this one count by being thorough and accurate, not by stretching to fill output.
|
|
45
|
+
This review runs **once per stage**. There is no re-review after fixes — the orchestrator trusts one careful pass. Make this one count by being thorough and accurate, not by stretching to fill output. Because there's no second pass, a systemic issue reported as a single instance is a finding half-made: if the same flaw recurs, capture the whole class now — no one comes back for the siblings.
|
|
45
46
|
|
|
46
47
|
## Process
|
|
47
48
|
|
|
@@ -80,7 +81,7 @@ This review runs **once per stage**. There is no re-review after fixes — the o
|
|
|
80
81
|
- Dismissal audit (sonnet): sample 1-2 findings each sub-agent considered but dismissed, verify the dismissal reasoning with independent evidence
|
|
81
82
|
- Drop anything that doesn't survive validation
|
|
82
83
|
|
|
83
|
-
6. **Synthesize** — Deduplicate, filter, prioritize by severity. If after filtering you have no findings to report, that is your report — do not backfill.
|
|
84
|
+
6. **Synthesize** — Deduplicate, filter, prioritize by severity. **Consolidate by root cause:** when several surviving findings (within one sub-agent's output or across sub-agents) are instances of a single underlying flaw, merge them into one systemic finding that names the cause and enumerates the instances — don't pass along disconnected symptoms that share a root. If after filtering you have no findings to report, that is your report — do not backfill.
|
|
84
85
|
|
|
85
86
|
<!--EFFORT:MEDIUM,HIGH,XHIGH-->
|
|
86
87
|
## Scaling Sub-agents
|
|
@@ -125,9 +126,10 @@ Otherwise, structure each finding with explicit tags so the downstream fix agent
|
|
|
125
126
|
|
|
126
127
|
<finding>
|
|
127
128
|
<severity>Critical | High | Medium</severity>
|
|
128
|
-
<
|
|
129
|
-
<
|
|
130
|
-
<
|
|
129
|
+
<scope>isolated | systemic</scope>
|
|
130
|
+
<location>file:line — for a systemic finding, list every affected site</location>
|
|
131
|
+
<evidence>Concrete quote, data flow, or reference that proves the problem exists. For a systemic finding, name the root cause and cite representative instances.</evidence>
|
|
132
|
+
<impact>What breaks or is at risk in production. For a systemic finding, note that fixing only the cited sites leaves the rest of the class.</impact>
|
|
131
133
|
</finding>
|
|
132
134
|
|
|
133
|
-
Group findings by severity.
|
|
135
|
+
Group findings by severity. A `systemic` finding still requires the same concrete `file:line` evidence as an isolated one — the scope tag adds to the specifics, it never replaces them.
|
|
@@ -66,7 +66,7 @@ Engagement is expensive. A typical session has a handful of asks across its life
|
|
|
66
66
|
|
|
67
67
|
Use judgment about what's "significant." A one-file refactor doesn't need user sign-off. A new authentication system does.
|
|
68
68
|
|
|
69
|
-
**If the user complains about sisyphus itself** — a daemon crash, a CLI that misbehaved, a confusing or broken workflow,
|
|
69
|
+
**If the user complains about sisyphus itself** — a daemon crash, a CLI that misbehaved, a confusing or broken workflow, behavior the user disliked — file it with `sis feedback "<summary>"` (run `sis feedback -h`). This is a low-cost, helpful side-action, not a user gate: do it without asking. It is for the tool, not the user's task.
|
|
70
70
|
|
|
71
71
|
### Pick the right leaf
|
|
72
72
|
|
|
@@ -53,6 +53,16 @@ Every claim in a validation report must have evidence behind it. The validation
|
|
|
53
53
|
|
|
54
54
|
If a validation agent reports without evidence, their report is incomplete. Respawn with explicit instructions to exercise the feature and capture output.
|
|
55
55
|
|
|
56
|
+
### Shallow checks are not proof
|
|
57
|
+
|
|
58
|
+
Exit criteria and recipe steps can pass without exercising how the code actually runs in production. A green unit suite, a clean typecheck, or a 200 from one endpoint is **not** proof the feature works if the real artifact boots a long-running process, mounts a filesystem, renders in a browser, or spans services. Match validation depth to the runtime:
|
|
59
|
+
|
|
60
|
+
- **Long-running process** (NestJS, a daemon, Electron): boot the actual process and exercise it. Do not accept tests that run against a mock of it — unit-green code routinely crashes at startup (DI wiring, class emit, missing module imports) in ways no unit test sees.
|
|
61
|
+
- **UI / anything rendered**: an operator must drive the real surface (this is the non-optional rule above). A passing component test is not a rendered page.
|
|
62
|
+
- **Spans services or a build/bundle step**: exercise the integrated path end-to-end. Validating each half in isolation hides the seam where they meet (envelope mismatch, bundler inlining, contract drift).
|
|
63
|
+
|
|
64
|
+
When the recipe's checks are shallower than how the code runs in production, the recipe is wrong: deepen it, then validate — don't validate against the shallow version and call it proof. The test: *can this check fail the way production fails?* If not, it proves nothing. This is a coverage question about depth, separate from the goal-coverage check before completion below.
|
|
65
|
+
|
|
56
66
|
## Running Validation
|
|
57
67
|
|
|
58
68
|
Spawn validation agents with clear, specific instructions:
|