@gotgenes/pi-subagents 15.0.0 → 15.0.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ 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
+ ## [15.0.1](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v15.0.0...pi-subagents-v15.0.1) (2026-06-10)
9
+
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * **deps:** bump pnpm to 11.5.2 and fallow to 2.91.0 ([b34cef4](https://github.com/gotgenes/pi-packages/commit/b34cef4df692dbb279c859d56be49894d63c0c45))
14
+ * **deps:** bump tooling dependencies to latest minor/patch ([8b9105d](https://github.com/gotgenes/pi-packages/commit/8b9105d4011816fe8085dfed3a3b9d7bc9918c56))
15
+
8
16
  ## [15.0.0](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v14.0.1...pi-subagents-v15.0.0) (2026-06-09)
9
17
 
10
18
 
@@ -37,3 +37,45 @@ Test count: 973 (unchanged — no new tests added, three assertions updated in-p
37
37
  - Full suite (59 test files, 973 tests) stayed green after the source change — the planning analysis that the broader upstream regression suite uses explicit `promptMode` values was confirmed correct.
38
38
  - `pnpm fallow dead-code` and `pnpm run check` both passed with no findings.
39
39
  - Pre-completion reviewer verdict: **PASS** — no warnings or findings raised.
40
+
41
+ ## Stage: Final Retrospective (2026-06-09T03:04:21Z)
42
+
43
+ ### Session summary
44
+
45
+ Shipped the breaking-default fix end to end across four staged sessions (plan → TDD → ship → retro), cutting `pi-subagents@15.0.0`.
46
+ The change flips the `promptMode` default for custom agents that omit `prompt_mode` from `replace` to `append`.
47
+ Execution was clean except for one significant miss in planning: the change was initially classified as a non-breaking `fix:` and corrected only after the user intervened.
48
+
49
+ ### Observations
50
+
51
+ #### What went well
52
+
53
+ - The multi-model pipeline matched models to stage complexity: planning and retro on `claude-opus-4-8`, TDD on `claude-sonnet-4-6`, and the mechanical ship stage (push, CI watch, close, merge) on a cheaper `deepseek-v4-flash` — all stages completed their work correctly.
54
+ - The breaking-change correction propagated cleanly across the stage boundary: once the plan was fixed to `fix!:` with a `BREAKING CHANGE:` footer, the TDD stage (different model, different session) picked it up from the plan and committed the footer verbatim without re-deciding.
55
+ - TDD verification was incremental, not end-loaded: green baseline (`check`/`lint`/test) before any edit, red confirmation after the test edit, green after the source edit, then full suite + `check` + `lint` + `fallow` before the reviewer dispatch.
56
+
57
+ #### What caused friction (agent side)
58
+
59
+ - `instruction-violation` (user-caught) — the planning stage classified a changed-default bug fix as a non-breaking `fix:`, producing a plan with `fix:` commit messages.
60
+ The plan template line "If the change is breaking, say so explicitly in Goals and use `feat!:`" was available but never triggered, because the agent conflated "the fix is unambiguous" (turn 8) with "the change is non-breaking" and skipped the breaking determination entirely.
61
+ Impact: the user had to intervene ("This is a breaking change, right?"); three corrective edits (plan Goals, plan TDD commit block, retro Planning notes) plus one extra commit (`docs: mark issue #360 change as breaking`).
62
+ Caught before TDD, so no code rework — but a wrong `fix:` that reached `/ship-issue` would have cut a patch release for a breaking change.
63
+
64
+ #### What caused friction (user side)
65
+
66
+ - None on the #360 work.
67
+ The single redirecting question ("This is a breaking change, right?") was a near-optimal intervention: minimal, Socratic, and it let the agent reason to the correct classification itself rather than dictating the fix.
68
+ - Environment note (not #360-specific): the retro session opened with local `main` detached onto a stale `#332` side-branch after an aborted rebase (2 duplicate commits, 36 behind `origin/main`).
69
+ `origin/main` was intact; recovery was a verified `git reset --hard origin/main` after confirming the 2 local commits were byte-identical duplicates of work already on origin.
70
+
71
+ ### Diagnostic details
72
+
73
+ - **Model-performance correlation** — the breaking-change miss happened on the *strongest* model in the pipeline (`claude-opus-4-8`) during the judgment-heaviest stage (planning).
74
+ This rules out model capability as the cause and points to a salience gap in the plan-issue prompt: the breaking determination is framed only as an `ask-user` ambiguity, conditional on the change being "ambiguous," with no unconditional classification step.
75
+ - **Feedback-loop gap analysis** — no gap; the TDD stage ran `check`/`lint`/test/`fallow` incrementally rather than only at the end.
76
+ - Escalation-delay and unused-tool lenses found nothing notable (no rabbit-holes or tool-availability misses).
77
+
78
+ ### Changes made
79
+
80
+ 1. `.pi/prompts/plan-issue.md` — added an unconditional breaking-change classification step to the `## Decide` section (before the ambiguity paragraph), so the breaking determination no longer hides behind the `ask-user` ambiguity gate.
81
+ Names the non-obvious case explicitly: a bug fix that changes a default is breaking.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotgenes/pi-subagents",
3
- "version": "15.0.0",
3
+ "version": "15.0.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -58,16 +58,16 @@
58
58
  "node": ">=22"
59
59
  },
60
60
  "devDependencies": {
61
- "@biomejs/biome": "^2.4.14",
61
+ "@biomejs/biome": "^2.4.16",
62
62
  "@earendil-works/pi-ai": "0.75.4",
63
63
  "@earendil-works/pi-coding-agent": "0.75.4",
64
64
  "@earendil-works/pi-tui": "0.75.4",
65
65
  "@types/node": "^22.15.3",
66
66
  "rollup": "^4.60.4",
67
67
  "rollup-plugin-dts": "^6.4.1",
68
- "rumdl": "^0.1.93",
68
+ "rumdl": "^0.2.10",
69
69
  "typescript": "^6.0.3",
70
- "vitest": "^4.1.5"
70
+ "vitest": "^4.1.8"
71
71
  },
72
72
  "pi": {
73
73
  "extensions": [
@@ -148,7 +148,6 @@ export class AgentTool {
148
148
  );
149
149
  }
150
150
 
151
- // fallow-ignore-next-line unused-class-member
152
151
  toToolDefinition() {
153
152
  const typeListText = this.typeListText;
154
153
  const availableTypesText = this.availableTypesText;