@shiwenbin1617/pstack 0.14.4

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 (149) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +332 -0
  3. package/adapters/claude-code/overrides/setup-pstack/SKILL.md +48 -0
  4. package/adapters/claude-code.md +29 -0
  5. package/adapters/codex/agents/comment-sicko.toml +7 -0
  6. package/adapters/codex/agents/poteto-agent.toml +7 -0
  7. package/adapters/codex/overrides/setup-pstack/SKILL.md +40 -0
  8. package/adapters/codex.md +34 -0
  9. package/agents/comment-sicko.md +32 -0
  10. package/agents/poteto-agent.md +9 -0
  11. package/automations/benny/FOR_AGENTS.md +89 -0
  12. package/automations/benny/README.md +23 -0
  13. package/automations/benny/skills/reproduce-and-fix-issues/SKILL.md +310 -0
  14. package/automations/benny/skills/reproduce-and-fix-issues/references/control-adapter.md +169 -0
  15. package/automations/benny/skills/reproduce-and-fix-issues/references/feature-map.example.md +205 -0
  16. package/automations/benny/skills/reproduce-and-fix-issues/references/verify-existing-fix.md +93 -0
  17. package/automations/benny/skills/setup-benny/SKILL.md +266 -0
  18. package/automations/benny/skills/triage-issue-reports/SKILL.md +240 -0
  19. package/automations/benny/skills/triage-issue-reports/references/routing.example.md +61 -0
  20. package/automations/benny/templates/configuration.example.yaml +84 -0
  21. package/automations/benny/templates/reproduce-automation-prompt.md +33 -0
  22. package/automations/benny/templates/triage-automation-prompt.md +39 -0
  23. package/bin/pstack.mjs +331 -0
  24. package/package.json +48 -0
  25. package/scripts/build.mjs +218 -0
  26. package/scripts/host-adapters.mjs +128 -0
  27. package/scripts/lib.mjs +181 -0
  28. package/scripts/test.mjs +106 -0
  29. package/skills/architect/SKILL.md +83 -0
  30. package/skills/architect/references/design-red-flags.md +33 -0
  31. package/skills/architect/references/rationale-template.md +35 -0
  32. package/skills/architect/references/runner-prompt.md +20 -0
  33. package/skills/arena/SKILL.md +71 -0
  34. package/skills/automate-me/SKILL.md +109 -0
  35. package/skills/blast-radius/SKILL.md +50 -0
  36. package/skills/bro/SKILL.md +7 -0
  37. package/skills/create-verification-skill/SKILL.md +44 -0
  38. package/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
  39. package/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
  40. package/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
  41. package/skills/figure-it-out/SKILL.md +55 -0
  42. package/skills/how/SKILL.md +134 -0
  43. package/skills/how/references/critic-prompt.md +59 -0
  44. package/skills/how/references/critique-rubric.md +58 -0
  45. package/skills/how/references/explainer-prompt.md +55 -0
  46. package/skills/how/references/explorer-prompt.md +52 -0
  47. package/skills/interrogate/SKILL.md +113 -0
  48. package/skills/interrogate/references/code-quality-review.md +47 -0
  49. package/skills/interrogate/references/lead-judgment.md +58 -0
  50. package/skills/interrogate/references/reviewer-prompt.md +72 -0
  51. package/skills/interrogate/references/rubric.md +77 -0
  52. package/skills/maintain-verification-skill/SKILL.md +39 -0
  53. package/skills/no-comments/SKILL.md +24 -0
  54. package/skills/poteto-mode/SKILL.md +140 -0
  55. package/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
  56. package/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
  57. package/skills/poteto-mode/playbooks/autopilot-full.md +13 -0
  58. package/skills/poteto-mode/playbooks/autopilot-stack.md +16 -0
  59. package/skills/poteto-mode/playbooks/babysit.md +27 -0
  60. package/skills/poteto-mode/playbooks/bug-fix.md +17 -0
  61. package/skills/poteto-mode/playbooks/eval.md +27 -0
  62. package/skills/poteto-mode/playbooks/feature.md +21 -0
  63. package/skills/poteto-mode/playbooks/hillclimb.md +21 -0
  64. package/skills/poteto-mode/playbooks/investigation.md +14 -0
  65. package/skills/poteto-mode/playbooks/multi-phase-plan.md +155 -0
  66. package/skills/poteto-mode/playbooks/opening-a-pr.md +29 -0
  67. package/skills/poteto-mode/playbooks/orchestrate.md +113 -0
  68. package/skills/poteto-mode/playbooks/pause-safely.md +10 -0
  69. package/skills/poteto-mode/playbooks/perf-issue.md +24 -0
  70. package/skills/poteto-mode/playbooks/prototype.md +14 -0
  71. package/skills/poteto-mode/playbooks/refactoring.md +16 -0
  72. package/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
  73. package/skills/poteto-mode/playbooks/session-pickup.md +13 -0
  74. package/skills/poteto-mode/playbooks/shipping.md +20 -0
  75. package/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
  76. package/skills/poteto-mode/playbooks/visual-parity.md +11 -0
  77. package/skills/poteto-mode/playbooks/worktree-cleanup.md +14 -0
  78. package/skills/poteto-mode/references/bugbot-triage.md +142 -0
  79. package/skills/poteto-mode/scripts/bootstrap.ts +30 -0
  80. package/skills/poteto-mode/scripts/bun.lock +67 -0
  81. package/skills/poteto-mode/scripts/check-plan.mjs +186 -0
  82. package/skills/poteto-mode/scripts/orch/orch.test.ts +634 -0
  83. package/skills/poteto-mode/scripts/orch/orch.ts +578 -0
  84. package/skills/poteto-mode/scripts/orch/store.ts +1607 -0
  85. package/skills/poteto-mode/scripts/package.json +16 -0
  86. package/skills/poteto-mode/scripts/watch-pr/cli.test.ts +224 -0
  87. package/skills/poteto-mode/scripts/watch-pr/cli.ts +223 -0
  88. package/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +118 -0
  89. package/skills/poteto-mode/scripts/watch-pr/github.test.ts +306 -0
  90. package/skills/poteto-mode/scripts/watch-pr/github.ts +699 -0
  91. package/skills/poteto-mode/scripts/watch-pr/policy.test.ts +420 -0
  92. package/skills/poteto-mode/scripts/watch-pr/policy.ts +832 -0
  93. package/skills/poteto-mode/scripts/watch-pr/render.ts +169 -0
  94. package/skills/poteto-mode/scripts/watch-pr/tsconfig.json +13 -0
  95. package/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
  96. package/skills/poteto-mode/scripts/watch-pr/types.ts +401 -0
  97. package/skills/poteto-mode/scripts/watch-pr/watch-pr +6 -0
  98. package/skills/poteto-mode/scripts/worktree-audit.sh +89 -0
  99. package/skills/principle-boundary-discipline/SKILL.md +34 -0
  100. package/skills/principle-build-the-lever/SKILL.md +23 -0
  101. package/skills/principle-encode-lessons-in-structure/SKILL.md +31 -0
  102. package/skills/principle-exhaust-the-design-space/SKILL.md +21 -0
  103. package/skills/principle-experience-first/SKILL.md +19 -0
  104. package/skills/principle-fix-root-causes/SKILL.md +23 -0
  105. package/skills/principle-foundational-thinking/SKILL.md +21 -0
  106. package/skills/principle-guard-the-context-window/SKILL.md +17 -0
  107. package/skills/principle-laziness-protocol/SKILL.md +18 -0
  108. package/skills/principle-make-operations-idempotent/SKILL.md +24 -0
  109. package/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +22 -0
  110. package/skills/principle-minimize-reader-load/SKILL.md +23 -0
  111. package/skills/principle-model-the-domain/SKILL.md +26 -0
  112. package/skills/principle-never-block-on-the-human/SKILL.md +23 -0
  113. package/skills/principle-outcome-oriented-execution/SKILL.md +22 -0
  114. package/skills/principle-prove-it-works/SKILL.md +33 -0
  115. package/skills/principle-redesign-from-first-principles/SKILL.md +16 -0
  116. package/skills/principle-separate-before-serializing-shared-state/SKILL.md +16 -0
  117. package/skills/principle-sequence-verifiable-units/SKILL.md +22 -0
  118. package/skills/principle-subtract-before-you-add/SKILL.md +22 -0
  119. package/skills/principle-type-system-discipline/SKILL.md +31 -0
  120. package/skills/recall/SKILL.md +35 -0
  121. package/skills/reflect/SKILL.md +77 -0
  122. package/skills/reflect/references/divergent-reviewer.md +43 -0
  123. package/skills/reflect/references/judgment-reviewer.md +42 -0
  124. package/skills/reflect/references/synthesizer.md +56 -0
  125. package/skills/reflect/references/tooling-reviewer.md +57 -0
  126. package/skills/setup-pstack/SKILL.md +106 -0
  127. package/skills/show-me-your-work/SKILL.md +82 -0
  128. package/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
  129. package/skills/show-me-your-work/scripts/log.sh +40 -0
  130. package/skills/swarm/SKILL.md +46 -0
  131. package/skills/tdd/SKILL.md +44 -0
  132. package/skills/teach/SKILL.md +21 -0
  133. package/skills/technical-writing/SKILL.md +130 -0
  134. package/skills/typescript-best-practices/SKILL.md +28 -0
  135. package/skills/typescript-best-practices/references/patterns.md +292 -0
  136. package/skills/unslop/SKILL.md +80 -0
  137. package/skills/why/SKILL.md +229 -0
  138. package/skills/why/references/epistemics.md +144 -0
  139. package/skills/why/references/investigator-prompt.md +103 -0
  140. package/skills/why/references/source-playbook.md +17 -0
  141. package/skills/why/references/sources/code-archaeology.md +88 -0
  142. package/skills/why/references/sources/databricks.md +70 -0
  143. package/skills/why/references/sources/datadog.md +99 -0
  144. package/skills/why/references/sources/incident-postmortem.md +15 -0
  145. package/skills/why/references/sources/linear.md +48 -0
  146. package/skills/why/references/sources/notion.md +55 -0
  147. package/skills/why/references/sources/sentry.md +100 -0
  148. package/skills/why/references/sources/slack.md +54 -0
  149. package/skills/why/references/synthesizer-prompt.md +135 -0
@@ -0,0 +1,240 @@
1
+ ---
2
+ name: triage-issue-reports
3
+ description: Triage Slack issue reports with one thread-only verdict, evidence review, cause-aware routing, tracker dedupe, and fail-closed ticket creation. Use only from the configured Benny triage automation.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Triage issue reports
8
+
9
+ Classify one Slack report and post one useful verdict in its source thread. Create a tracker issue only for a clear, new bug. Do not reproduce or fix it here.
10
+
11
+ Load the external Benny configuration supplied by the automation. If the config is missing, malformed, or incomplete, stop without posting or writing to the tracker.
12
+
13
+ ## Hard safety rules
14
+
15
+ - The source channel and root thread coordinates are immutable.
16
+ - Never post a root message in the source channel.
17
+ - Never post to another channel, broadcast a reply, send a DM, or start a replacement thread.
18
+ - Preflight the source parent before any tracker write and immediately before the verdict post.
19
+ - If the parent is missing, deleted, inaccessible, or uncertain, stop with no writes.
20
+ - Post one substantive verdict. Do not narrate progress.
21
+ - The coordinator is the only Slack poster.
22
+ - Delegated workers return findings only. They must be read-only and receive no Slack credentials or write actions.
23
+ - Every child prompt must forbid `SendSlackMessage`, `PostToSlack`, `chat.postMessage`, and every other Slack write.
24
+ - If worker isolation cannot enforce those limits, do the work in the coordinator.
25
+ - Never create an issue that cannot link back to the source thread.
26
+ - Prefer no ticket over a guessed or duplicate ticket.
27
+ - Apply pstack's `principle-separate-before-serializing-shared-state` to source coordinates.
28
+ - Apply pstack's `principle-minimize-reader-load` and `unslop` skills to the final verdict.
29
+
30
+ ## 1. Freeze source coordinates
31
+
32
+ Before making a work list or delegating:
33
+
34
+ 1. Read `source_channel_id` from the trigger.
35
+ 2. Require it to equal the configured source channel.
36
+ 3. Set `SOURCE_THREAD_TS` to `trigger.thread_ts` when present. Otherwise use `trigger.ts`.
37
+ 4. Require a nonempty `SOURCE_THREAD_TS`.
38
+ 5. Store `SOURCE_CHANNEL_ID` and `SOURCE_THREAD_TS` as immutable values.
39
+ 6. Read the thread and verify that its root has exactly those coordinates.
40
+ 7. Fetch a stable source permalink.
41
+
42
+ Every later source read and post must use those stored values. Never replace them with a reply timestamp or an operations-thread timestamp.
43
+
44
+ ## 2. Read the whole report
45
+
46
+ Read the root and current replies before deciding.
47
+
48
+ Capture:
49
+
50
+ - Reporter wording
51
+ - Product version, app build, environment, and platform when present
52
+ - Expected behavior
53
+ - Observed behavior
54
+ - Frequency and trigger
55
+ - Error text or stack signature
56
+ - Existing issue, commit, or pull request links
57
+ - Any explicit statement that someone is already fixing it
58
+
59
+ Inspect every relevant attachment.
60
+
61
+ - Read screenshots at full useful resolution.
62
+ - Review video for the state transition that separates correct and broken behavior.
63
+ - Read logs, traces, and crash text for concrete signatures.
64
+ - If media needs specialist review, use a read-only media worker and ask a narrow question. The worker returns findings only.
65
+ - If an attachment cannot be read, say so in the verdict. Do not invent what it shows.
66
+
67
+ Use evidence already in the thread before asking the reporter for more.
68
+
69
+ ## 3. Trace cause before routing
70
+
71
+ Do a bounded source and history pass before choosing an owner or destination. Use pstack's `how` skill to trace the path from the reported action to the observed result. Use `why` when the report looks like a regression or touches defensive code.
72
+
73
+ 1. Identify the likely code path from the reported action to the observed result.
74
+ 2. Check whether the visible symptom belongs to that code path or a dependency below it.
75
+ 3. Check recent changes when the report looks like a regression.
76
+ 4. Check whether a merged commit or open pull request already addresses the same symptom.
77
+ 5. Separate confirmed facts from hypotheses.
78
+
79
+ This pass does not need a complete root cause. It must be strong enough to avoid routing a visible symptom to the wrong owner.
80
+
81
+ If the repository cannot be read, do not guess a code owner. Continue with a conservative classification and say that cause tracing was unavailable.
82
+
83
+ ## 4. Classify
84
+
85
+ Choose one category.
86
+
87
+ ### Bug
88
+
89
+ Something violates intended behavior. Examples include wrong output, broken state, an error, a crash, a hang, a silent no-op, or a regression.
90
+
91
+ ### Performance
92
+
93
+ The report describes measurable slowness, excess memory, battery drain, jank, or another resource problem. Treat it as a bug, but preserve measurements and profiles.
94
+
95
+ ### Feature request
96
+
97
+ The current behavior appears intentional and the reporter wants a different behavior or affordance.
98
+
99
+ ### Question or feedback
100
+
101
+ The report asks how something works, expresses a preference without a concrete defect, or gives general feedback.
102
+
103
+ ### Reroute
104
+
105
+ Cause tracing shows that another configured destination owns the issue.
106
+
107
+ When the bug versus feature line is unclear, do not file. The one verdict may ask one focused question and use the `other` marker.
108
+
109
+ ## 5. Apply configured routing
110
+
111
+ Read the optional routing map from `routing.map_path`.
112
+
113
+ - Match on confirmed product area, code path, or error signature.
114
+ - A visible symptom alone is not enough when cause tracing points elsewhere.
115
+ - If no route matches, say the owner is unclear. Do not guess.
116
+ - Do not cross-post. Tell the reporter where to take the issue in the source thread.
117
+
118
+ Owner pings are off by default. A ping is allowed only when all of these hold:
119
+
120
+ 1. The routing map explicitly names the owner.
121
+ 2. The config allows that ping type.
122
+ 3. The item is a feature request that needs owner input, or recent history identifies a likely regression author with strong evidence.
123
+ 4. The owner is not a broad on-call group.
124
+
125
+ No other case gets a ping.
126
+
127
+ ## 6. Use the issue-tracker adapter
128
+
129
+ The tracker is an adapter, not a required vendor. A Linear adapter is one valid example. A GitHub Issues adapter or another tracker may implement the same contract.
130
+
131
+ The configured adapter must provide:
132
+
133
+ - Search issues by text, state, label, source URL, and date range
134
+ - Read one issue and its links
135
+ - Create an issue with title, body, status, labels, and source URL
136
+ - Update an existing issue without replacing unrelated fields
137
+ - Add a source link and recurrence note
138
+ - Cancel, close, or delete an issue created by this run if the Slack handoff fails
139
+
140
+ If a required operation is unavailable, fail closed for that write.
141
+
142
+ Resolve configured team, project, status, and labels at runtime. Do not invent IDs, create labels, assign owners, or set priority unless the config explicitly requires it.
143
+
144
+ ## 7. Dedupe
145
+
146
+ Always check whether this source permalink is already linked to a tracker issue or a prior triage reply. If so, do not post or create a duplicate.
147
+
148
+ For bugs and performance reports, search the tracker using:
149
+
150
+ - Exact error or crash signature
151
+ - Product area
152
+ - Trigger
153
+ - Symptom
154
+ - Version or date window
155
+ - Suspected regression commit
156
+ - Source permalink
157
+
158
+ Choose one outcome:
159
+
160
+ - Confident duplicate: same signature, or the same area, trigger, and symptom, or a confirmed shared cause.
161
+ - Possibly related: a shared cause is plausible but not proven.
162
+ - Weak resemblance: similarity is superficial.
163
+ - No match.
164
+
165
+ For a confident duplicate, update the existing issue with the source permalink and one short recurrence note. Do not reopen, relabel, or reassign it unless the config says to.
166
+
167
+ For a possible match, link it in the verdict as uncertain and create nothing.
168
+
169
+ A long-closed issue is a regression lead, not automatically a live duplicate.
170
+
171
+ ## 8. Decide whether to create
172
+
173
+ Create only when all of these are true:
174
+
175
+ 1. The classification is bug or performance.
176
+ 2. The behavior is clearly broken.
177
+ 3. The issue is still live or not known to be fixed.
178
+ 4. Dedupe found no confident or plausible live match.
179
+ 5. The source parent and permalink passed preflight.
180
+ 6. The tracker target fields resolved.
181
+ 7. The adapter can compensate if the verdict post fails.
182
+
183
+ Never create for a feature request, question, feedback item, reroute, possible duplicate, confident duplicate, or already-fixed issue.
184
+
185
+ The new issue must be self-contained:
186
+
187
+ - Plain title that names the area and symptom
188
+ - Reporter quote
189
+ - Expected and observed behavior
190
+ - Version and environment, or `unknown`
191
+ - Trigger and frequency
192
+ - Source thread permalink
193
+ - Short cause-tracing findings with hypotheses labeled as hypotheses
194
+ - Inline screenshot or representative video frame when supported
195
+ - Links to remaining artifacts
196
+ - Configured intake status and labels
197
+
198
+ Do not put a guessed root cause in the title.
199
+
200
+ ## 9. Post one verdict
201
+
202
+ Run a fresh source-parent preflight. Then post exactly one reply with `channel=SOURCE_CHANNEL_ID` and `thread_ts=SOURCE_THREAD_TS`.
203
+
204
+ Never call a source-channel posting action without a nonempty `thread_ts`.
205
+
206
+ Keep the reply short:
207
+
208
+ - Lead with the outcome.
209
+ - Link the existing or new tracker issue when there is one.
210
+ - Mention a reroute or one missing fact when needed.
211
+ - Include at most one allowed owner ping.
212
+ - End with exactly one marker line.
213
+
214
+ Marker contract:
215
+
216
+ ```text
217
+ [benny:bug]
218
+ [benny:bug] tracker=https://tracker.example/issue/123
219
+ [benny:performance]
220
+ [benny:performance] tracker=https://tracker.example/issue/123
221
+ [benny:other]
222
+ ```
223
+
224
+ Use only the configured marker strings. The repro automation trusts the marker only when it comes from the configured triage identity in this source thread.
225
+
226
+ After posting, read the same source thread and verify the verdict appears under `SOURCE_THREAD_TS`. If it does not, never retry at the root.
227
+
228
+ If this run created a tracker issue and the verdict did not land, use the adapter's compensation action. Verify that the issue is canceled, closed, or deleted. If compensation cannot be verified, report the failure only in the automation run output.
229
+
230
+ ## 10. Watch one follow-up window
231
+
232
+ Watch the source thread for the configured follow-up window, then stop.
233
+
234
+ - Answer only a direct question to the triage identity.
235
+ - Apply a concrete correction to the tracker issue when safe.
236
+ - Do not emit a second marker in the same run.
237
+ - Stay out of human coordination and side chatter.
238
+ - Stop early if someone asks the automation to stop.
239
+
240
+ Do not extend the window more than once. A new report should start a new run.
@@ -0,0 +1,61 @@
1
+ # Routing map example
2
+
3
+ Copy this file outside `.claude/automations/benny/`, for example to `.claude/benny/routing.md`, and replace every placeholder. Point `routing.map_path` at the copy. Pack refreshes must not overwrite it.
4
+
5
+ The triage skill treats this as data. A route needs evidence from the report or cause trace. A keyword match alone is not enough.
6
+
7
+ ```yaml
8
+ routes:
9
+ - name: "billing-example"
10
+ match:
11
+ product_areas:
12
+ - "billing-area-placeholder"
13
+ code_paths:
14
+ - "billing-code-path-placeholder"
15
+ error_signatures:
16
+ - "billing-error-placeholder"
17
+ destination:
18
+ slack_channel: "billing-channel-placeholder"
19
+ tracker_team: "billing-team-placeholder"
20
+ owners:
21
+ - "billing-owner-placeholder"
22
+ allow_feature_owner_ping: false
23
+
24
+ - name: "desktop-example"
25
+ match:
26
+ product_areas:
27
+ - "desktop-area-placeholder"
28
+ code_paths:
29
+ - "desktop-code-path-placeholder"
30
+ error_signatures:
31
+ - "desktop-error-placeholder"
32
+ destination:
33
+ slack_channel: "desktop-channel-placeholder"
34
+ tracker_team: "desktop-team-placeholder"
35
+ owners:
36
+ - "desktop-owner-placeholder"
37
+ allow_feature_owner_ping: false
38
+
39
+ fallback:
40
+ destination: ""
41
+ owners: []
42
+ allow_feature_owner_ping: false
43
+
44
+ ping_policy:
45
+ default: "off"
46
+ allow:
47
+ - "configured-feature-owner"
48
+ - "confirmed-regression-author"
49
+ deny:
50
+ - "broad-on-call-group"
51
+ - "unverified-owner"
52
+ ```
53
+
54
+ ## Rules
55
+
56
+ - Leave `fallback.destination` empty unless one team accepts all unmatched reports.
57
+ - Use stable product areas, code paths, and error signatures.
58
+ - Do not include private data in a public copy.
59
+ - Do not paste raw user or channel IDs into an example that will be published.
60
+ - Keep feature-owner pings off until the target team agrees to them.
61
+ - A reroute tells the reporter where to go. The automation never cross-posts.
@@ -0,0 +1,84 @@
1
+ schema_version: 1
2
+
3
+ automations:
4
+ triage_name: "benny-triage"
5
+ reproduce_name: "benny-reproduce"
6
+
7
+ slack:
8
+ source_channel_id: "SOURCE_CHANNEL_ID"
9
+ operations_channel_id: ""
10
+ triage_identity_user_id: "TRIAGE_IDENTITY_USER_ID"
11
+ read_action: "configured-slack-read-action"
12
+ thread_post_action: "configured-slack-thread-post-action"
13
+ file_download_action: "configured-slack-file-download-action"
14
+ operations_edit_action: "configured-slack-edit-action"
15
+ prefer_cursor_actions: true
16
+ optional_bot_token_env: "BENNY_SLACK_BOT_TOKEN"
17
+ allow_source_root_posts: false
18
+ allow_worker_slack_writes: false
19
+
20
+ repository:
21
+ url: "https://github.com/example-org/example-repo"
22
+ default_branch: "main"
23
+ pull_request_action: "configured-draft-pull-request-action"
24
+ pull_request_url_format: "https://github.com/{owner}/{repo}/pull/{number}"
25
+ draft_only: true
26
+
27
+ tracker:
28
+ type: "linear"
29
+ adapter_skill_name: "issue-tracker-adapter-placeholder"
30
+ team: "team-placeholder"
31
+ project: "project-placeholder"
32
+ labels:
33
+ bug: "bug-label-placeholder"
34
+ performance: "performance-label-placeholder"
35
+ intake: "intake-label-placeholder"
36
+ needs_repro: "needs-repro-label-placeholder"
37
+ status: "intake-status-placeholder"
38
+ source_link_title: "Slack report"
39
+ require_compensation_action: true
40
+
41
+ routing:
42
+ map_path: ".cursor/benny/routing.md"
43
+ owner_pings_default: false
44
+ allow_feature_owner_ping: false
45
+ allow_confirmed_regression_author_ping: false
46
+
47
+ control:
48
+ skill_name: "control-target-app"
49
+ feature_map_path: ".cursor/benny/feature-map.md"
50
+ environment: "safe-test-environment-placeholder"
51
+ artifact_directory: "/tmp/benny-artifacts"
52
+ artifact_retention_hours: 24
53
+
54
+ verdict_markers:
55
+ bug: "[benny:bug]"
56
+ performance: "[benny:performance]"
57
+ other: "[benny:other]"
58
+ tracker_attribute: "tracker"
59
+
60
+ status_emoji:
61
+ seen: "👀"
62
+ reproducing: "🔎"
63
+ reproduced: "✅"
64
+ could_not_reproduce: "⚪"
65
+ blocked: "⛔"
66
+ fixing: "🛠️"
67
+ fix_failed: "❌"
68
+ pull_request_opened: "🔗"
69
+
70
+ budgets:
71
+ poll_seconds: 45
72
+ verdict_wait_minutes: 45
73
+ triage_follow_up_minutes: 10
74
+ triage_total_minutes: 30
75
+ repro_minutes: 60
76
+ rejection_window_minutes: 10
77
+ fix_minutes: 90
78
+ operations_follow_up_minutes: 45
79
+
80
+ models:
81
+ triage: "choose-an-available-public-model-slug"
82
+ reproduce: "choose-an-available-public-model-slug"
83
+ code: "choose-an-available-public-model-slug"
84
+ media_review: "choose-an-available-public-model-slug"
@@ -0,0 +1,33 @@
1
+ # Reproduce automation prompt
2
+
3
+ > Source material for the copied setup workflow. Paraphrase this intent into a built-in `automate` draft after `automate` confirms that the copied pack is committed in the repository where the automation will run.
4
+
5
+ Read and follow `.claude/automations/benny/skills/reproduce-and-fix-issues/SKILL.md` for this run.
6
+
7
+ Configuration source. Include this repository-relative path only when it is committed in the same target repository. Otherwise paraphrase the configured values. Never use a plugin source or cache path:
8
+
9
+ ```text
10
+ {{BENNY_CONFIG_PATH}}
11
+ ```
12
+
13
+ Trigger:
14
+
15
+ ```json
16
+ {
17
+ "source_channel_id": "{{SLACK_CHANNEL_ID}}",
18
+ "message_ts": "{{SLACK_MESSAGE_TS}}",
19
+ "thread_ts": "{{SLACK_THREAD_TS_OR_EMPTY}}"
20
+ }
21
+ ```
22
+
23
+ The creation intent should describe this as a new top-level report in the configured source Slack channel. It should include the configured repository, default branch, issue tracker, control adapter, feature map, and draft pull request capability.
24
+
25
+ Treat the source channel and root thread timestamp as immutable. If either is missing or does not match configuration, stop without posting.
26
+
27
+ Wait for a configured triage marker from the configured triage identity in this exact thread. Proceed only for `[benny:bug]` or `[benny:performance]`.
28
+
29
+ Require the configured control-adapter skill before attempting a repro. Reproduce the exact discriminating symptom twice through the real UI. Verify existing pull requests or commits without authoring over them. Attempt a bounded fix only after a confirmed repro and the operational file's fix gate.
30
+
31
+ The coordinator is the only Slack poster. Every child prompt must forbid `SendSlackMessage`, `PostToSlack`, `chat.postMessage`, and all other Slack writes. Children return findings only.
32
+
33
+ Never post a root message in the source channel.
@@ -0,0 +1,39 @@
1
+ # Triage automation prompt
2
+
3
+ > Source material for the copied setup workflow. Paraphrase this intent into a built-in `automate` draft after `automate` confirms that the copied pack is committed in the repository where the automation will run.
4
+
5
+ Read and follow `.claude/automations/benny/skills/triage-issue-reports/SKILL.md` for this run.
6
+
7
+ Configuration source. Include this repository-relative path only when it is committed in the same target repository. Otherwise paraphrase the configured values. Never use a plugin source or cache path:
8
+
9
+ ```text
10
+ {{BENNY_CONFIG_PATH}}
11
+ ```
12
+
13
+ Trigger:
14
+
15
+ ```json
16
+ {
17
+ "source_channel_id": "{{SLACK_CHANNEL_ID}}",
18
+ "message_ts": "{{SLACK_MESSAGE_TS}}",
19
+ "thread_ts": "{{SLACK_THREAD_TS_OR_EMPTY}}"
20
+ }
21
+ ```
22
+
23
+ The creation intent should describe this as a new top-level report in the configured source Slack channel.
24
+
25
+ Treat the source channel and root thread timestamp as immutable. If either is missing or does not match configuration, stop without posting or writing to the issue tracker.
26
+
27
+ The committed operational file owns classification, attachment review, cause tracing, routing, dedupe, tracker writes, and the final verdict. Post no progress messages. Never post a root message in the source channel.
28
+
29
+ The coordinator is the only Slack poster. Any delegated worker must be read-only, return findings only, and receive an explicit ban on every Slack write action.
30
+
31
+ End the single verdict with exactly one configured marker:
32
+
33
+ ```text
34
+ [benny:bug]
35
+ [benny:performance]
36
+ [benny:other]
37
+ ```
38
+
39
+ A bug or performance marker may add `tracker=<URL>`.