liteagents 2.8.3 → 2.10.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.
Files changed (113) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +25 -31
  3. package/installer/cli.js +6 -2
  4. package/package.json +3 -3
  5. package/packages/ampcode/AGENT.md +9 -15
  6. package/packages/ampcode/agents/code-developer.md +11 -12
  7. package/packages/ampcode/agents/quality-assurance.md +1 -1
  8. package/packages/{droid/commands/systematic-debugging.md → ampcode/commands/debug-method.md} +9 -9
  9. package/packages/ampcode/commands/diff-review.md +78 -0
  10. package/packages/ampcode/commands/friction/friction.js +348 -122
  11. package/packages/ampcode/commands/optimize.md +45 -4
  12. package/packages/ampcode/commands/refactor.md +33 -1
  13. package/packages/ampcode/commands/remember.md +107 -46
  14. package/packages/ampcode/commands/security.md +28 -1
  15. package/packages/ampcode/commands/stash.md +7 -0
  16. package/packages/{droid/commands/test-driven-development.md → ampcode/commands/tdd-flow.md} +2 -2
  17. package/packages/ampcode/commands/test-generate.md +64 -15
  18. package/packages/{opencode/command/testing-anti-patterns.md → ampcode/commands/test-traps.md} +77 -3
  19. package/packages/{droid/commands/root-cause-tracing.md → ampcode/commands/trace-back.md} +3 -3
  20. package/packages/ampcode/commands/{verification-before-completion.md → verify-done.md} +3 -3
  21. package/packages/claude/CLAUDE.md +9 -15
  22. package/packages/claude/agents/code-developer.md +11 -12
  23. package/packages/claude/agents/quality-assurance.md +1 -1
  24. package/packages/claude/commands/diff-review.md +78 -0
  25. package/packages/claude/commands/friction/friction.js +348 -122
  26. package/packages/claude/commands/optimize.md +45 -4
  27. package/packages/claude/commands/refactor.md +33 -1
  28. package/packages/claude/commands/remember.md +107 -46
  29. package/packages/claude/commands/security.md +28 -1
  30. package/packages/claude/commands/stash.md +7 -0
  31. package/packages/claude/commands/test-generate.md +64 -15
  32. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package-lock.json +3 -3
  33. package/packages/claude/skills/{systematic-debugging → debug-method}/CREATION-LOG.md +1 -1
  34. package/packages/claude/skills/{systematic-debugging → debug-method}/SKILL.md +9 -9
  35. package/packages/claude/skills/{systematic-debugging → debug-method}/test-academic.md +1 -1
  36. package/packages/claude/skills/{systematic-debugging → debug-method}/test-pressure-1.md +1 -1
  37. package/packages/claude/skills/{systematic-debugging → debug-method}/test-pressure-2.md +1 -1
  38. package/packages/claude/skills/{systematic-debugging → debug-method}/test-pressure-3.md +1 -1
  39. package/packages/claude/skills/{test-driven-development → tdd-flow}/SKILL.md +3 -3
  40. package/packages/claude/skills/{testing-anti-patterns → test-traps}/SKILL.md +77 -3
  41. package/packages/claude/skills/{root-cause-tracing → trace-back}/SKILL.md +3 -3
  42. package/packages/claude/skills/{verification-before-completion → verify-done}/SKILL.md +3 -3
  43. package/packages/droid/AGENTS.md +8 -14
  44. package/packages/{opencode/command/systematic-debugging.md → droid/commands/debug-method.md} +9 -9
  45. package/packages/droid/commands/diff-review.md +78 -0
  46. package/packages/droid/commands/friction/friction.js +348 -122
  47. package/packages/droid/commands/optimize.md +45 -4
  48. package/packages/droid/commands/refactor.md +33 -1
  49. package/packages/droid/commands/remember.md +107 -46
  50. package/packages/droid/commands/security.md +28 -1
  51. package/packages/droid/commands/stash.md +7 -0
  52. package/packages/{opencode/command/test-driven-development.md → droid/commands/tdd-flow.md} +2 -2
  53. package/packages/droid/commands/test-generate.md +64 -15
  54. package/packages/droid/commands/{testing-anti-patterns.md → test-traps.md} +77 -3
  55. package/packages/{opencode/command/root-cause-tracing.md → droid/commands/trace-back.md} +3 -3
  56. package/packages/droid/commands/{verification-before-completion.md → verify-done.md} +3 -3
  57. package/packages/droid/droids/code-developer.md +11 -12
  58. package/packages/droid/droids/quality-assurance.md +1 -1
  59. package/packages/opencode/AGENTS.md +8 -14
  60. package/packages/opencode/agent/code-developer.md +11 -12
  61. package/packages/opencode/agent/quality-assurance.md +1 -1
  62. package/packages/{ampcode/commands/systematic-debugging.md → opencode/command/debug-method.md} +9 -9
  63. package/packages/opencode/command/diff-review.md +78 -0
  64. package/packages/opencode/command/friction/friction.js +348 -122
  65. package/packages/opencode/command/optimize.md +45 -4
  66. package/packages/opencode/command/refactor.md +33 -1
  67. package/packages/opencode/command/remember.md +107 -46
  68. package/packages/opencode/command/security.md +28 -1
  69. package/packages/opencode/command/stash.md +7 -0
  70. package/packages/{ampcode/commands/test-driven-development.md → opencode/command/tdd-flow.md} +2 -2
  71. package/packages/opencode/command/test-generate.md +64 -15
  72. package/packages/{ampcode/commands/testing-anti-patterns.md → opencode/command/test-traps.md} +77 -3
  73. package/packages/{ampcode/commands/root-cause-tracing.md → opencode/command/trace-back.md} +3 -3
  74. package/packages/opencode/command/{verification-before-completion.md → verify-done.md} +3 -3
  75. package/packages/opencode/opencode.jsonc +13 -37
  76. package/packages/subagentic-manual.md +55 -51
  77. package/packages/ampcode/commands/code-review.md +0 -107
  78. package/packages/ampcode/commands/condition-based-waiting.md +0 -122
  79. package/packages/ampcode/commands/debug.md +0 -20
  80. package/packages/ampcode/commands/explain.md +0 -18
  81. package/packages/ampcode/commands/friction.md +0 -139
  82. package/packages/ampcode/commands/git-commit.md +0 -14
  83. package/packages/ampcode/commands/review.md +0 -18
  84. package/packages/claude/commands/debug.md +0 -20
  85. package/packages/claude/commands/explain.md +0 -18
  86. package/packages/claude/commands/friction.md +0 -139
  87. package/packages/claude/commands/git-commit.md +0 -14
  88. package/packages/claude/commands/review.md +0 -18
  89. package/packages/claude/skills/code-review/SKILL.md +0 -107
  90. package/packages/claude/skills/code-review/code-reviewer.md +0 -146
  91. package/packages/claude/skills/condition-based-waiting/SKILL.md +0 -122
  92. package/packages/droid/commands/code-review.md +0 -107
  93. package/packages/droid/commands/condition-based-waiting.md +0 -122
  94. package/packages/droid/commands/debug.md +0 -20
  95. package/packages/droid/commands/explain.md +0 -18
  96. package/packages/droid/commands/friction.md +0 -139
  97. package/packages/droid/commands/git-commit.md +0 -14
  98. package/packages/droid/commands/review.md +0 -18
  99. package/packages/opencode/command/code-review.md +0 -107
  100. package/packages/opencode/command/condition-based-waiting.md +0 -122
  101. package/packages/opencode/command/debug.md +0 -20
  102. package/packages/opencode/command/explain.md +0 -18
  103. package/packages/opencode/command/friction.md +0 -139
  104. package/packages/opencode/command/git-commit.md +0 -14
  105. package/packages/opencode/command/review.md +0 -18
  106. /package/packages/ampcode/commands/{condition-based-waiting → test-traps}/example.ts +0 -0
  107. /package/packages/ampcode/commands/{root-cause-tracing → trace-back}/find-polluter.sh +0 -0
  108. /package/packages/claude/skills/{condition-based-waiting → test-traps}/example.ts +0 -0
  109. /package/packages/claude/skills/{root-cause-tracing → trace-back}/find-polluter.sh +0 -0
  110. /package/packages/droid/commands/{condition-based-waiting → test-traps}/example.ts +0 -0
  111. /package/packages/droid/commands/{root-cause-tracing → trace-back}/find-polluter.sh +0 -0
  112. /package/packages/opencode/command/{condition-based-waiting → test-traps}/example.ts +0 -0
  113. /package/packages/opencode/command/{root-cause-tracing → trace-back}/find-polluter.sh +0 -0
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: testing-anti-patterns
2
+ name: test-traps
3
3
  description: Use when writing or changing tests, adding mocks, or tempted to add test-only methods to production code - prevents testing mock behavior, production pollution with test-only methods, and mocking without understanding dependencies
4
- usage: /testing-anti-patterns <testing-scenario>
4
+ usage: /test-traps <testing-scenario>
5
5
  auto_trigger: true
6
6
  ---
7
7
 
8
- # Testing Anti-Patterns
8
+ # Test Traps
9
9
 
10
10
  ## Overview
11
11
 
@@ -253,6 +253,79 @@ TDD cycle:
253
253
  4. THEN claim complete
254
254
  ```
255
255
 
256
+ ## Anti-Pattern 6: Timeout-Based Waiting
257
+
258
+ **The violation:**
259
+ ```typescript
260
+ // Wait an arbitrary amount of time, then check
261
+ await new Promise(r => setTimeout(r, 50));
262
+ const result = getResult();
263
+ expect(result).toBeDefined();
264
+ ```
265
+
266
+ ```python
267
+ time.sleep(0.5)
268
+ assert get_result() is not None
269
+ ```
270
+
271
+ **Why this is wrong:**
272
+ - Passes on fast machines, fails in CI under load (or vice versa).
273
+ - Either too short (flaky) or too long (slow suite) — every value is wrong somewhere.
274
+ - Hides the actual condition the test cares about.
275
+ - A real bug in the async machinery looks identical to a "too-short sleep."
276
+
277
+ **The fix — poll for the actual condition:**
278
+ ```typescript
279
+ await waitFor(() => getResult() !== undefined);
280
+ const result = getResult();
281
+ expect(result).toBeDefined();
282
+ ```
283
+
284
+ | Scenario | Pattern |
285
+ |----------|---------|
286
+ | Wait for event | `waitFor(() => events.find(e => e.type === 'DONE'))` |
287
+ | Wait for state | `waitFor(() => machine.state === 'ready')` |
288
+ | Wait for count | `waitFor(() => items.length >= 5)` |
289
+ | Wait for file | `waitFor(() => fs.existsSync(path))` |
290
+ | Complex condition | `waitFor(() => obj.ready && obj.value > 10)` |
291
+
292
+ Minimal generic poller:
293
+ ```typescript
294
+ async function waitFor<T>(
295
+ condition: () => T | undefined | null | false,
296
+ description = 'condition',
297
+ timeoutMs = 5000
298
+ ): Promise<T> {
299
+ const start = Date.now();
300
+ while (true) {
301
+ const result = condition();
302
+ if (result) return result;
303
+ if (Date.now() - start > timeoutMs) {
304
+ throw new Error(`Timeout waiting for ${description} after ${timeoutMs}ms`);
305
+ }
306
+ await new Promise(r => setTimeout(r, 10));
307
+ }
308
+ }
309
+ ```
310
+
311
+ See `example.ts` for domain-specific helpers (`waitForEvent`, `waitForEventCount`, `waitForEventMatch`) drawn from a real debugging session.
312
+
313
+ **Polling pitfalls:**
314
+ - **Polling too fast** (`setTimeout(check, 1)`) wastes CPU. **Fix:** poll every ~10ms.
315
+ - **No timeout** means a never-met condition hangs the suite forever. **Fix:** always include a timeout with a descriptive error.
316
+ - **Stale data** — if you read state once before the loop, you'll never see updates. **Fix:** call the getter *inside* the loop.
317
+
318
+ **When an arbitrary timeout IS correct:**
319
+ ```typescript
320
+ // Tool ticks every 100ms; observe 2 ticks of partial output.
321
+ await waitForEvent(manager, 'TOOL_STARTED'); // condition first
322
+ await new Promise(r => setTimeout(r, 200)); // then a documented, calculated wait
323
+ // 200ms = 2 ticks at the documented 100ms cadence
324
+ ```
325
+ Requirements: (1) wait for the triggering condition first, (2) the delay is based on a *known* interval (not a guess), (3) a comment explains why a sleep is correct here.
326
+
327
+ **Real-world impact** (debugging session, 2025-10-03): 15 flaky tests across 3 files, pass rate 60% → 100%, suite 40% faster, race conditions gone.
328
+
256
329
  ## When Mocks Become Too Complex
257
330
 
258
331
  **Warning signs:**
@@ -284,6 +357,7 @@ TDD cycle:
284
357
  | Mock without understanding | Understand dependencies first, mock minimally |
285
358
  | Incomplete mocks | Mirror real API completely |
286
359
  | Tests as afterthought | TDD - tests first |
360
+ | Timeout-based waiting | Poll for the actual condition with `waitFor()` |
287
361
  | Over-complex mocks | Consider integration tests |
288
362
 
289
363
  ## Red Flags
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: root-cause-tracing
2
+ name: trace-back
3
3
  description: Use when errors occur deep in execution and you need to trace back to find the original trigger - systematically traces bugs backward through call stack, adding instrumentation when needed, to identify source of invalid data or incorrect behavior
4
- usage: /root-cause-tracing <issue-description>
4
+ usage: /trace-back <issue-description>
5
5
  auto_trigger: false
6
6
  ---
7
7
 
8
- # Root Cause Tracing
8
+ # Trace Back
9
9
 
10
10
  ## Overview
11
11
 
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: verification-before-completion
2
+ name: verify-done
3
3
  description: Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
4
- usage: /verification-before-completion <work-to-verify>
4
+ usage: /verify-done <work-to-verify>
5
5
  auto_trigger: true
6
6
  ---
7
7
 
8
- # Verification Before Completion
8
+ # Verify Done
9
9
 
10
10
  ## Auto-Trigger
11
11
 
@@ -22,33 +22,27 @@ These subagents are available when using Claude Code CLI. Droid can reference th
22
22
  | system-architect | Architect | Use for system design, architecture documents, technology selection, API design, and infrastructure planning |
23
23
  | ui-designer | UX Expert | Use for UI/UX design, wireframes, prototypes, front-end specifications, and user experience optimization |
24
24
 
25
- ## Droid Commands (22 total)
25
+ ## Droid Commands (17 total)
26
26
 
27
27
  | ID | Description | Usage | Auto |
28
28
  |---|---|---|---|
29
29
  | brainstorming | Refines rough ideas into fully-formed designs through collaborative questioning | /brainstorming <session-type> <topic> | false |
30
- | code-review | Reviews implementation against plan or requirements before proceeding | /code-review <review-scope> <focus-areas> | false |
31
- | condition-based-waiting | Replaces arbitrary timeouts with condition polling to wait for actual state changes | /condition-based-waiting <condition-type> <timeout-specs> | false |
32
- | debug | Debug an issue systematically using structured investigation techniques | /debug <issue-description> | - |
33
30
  | docs-builder | Create comprehensive project documentation with structured /docs hierarchy | /docs-builder | false |
34
- | explain | Explain code for someone new to the codebase | /explain <code-section> | - |
35
- | friction | Analyze session logs for failure patterns and behavioral signals | /friction <sessions-path> | - |
36
- | git-commit | Analyze changes and create intelligent git commits | /git-commit | - |
37
31
  | live-canvas | Design UI variations and collect click-to-annotate feedback from the browser (batch mode only on Droid) | /live-canvas | false |
38
32
  | optimize | Analyze and optimize performance issues | /optimize <target-area> | - |
39
33
  | refactor | Refactor code while maintaining behavior and tests | /refactor <code-section> | - |
40
34
  | remember | Consolidate stashes + friction into project memory | /remember | - |
41
- | review | Comprehensive code review including quality, tests, and architecture | /review | - |
42
- | root-cause-tracing | Systematically traces bugs backward through call stack to identify source | /root-cause-tracing <issue-description> | false |
35
+ | diff-review | Comprehensive code review including quality, tests, and architecture | /diff-review | - |
36
+ | trace-back | Systematically traces bugs backward through call stack to identify source | /trace-back <issue-description> | false |
43
37
  | security | Security vulnerability scan and analysis | /security | - |
44
38
  | ship | Pre-deployment verification checklist | /ship | - |
45
39
  | skill-creator | Guide for creating effective skills and extending Claude capabilities | /skill-creator <skill-type> <skill-description> | false |
46
40
  | stash | Save session context for compaction recovery or handoffs | /stash ["optional-name"] | - |
47
- | systematic-debugging | Four-phase debugging framework - investigate root cause before any fixes | /systematic-debugging <bug-or-error-description> | false |
48
- | test-driven-development | Write test first, watch it fail, write minimal code to pass | /test-driven-development <feature-or-behavior-to-test> | true |
49
- | test-generate | Generate comprehensive test suites for existing code | /test-generate <code-section> | - |
50
- | testing-anti-patterns | Prevents testing mock behavior and production pollution with test-only methods | /testing-anti-patterns <testing-scenario> | true |
51
- | verification-before-completion | Requires running verification commands before making any success claims | /verification-before-completion <work-to-verify> | true |
41
+ | debug-method | Four-phase debugging framework - investigate root cause before any fixes | /debug-method <bug-or-error-description> | false |
42
+ | tdd-flow | Write test first, watch it fail, write minimal code to pass | /tdd-flow <feature-or-behavior-to-test> | true |
43
+ | test-generate | Generate tests, run them, verify each one actually exercises the code | /test-generate <file> | - |
44
+ | test-traps | Prevents testing mock behavior and production pollution with test-only methods | /test-traps <testing-scenario> | true |
45
+ | verify-done | Requires running verification commands before making any success claims | /verify-done <work-to-verify> | true |
52
46
 
53
47
  All resources are auto-discovered from frontmatter in their respective directories:
54
48
  - **Agents**: `./droids/*.md`
@@ -1,11 +1,11 @@
1
1
  ---
2
- name: systematic-debugging
2
+ name: debug-method
3
3
  description: Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes - four-phase framework (root cause investigation, pattern analysis, hypothesis testing, implementation) that ensures understanding before attempting solutions
4
- usage: /systematic-debugging <bug-or-error-description>
4
+ usage: /debug-method <bug-or-error-description>
5
5
  auto_trigger: false
6
6
  ---
7
7
 
8
- # Systematic Debugging
8
+ # Debug Method
9
9
 
10
10
  ## Overview
11
11
 
@@ -113,7 +113,7 @@ You MUST complete each phase before proceeding to the next.
113
113
 
114
114
  **WHEN error is deep in call stack:**
115
115
 
116
- **REQUIRED SUB-SKILL:** Use root-cause-tracing for backward tracing technique
116
+ **REQUIRED SUB-SKILL:** Use trace-back for backward tracing technique
117
117
 
118
118
  **Quick version:**
119
119
  - Where does bad value originate?
@@ -178,7 +178,7 @@ You MUST complete each phase before proceeding to the next.
178
178
  - Automated test if possible
179
179
  - One-off test script if no framework
180
180
  - MUST have before fixing
181
- - **REQUIRED SUB-SKILL:** Use test-driven-development for writing proper failing tests
181
+ - **REQUIRED SUB-SKILL:** Use tdd-flow for writing proper failing tests
182
182
 
183
183
  2. **Implement Single Fix**
184
184
  - Address the root cause identified
@@ -280,13 +280,13 @@ If systematic investigation reveals issue is truly environmental, timing-depende
280
280
  ## Integration with Other Skills
281
281
 
282
282
  **This skill requires using:**
283
- - **root-cause-tracing** - REQUIRED when error is deep in call stack (see Phase 1, Step 5)
284
- - **test-driven-development** - REQUIRED for creating failing test case (see Phase 4, Step 1)
283
+ - **trace-back** - REQUIRED when error is deep in call stack (see Phase 1, Step 5)
284
+ - **tdd-flow** - REQUIRED for creating failing test case (see Phase 4, Step 1)
285
285
 
286
286
  **Complementary skills:**
287
287
  - **defense-in-depth** - Add validation at multiple layers after finding root cause
288
- - **condition-based-waiting** - Replace arbitrary timeouts identified in Phase 2
289
- - **verification-before-completion** - Verify fix worked before claiming success
288
+ - **test-traps** (Anti-Pattern 6) - Replace arbitrary timeouts identified in Phase 2
289
+ - **verify-done** - Verify fix worked before claiming success
290
290
 
291
291
  ## Real-World Impact
292
292
 
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: diff-review
3
+ description: Review diff [file, branch, or range]
4
+ usage: /diff-review
5
+ argument-hint: [file, branch (e.g. main), range (main..HEAD), or empty]
6
+ allowed-tools: Read, Edit, Grep, Glob, Bash(git diff *), Bash(git log *), Bash(git show *), Bash(git status *), Bash(git grep *), Bash(git rev-parse *), Bash(git merge-base *), Bash(rg *)
7
+ ---
8
+ Review $ARGUMENTS. Interpret in this order:
9
+ 1. **Empty** → staged diff (`git diff --staged`); if empty, working-tree diff
10
+ (`git diff`).
11
+ 2. **A range** like `main..HEAD` or `origin/main...HEAD` → `git diff <range>`.
12
+ 3. **A single ref** (branch / tag / SHA — confirm with `git rev-parse
13
+ --verify`) → diff that ref's merge-base against `HEAD` (i.e. everything on
14
+ the current branch since it diverged: `git diff $(git merge-base <ref>
15
+ HEAD)..HEAD`). This is the common "review my branch before merging" path.
16
+ 4. **A file or directory path** → that target.
17
+ 5. Otherwise → ask.
18
+
19
+ The diff is the subject; widen to surrounding code only as needed to judge a
20
+ hunk. For multi-commit ranges, also skim `git log <range>` to understand
21
+ intent before judging.
22
+
23
+ ## Check For
24
+ - **Bugs needing a fix.** Logic errors, off-by-one, null/undefined paths,
25
+ races, wrong defaults, broken edge cases. Concrete failure modes only — not
26
+ vibes.
27
+ - **Dead code.** Unreferenced functions / vars / imports / params, unreachable
28
+ branches, commented-out blocks, legacy paths the diff just obsoleted.
29
+ `git grep` the symbol before flagging — easy to be wrong.
30
+ - **Loose ends.** TODO / FIXME / XXX added by this diff, half-finished
31
+ branches, silently swallowed errors, stub bodies, mocked-out paths,
32
+ "temporary" names, abandoned feature flags.
33
+ - **Correctness.** Edge cases, error handling, type / contract violations,
34
+ broken invariants.
35
+ - **Security.** OWASP Top 10, auth, data exposure. (`/security` for depth.)
36
+ - **Performance.** N+1, blocking calls in hot paths, unbounded loops, indexes
37
+ the diff actually touches.
38
+ - **Maintainability.** Complexity, naming, duplication — only when material.
39
+
40
+ ## Output Format
41
+ ### 🚨 Critical (blocks merge)
42
+ ### ⚠️ Warnings (should fix)
43
+ ### 💡 Suggestions (nice to have)
44
+
45
+ Each finding: **Location** (`file:line`), **What's wrong**, **Why it matters**,
46
+ **Concrete fix** — not "consider improving".
47
+
48
+ ## After the review — verify, then fix
49
+
50
+ Findings are claims, not facts. Validate before acting; validate again after.
51
+
52
+ **Verify each claim.** Re-read the cited `file:line` in context. For
53
+ dead-code or unused-symbol claims, `git grep` the name across the repo before
54
+ trusting it. Mark each **confirmed**, **false positive** (with reason), or
55
+ **uncertain**.
56
+
57
+ **Fix what's confirmed and unambiguous** — minimal shape, one obvious way, no
58
+ change to a public API / response / caller contract. Apply directly. After
59
+ each edit, re-read the changed region and confirm it does what you intended
60
+ without breaking nearby logic. A fix isn't done until you've grounded it the
61
+ same way you grounded the claim.
62
+
63
+ **Stop and ask** when any of these hold (HITL gates — not all the time, only
64
+ here):
65
+ - the finding is **uncertain** after grounding,
66
+ - the fix has **multiple reasonable shapes** (e.g. delete-vs-keep-behind-flag,
67
+ extract-vs-inline, patch-vs-rewrite) — present options with tradeoffs, not a
68
+ chosen path,
69
+ - it **affects downstream** (signatures, response shape, schema, any caller
70
+ contract) or removes a public/exported symbol, or
71
+ - the "dead code" looks intentionally kept (stub for upcoming work, framework
72
+ hook, documented extension point) — confirm before deleting.
73
+
74
+ Final report: **confirmed-and-fixed** · **confirmed-but-asking** (why +
75
+ options) · **false-positive** (why) · **uncertain** (what's needed to decide).
76
+
77
+ End with a one-line verdict: **Ready to merge? Yes / No / With fixes** — and
78
+ the reason in a sentence.