claude-code-session-manager 0.40.3 → 0.41.1

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 (54) hide show
  1. package/dist/assets/{TiptapBody-DweEtHks.js → TiptapBody-Cr-O75Yg.js} +1 -1
  2. package/dist/assets/{index-BxVBtmjA.css → index-CKY3mHgV.css} +1 -1
  3. package/dist/assets/{index-QRU8uTeq.js → index-CV9TNjxX.js} +631 -624
  4. package/dist/index.html +2 -2
  5. package/package.json +3 -1
  6. package/plugins/session-manager-dev/skills/develop/SKILL.md +5 -5
  7. package/plugins/session-manager-dev/skills/develop/standards.md +1 -1
  8. package/plugins/session-manager-dev/skills/explain-to-me/SKILL.md +2 -2
  9. package/plugins/session-manager-dev/skills/find-opportunity/SKILL.md +1 -1
  10. package/plugins/session-manager-dev/skills/project-status/SKILL.md +20 -34
  11. package/plugins/session-manager-dev/skills/propose-epic/SKILL.md +68 -0
  12. package/scripts/lib/watchdogHelpers.cjs +5 -5
  13. package/scripts/mint-epic.cjs +28 -0
  14. package/scripts/propose-epic.cjs +55 -0
  15. package/src/main/__tests__/epicMint.test.cjs +85 -0
  16. package/src/main/__tests__/opsErrorLog.test.cjs +87 -0
  17. package/src/main/__tests__/prdCreate.test.cjs +124 -2
  18. package/src/main/__tests__/promptSessionEvents.test.cjs +56 -2
  19. package/src/main/__tests__/promptSessionTranscript.test.cjs +0 -0
  20. package/src/main/__tests__/rcaFeedbackHook.test.cjs +43 -211
  21. package/src/main/__tests__/scheduler-archived-twin-guard.test.cjs +63 -0
  22. package/src/main/__tests__/scheduler-notify-originating-tab-transcript.test.cjs +86 -0
  23. package/src/main/__tests__/scheduler-notify-originating-tab.test.cjs +21 -0
  24. package/src/main/__tests__/scheduler-writeprd-epic-rollback.test.cjs +78 -0
  25. package/src/main/browserView.cjs +1 -1
  26. package/src/main/chatRunner.cjs +24 -47
  27. package/src/main/config.cjs +12 -6
  28. package/src/main/docEdit.cjs +3 -4
  29. package/src/main/index.cjs +12 -0
  30. package/src/main/ipcSchemas.cjs +59 -11
  31. package/src/main/lib/__tests__/opsOwnership.test.cjs +92 -0
  32. package/src/main/lib/__tests__/projectBriefCore.test.cjs +74 -0
  33. package/src/main/lib/epicMint.cjs +133 -59
  34. package/src/main/lib/opsErrorLog.cjs +96 -0
  35. package/src/main/lib/opsOwnership.cjs +169 -0
  36. package/src/main/lib/prdCreate.cjs +39 -1
  37. package/src/main/lib/prdLocations.cjs +21 -0
  38. package/src/main/lib/projectBriefCore.cjs +70 -4
  39. package/src/main/lib/queueStore.cjs +3 -0
  40. package/src/main/lib/rcaFeedbackHook.cjs +41 -55
  41. package/src/main/logs.cjs +19 -1
  42. package/src/main/projectBrief.cjs +36 -2
  43. package/src/main/promptSessionEvents.cjs +24 -2
  44. package/src/main/promptSessionTranscript.cjs +0 -0
  45. package/src/main/pty.cjs +15 -0
  46. package/src/main/queueOps.cjs +1 -1
  47. package/src/main/scheduler/prdParser.cjs +8 -0
  48. package/src/main/scheduler.cjs +158 -62
  49. package/src/main/templates/PRD_AUTHORING.md +1 -1
  50. package/src/preload/api.d.ts +83 -4
  51. package/src/preload/index.cjs +26 -5
  52. package/plugins/session-manager-dev/skills/my-feedback/SKILL.md +0 -140
  53. package/plugins/session-manager-dev/skills/optimize-kpi/SKILL.md +0 -290
  54. package/plugins/session-manager-dev/skills/process-feedback/SKILL.md +0 -265
@@ -1,265 +0,0 @@
1
- ---
2
- name: process-feedback
3
- description: >-
4
- Process the current project's inbound feedback folder end-to-end: first sync
5
- any open GitHub issues on the project's repo into the intake as new feedback
6
- files (deduped against already-tracked issues), then read every open item,
7
- evaluate it against real code, and for work that belongs to this
8
- project queue it as scheduled PRDs via /develop (never implement inline),
9
- archive the item as processed **the moment it is queued** (the scheduler owns
10
- execution from there), and fold lessons back into the folder's README so
11
- future feedback (written by other agents/projects, or GitHub issue filers)
12
- gets better. Use whenever the user says "/process-feedback",
13
- "review the feedback folder", "work through the feedback", "any open
14
- feedback?", "check the GitHub issues", "triage the GitHub repo", or drops
15
- new files into session-manager-operations/feedback/.
16
- Keywords: feedback, intake, cross-project requests, process feedback, triage
17
- feedback, GitHub issues.
18
- model: opus
19
- ---
20
-
21
- # process-feedback
22
-
23
- **Role:** the *agent-side intake* for the dev pipeline — the project-to-project complement of
24
- an interactive human prompt. It evaluates inbound feedback, dispatches the codeable parts to
25
- `/develop` (the shared pipeline), and owns the feedback-specific bookkeeping (status log,
26
- RESOLUTION, archive). It does **not** implement, and it does **not** re-specify how PRDs are
27
- tracked — that lives once, in `/develop` Phase 2.
28
-
29
- Work the project's intra-project feedback intake
30
- (`session-manager-operations/feedback/` at the repo root — this is the **one**
31
- canonical name; do not create or treat a differently-named folder like
32
- `external-feedback/` as equivalent, even for cross-service requests — that
33
- split caused ~2.5 weeks of drifted duplicate tracking in burrow before being
34
- merged back on 2026-07-10). Each file is a request from an upstream/downstream
35
- service in the same stack (e.g. Burrow ⇄ signal-builder ⇄ social-signals-trader)
36
- — cross-service origin does not mean a different folder, it's still just
37
- `session-manager-operations/feedback/`. The folder's own `README.md` is the
38
- authority on file conventions — read it first; the steps below are the
39
- process. All session-manager per-project operations live under
40
- `session-manager-operations/`.
41
-
42
- **Core principle:** this skill *triages and dispatches*; it does not implement.
43
- Anything that requires writing code for this project is decomposed and queued as
44
- scheduled PRDs through **`/develop`**, which runs them headlessly on the
45
- session-manager scheduler. **process-feedback is done the moment every item is
46
- dispositioned — queued as a PRD, declined, or forwarded — and archived; the
47
- scheduler owns execution from there on.** It does NOT hold items in the inbox
48
- waiting for PRDs to land, and it does NOT babysit the scheduler. Implementing
49
- feedback inline — bypassing the scheduler — is the one thing this skill must not
50
- do.
51
-
52
- **Definition of done (resilience contract):** the actionable inbox is empty.
53
- Every open item has been turned into a scheduler PRD (or declined / forwarded
54
- with a reason), given a `## RESOLUTION`, and moved to `processed/`. Archival
55
- happens at **disposition time, not delivery time** — once an item is a queued
56
- PRD, its job is done and the file is archived immediately. The README
57
- status-log **row** (🛠) is the durable execution tracker that lives on after the
58
- file is archived; it is reconciled 🛠→✅ (and failures flagged) by
59
- `/project-status`'s scheduler-PRD audit, cross-referencing the queue — never by
60
- process-feedback blocking on it. A pass that leaves a queued item sitting in the
61
- inbox "until its PRD lands" is the non-resilient bug this contract exists to
62
- prevent.
63
-
64
- ## Steps
65
-
66
- ### 0a. Self-migrate a legacy root-level folder first
67
-
68
- Before anything else, check for the pre-migration layout: if a legacy
69
- `feedback` folder exists at the repo root **and**
70
- `session-manager-operations/feedback/` does not, relocate it now —
71
- `mkdir -p session-manager-operations` (if needed), then
72
- `git mv feedback session-manager-operations/feedback` when the repo is
73
- git-tracked, else a plain `mv`. This converges any project this skill runs in
74
- to the new layout even if its bulk-relocation PRD hasn't landed yet. Only then
75
- continue with step 0b.
76
-
77
- ### 0b. Sync open GitHub issues into the intake (source sync)
78
-
79
- For a project with a GitHub remote, pull open issues and materialize any not already tracked as a
80
- new feedback file — **before** the quick-exit check below evaluates what's open, since this step
81
- can create new open items that check needs to see. This lets a repo's GitHub issue tracker feed
82
- the same triage → queue pipeline without a human manually copying issues into the feedback folder.
83
-
84
- - Skip silently (no error, no report) if `gh repo view --json nameWithOwner -q .nameWithOwner`
85
- fails — no GitHub remote or `gh` unauthenticated. This step is opportunistic, not required.
86
- - Fetch open issues via `gh api repos/<owner>/<repo>/issues --paginate --jq '...'` (per-issue
87
- `number,title,body,labels`) rather than `gh issue list`/`gh issue view` — the latter two can hit
88
- a known `gh` CLI bug on repos with legacy GitHub Projects (classic) boards
89
- (`GraphQL: Projects (classic) is being deprecated ... (repository.issue.projectCards)`,
90
- documented in `standards.md`'s Execution discipline section); `gh api` sidesteps it outright by
91
- never touching the deprecated field. Note `gh api .../issues` also returns pull requests (they
92
- have an `issue.pull_request` key) — filter those out, this step is issues only.
93
- - **Dedup before creating anything.** An issue already tracked has a feedback file (open OR
94
- already in `processed/`) containing the token `gh-issue-<N>` — `grep -rl "gh-issue-<N>"
95
- session-manager-operations/feedback/` (recursive, covers both the inbox and `processed/`) before
96
- materializing issue `N`. Skip any issue that already has a match.
97
- - For each untracked open issue, create
98
- `session-manager-operations/feedback/<yyyy-mm-dd>-gh-issue-<N>-<slug>.md` following the folder's
99
- normal frontmatter convention (see `README.md`):
100
- - `title`: the issue title, verbatim.
101
- - `source`: `GitHub issue gh-issue-<N> (<issue URL>)` — the `gh-issue-<N>` token here is what
102
- the dedup grep matches on next run; don't reword it out.
103
- - `type`: infer from labels (`bug` label → `bug`; `enhancement`/no matching label → `enhancement`;
104
- `security` → `security`; `performance` → `performance`).
105
- - `severity`: `normal` unless the issue's own labels/title clearly indicate `blocker`/`high`
106
- (data loss, crash, security hole, or an unusable feature with no workaround — same bar as the
107
- README's own severity guidance; don't inflate).
108
- - Body: `# What happens / what's missing` = the issue body (verbatim, or a faithful trim if very
109
- long — don't paraphrase away specifics); `# Evidence` = the issue URL + number, plus any
110
- screenshot/repro references already in the issue body; `# Suggested direction (optional)` =
111
- any proposed-solution section already present in the issue body.
112
- - Synced files then flow through steps 1–6 below exactly like any other feedback file — no
113
- special-casing after creation, same evaluate → queue → disposition → archive pipeline.
114
- - When step 4 dispositions a synced issue by queuing a PRD, the `## RESOLUTION` must also state
115
- the originating issue number/URL. This skill does **not** auto-close or auto-comment on the
116
- GitHub issue — that stays a human (or a later, deliberate step) decision once the fix actually
117
- ships, not something this sync step does on queue.
118
-
119
- ### 0. Quick-exit — bail in milliseconds if there's nothing to do
120
-
121
- **Do this first, cheaply, before reading any code or spawning anything.** This
122
- skill is run on a schedule across many projects (the scheduler's feedback sweep),
123
- so the empty case must cost almost nothing:
124
-
125
- - If `session-manager-operations/feedback/` doesn't exist (after the step-0a
126
- self-migration check) → report "no feedback intake in `<project>`" and
127
- **EXIT**. (Don't check for or fall back to an `external-feedback/`-style
128
- variant — `session-manager-operations/feedback/` is the only canonical name.)
129
- - If the folder exists but holds **no open item** (every file is in `processed/`
130
- or marked ✅/archived; nothing open/🆕) → report "no open feedback in
131
- `<project>`" and **EXIT immediately**. Do NOT read source, evaluate, or start
132
- an agent loop.
133
- - Only when at least one **open** item exists do you continue — an open item
134
- means *someone cares about this project*, so it's worth the full pass (and,
135
- per step 6, leaving the README better for next time).
136
-
137
- ### 1. Read the intake
138
-
139
- - Read `session-manager-operations/feedback/README.md` (conventions + the status log), then every open/🆕
140
- file still in the inbox. Under this contract a **🛠 (queued) item has already
141
- been archived to `processed/`** at disposition time — so anything still sitting
142
- in the inbox is genuinely un-dispositioned and needs a pass. You will not find
143
- 🛠 items in the inbox to "re-check"; their execution is tracked by the
144
- status-log row + `/project-status`'s scheduler audit, not by the folder.
145
- - If the folder doesn't exist, say so and stop — don't invent one.
146
-
147
- ### 2. Evaluate before queueing
148
-
149
- For each open item, verify the claims against current code and live data —
150
- feedback cites the state of the world when it was written, which may have
151
- drifted. Then classify each ask:
152
-
153
- - **Ours, do it** — the fix belongs to this project. → goes to `/develop`
154
- (step 3). Do NOT write the code here.
155
- - **Ours, decline** — conflicts with the project's contracts/vision (e.g. a
156
- convenience ask that violates a service boundary). Decline explicitly in the
157
- RESOLUTION with the reason; never silently skip. Resolved now (no code) →
158
- close immediately in step 4.
159
- - **Theirs, forward** — the root cause lives in another service. Do NOT reach
160
- across the boundary to hack around it; file a feedback or PRD item in *that*
161
- project's intake folder and reference it (use `/my-feedback to <project>`).
162
- Resolved now (no code in *this* repo) → close immediately in step 4.
163
-
164
- Root-cause with evidence (logs, live queries, health checks), not from the
165
- file's narrative alone — the reporter sees symptoms, you can see causes.
166
-
167
- ### 3. Queue the work via /develop (never implement inline)
168
-
169
- For every **Ours, do it** item, invoke the **`develop`** skill to turn the ask
170
- into one or more self-contained PRDs in the scheduler queue. Hand `/develop` a
171
- complete brief so it does not have to re-ask scope — your step-2 evaluation
172
- already established it:
173
-
174
- - The goal, in this-project terms.
175
- - **Acceptance criteria taken from the feedback's own AC**, made verifiable
176
- (with the test/health command to prove them).
177
- - The absolute `cwd`, plus the exact files/patterns/utilities to reuse that you
178
- found while root-causing (the API-reuse standard — don't make the headless run
179
- rediscover them).
180
- - Any constraints, service boundaries, or "out of scope" lines.
181
-
182
- `/develop` owns decomposition (small ~15-min PRDs), inlining the engineering
183
- standards, the `NN-` parallel grouping, and — because each PRD publishes its own
184
- work — the implementation **commit + deploy**. That means process-feedback does
185
- **not** commit implementation code; the PRDs do, when they run.
186
-
187
- Record the emitted PRD filenames/ids — you need them for steps 4–6.
188
-
189
- ### 4. Disposition + archive every item now — this is the definition of done
190
-
191
- Every open item gets a disposition, a `## RESOLUTION`, and a `git mv` to
192
- `session-manager-operations/feedback/processed/` **in this pass** — archival is at disposition time, not
193
- delivery time. Do NOT leave a queued item in the inbox "until its PRD lands":
194
- that is the drift this contract forbids. By disposition:
195
-
196
- - **Queued (Ours, do it):** append `## RESOLUTION` naming the emitted PRD
197
- filename(s)/id(s) and stating execution is now the scheduler's job. Set the
198
- README status-log row to **🛠 queued (PRD NN)** (add 🛠 to the legend if
199
- absent). `git mv` the file (and any `-REPLY`) to `processed/` **now**. The 🛠
200
- row — not the file's location — is what tracks execution; do not fabricate
201
- verification for code that hasn't run yet, just record the handoff.
202
- - **Declined (Ours, decline):** append `## RESOLUTION` with the reason (contract
203
- / boundary conflict), flip the row to ✅, `git mv` to `processed/`.
204
- - **Forwarded (Theirs):** append `## RESOLUTION` naming the upstream filing
205
- (`/my-feedback to <project>` id), flip the row to ✅ (closed here — the ask now
206
- lives in their intake), `git mv` to `processed/`.
207
-
208
- After this step the actionable inbox is **empty** — only genuinely un-dispositioned
209
- items (still being triaged) may remain, and only within this same pass. Commit the
210
- feedback bookkeeping + any upstream filings in one clean commit (message
211
- references the file id, e.g. `chore(feedback): triage + queue 2026-06-10-01`).
212
- Only commit a clean, green tree; if unrelated in-flight work is mixed into the
213
- working tree, stop and tell the user instead of committing around it.
214
-
215
- ### 5. Hand off to the scheduler — do NOT babysit
216
-
217
- Execution is the scheduler's job from here. **Do not run an interactive watch
218
- loop, and do not block the pass on PRDs landing** — `/develop` already queued
219
- them with the engineering standards inline, the scheduler runs them at its
220
- cadence, and **`/project-status` owns the ongoing audit**: its scheduler-PRD
221
- check cross-references `queue.json` to reconcile each 🛠 status-log row → ✅ when
222
- its PRD lands (the file is already archived), and surfaces any `failed` /
223
- `needs_review` / stuck Burrow PRD. If a PRD later fails, the requester re-files or
224
- the status audit escalates it — the feedback pass does not stay open waiting for
225
- that. If the user wants live progress, point them at the SchedulePanel.
226
-
227
- ### 6. Self-improve the intake (always do this)
228
-
229
- Update the folder's `README.md` guidance section based on what this round
230
- taught you:
231
-
232
- - What made an item easy to queue + close? Distill it into a bullet other agents
233
- can imitate (cite the file as the example) — e.g. a feedback item that already
234
- carried a crisp, testable AC turned straight into a clean PRD.
235
- - What slowed you down — a missing log path, an unverifiable claim, an ask that
236
- actually belonged to a third service, a PRD that got stuck? Add the
237
- counter-guidance.
238
- - Keep the section calibrated and short: merge/rewrite stale bullets rather than
239
- appending forever.
240
-
241
- This step is the point of the skill: every processing pass should make the
242
- *next* pass cheaper.
243
-
244
- ## Guardrails
245
-
246
- - **Never implement feedback inline.** Code that belongs to this project goes
247
- through `/develop` → the scheduler. The only commits process-feedback makes
248
- itself are feedback bookkeeping and upstream filings.
249
- - **Archive at disposition time, not delivery time.** The moment an item is
250
- queued as a PRD (or declined / forwarded), give it a RESOLUTION and `git mv` it
251
- to `processed/` — do NOT leave it in the inbox waiting for the PRD to land. A
252
- queued item is archived with a **🛠** status-log row (not ✅); the row is the
253
- durable execution tracker and is reconciled 🛠→✅ by `/project-status` from the
254
- scheduler queue. Leaving dispositioned items in the inbox "until they verify"
255
- is the non-resilient behavior this contract exists to kill.
256
- - **The status-log row is honest about state even after archival.** 🛠 = "PRD
257
- queued, scheduler owns it, not yet landed"; ✅ = "landed/verified (or
258
- declined/forwarded)". Never fabricate a ✅ for code that hasn't run — archive at
259
- 🛠 and let the status audit flip it.
260
- - Never delete feedback files to "clear" the folder — archive them.
261
- - Service boundaries outrank feedback asks: an item that requests a boundary
262
- violation gets a documented decline + an upstream filing, not compliance.
263
- - Report honestly in the RESOLUTION: which PRD id owns the work, what was
264
- declined/forwarded and why, deps on other teams. An archived item with open
265
- external deps should say what unblocks it.