@event4u/agent-config 1.16.0 → 1.17.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/.agent-src/commands/{agents-audit.md → agents/audit.md} +4 -3
- package/.agent-src/commands/{agents-cleanup.md → agents/cleanup.md} +12 -6
- package/.agent-src/commands/{agents-prepare.md → agents/prepare.md} +4 -3
- package/.agent-src/commands/agents.md +46 -0
- package/.agent-src/commands/{chat-history-checkpoint.md → chat-history/checkpoint.md} +4 -4
- package/.agent-src/commands/{chat-history-clear.md → chat-history/clear.md} +4 -4
- package/.agent-src/commands/{chat-history-resume.md → chat-history/resume.md} +4 -4
- package/.agent-src/commands/chat-history/show.md +107 -0
- package/.agent-src/commands/chat-history.md +33 -89
- package/.agent-src/commands/{commit-in-chunks.md → commit/in-chunks.md} +15 -13
- package/.agent-src/commands/commit.md +22 -2
- package/.agent-src/commands/{context-create.md → context/create.md} +4 -3
- package/.agent-src/commands/{context-refactor.md → context/refactor.md} +4 -3
- package/.agent-src/commands/context.md +44 -0
- package/.agent-src/commands/{copilot-agents-init.md → copilot-agents/init.md} +4 -3
- package/.agent-src/commands/{copilot-agents-optimize.md → copilot-agents/optimize.md} +4 -3
- package/.agent-src/commands/copilot-agents.md +44 -0
- package/.agent-src/commands/council/default.md +221 -0
- package/.agent-src/commands/{council-design.md → council/design.md} +6 -5
- package/.agent-src/commands/{council-optimize.md → council/optimize.md} +7 -6
- package/.agent-src/commands/{council-pr.md → council/pr.md} +6 -5
- package/.agent-src/commands/council.md +47 -212
- package/.agent-src/commands/{create-pr-description.md → create-pr/description-only.md} +4 -2
- package/.agent-src/commands/create-pr.md +26 -5
- package/.agent-src/commands/{feature-dev.md → feature/dev.md} +5 -10
- package/.agent-src/commands/{feature-explore.md → feature/explore.md} +4 -8
- package/.agent-src/commands/{feature-plan.md → feature/plan.md} +4 -8
- package/.agent-src/commands/{feature-refactor.md → feature/refactor.md} +4 -8
- package/.agent-src/commands/{feature-roadmap.md → feature/roadmap.md} +6 -10
- package/.agent-src/commands/feature.md +6 -12
- package/.agent-src/commands/{fix-ci.md → fix/ci.md} +4 -8
- package/.agent-src/commands/{fix-portability.md → fix/portability.md} +4 -8
- package/.agent-src/commands/{fix-pr-bot-comments.md → fix/pr-bots.md} +4 -8
- package/.agent-src/commands/{fix-pr-developer-comments.md → fix/pr-developers.md} +4 -8
- package/.agent-src/commands/{fix-pr-comments.md → fix/pr.md} +7 -11
- package/.agent-src/commands/{fix-references.md → fix/refs.md} +4 -8
- package/.agent-src/commands/{fix-seeder.md → fix/seeder.md} +4 -8
- package/.agent-src/commands/fix.md +7 -13
- package/.agent-src/commands/{do-and-judge.md → judge/on-diff.md} +4 -3
- package/.agent-src/commands/judge/solo.md +90 -0
- package/.agent-src/commands/{do-in-steps.md → judge/steps.md} +4 -3
- package/.agent-src/commands/judge.md +35 -70
- package/.agent-src/commands/{memory-add.md → memory/add.md} +4 -3
- package/.agent-src/commands/{memory-full.md → memory/load.md} +4 -3
- package/.agent-src/commands/{memory-promote.md → memory/promote.md} +4 -3
- package/.agent-src/commands/{propose-memory.md → memory/propose.md} +4 -3
- package/.agent-src/commands/memory.md +48 -0
- package/.agent-src/commands/{module-create.md → module/create.md} +4 -3
- package/.agent-src/commands/{module-explore.md → module/explore.md} +4 -3
- package/.agent-src/commands/module.md +44 -0
- package/.agent-src/commands/{optimize-agents.md → optimize/agents.md} +4 -8
- package/.agent-src/commands/{optimize-augmentignore.md → optimize/augmentignore.md} +4 -9
- package/.agent-src/commands/{optimize-rtk-filters.md → optimize/rtk.md} +4 -8
- package/.agent-src/commands/{optimize-skills.md → optimize/skills.md} +4 -8
- package/.agent-src/commands/optimize.md +4 -10
- package/.agent-src/commands/{override-create.md → override/create.md} +4 -3
- package/.agent-src/commands/{override-manage.md → override/manage.md} +4 -3
- package/.agent-src/commands/override.md +44 -0
- package/.agent-src/commands/{roadmap-create.md → roadmap/create.md} +4 -3
- package/.agent-src/commands/{roadmap-execute.md → roadmap/execute.md} +4 -3
- package/.agent-src/commands/roadmap.md +44 -0
- package/.agent-src/commands/{tests-create.md → tests/create.md} +4 -3
- package/.agent-src/commands/{tests-execute.md → tests/execute.md} +4 -3
- package/.agent-src/commands/tests.md +44 -0
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +72 -0
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +79 -0
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +87 -0
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +85 -0
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +65 -0
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +55 -0
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +53 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +77 -0
- package/.agent-src/contexts/judges/no-consolidate-rationale.md +102 -0
- package/.agent-src/contexts/judges/persona-voice-rubric.md +140 -0
- package/.agent-src/rules/artifact-engagement-recording.md +13 -69
- package/.agent-src/rules/ask-when-uncertain.md +27 -42
- package/.agent-src/rules/augment-portability.md +15 -61
- package/.agent-src/rules/augment-source-of-truth.md +27 -93
- package/.agent-src/rules/cli-output-handling.md +10 -76
- package/.agent-src/rules/command-suggestion-policy.md +18 -59
- package/.agent-src/rules/commit-conventions.md +17 -14
- package/.agent-src/rules/direct-answers.md +34 -49
- package/.agent-src/rules/docker-commands.md +5 -5
- package/.agent-src/rules/docs-sync.md +15 -69
- package/.agent-src/rules/language-and-tone.md +48 -72
- package/.agent-src/rules/missing-tool-handling.md +28 -22
- package/.agent-src/rules/no-cheap-questions.md +45 -52
- package/.agent-src/rules/no-roadmap-references.md +73 -0
- package/.agent-src/rules/package-ci-checks.md +21 -61
- package/.agent-src/rules/preservation-guard.md +64 -29
- package/.agent-src/rules/review-routing-awareness.md +24 -43
- package/.agent-src/rules/roadmap-progress-sync.md +10 -71
- package/.agent-src/rules/security-sensitive-stop.md +8 -8
- package/.agent-src/rules/skill-quality.md +16 -48
- package/.agent-src/rules/slash-command-routing-policy.md +7 -4
- package/.agent-src/rules/think-before-action.md +52 -42
- package/.agent-src/rules/tool-safety.md +19 -16
- package/.agent-src/rules/ui-audit-gate.md +24 -38
- package/.agent-src/rules/user-interaction.md +13 -68
- package/.agent-src/skills/ai-council/SKILL.md +2 -0
- package/.agent-src/skills/api-testing/SKILL.md +1 -1
- package/.agent-src/skills/check-refs/SKILL.md +59 -40
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +86 -28
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +5 -5
- package/.agent-src/skills/developer-like-execution/SKILL.md +4 -4
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +101 -65
- package/.agent-src/skills/flux/SKILL.md +30 -10
- package/.agent-src/skills/github-ci/SKILL.md +2 -2
- package/.agent-src/skills/judge-code-quality/SKILL.md +7 -8
- package/.agent-src/skills/judge-security-auditor/SKILL.md +4 -5
- package/.agent-src/skills/judge-test-coverage/SKILL.md +3 -4
- package/.agent-src/skills/lint-skills/SKILL.md +57 -39
- package/.agent-src/skills/md-language-check/SKILL.md +61 -39
- package/.agent-src/skills/override-management/SKILL.md +5 -5
- package/.agent-src/skills/quality-tools/SKILL.md +2 -2
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +116 -43
- package/.agent-src/skills/readme-reviewer/SKILL.md +30 -29
- package/.agent-src/skills/readme-writing/SKILL.md +78 -53
- package/.agent-src/skills/readme-writing-package/SKILL.md +50 -47
- package/.agent-src/skills/receiving-code-review/SKILL.md +52 -47
- package/.agent-src/skills/refine-prompt/SKILL.md +0 -1
- package/.agent-src/skills/requesting-code-review/SKILL.md +35 -30
- package/.agent-src/skills/security/SKILL.md +7 -2
- package/.agent-src/skills/security-audit/SKILL.md +7 -3
- package/.agent-src/skills/systematic-debugging/SKILL.md +68 -60
- package/.agent-src/skills/test-driven-development/SKILL.md +59 -57
- package/.agent-src/skills/test-performance/SKILL.md +0 -1
- package/.agent-src/skills/traefik/SKILL.md +4 -4
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +28 -26
- package/.claude-plugin/marketplace.json +22 -11
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +90 -1
- package/README.md +18 -17
- package/docs/architecture.md +4 -6
- package/docs/catalog.md +67 -39
- package/docs/contracts/STABILITY.md +13 -7
- package/docs/contracts/adr-chat-history-split.md +1 -3
- package/docs/contracts/adr-command-suggestion.md +0 -2
- package/docs/contracts/adr-implement-ticket-runtime.md +1 -2
- package/docs/contracts/adr-product-ui-track.md +3 -6
- package/docs/contracts/adr-prompt-driven-execution.md +3 -4
- package/docs/contracts/agent-memory-contract.md +6 -11
- package/docs/contracts/artifact-engagement-flow.md +6 -9
- package/docs/contracts/command-clusters.md +56 -46
- package/docs/contracts/command-suggestion-flow.md +1 -3
- package/docs/contracts/context-paths.md +99 -0
- package/docs/contracts/file-ownership-matrix.json +6722 -0
- package/docs/contracts/file-ownership-matrix.md +134 -0
- package/docs/contracts/implement-ticket-flow.md +6 -9
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -1
- package/docs/contracts/linear-ai-three-layers.md +0 -2
- package/docs/contracts/load-context-budget-model.md +178 -0
- package/docs/contracts/load-context-schema.md +1 -3
- package/docs/contracts/rule-interactions.md +0 -1
- package/docs/contracts/rule-priority-hierarchy.md +1 -1
- package/docs/contracts/ui-track-flow.md +7 -17
- package/docs/customization.md +2 -0
- package/docs/getting-started.md +5 -4
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +100 -0
- package/package.json +1 -1
- package/scripts/_one_off_phase4_dispatch_latency.py +108 -0
- package/scripts/_one_off_phase6_trigger_jaccard.py +92 -0
- package/scripts/_phase2_shim_helper.py +109 -0
- package/scripts/agent-config +10 -0
- package/scripts/ai_council/_one_off_2a4_acceptance.py +208 -0
- package/scripts/ai_council/_one_off_context_layer_v1_estimate.py +67 -0
- package/scripts/ai_council/_one_off_context_layer_v1_review.py +292 -0
- package/scripts/ai_council/_one_off_followups_review.py +259 -0
- package/scripts/ai_council/_one_off_nondestructive_inline_audit.py +209 -0
- package/scripts/ai_council/_one_off_phase_2a_budget_rebalance.py +257 -0
- package/scripts/ai_council/_one_off_phase_2a_post_revert.py +197 -0
- package/scripts/ai_council/_one_off_rule_hardening_v1.py +251 -0
- package/scripts/ai_council/_one_off_structural_open_questions.py +232 -0
- package/scripts/ai_council/_one_off_structural_optimization.py +144 -0
- package/scripts/ai_council/_one_off_structural_v3_gaps.py +252 -0
- package/scripts/ai_council/_one_off_structural_v3_review.py +240 -0
- package/scripts/check_always_budget.py +363 -45
- package/scripts/check_cluster_patterns.py +159 -0
- package/scripts/check_command_count_messaging.py +14 -7
- package/scripts/check_context_paths.py +201 -0
- package/scripts/check_no_roadmap_refs.py +155 -0
- package/scripts/check_phase_coupling.py +148 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +29 -2
- package/scripts/check_safety_floor_untouched.py +125 -0
- package/scripts/command_suggester/loader.py +4 -1
- package/scripts/compress.py +59 -13
- package/scripts/generate_index.py +6 -2
- package/scripts/generate_ownership_matrix.py +323 -0
- package/scripts/hooks/augment-roadmap-progress.sh +57 -0
- package/scripts/install.py +49 -28
- package/scripts/lint_no_new_atomic_commands.py +12 -11
- package/scripts/requirements-evals.txt +1 -0
- package/scripts/roadmap_progress_hook.py +159 -0
- package/scripts/schemas/command.schema.json +4 -3
- package/scripts/skill_linter.py +1 -0
- package/scripts/sync_agent_settings.py +25 -2
- package/scripts/update_counts.py +7 -0
|
@@ -10,9 +10,10 @@ source: package
|
|
|
10
10
|
|
|
11
11
|
## When to use
|
|
12
12
|
|
|
13
|
-
* PR has review comments (bots like Copilot, Greptile, Augment,
|
|
14
|
-
reviewers) and the next step is
|
|
15
|
-
* Someone pasted review feedback and asks you
|
|
13
|
+
* A PR has review comments (from bots like Copilot, Greptile, Augment,
|
|
14
|
+
or from human reviewers) and the next step is to address them
|
|
15
|
+
* Someone pasted review feedback into the conversation and asks you
|
|
16
|
+
to "fix it" or "handle it"
|
|
16
17
|
* A pair-programming partner gave verbal suggestions about code you
|
|
17
18
|
just wrote
|
|
18
19
|
* You are tempted to reply "you are absolutely right" before reading
|
|
@@ -21,10 +22,10 @@ source: package
|
|
|
21
22
|
Do NOT use when:
|
|
22
23
|
|
|
23
24
|
* You are writing a review yourself (different discipline)
|
|
24
|
-
*
|
|
25
|
-
not framed as review feedback
|
|
26
|
-
*
|
|
27
|
-
the linter
|
|
25
|
+
* The user explicitly asks for blind implementation of a specific change
|
|
26
|
+
that is not framed as review feedback
|
|
27
|
+
* The feedback is pure style/formatting that a linter should decide
|
|
28
|
+
automatically — just run the linter
|
|
28
29
|
|
|
29
30
|
## Goal
|
|
30
31
|
|
|
@@ -40,40 +41,42 @@ NO IMPLEMENTATION UNTIL THE FEEDBACK IS UNDERSTOOD AND VERIFIED.
|
|
|
40
41
|
```
|
|
41
42
|
|
|
42
43
|
A "fix" implemented against a misread comment is worse than no fix —
|
|
43
|
-
ships the wrong behavior under the label of "addressed feedback".
|
|
44
|
+
it ships the wrong behavior under the label of "addressed feedback".
|
|
44
45
|
|
|
45
46
|
## Procedure
|
|
46
47
|
|
|
47
48
|
### 1. Read the full comment set before touching code
|
|
48
49
|
|
|
49
50
|
Read **every** open comment on the PR first. Comments often relate to
|
|
50
|
-
each other — fixing comment #3 in isolation can conflict with
|
|
51
|
+
each other — fixing comment #3 in isolation can conflict with comment
|
|
52
|
+
#5. Group them:
|
|
51
53
|
|
|
52
54
|
* **Blocking** — breaks behavior, introduces a bug, security issue
|
|
53
|
-
* **Important** — logic correct but design / readability issue
|
|
55
|
+
* **Important** — logic is correct but design / readability issue
|
|
54
56
|
* **Minor** — naming, comment style, formatting the linter missed
|
|
55
|
-
* **Wrong** — reviewer misunderstood the code, or suggestion
|
|
56
|
-
another behavior
|
|
57
|
+
* **Wrong** — reviewer misunderstood the code, or suggestion would
|
|
58
|
+
regress another behavior
|
|
57
59
|
|
|
58
60
|
### 2. Restate each comment in your own words
|
|
59
61
|
|
|
60
62
|
For every comment, write (internally or to the user): *"The reviewer
|
|
61
63
|
is asking me to X because Y."*
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
for clarification **before** implementing anything. Do
|
|
65
|
-
the clear ones first and ask later — they may be linked.
|
|
65
|
+
If you cannot complete that sentence confidently → the comment is
|
|
66
|
+
unclear. Ask for clarification **before** implementing anything. Do
|
|
67
|
+
not implement the clear ones first and ask later — they may be linked.
|
|
66
68
|
|
|
67
69
|
### 3. Verify each claim against the code
|
|
68
70
|
|
|
69
|
-
For each blocking/important
|
|
71
|
+
For each comment classified as blocking/important:
|
|
70
72
|
|
|
71
73
|
* Reproduce the alleged issue locally (run the test, hit the endpoint,
|
|
72
74
|
read the actual runtime value — see [`systematic-debugging`](../systematic-debugging/SKILL.md))
|
|
73
75
|
* Check what the code actually does, not what the reviewer **thinks**
|
|
74
76
|
it does
|
|
75
77
|
* Check whether the suggested fix would break another test or caller
|
|
76
|
-
* Check `git blame` / history — current code may be
|
|
78
|
+
* Check `git blame` / history — the current code may be the way it is
|
|
79
|
+
for a reason
|
|
77
80
|
* **Consult memory for prior context.** Via
|
|
78
81
|
[`memory-access`](../../../docs/guidelines/agent-infra/memory-access.md),
|
|
79
82
|
call `retrieve(types=["historical-patterns", "architecture-decisions"],
|
|
@@ -86,21 +89,21 @@ For each blocking/important comment:
|
|
|
86
89
|
|
|
87
90
|
| Situation | Response |
|
|
88
91
|
|---|---|
|
|
89
|
-
| Reviewer right, fix local, no caller impact | Implement, reference the comment in the commit message |
|
|
90
|
-
| Reviewer right but fix affects other callers | Note downstream effects in the reply, then implement |
|
|
91
|
-
| Reviewer wrong — misreading the code | Reply with evidence (specific line / test / value), do not change code |
|
|
92
|
+
| Reviewer is right, fix is local, no caller impact | Implement, reference the comment in the commit message |
|
|
93
|
+
| Reviewer is right but fix affects other callers | Note the downstream effects in the reply, then implement |
|
|
94
|
+
| Reviewer is wrong — based on misreading the code | Reply with evidence (specific line / test / value), do not change code |
|
|
92
95
|
| Reviewer suggests a feature the codebase does not use (YAGNI) | Reply asking whether the feature is actually needed, do not build speculatively |
|
|
93
96
|
| Reviewer and user / architecture disagree | Escalate to the user before implementing either path |
|
|
94
97
|
|
|
95
98
|
### 5. Reply in the right place, with the right tone
|
|
96
99
|
|
|
97
|
-
*
|
|
98
|
-
a top-level PR comment
|
|
100
|
+
* For inline PR comments → reply **in the thread** of that comment,
|
|
101
|
+
not as a top-level PR comment
|
|
99
102
|
* Quote **evidence**, not opinion — "line 47 already handles this via
|
|
100
103
|
`$x->isNull()`" beats "I think that's fine"
|
|
101
104
|
* No flattery. No "great catch", "absolutely right", "thanks for
|
|
102
|
-
noticing". The `language-and-tone` rule already bans this —
|
|
103
|
-
are the acknowledgement
|
|
105
|
+
noticing". The existing `language-and-tone` rule already bans this —
|
|
106
|
+
actions are the acknowledgement
|
|
104
107
|
* If you were wrong in your earlier pushback, state it factually and
|
|
105
108
|
move on. No long apology
|
|
106
109
|
|
|
@@ -108,11 +111,11 @@ For each blocking/important comment:
|
|
|
108
111
|
|
|
109
112
|
1. Blocking issues first
|
|
110
113
|
2. Important issues next
|
|
111
|
-
3. Minor issues last (or bundle into a single commit)
|
|
114
|
+
3. Minor issues last (or bundle them into a single commit)
|
|
112
115
|
4. Wrong / YAGNI: no code change, only a reply with reasoning
|
|
113
116
|
|
|
114
|
-
Run relevant tests and linters **between** each group — do not
|
|
115
|
-
four changes and then run tests once. See
|
|
117
|
+
Run the relevant tests and linters **between** each group — do not
|
|
118
|
+
batch four changes and then run tests once. See
|
|
116
119
|
[`verify-before-complete`](../verify-before-complete/SKILL.md).
|
|
117
120
|
|
|
118
121
|
## Output format
|
|
@@ -122,34 +125,36 @@ When reporting back to the user after handling review:
|
|
|
122
125
|
1. **Triage table** — comment → classification → decision
|
|
123
126
|
2. **Implemented changes** — bullet per change with file + commit ref
|
|
124
127
|
3. **Pushed back** — bullet per rejected comment with the evidence
|
|
125
|
-
4. **Outstanding** — anything awaiting clarification, with the
|
|
126
|
-
question
|
|
128
|
+
4. **Outstanding** — anything awaiting clarification, with the
|
|
129
|
+
specific question
|
|
127
130
|
|
|
128
131
|
## Gotchas
|
|
129
132
|
|
|
130
133
|
* Bot comments (Copilot, Greptile) are **not** automatically right.
|
|
131
|
-
|
|
132
|
-
deliberately. Verify like a human comment.
|
|
133
|
-
* A comment
|
|
134
|
-
polite way of saying "change it to X". Ask if unclear
|
|
134
|
+
They frequently flag false positives on patterns the codebase uses
|
|
135
|
+
deliberately. Verify like you would a human comment.
|
|
136
|
+
* A comment that reads like a question ("should this be X?") is often
|
|
137
|
+
a polite way of saying "change it to X". Ask if unclear instead of
|
|
138
|
+
guessing the register.
|
|
135
139
|
* Resolving a comment in the GitHub UI without an accompanying fix or
|
|
136
|
-
reply silently marks it handled — reviewers may
|
|
137
|
-
substance.
|
|
140
|
+
reply silently marks it handled — reviewers may not notice the lack
|
|
141
|
+
of substance.
|
|
138
142
|
* Stacked PRs — a comment on the base PR may already be fixed in the
|
|
139
143
|
child PR. Check both before touching code.
|
|
140
144
|
* A suggestion that passes review aesthetics but fails the test suite
|
|
141
145
|
is still a regression. Run tests even when "the change is trivial".
|
|
142
|
-
* Flattery leaks in as "good point" or "thanks". Delete before
|
|
146
|
+
* Flattery leaks in as "good point" or "thanks". Delete before
|
|
147
|
+
sending. The code change itself is the acknowledgement.
|
|
143
148
|
|
|
144
149
|
## Do NOT
|
|
145
150
|
|
|
146
151
|
* Do NOT reply "you are absolutely right", "great catch", or any
|
|
147
152
|
flattery variant — actions acknowledge, words do not
|
|
148
153
|
* Do NOT implement a suggestion before verifying it against the code
|
|
149
|
-
* Do NOT fix the clear items first and ask about the unclear ones
|
|
150
|
-
when the items are linked
|
|
151
|
-
* Do NOT accept a reviewer's suggestion that conflicts with an
|
|
152
|
-
architectural decision without raising it
|
|
154
|
+
* Do NOT fix the clear items first and ask about the unclear ones
|
|
155
|
+
later when the items are linked
|
|
156
|
+
* Do NOT accept a reviewer's suggestion that conflicts with an
|
|
157
|
+
explicit architectural decision without raising it
|
|
153
158
|
* Do NOT batch multiple unrelated fixes into one commit — reviewers
|
|
154
159
|
cannot re-review selectively
|
|
155
160
|
* Do NOT mark a comment resolved without either a code change or a
|
|
@@ -159,15 +164,15 @@ When reporting back to the user after handling review:
|
|
|
159
164
|
|
|
160
165
|
* Replying "Fixed!" after a commit that does not actually address the
|
|
161
166
|
comment (wrong file, missed case)
|
|
162
|
-
* Rewriting the comment author's suggestion into your own words
|
|
163
|
-
checking whether the reinterpretation still matches intent
|
|
167
|
+
* Rewriting the comment author's suggestion into your own words
|
|
168
|
+
without checking whether the reinterpretation still matches intent
|
|
164
169
|
* Implementing the YAGNI-suggested feature "just in case" the reviewer
|
|
165
170
|
comes back
|
|
166
171
|
* Silent disagreement — ignoring a comment without a reply
|
|
167
172
|
|
|
168
173
|
## When to hand over to another skill / command
|
|
169
174
|
|
|
170
|
-
* Executing fixes across many comments → [`fix-pr-comments`](../../commands/fix-pr-comments.md)
|
|
175
|
+
* Executing the fixes across many comments → [`fix-pr-comments`](../../commands/fix-pr-comments.md)
|
|
171
176
|
(handles both bot + developer), [`fix-pr-bot-comments`](../../commands/fix-pr-bot-comments.md),
|
|
172
177
|
[`fix-pr-developer-comments`](../../commands/fix-pr-developer-comments.md)
|
|
173
178
|
* Running the full verification gate before pushing replies →
|
|
@@ -181,10 +186,10 @@ When reporting back to the user after handling review:
|
|
|
181
186
|
|
|
182
187
|
Before considering review handling done:
|
|
183
188
|
|
|
184
|
-
* [ ] Every open comment read, classified, decision
|
|
185
|
-
* [ ] No comment implemented without a one-sentence restatement
|
|
186
|
-
* [ ] Every implemented fix verified by a test or runtime check
|
|
189
|
+
* [ ] Every open comment has been read, classified, and has a decision
|
|
190
|
+
* [ ] No comment was implemented without a one-sentence restatement
|
|
191
|
+
* [ ] Every implemented fix has been verified by a test or runtime check
|
|
187
192
|
* [ ] Every rejected comment has a reply quoting evidence
|
|
188
|
-
* [ ] No comment marked resolved without code change or reply
|
|
193
|
+
* [ ] No comment was marked resolved without code change or reply
|
|
189
194
|
* [ ] No reply contains flattery
|
|
190
195
|
* [ ] Linters and relevant tests pass after the changes
|
|
@@ -217,4 +217,3 @@ For `low`, the question replaces the AC list:
|
|
|
217
217
|
- [`work_engine.scoring.confidence`](../../templates/scripts/work_engine/scoring/confidence.py) — rubric + band thresholds
|
|
218
218
|
- [`ask-when-uncertain`](../../rules/ask-when-uncertain.md) — one-question-per-turn Iron Law
|
|
219
219
|
- [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) — this skill was drafted under it
|
|
220
|
-
- `agents/roadmaps/archive/road-to-prompt-driven-execution.md` — Phase 3 owns this skill (archived on completion)
|
|
@@ -11,17 +11,19 @@ source: package
|
|
|
11
11
|
## When to use
|
|
12
12
|
|
|
13
13
|
* About to run `/create-pr` or `/prepare-for-review`
|
|
14
|
-
*
|
|
15
|
-
|
|
14
|
+
* A feature or bug fix is code-complete and the next step is "get
|
|
15
|
+
eyes on it"
|
|
16
|
+
* A stacked PR is ready and you need the parent branch reviewer to
|
|
16
17
|
context-switch smoothly
|
|
17
|
-
* Asking a human for a quick sanity check on a specific commit or
|
|
18
|
+
* Asking a human for a quick sanity check on a specific commit or
|
|
19
|
+
diff
|
|
18
20
|
|
|
19
21
|
Do NOT use when:
|
|
20
22
|
|
|
21
23
|
* You are *processing* review feedback — use [`receiving-code-review`](../receiving-code-review/SKILL.md)
|
|
22
|
-
*
|
|
23
|
-
green tests and a clean diff
|
|
24
|
-
*
|
|
24
|
+
* The branch is not yet code-complete — the review-request gate
|
|
25
|
+
requires green tests and a clean diff
|
|
26
|
+
* The change is documentation-only and has no behavior impact
|
|
25
27
|
|
|
26
28
|
## Goal
|
|
27
29
|
|
|
@@ -36,9 +38,9 @@ process. A well-framed review request **halves** review time and
|
|
|
36
38
|
NEVER REQUEST REVIEW FROM A BRANCH YOU HAVE NOT REVIEWED YOURSELF.
|
|
37
39
|
```
|
|
38
40
|
|
|
39
|
-
Self-review is the single cheapest filter.
|
|
40
|
-
reviewer would flag in round one, so the human can
|
|
41
|
-
issues only they can see.
|
|
41
|
+
Self-review is the single cheapest filter. It catches the issues a
|
|
42
|
+
human reviewer would flag in round one, so the human reviewer can
|
|
43
|
+
spend time on the issues only they can see.
|
|
42
44
|
|
|
43
45
|
## Procedure
|
|
44
46
|
|
|
@@ -46,18 +48,19 @@ issues only they can see.
|
|
|
46
48
|
|
|
47
49
|
Before asking anyone else:
|
|
48
50
|
|
|
49
|
-
* Read the full diff (`git diff <base>...<head>`), not just files
|
|
50
|
-
remember touching
|
|
51
|
+
* Read the full diff (`git diff <base>...<head>`), not just the files
|
|
52
|
+
you remember touching
|
|
51
53
|
* Check for accidental debug output, dead code, leftover `dd()`,
|
|
52
54
|
`console.log`, commented-out blocks
|
|
53
55
|
* Check for secrets in diff — API keys, connection strings, tokens
|
|
54
56
|
* Check file-system side effects — generated files, lockfile churn,
|
|
55
57
|
IDE configs, `.env` changes
|
|
56
58
|
* Run the linter + tests (see [`verify-before-complete`](../verify-before-complete/SKILL.md))
|
|
57
|
-
*
|
|
59
|
+
* If you find issues → fix them, do **not** ship them and hope the
|
|
60
|
+
reviewer flags them
|
|
58
61
|
|
|
59
|
-
Use [`review-changes`](../../commands/review-changes.md)
|
|
60
|
-
structured walk-through.
|
|
62
|
+
Use the [`review-changes`](../../commands/review-changes.md) command
|
|
63
|
+
as the structured walk-through.
|
|
61
64
|
|
|
62
65
|
### 2. Establish the diff baseline
|
|
63
66
|
|
|
@@ -78,8 +81,8 @@ review 80 unrelated commits.
|
|
|
78
81
|
|
|
79
82
|
### 3. Write the review request context
|
|
80
83
|
|
|
81
|
-
Any review request must answer four questions.
|
|
82
|
-
reviewer will ask
|
|
84
|
+
Any review request must answer four questions. If any is missing, the
|
|
85
|
+
reviewer will ask — and that round trip is preventable.
|
|
83
86
|
|
|
84
87
|
| Question | Where it lives |
|
|
85
88
|
|---|---|
|
|
@@ -96,22 +99,24 @@ for the title format.
|
|
|
96
99
|
### 4. Keep the PR reviewable in size
|
|
97
100
|
|
|
98
101
|
* Target < 400 lines of real diff (excluding generated / lockfiles)
|
|
99
|
-
*
|
|
100
|
-
so reviewers can handle each in one sitting
|
|
101
|
-
* Flag generated files explicitly in the description so reviewers
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
* If bigger — consider splitting into a stack (refactor PR → feature
|
|
103
|
+
PR) so reviewers can handle each in one sitting
|
|
104
|
+
* Flag generated files explicitly in the description so reviewers
|
|
105
|
+
skip them
|
|
106
|
+
* Never mix a refactor + behavior change in the same PR — reviewers
|
|
107
|
+
cannot isolate the risk
|
|
104
108
|
|
|
105
109
|
### 5. Pick the right reviewer set
|
|
106
110
|
|
|
107
|
-
* **Architectural impact** → code owner for the affected area
|
|
108
|
-
* **Security-sensitive** → a security-reviewer role if the project has
|
|
111
|
+
* **Architectural impact** → the code owner for the affected area
|
|
112
|
+
* **Security-sensitive** → a security-reviewer role if the project has
|
|
113
|
+
one
|
|
109
114
|
* **Bots** → let Copilot / Greptile / Augment run automatically; do not
|
|
110
115
|
gate human review on bot completion
|
|
111
116
|
* **Cross-team change** → each affected team's owner
|
|
112
117
|
|
|
113
|
-
|
|
114
|
-
do not override without a reason.
|
|
118
|
+
If the project has a `CODEOWNERS` file, GitHub handles this
|
|
119
|
+
automatically — do not override without a reason.
|
|
115
120
|
|
|
116
121
|
### 6. Send and wait — do not nudge early
|
|
117
122
|
|
|
@@ -119,8 +124,8 @@ After the PR is open:
|
|
|
119
124
|
|
|
120
125
|
* Respond to questions, not to the implicit "where is my review?"
|
|
121
126
|
schedule
|
|
122
|
-
*
|
|
123
|
-
do not re-open or force-push to bump the PR list
|
|
127
|
+
* If the review is blocking and overdue → a single short nudge is
|
|
128
|
+
appropriate; do not re-open or force-push to bump the PR list
|
|
124
129
|
|
|
125
130
|
When review comments arrive → switch to
|
|
126
131
|
[`receiving-code-review`](../receiving-code-review/SKILL.md).
|
|
@@ -144,9 +149,9 @@ When handing the review request to the reviewer (PR body, Slack, email):
|
|
|
144
149
|
* A 1000-line PR with "no behavior change" still needs review — the
|
|
145
150
|
reviewer has no way to confirm "no behavior change" without reading
|
|
146
151
|
every line
|
|
147
|
-
* Auto-merge on approval bypasses re-review after later force-pushes
|
|
148
|
-
use deliberately, not by habit
|
|
149
|
-
* A PR description
|
|
152
|
+
* Auto-merge on approval bypasses re-review after later force-pushes
|
|
153
|
+
— use deliberately, not by habit
|
|
154
|
+
* A PR description that says "see the code" is not a description —
|
|
150
155
|
reviewers need the why
|
|
151
156
|
* Requesting review from someone without context (new hire, other
|
|
152
157
|
team) without a longer pairing — they cannot do a deep review cold
|
|
@@ -11,8 +11,13 @@ source: package
|
|
|
11
11
|
Use when implementing authentication, authorization, or any security-sensitive functionality.
|
|
12
12
|
|
|
13
13
|
Do NOT use when:
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
* Validation logic only — route to [`laravel-validation`](../laravel-validation/SKILL.md)
|
|
16
|
+
* Full security audit — route to [`security-audit`](../security-audit/SKILL.md)
|
|
17
|
+
* You need a pre-implementation threat model — route to
|
|
18
|
+
[`threat-modeling`](../threat-modeling/SKILL.md)
|
|
19
|
+
* You need end-to-end authorization analysis — route to
|
|
20
|
+
[`authz-review`](../authz-review/SKILL.md)
|
|
16
21
|
|
|
17
22
|
## Procedure: Implement security for a feature
|
|
18
23
|
|
|
@@ -24,9 +24,13 @@ Use this skill when:
|
|
|
24
24
|
|
|
25
25
|
Do NOT use when:
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
* Writing new auth/policy code — route to [`security`](../security/SKILL.md)
|
|
28
|
+
* Hunting for functional bugs — route to [`bug-analyzer`](../bug-analyzer/SKILL.md) (proactive mode)
|
|
29
|
+
* Investigating performance — route to [`performance-analysis`](../performance-analysis/SKILL.md)
|
|
30
|
+
* You need a pre-implementation threat model for a new feature — route to
|
|
31
|
+
[`threat-modeling`](../threat-modeling/SKILL.md)
|
|
32
|
+
* You need end-to-end authorization analysis for one route/action — route to
|
|
33
|
+
[`authz-review`](../authz-review/SKILL.md)
|
|
30
34
|
|
|
31
35
|
## Procedure: Security audit
|
|
32
36
|
|
|
@@ -8,8 +8,8 @@ source: package
|
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
10
10
|
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* A test fails and the failure is not self-explanatory
|
|
12
|
+
* A bug is reported (Jira, Sentry, user message) and the root cause is not obvious
|
|
13
13
|
* Production or staging shows unexpected behavior
|
|
14
14
|
* Code behaves differently than the developer expected
|
|
15
15
|
* A previous fix did not resolve the issue or introduced a new one
|
|
@@ -17,14 +17,19 @@ source: package
|
|
|
17
17
|
|
|
18
18
|
Do NOT use when:
|
|
19
19
|
|
|
20
|
-
*
|
|
20
|
+
* The failure message already names the fix (typo, missing import, obvious
|
|
21
|
+
off-by-one) — fix it and move on
|
|
21
22
|
* Pure style / formatting / lint issues
|
|
22
23
|
* Documentation-only questions
|
|
24
|
+
* You need a static trace of a specific data element — route to
|
|
25
|
+
[`data-flow-mapper`](../data-flow-mapper/SKILL.md)
|
|
26
|
+
* You need to enumerate what a planned change will touch — route to
|
|
27
|
+
[`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md)
|
|
23
28
|
|
|
24
29
|
## Goal
|
|
25
30
|
|
|
26
|
-
Find the **root cause** before changing any code. A symptom fix
|
|
27
|
-
over an unknown cause is a regression waiting to happen.
|
|
31
|
+
Find the **root cause** before changing any code. A symptom fix that
|
|
32
|
+
papers over an unknown cause is a regression waiting to happen.
|
|
28
33
|
|
|
29
34
|
## The Iron Law
|
|
30
35
|
|
|
@@ -37,30 +42,31 @@ diff, a reproduced failure — those are evidence.
|
|
|
37
42
|
|
|
38
43
|
## Procedure
|
|
39
44
|
|
|
40
|
-
Complete each phase before the next. Skipping ahead is the
|
|
41
|
-
biggest cause of wasted debug time.
|
|
45
|
+
Complete each phase before starting the next. Skipping ahead is the
|
|
46
|
+
single biggest cause of wasted debug time.
|
|
42
47
|
|
|
43
48
|
### Phase 1 — Reproduce
|
|
44
49
|
|
|
45
|
-
Goal: make the failure happen on demand, smallest possible setup.
|
|
50
|
+
Goal: make the failure happen on demand, with the smallest possible setup.
|
|
46
51
|
|
|
47
|
-
1. Read the error message, stack trace, and logs **in full**. Note
|
|
48
|
-
file, line, and the chain of calls above it.
|
|
49
|
-
2. Identify the minimum input, state, or
|
|
50
|
-
failure.
|
|
52
|
+
1. Read the error message, stack trace, and logs **in full**. Note the
|
|
53
|
+
exact file, line, and the chain of calls above it.
|
|
54
|
+
2. Identify the minimum input, state, or sequence of actions that
|
|
55
|
+
triggers the failure. If it is intermittent — gather more data before
|
|
56
|
+
guessing.
|
|
51
57
|
3. Capture the exact reproduction as a command or a test. Prefer a
|
|
52
58
|
failing test (see [`test-driven-development`](../test-driven-development/SKILL.md))
|
|
53
|
-
— turns Phase 4 into a verified fix.
|
|
59
|
+
— it turns Phase 4 into a verified fix.
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
re-run, collect more evidence.
|
|
61
|
+
If you cannot reproduce, you do not yet understand the bug. Stop. Add
|
|
62
|
+
logging, re-run, collect more evidence.
|
|
57
63
|
|
|
58
64
|
### Phase 2 — Isolate
|
|
59
65
|
|
|
60
66
|
Goal: locate the failure in a single component, layer, or call site.
|
|
61
67
|
|
|
62
|
-
1. Bisect the surface area.
|
|
63
|
-
off/skip/mock adjacent features to narrow the window.
|
|
68
|
+
1. Bisect the surface area. What is the smallest code path that still
|
|
69
|
+
fails? Turn off/skip/mock adjacent features to narrow the window.
|
|
64
70
|
2. For multi-component systems (frontend → API → service → DB, or
|
|
65
71
|
CI → build → deploy), log at **each boundary**:
|
|
66
72
|
|
|
@@ -68,7 +74,8 @@ Goal: locate the failure in a single component, layer, or call site.
|
|
|
68
74
|
* What leaves the component
|
|
69
75
|
* What config/env the component actually sees
|
|
70
76
|
|
|
71
|
-
|
|
77
|
+
The goal is not to fix — it is to answer "which boundary is the one
|
|
78
|
+
where expected ≠ actual?".
|
|
72
79
|
3. Check recent changes: `git log`, `git blame` on the failing line,
|
|
73
80
|
recent dependency updates, config edits, infra changes.
|
|
74
81
|
4. **Consult memory for prior matches.** Via
|
|
@@ -81,13 +88,13 @@ Goal: locate the failure in a single component, layer, or call site.
|
|
|
81
88
|
limit=3,
|
|
82
89
|
)
|
|
83
90
|
```
|
|
84
|
-
A matching `incident-learning` may already name the root cause,
|
|
85
|
-
and regression test. A matching `historical-pattern`
|
|
86
|
-
hypothesis space before Phase 3. Cite matching `id`s in
|
|
87
|
-
trail.
|
|
88
|
-
5. Trace backwards from the symptom. `null` arrives at line 42 —
|
|
89
|
-
does the value originate? Walk up the call stack until the
|
|
90
|
-
found. Fix at origin, not at line 42.
|
|
91
|
+
A matching `incident-learning` may already name the root cause, the
|
|
92
|
+
fix, and the regression test. A matching `historical-pattern`
|
|
93
|
+
narrows the hypothesis space before Phase 3. Cite matching `id`s in
|
|
94
|
+
the Phase 1–4 evidence trail.
|
|
95
|
+
5. Trace backwards from the symptom. If `null` arrives at line 42 —
|
|
96
|
+
where does the value originate? Walk up the call stack until the
|
|
97
|
+
origin is found. Fix at origin, not at line 42.
|
|
91
98
|
|
|
92
99
|
### Phase 3 — Hypothesize
|
|
93
100
|
|
|
@@ -95,35 +102,35 @@ Goal: one testable hypothesis at a time, rejected or confirmed by evidence.
|
|
|
95
102
|
|
|
96
103
|
1. State the hypothesis in one sentence: *"The failure happens because
|
|
97
104
|
X, which I can confirm by observing Y."*
|
|
98
|
-
2. Design the smallest possible experiment that confirms or
|
|
99
|
-
hypothesis. One variable at a time.
|
|
105
|
+
2. Design the smallest possible experiment that either confirms or
|
|
106
|
+
rejects the hypothesis. One variable at a time.
|
|
100
107
|
3. Run it. Read the output.
|
|
101
|
-
4.
|
|
108
|
+
4. If confirmed → Phase 4. If rejected → back to Phase 2 with the new
|
|
102
109
|
information, then form a new hypothesis.
|
|
103
110
|
|
|
104
|
-
|
|
105
|
-
well enough yet, or the architecture
|
|
111
|
+
If three hypotheses in a row fail, stop. You do not understand the
|
|
112
|
+
system well enough yet, or the architecture is the problem itself — see
|
|
106
113
|
"Three-strike rule" below.
|
|
107
114
|
|
|
108
115
|
### Phase 4 — Verify the fix
|
|
109
116
|
|
|
110
117
|
Goal: the fix resolves the root cause, not just the observed symptom.
|
|
111
118
|
|
|
112
|
-
1. Write or update a failing test
|
|
113
|
-
done in Phase 1).
|
|
119
|
+
1. Write or update a failing test that reproduces the bug (if not
|
|
120
|
+
already done in Phase 1).
|
|
114
121
|
2. Apply a single, minimal fix targeting the root cause. No bundled
|
|
115
122
|
refactors, no "while I'm here".
|
|
116
|
-
3. Re-run the reproduction — failure gone.
|
|
117
|
-
4. Re-run the surrounding test suite — nothing adjacent turned red.
|
|
118
|
-
5. Read output carefully — no new warnings, deprecations, or
|
|
119
|
-
retries
|
|
123
|
+
3. Re-run the reproduction — the failure is gone.
|
|
124
|
+
4. Re-run the surrounding test suite — nothing adjacent has turned red.
|
|
125
|
+
5. Read the output carefully — no new warnings, deprecations, or
|
|
126
|
+
silent retries that would mask the same bug recurring.
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
Phase 2, treat the failure as new evidence.
|
|
128
|
+
If the fix does not work, **do not** stack a second fix on top. Go back
|
|
129
|
+
to Phase 2, treat the failure as new evidence.
|
|
123
130
|
|
|
124
131
|
## Three-strike rule
|
|
125
132
|
|
|
126
|
-
|
|
133
|
+
If you have tried **three** fixes and the bug is still present:
|
|
127
134
|
|
|
128
135
|
* Stop attempting fixes.
|
|
129
136
|
* Re-read phases 1–3 — something about the root cause is wrong.
|
|
@@ -150,7 +157,7 @@ right line beats five minutes of IDE breakpoints.
|
|
|
150
157
|
## Condition-based waiting (intermittent bugs)
|
|
151
158
|
|
|
152
159
|
Intermittent tests and race conditions usually stem from waiting on
|
|
153
|
-
time instead of a condition. Replace `sleep(100)` or
|
|
160
|
+
time instead of on a condition. Replace `sleep(100)` or
|
|
154
161
|
`setTimeout(r, 100)` with an explicit wait-for:
|
|
155
162
|
|
|
156
163
|
```ts
|
|
@@ -172,11 +179,12 @@ async function waitFor<T>(
|
|
|
172
179
|
```
|
|
173
180
|
|
|
174
181
|
Only use an arbitrary timeout when the timing itself is the contract
|
|
175
|
-
(debounce, throttle) — add a comment explaining **why** the exact
|
|
182
|
+
(debounce, throttle) — and add a comment explaining **why** the exact
|
|
183
|
+
value.
|
|
176
184
|
|
|
177
185
|
## Output format
|
|
178
186
|
|
|
179
|
-
When reporting debug findings:
|
|
187
|
+
When reporting debug findings to the user:
|
|
180
188
|
|
|
181
189
|
1. **Symptom** — what was observed (one sentence + failure message)
|
|
182
190
|
2. **Reproduction** — the command or test that triggers it
|
|
@@ -189,27 +197,27 @@ When reporting debug findings:
|
|
|
189
197
|
|
|
190
198
|
* Reading half a stack trace and jumping to a fix — the actual cause is
|
|
191
199
|
usually two or three frames above the one you read.
|
|
192
|
-
* "It works on my machine" — different env than the
|
|
193
|
-
Reproduce with exact conditions from the report.
|
|
194
|
-
* Adding a retry or sleep to mask an intermittent failure — hides
|
|
195
|
-
race condition, does not fix it. Use condition-based waiting.
|
|
196
|
-
* Fixing the first line that throws when the bad value came from
|
|
197
|
-
call chain. Trace backwards to the origin.
|
|
200
|
+
* "It works on my machine" — you are running a different env than the
|
|
201
|
+
bug report. Reproduce with the exact conditions from the report.
|
|
202
|
+
* Adding a retry or sleep to mask an intermittent failure — this hides
|
|
203
|
+
the race condition, it does not fix it. Use condition-based waiting.
|
|
204
|
+
* Fixing the first line that throws, when the bad value came from
|
|
205
|
+
somewhere up the call chain. Trace backwards to the origin.
|
|
198
206
|
* "The fix works, the test is just flaky" — flaky tests are bugs in the
|
|
199
207
|
test or the code. Diagnose them, do not retry-until-green.
|
|
200
|
-
* Turning a failing assertion into a softer one ("maybe 2 or 3
|
|
201
|
-
accept both") to make it pass.
|
|
202
|
-
* Bundling a bug fix with a refactor — test goes red again
|
|
203
|
-
which change broke it.
|
|
208
|
+
* Turning a failing assertion into a softer one ("maybe it's 2 or 3
|
|
209
|
+
retries, let's accept both") to make it pass.
|
|
210
|
+
* Bundling a bug fix with a refactor — if the test goes red again you
|
|
211
|
+
cannot tell which change broke it.
|
|
204
212
|
|
|
205
213
|
## Red flags — STOP and restart from Phase 1
|
|
206
214
|
|
|
207
215
|
* "Let me just try X and see if it works"
|
|
208
216
|
* "I don't fully understand it, but this probably fixes it"
|
|
209
217
|
* Proposing a fix without having reproduced the bug
|
|
210
|
-
* Bundling multiple changes in one attempt
|
|
218
|
+
* Bundling multiple changes in one attempt ("fixing this and refactoring that")
|
|
211
219
|
* "It's probably a race condition, let me add a sleep"
|
|
212
|
-
* A green test run after changes without having first seen it red
|
|
220
|
+
* A green test run after changes, without having first seen it red
|
|
213
221
|
* "This looks similar to bug X, so it's the same fix"
|
|
214
222
|
* Suppressing a log, warning, or exception instead of tracing its source
|
|
215
223
|
|
|
@@ -219,7 +227,7 @@ When reporting debug findings:
|
|
|
219
227
|
* Do NOT change two things at once in a single experiment
|
|
220
228
|
* Do NOT silence a warning, failing test, or noisy log as a "fix"
|
|
221
229
|
* Do NOT mark a bug as fixed without a regression test
|
|
222
|
-
* Do NOT attempt fix #4 after three failed fixes — surface the pattern
|
|
230
|
+
* Do NOT attempt fix #4 after three failed fixes — surface the pattern instead
|
|
223
231
|
|
|
224
232
|
## When to hand over to another skill
|
|
225
233
|
|
|
@@ -234,11 +242,11 @@ When reporting debug findings:
|
|
|
234
242
|
|
|
235
243
|
Before declaring a bug fixed:
|
|
236
244
|
|
|
237
|
-
* [ ]
|
|
238
|
-
* [ ]
|
|
245
|
+
* [ ] The failure was reproduced before any code changed
|
|
246
|
+
* [ ] The root cause is named explicitly, not "probably"
|
|
239
247
|
* [ ] Evidence (log, trace, diff) supports the named root cause
|
|
240
|
-
* [ ]
|
|
241
|
-
* [ ]
|
|
242
|
-
* [ ]
|
|
248
|
+
* [ ] A failing test reproducing the bug was added or updated
|
|
249
|
+
* [ ] The fix is minimal and targets the root cause, not the symptom
|
|
250
|
+
* [ ] The regression test now passes
|
|
243
251
|
* [ ] Adjacent tests still pass
|
|
244
252
|
* [ ] No warning or suppressed output hides a recurrence
|