Skip to content

Commit a8eecc8

Browse files
mattthomps1claude
andcommitted
fix: resolve PR #194 review comments
Address code review feedback: - Rebase onto upstream/main (v2.35.2), bump to v2.36.0 - Fix .gitignore to catch all transcript types, not just .md - Remove .claude/settings.json from tracking, add to .gitignore - Add Step 4.0 Anonymization During Processing to transcript-insights (positioned before insight extraction, not after) - Add privacy verification items to persona-builder checklist - Fix stale "Consider adding" privacy language in research-plan - Update downstream references to match new gitignore pattern - Mark completed plan docs with status: completed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e0ea044 commit a8eecc8

10 files changed

Lines changed: 269 additions & 21 deletions

File tree

.claude/settings.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
node_modules/
44
.codex/
55
todos/
6+
.claude/settings.json
67

78
# Research data - transcripts contain raw interview data with PII
8-
docs/research/transcripts/*.md
9+
docs/research/transcripts/*
10+
!docs/research/transcripts/.gitkeep

docs/plans/2026-02-11-feat-user-research-workflow-plan.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
title: "feat: Add user research workflow"
33
type: feat
4+
status: completed
45
date: 2026-02-11
56
source_brainstorm: docs/brainstorms/2026-02-10-user-research-workflow-brainstorm.md
67
---

docs/plans/2026-02-13-fix-research-process-first-action-plan.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
title: "fix: Research process fails when transcript is first action"
33
type: fix
4+
status: completed
45
date: 2026-02-13
56
---
67

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
---
2+
title: "fix: Resolve PR #194 review comments"
3+
type: fix
4+
status: completed
5+
date: 2026-02-24
6+
pr: 194
7+
origin: PR review by kieranklaassen (2026-02-24)
8+
---
9+
10+
# Resolve PR #194 Review Comments
11+
12+
## Overview
13+
14+
PR #194 adds a user research workflow (3 skills, 1 command, 1 agent) to the compound-engineering plugin. A thorough code review identified 11 items across P1/P2/P3 priorities. This plan addresses each item.
15+
16+
**Important context:** The local `main` branch was at `v2.34.0` (fork's main), but `upstream/main` (`EveryInc/compound-engineering-plugin`) has advanced to `v2.35.2` with 25+ commits. The review's P1-1 about the stale branch is **correct** — the PR branch needs rebasing onto `upstream/main`.
17+
18+
### Features on upstream/main that would be regressed without rebase
19+
20+
- `origin:` frontmatter field in plan templates (v2.35.2)
21+
- Detailed brainstorm carry-forward in plan.md steps 1-7 (v2.35.2)
22+
- `Sources` sections linking plans to brainstorms (v2.35.2)
23+
- `System-Wide Impact` sections in MORE and A LOT templates (v2.35.1)
24+
- Qualified `compound-engineering:workflow:spec-flow-analyzer` namespace (v2.35.0 fix)
25+
- Kiro CLI target provider (v0.9.0)
26+
- OpenCode commands merge (v0.8.0)
27+
- Removed `docs/reports` and `docs/decisions` directories (v0.9.1)
28+
29+
### Conflict-prone files during rebase
30+
31+
| File | Reason |
32+
|------|--------|
33+
| `plugins/compound-engineering/commands/workflows/plan.md` | PR adds 3 lines; upstream rewrote brainstorm sections, added origin/sources/system-wide-impact |
34+
| `plugins/compound-engineering/.claude-plugin/plugin.json` | Version `2.35.0` vs `2.35.2`, description string (component counts differ) |
35+
| `.claude-plugin/marketplace.json` | Same version/description conflicts |
36+
| `plugins/compound-engineering/CHANGELOG.md` | Both branches added entries |
37+
| `plugins/compound-engineering/README.md` | Component count differences |
38+
39+
## Acceptance Criteria
40+
41+
- [x] Branch rebased onto `upstream/main` with conflicts resolved
42+
- [x] Version bumped to `2.36.0` (minor: new functionality on top of v2.35.2)
43+
- [x] Component counts accurate across plugin.json, marketplace.json, README.md
44+
- [x] `.gitignore` pattern catches all transcript file types, not just `.md`
45+
- [x] `.claude/settings.json` removed from tracking and gitignored
46+
- [x] Anonymization instructions positioned before insight extraction in `transcript-insights`
47+
- [x] Privacy checklist items added to both `transcript-insights` and `persona-builder`
48+
- [x] `research-plan/SKILL.md` uses assertive MUST NOT language for PII
49+
- [x] All downstream references to old `*.md` gitignore pattern updated
50+
- [x] Plan docs for the research workflow marked as `status: completed`
51+
- [x] JSON files valid (`jq .` passes)
52+
53+
---
54+
55+
## Implementation Tasks
56+
57+
### Task 0: Rebase onto upstream/main (P1-1)
58+
59+
**This must be done first.** All other tasks apply on top of the rebased branch.
60+
61+
**Steps:**
62+
```bash
63+
# Fetch latest upstream
64+
git fetch upstream
65+
66+
# Rebase PR branch onto upstream/main
67+
git rebase upstream/main
68+
```
69+
70+
**Conflict resolution strategy for `plan.md`:**
71+
- The PR adds 3 lines (user-research-analyst in Step 1, user research bullet in Step 1.6, "What to look for" bullet)
72+
- Upstream rewrote the brainstorm carry-forward section (Steps 1-7 → more detailed), added `origin:` frontmatter, `Sources`/`System-Wide Impact` sections, and qualified the `spec-flow-analyzer` namespace
73+
- **Resolution:** Take upstream's version as the base, then re-apply the 3 user-research additions on top. Do NOT overwrite upstream's brainstorm detail, origin field, or system-wide impact sections.
74+
75+
**Conflict resolution for `plugin.json` and `marketplace.json`:**
76+
- Take upstream's version (`2.35.2`) as base, then bump to `2.36.0`
77+
- Recount components after rebase: upstream has 29 agents, 22 commands, 19 skills. PR adds 1 agent, 1 command, 3 skills → final should be 30 agents, 23 commands, 22 skills
78+
- Update description strings to match actual counts
79+
80+
**Conflict resolution for `CHANGELOG.md` and `README.md`:**
81+
- Keep upstream's entries, add PR's new entries on top
82+
- Verify README component counts match the recounted totals
83+
84+
**Conflict resolution for `.gitignore`:**
85+
- Upstream added `todos/` entry. PR adds transcript pattern. Keep both.
86+
87+
### Task 1: Fix `.gitignore` transcript pattern (P1-2)
88+
89+
**File:** `.gitignore`
90+
91+
Change:
92+
```gitignore
93+
# Research data - transcripts contain raw interview data with PII
94+
docs/research/transcripts/*.md
95+
```
96+
97+
To:
98+
```gitignore
99+
# Research data - transcripts contain raw interview data with PII
100+
docs/research/transcripts/*
101+
!docs/research/transcripts/.gitkeep
102+
```
103+
104+
**Why:** The `*.md` pattern only ignores markdown transcripts. Users may save transcripts as `.txt`, `.json`, `.csv`, or `.docx` (common exports from Otter.ai, Rev, etc.), and those would leak PII into git.
105+
106+
**Update downstream references** that mention the old `*.md` pattern:
107+
108+
1. `plugins/compound-engineering/skills/transcript-insights/SKILL.md` (~line 298) — update reference from `docs/research/transcripts/*.md` to `docs/research/transcripts/`
109+
2. `docs/solutions/integration-issues/adding-optional-workflow-phases-with-graceful-degradation.md` (~lines 70, 174) — update pattern references
110+
111+
### Task 2: Remove `.claude/settings.json` from tracking (P2-3)
112+
113+
**Steps:**
114+
1. `git rm --cached .claude/settings.json` — removes from git index, keeps on disk
115+
2. Add `.claude/settings.json` to `.gitignore`
116+
117+
This file contains personal dev config (`enabledPlugins` flag) that forces plugin enablement on all repo clones. Claude Code creates this file locally when users install plugins — it should not be committed.
118+
119+
**No contributor impact:** Developers set up plugins via `claude /plugin install`, which creates this file automatically.
120+
121+
### Task 3: Reposition anonymization in `transcript-insights` (P2-4)
122+
123+
**File:** `plugins/compound-engineering/skills/transcript-insights/SKILL.md`
124+
125+
The Privacy Note at the bottom (line 289+) contains detailed anonymization instructions, but they appear AFTER the processing steps. The AI processes the transcript top-to-bottom and may extract PII-containing quotes before encountering the privacy instructions.
126+
127+
**Changes:**
128+
1. Add a new **Step 4.0: Anonymization During Processing** before Step 4a, containing:
129+
```markdown
130+
### Step 4.0: Anonymization During Processing
131+
132+
Before extracting insights, apply these transformations to ALL output:
133+
134+
- Assign anonymized participant IDs (user-001, user-002, etc.)
135+
- Replace real names with anonymized IDs in all quotes and references
136+
- Replace company names with generic descriptors (e.g., "their company", "a competitor")
137+
- Strip identifying details from the `source_transcript` filename field
138+
- Quotes must be exact from the transcript, but with PII replaced inline
139+
140+
If the transcript already uses anonymized IDs (matching pattern `user-NNN`), note that anonymization is already complete and proceed.
141+
```
142+
143+
2. Reduce the existing Privacy Note at the bottom to a cross-reference:
144+
```markdown
145+
## Privacy
146+
147+
See Step 4.0 for anonymization requirements. Transcripts in `docs/research/transcripts/` contain raw interview data with PII and MUST NOT be committed to version control.
148+
```
149+
150+
3. Add to the Human Review Checklist (or create one if missing):
151+
```markdown
152+
- [ ] No real names, email addresses, or company names in output
153+
- [ ] All participant references use anonymized IDs (user-NNN)
154+
```
155+
156+
**Design decision:** This is output-time anonymization, not source-modifying. The raw transcript stays intact in `docs/research/transcripts/`; the derived snapshot is anonymized. This preserves the original data for re-processing.
157+
158+
### Task 4: Add privacy verification to `persona-builder` (P2-4)
159+
160+
**File:** `plugins/compound-engineering/skills/persona-builder/SKILL.md`
161+
162+
Persona-builder consumes already-anonymized interview snapshots, NOT raw transcripts. It needs a verification step, not a full anonymization pass.
163+
164+
**Add to the existing Human Review Checklist** (lines 203-211):
165+
```markdown
166+
- [ ] All source interviews use anonymized participant IDs (no real names)
167+
- [ ] No real names, email addresses, or company names appear in persona
168+
```
169+
170+
### Task 5: Fix stale privacy language in `research-plan` (P2-5)
171+
172+
**File:** `plugins/compound-engineering/skills/research-plan/SKILL.md` (line 221-223)
173+
174+
Change:
175+
```markdown
176+
Consider adding `docs/research/transcripts/` to `.gitignore` if transcripts
177+
contain personally identifiable information. Research plans and processed
178+
insights (with anonymized participant IDs) are generally safe to commit.
179+
```
180+
181+
To:
182+
```markdown
183+
Transcripts in `docs/research/transcripts/` contain raw interview data with PII
184+
and MUST NOT be committed to version control. The `.gitignore` already excludes
185+
this directory. Research plans and processed insights (with anonymized
186+
participant IDs) are safe to commit.
187+
```
188+
189+
### Task 6: Update plan docs status (P3-11)
190+
191+
**File:** `docs/plans/2026-02-11-feat-user-research-workflow-plan.md`
192+
193+
Add `status: completed` to the YAML frontmatter (it currently has no status field).
194+
195+
**File:** `docs/plans/2026-02-13-fix-research-process-first-action-plan.md`
196+
197+
Add `status: completed` to the YAML frontmatter (the fix was shipped in commit `47610ea`).
198+
199+
---
200+
201+
## P3 Items — Deferred
202+
203+
These are valid observations but non-blocking for merge. Document as future work:
204+
205+
| Item | Reason to Defer |
206+
|------|----------------|
207+
| P3-6: Headless/batch mode | Future work — primary v1 use case is human-driven |
208+
| P3-7: Extract output templates to reference files | Optimization — skills work fine as-is |
209+
| P3-8: Trim discovery playbook (414 lines) | Worth doing but separate PR to avoid scope creep |
210+
| P3-9: Simplify persona merge spec | Works correctly, can simplify after real-world usage data |
211+
| P3-10: Simplify agent search strategy | Works correctly, can simplify after real-world usage data |
212+
213+
---
214+
215+
## Execution Order
216+
217+
```
218+
0. git fetch upstream (Task 0 — rebase first)
219+
git rebase upstream/main (resolve conflicts per strategy above)
220+
1. Bump version to 2.36.0 in plugin.json + marketplace.json
221+
2. Recount components, update description strings
222+
3. git rm --cached .claude/settings.json (Task 2)
223+
4. Edit .gitignore (Tasks 1 + 2)
224+
5. Edit transcript-insights/SKILL.md (Task 3)
225+
6. Edit persona-builder/SKILL.md (Task 4)
226+
7. Edit research-plan/SKILL.md (Task 5)
227+
8. Update downstream pattern references (Task 1 follow-up)
228+
9. Update plan doc frontmatter (Task 6)
229+
10. Update CHANGELOG.md with v2.36.0 entry
230+
11. Validate JSON: jq . on plugin.json + marketplace.json
231+
12. Verify component counts still match
232+
13. Commit all changes, force-push branch
233+
```
234+
235+
## References
236+
237+
- PR #194: https://github.com/EveryInc/compound-engineering-plugin/pull/194
238+
- Solution doc: `docs/solutions/integration-issues/adding-optional-workflow-phases-with-graceful-degradation.md`
239+
- Solution doc: `docs/solutions/integration-issues/workflow-skill-transcript-input-mismatch.md`
240+
- Plugin versioning: `docs/solutions/plugin-versioning-requirements.md`

docs/solutions/integration-issues/adding-optional-workflow-phases-with-graceful-degradation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ docs/research/
6767
```
6868

6969
**Key rules:**
70-
- `.gitignore` must include `docs/research/transcripts/*.md` BEFORE any transcripts are created
70+
- `.gitignore` must exclude `docs/research/transcripts/*` (with `!.gitkeep` exception) BEFORE any transcripts are created
7171
- Skills must give explicit PII stripping instructions: replace names inline in quotes, anonymize company names, sanitize filenames
7272
- Use "MUST NOT be committed to public repositories" — not "consider" or "should"
7373
- Sample data for testing must use synthetic data, never real interview content
@@ -171,7 +171,7 @@ Users who drop a transcript into the folder and run `/workflows:research` should
171171
| `agents/research/user-research-analyst.md` | Removed "to be wired in PR 2" TODO, updated Integration Points |
172172
| `skills/transcript-insights/SKILL.md` | Strengthened PII guidance from "Consider" to "MUST NOT" |
173173
| `skills/persona-builder/SKILL.md` | Simplified evidence strength/hypothesis status tables; deduplicated playbook reference |
174-
| `.gitignore` | Added `docs/research/transcripts/*.md` |
174+
| `.gitignore` | Added `docs/research/transcripts/*` with `!.gitkeep` exception |
175175

176176
## Key Takeaway
177177

plugins/compound-engineering/commands/workflows/research.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ All research artifacts follow these path conventions:
1717
| Artifact | Path Pattern |
1818
|----------|-------------|
1919
| Research plans | `docs/research/plans/YYYY-MM-DD-<slug>-research-plan.md` |
20-
| Transcripts | `docs/research/transcripts/*.md` (user-provided) |
20+
| Transcripts | `docs/research/transcripts/*` (user-provided, gitignored) |
2121
| Interview snapshots | `docs/research/interviews/YYYY-MM-DD-participant-NNN.md` |
2222
| Personas | `docs/research/personas/<persona-slug>.md` |
2323

plugins/compound-engineering/skills/persona-builder/SKILL.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ _No divergences identified yet._
202202

203203
## Human Review Checklist
204204

205+
- [ ] All source interviews use anonymized participant IDs (no real names)
206+
- [ ] No real names, email addresses, or company names appear in persona
205207
- [ ] Goals and frustrations grounded in interview evidence
206208
- [ ] Behavior counts accurate (absence not counted as negative)
207209
- [ ] Quotes are exact (verified against source interviews)

plugins/compound-engineering/skills/research-plan/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,6 @@ Output objective: "Understand how teams currently create, share, and act on data
218218
| Bad | "Do you think reporting is important?" |
219219
| Bad | "Would you use a better reporting tool?" |
220220

221-
## Privacy Note
221+
## Privacy
222222

223-
Consider adding `docs/research/transcripts/` to `.gitignore` if transcripts contain personally identifiable information. Research plans and processed insights (with anonymized participant IDs) are generally safe to commit.
223+
Transcripts in `docs/research/transcripts/` contain raw interview data with PII and MUST NOT be committed to version control. The `.gitignore` already excludes this directory. Research plans and processed insights (with anonymized participant IDs) are safe to commit.

plugins/compound-engineering/skills/transcript-insights/SKILL.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,19 @@ Check existing interviews in `docs/research/interviews/` for the next available
5858

5959
### Step 4: Process the Transcript
6060

61-
Read the full transcript and extract the following components:
61+
Read the full transcript and extract the following components. **Apply anonymization throughout all output** per Step 4.0.
62+
63+
#### 4.0: Anonymization During Processing
64+
65+
Before extracting insights, apply these transformations to ALL output:
66+
67+
- Assign anonymized participant IDs (user-001, user-002, etc.)
68+
- Replace real names with anonymized IDs in all quotes and references
69+
- Replace company names with generic descriptors (e.g., "their company", "a competitor")
70+
- Strip identifying details from the `source_transcript` filename field -- use a descriptive slug, not the original filename if it contains names
71+
- Quotes must be exact from the transcript, but with PII replaced inline (e.g., `"[user-001] said the export was broken"`)
72+
73+
If the transcript already uses anonymized IDs (matching pattern `user-NNN`), note that anonymization is already complete and proceed.
6274

6375
#### 4a: Interview Summary
6476

@@ -250,6 +262,8 @@ Opportunities are unmet needs -- NOT solutions.
250262
251263
## Human Review Checklist
252264
265+
- [ ] No real names, email addresses, or company names in output
266+
- [ ] All participant references use anonymized IDs (user-NNN)
253267
- [ ] All quotes verified against source transcript
254268
- [ ] Experience map accurately reflects story arc
255269
- [ ] Opportunities reflect participant needs, not assumed solutions
@@ -286,13 +300,6 @@ Extracted opportunity:
286300
| Users check dashboard first thing in the morning | SUPPORTED | "Every morning I open three different tabs -- the dashboard, the Slack channel, and this spreadsheet" |
287301
| Export is primarily used for sharing with non-users | CHALLENGED | Export is used for personal tracking spreadsheet, not sharing |
288302

289-
## Privacy Note
290-
291-
Interview snapshots use anonymized participant IDs (user-001, user-002). Do not include real names, email addresses, or other identifying information in the snapshot output. When processing transcripts:
292-
293-
- **Replace all real names** with anonymized IDs (e.g., "user-001") in quotes and context
294-
- **Replace company names** with generic descriptors (e.g., "a regional health plan") unless the company is public knowledge and relevant to the insight
295-
- **Strip identifying details** from the `source_transcript` frontmatter field -- use a descriptive slug, not the original filename if it contains names
296-
- **Quotes must be exact** from the transcript, but with PII replaced inline (e.g., `"[user-001] said the export was broken"`)
303+
## Privacy
297304

298-
Transcripts in `docs/research/transcripts/` contain raw interview data with PII and MUST NOT be committed to public repositories. The `.gitignore` includes `docs/research/transcripts/*.md` by default.
305+
See Step 4.0 for anonymization requirements. Transcripts in `docs/research/transcripts/` contain raw interview data with PII and MUST NOT be committed to version control.

0 commit comments

Comments
 (0)