@gotgenes/pi-subagents 7.2.2 → 7.2.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [7.2.4](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v7.2.3...pi-subagents-v7.2.4) (2026-05-25)
9
+
10
+
11
+ ### Documentation
12
+
13
+ * **retro:** add retro notes for issue [#195](https://github.com/gotgenes/pi-packages/issues/195) ([d591201](https://github.com/gotgenes/pi-packages/commit/d591201e0dcf88a73cfd2843c9f4eb5ec9b0e9b6))
14
+
15
+ ## [7.2.3](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v7.2.2...pi-subagents-v7.2.3) (2026-05-25)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * enforce fallow dead-code gate in CI ([#195](https://github.com/gotgenes/pi-packages/issues/195)) ([b1bd734](https://github.com/gotgenes/pi-packages/commit/b1bd734e1d2f5921521bebb1735db8f8c402b53b))
21
+
8
22
  ## [7.2.2](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v7.2.1...pi-subagents-v7.2.2) (2026-05-25)
9
23
 
10
24
 
@@ -40,3 +40,45 @@ Total: 5 commits across source + test files, plus 1 cleanup fix commit.
40
40
  This required updating `background-spawner.test.ts` and `foreground-runner.test.ts` (not listed in the plan) to destructure `{ manager, runtime }` instead of `{ manager, widget, agentActivity }`.
41
41
  - Biome flagged an unused `import type { AgentSession }` in `get-result-tool.ts` (left by ESLint's cast removal in step 2) — caught by `pnpm run lint` and fixed in a separate commit.
42
42
  - The `ReturnType<typeof vi.fn>` annotation on `makeNotifications()` in the get-result-tool test triggered a TypeScript error; fixed by removing the return type annotation entirely (per testing skill guidance).
43
+
44
+ ## Stage: Final Retrospective (2026-05-25T14:06:00Z)
45
+
46
+ ### Session summary
47
+
48
+ Shipped #195 (three tool factory-to-class conversions), then discovered and fixed a process gap: the fallow dead-code gate was advisory (`continue-on-error: true`) and the `/tdd-plan` and `/ship-issue` prompts didn't run `pnpm fallow dead-code` at all.
49
+ Resulting follow-up work promoted all dead-code rule categories to `error` severity, split the CI fallow step into a hard gate plus advisory full report, and removed the genuinely dead `steerAgent` export and unused `@eslint/js` devDependency.
50
+
51
+ ### Observations
52
+
53
+ #### What went well
54
+
55
+ - The user reading CI output carefully and asking "why did fallow check fail yet we proceeded to release?"
56
+ surfaced a real process gap that would have silently accumulated dead code over time.
57
+ - Incremental severity promotion was effective: checking each category's violation count before promoting let us ratchet from 3 error-level rules to 9 in three commits with zero cleanup work (all categories were already clean except the `steerAgent` export we'd just created).
58
+
59
+ #### What caused friction (agent side)
60
+
61
+ - `missing-context` — During the TDD session, I didn't run `pnpm fallow dead-code` after removing all callers of `steerAgent`, so the dead export shipped.
62
+ The existing `/tdd-plan` prompt's "after last step" checks didn't include fallow.
63
+ Impact: dead code shipped to a release, required a follow-up fix commit and re-release (`v7.2.2` → `v7.2.3`).
64
+ - `missing-context` — Used `// fallow-ignore-next-line unused-class-member -- reason text` but fallow parses every space-separated token after the rule name as additional rule names.
65
+ The existing codebase uses bare comments with no trailing text.
66
+ Impact: 12 stale-suppression warnings until the comment was fixed; no rework but added noise.
67
+ - `missing-context` — During planning, the Module-Level Changes section didn't list `background-spawner.test.ts` or `foreground-runner.test.ts`, even though both destructure `{ widget, agentActivity }` from `createToolDeps()`.
68
+ The testing skill already has guidance ("grep for ALL test files that construct a compatible mock") but I didn't apply it during planning.
69
+ Impact: caught immediately by running the full test suite; added friction but no rework.
70
+
71
+ #### What caused friction (user side)
72
+
73
+ - The fallow dead-code gap could have been caught earlier if the CI workflow had been configured to block on fallow findings from the start.
74
+ The `continue-on-error: true` was a reasonable initial setting during adoption but had outlived its usefulness.
75
+
76
+ ### Follow-up ideas
77
+
78
+ - **Pre-completion reviewer subagent** — a `.pi/agents/pre-completion-reviewer.md` dispatched before `/ship-issue` that runs deterministic checks (`pnpm fallow dead-code`, `pnpm run check`, `pnpm run lint`, `pnpm vitest run`) and judgment checks (conventional commits, architecture doc staleness) in a fresh read-only context.
79
+ Modeled after RepOne's `pre-completion-reviewer` but scoped to this monorepo's needs.
80
+ This would be a separate issue.
81
+
82
+ ### Changes made
83
+
84
+ 1. `.pi/prompts/tdd-plan.md` — added `pnpm fallow dead-code` as step 4 in "After the last TDD step" (renumbered steps 4–7 → 5–8).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotgenes/pi-subagents",
3
- "version": "7.2.2",
3
+ "version": "7.2.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/service.ts"
@@ -434,17 +434,6 @@ export async function resumeAgent(
434
434
  return collector.getText().trim() || getLastAssistantText(session);
435
435
  }
436
436
 
437
- /**
438
- * Send a steering message to a running subagent.
439
- * The message will interrupt the agent after its current tool execution.
440
- */
441
- export async function steerAgent(
442
- session: AgentSession,
443
- message: string,
444
- ): Promise<void> {
445
- await session.steer(message);
446
- }
447
-
448
437
  /**
449
438
  * Get the subagent's conversation messages as formatted text.
450
439
  */
@@ -148,6 +148,7 @@ export class AgentTool {
148
148
  );
149
149
  }
150
150
 
151
+ // fallow-ignore-next-line unused-class-member
151
152
  toToolDefinition() {
152
153
  const typeListText = this.typeListText;
153
154
  const availableTypesText = this.availableTypesText;