claude-code-session-manager 0.40.2 → 0.41.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/dist/assets/{TiptapBody-CFCp4Mz9.js → TiptapBody-BnRle0iw.js} +1 -1
- package/dist/assets/{index-BxVBtmjA.css → index-CKY3mHgV.css} +1 -1
- package/dist/assets/{index-bdqOSyxG.js → index-H7rwsoKV.js} +650 -643
- package/dist/index.html +2 -2
- package/package.json +3 -1
- package/plugins/session-manager-dev/skills/develop/SKILL.md +5 -5
- package/plugins/session-manager-dev/skills/develop/standards.md +1 -1
- package/plugins/session-manager-dev/skills/explain-to-me/SKILL.md +2 -2
- package/plugins/session-manager-dev/skills/find-opportunity/SKILL.md +1 -1
- package/plugins/session-manager-dev/skills/project-status/SKILL.md +20 -34
- package/plugins/session-manager-dev/skills/propose-epic/SKILL.md +68 -0
- package/scripts/lib/watchdogHelpers.cjs +5 -5
- package/scripts/mint-epic.cjs +28 -0
- package/scripts/propose-epic.cjs +55 -0
- package/src/main/__tests__/epicMint.test.cjs +85 -0
- package/src/main/__tests__/prdCreate.test.cjs +54 -2
- package/src/main/__tests__/promptSessionEvents.test.cjs +56 -2
- package/src/main/__tests__/promptSessionTranscript.test.cjs +0 -0
- package/src/main/__tests__/rcaFeedbackHook.test.cjs +43 -211
- package/src/main/__tests__/scheduler-archived-twin-guard.test.cjs +63 -0
- package/src/main/__tests__/scheduler-notify-originating-tab-transcript.test.cjs +86 -0
- package/src/main/__tests__/scheduler-notify-originating-tab.test.cjs +21 -0
- package/src/main/__tests__/scheduler-writeprd-epic-rollback.test.cjs +78 -0
- package/src/main/browserView.cjs +1 -1
- package/src/main/chatRunner.cjs +68 -55
- package/src/main/config.cjs +12 -6
- package/src/main/docEdit.cjs +3 -4
- package/src/main/health.cjs +5 -0
- package/src/main/index.cjs +12 -0
- package/src/main/ipcSchemas.cjs +51 -11
- package/src/main/lib/__tests__/opsOwnership.test.cjs +92 -0
- package/src/main/lib/__tests__/projectBriefCore.test.cjs +74 -0
- package/src/main/lib/epicMint.cjs +133 -59
- package/src/main/lib/opsOwnership.cjs +166 -0
- package/src/main/lib/prdCreate.cjs +9 -1
- package/src/main/lib/prdLocations.cjs +21 -0
- package/src/main/lib/projectBriefCore.cjs +70 -4
- package/src/main/lib/queueStore.cjs +3 -0
- package/src/main/lib/rcaFeedbackHook.cjs +41 -55
- package/src/main/projectBrief.cjs +36 -2
- package/src/main/promptSessionEvents.cjs +24 -2
- package/src/main/promptSessionTranscript.cjs +0 -0
- package/src/main/queueOps.cjs +1 -1
- package/src/main/scheduler/prdParser.cjs +8 -0
- package/src/main/scheduler.cjs +281 -164
- package/src/main/templates/PRD_AUTHORING.md +1 -1
- package/src/preload/api.d.ts +76 -3
- package/src/preload/index.cjs +21 -3
- package/plugins/session-manager-dev/skills/my-feedback/SKILL.md +0 -140
- package/plugins/session-manager-dev/skills/optimize-kpi/SKILL.md +0 -290
- 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.
|