pi-session-mcp 0.8.0 → 0.8.2
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/.pi-session-mcp-cli/doctor.js +14 -7
- package/.pi-session-mcp-cli/override-lock.js +125 -0
- package/.pi-session-mcp-cli/setup-platform.js +195 -0
- package/.pi-session-mcp-cli/skill-customize.js +131 -46
- package/.pi-session-mcp-cli/skill-library.js +72 -4
- package/CHANGELOG.md +159 -0
- package/CONTRIBUTING.md +5 -3
- package/README.md +5 -3
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +14 -7
- package/dist/override-lock.d.ts +34 -0
- package/dist/override-lock.js +125 -0
- package/dist/pi-adapter.d.ts +6 -4
- package/dist/sdk-pi-adapter.js +28 -5
- package/dist/session-registry.d.ts +8 -6
- package/dist/session-registry.js +3 -2
- package/dist/setup-ownership.d.ts +4 -1
- package/dist/setup-ownership.js +6 -3
- package/dist/setup-skills.d.ts +46 -1
- package/dist/setup-skills.js +349 -78
- package/dist/setup.js +21 -4
- package/dist/skill-customize.d.ts +19 -1
- package/dist/skill-customize.js +131 -46
- package/dist/skill-library.d.ts +46 -1
- package/dist/skill-library.js +72 -4
- package/docs/acceptance.md +747 -26
- package/docs/adr/0007-profile-skill-selection.md +11 -0
- package/docs/architecture.md +1 -1
- package/docs/client-setup-design.md +157 -24
- package/docs/client-setup.md +38 -7
- package/docs/doctor-design.md +1 -1
- package/docs/installation.md +8 -2
- package/docs/pi-extensions-design.md +11 -0
- package/docs/releasing.md +25 -10
- package/docs/reviews/2026-10-13-post-0.8.1-audit.md +393 -0
- package/docs/roadmap.md +127 -0
- package/docs/skills.md +173 -16
- package/docs/sprints/2026-10-13-s1-correctness.md +355 -0
- package/docs/sprints/2026-10-13-s2-evidence.md +431 -0
- package/docs/sprints/2026-10-13-s3-live-usage.md +267 -0
- package/docs/sprints/2026-10-13-s4-decision-inputs.md +241 -0
- package/docs/threat-model.md +3 -3
- package/docs/tool-contracts.md +20 -2
- package/package.json +1 -1
- package/skills/pi-session-orchestration/SKILL.md +8 -4
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# Post-0.8.1 audit and backlog snapshot
|
|
2
|
+
|
|
3
|
+
Snapshot date: 2026-10-13. Reviewed source:
|
|
4
|
+
[`e462054a37505ef00e1e0c549ebab27e4db7ef55`](https://github.com/plagor44-ux/pi-session-mcp/commit/e462054a37505ef00e1e0c549ebab27e4db7ef55).
|
|
5
|
+
Documentation tracking: [#57](https://github.com/plagor44-ux/pi-session-mcp/issues/57).
|
|
6
|
+
|
|
7
|
+
PR #55 delivered useful stabilization and its final native CI passes. This
|
|
8
|
+
review nevertheless reproduced an additional, bounded data-preservation defect
|
|
9
|
+
in skill recovery and confirmed the diagnostic classification in issue #56.
|
|
10
|
+
Fix these first, then complete the missing acceptance. The evidence does not
|
|
11
|
+
justify a general new feature phase.
|
|
12
|
+
|
|
13
|
+
This is an English preservation of the review and plan produced on 2026-10-13.
|
|
14
|
+
The observations below belong to the reviewed source, not to future fixes.
|
|
15
|
+
Proposed tasks are separate from verified facts. Creating this record does not
|
|
16
|
+
fix either defect or complete any acceptance. The shorter execution index is
|
|
17
|
+
the [roadmap](../roadmap.md).
|
|
18
|
+
|
|
19
|
+
## Repository and source bindings
|
|
20
|
+
|
|
21
|
+
`plagor44-ux/pi-control` is archived, with no open issues or pull requests at
|
|
22
|
+
the snapshot. Its final PR is
|
|
23
|
+
[#79](https://github.com/plagor44-ux/pi-control/pull/79), main `a64a5b8`.
|
|
24
|
+
Its issues #31, #32 and #41 were closed as `not_planned`, not implemented.
|
|
25
|
+
The [closing comment on #41](https://github.com/plagor44-ux/pi-control/issues/41#issuecomment-6037099724)
|
|
26
|
+
explicitly names Pi Session MCP as the successor. Other software projects are
|
|
27
|
+
outside this review.
|
|
28
|
+
|
|
29
|
+
| Subject | Observed state |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| Main | `e462054a37505ef00e1e0c549ebab27e4db7ef55` |
|
|
32
|
+
| Latest PR | [#55](https://github.com/plagor44-ux/pi-session-mcp/pull/55), merged 2026-10-12 at 21:15 UTC; final head `440f2e4ccb4f7cebd88825abd8515218f4bbbdee` |
|
|
33
|
+
| Release | [v0.8.1](https://github.com/plagor44-ux/pi-session-mcp/releases/tag/v0.8.1), published 2026-10-12 at 22:06 UTC, or 2026-10-13 at 00:06 Europe/Berlin |
|
|
34
|
+
| Open issues during review | One: [#56](https://github.com/plagor44-ux/pi-session-mcp/issues/56) |
|
|
35
|
+
| Open PRs during review | None |
|
|
36
|
+
| Final PR CI | [38309093300](https://github.com/plagor44-ux/pi-session-mcp/actions/runs/38309093300), Linux, macOS 15, macOS 26 and the aggregate check passed |
|
|
37
|
+
| Main CI | [38309519719](https://github.com/plagor44-ux/pi-session-mcp/actions/runs/38309519719), passed |
|
|
38
|
+
| Tag CI | [38309738675](https://github.com/plagor44-ux/pi-session-mcp/actions/runs/38309738675), passed |
|
|
39
|
+
| SDK canary | [38247575455](https://github.com/plagor44-ux/pi-session-mcp/actions/runs/38247575455), passed on `de46896`, before #55 |
|
|
40
|
+
| Dependencies | Package 0.8.1, Pi SDK 1.1.0, MCP client/server 2.3.1; direct dependencies exactly pinned |
|
|
41
|
+
|
|
42
|
+
Open issue and PR collections, repository paths, [AGENTS.md](../../AGENTS.md),
|
|
43
|
+
all seven ADRs, both implementation plans, acceptance, releasing, skills,
|
|
44
|
+
setup design, threat model, CI and the changed runtime files and relevant
|
|
45
|
+
tests were inspected. Main and the open issue collection were rechecked
|
|
46
|
+
before delivery; main remained `e462054` and #56 remained the only open issue.
|
|
47
|
+
The subsequent documentation issue #57 is not part of that earlier snapshot.
|
|
48
|
+
Refresh main, issues, PRs and affected sources before implementation.
|
|
49
|
+
|
|
50
|
+
## Findings
|
|
51
|
+
|
|
52
|
+
### F1: recovery deletes operator changes in the transaction's trash
|
|
53
|
+
|
|
54
|
+
Severity: medium correctness/data-preservation defect. Work priority: P1.
|
|
55
|
+
The reproduced case needs an interrupted local skill update and subsequent
|
|
56
|
+
operator changes to its intermediate directory. It does not establish remote
|
|
57
|
+
reachability or general deletion of workspace files.
|
|
58
|
+
|
|
59
|
+
In [src/setup-skills.ts](../../src/setup-skills.ts), `recover()` at reviewed
|
|
60
|
+
lines 313–320 checks `.trash` only with `collectPlain()`: directory structure,
|
|
61
|
+
regular file types, hidden entries and tree limits. An additional regular file
|
|
62
|
+
passes this check; `discardTrash()` then removes it. A transaction-shaped
|
|
63
|
+
directory name does not prove that its current contents remain setup's own.
|
|
64
|
+
|
|
65
|
+
The isolated reproduction used the built modules from the reviewed source,
|
|
66
|
+
a temporary synthetic package, home and project, and `MemoryOwnershipStore`:
|
|
67
|
+
|
|
68
|
+
1. Install a synthetic v1 controller skill.
|
|
69
|
+
2. Provide a synthetic v2 override.
|
|
70
|
+
3. Throw at the existing `trash-renamed` checkpoint during the update. This
|
|
71
|
+
leaves the actual pending record and intermediate directory. It simulates
|
|
72
|
+
an interruption; it is not evidence of a real operating-system crash.
|
|
73
|
+
4. Add a regular `operator-notes.txt` with synthetic operator content inside
|
|
74
|
+
that `.trash` directory.
|
|
75
|
+
5. In separate fresh fixtures, run `apply`, `remove` and `rollback`.
|
|
76
|
+
|
|
77
|
+
| Operation | Reported code | Operator file retained |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| apply | skill_recovered | No |
|
|
80
|
+
| remove | skill_removed | No |
|
|
81
|
+
| rollback | skill_removed | No |
|
|
82
|
+
|
|
83
|
+
The [skills guide](../skills.md) and [setup lifecycle design](../client-setup-design.md)
|
|
84
|
+
also promise to retain modified or foreign intermediates. Existing recovery
|
|
85
|
+
tests cover modified backups and staging trees, plus trash with links or
|
|
86
|
+
hidden entries. The regular foreign-trash-file counterexample is missing.
|
|
87
|
+
|
|
88
|
+
Smallest proposed correction: delete a complete trash tree only after proving
|
|
89
|
+
it equals the replaced tree. Retain a partial or otherwise unprovable tree
|
|
90
|
+
with `skill_recovery_retained`. Continuing a partial deletion is not a reason
|
|
91
|
+
to risk operator files. If automatic partial recovery requires additional
|
|
92
|
+
durable evidence, deliver the conservative behavior first and decide that
|
|
93
|
+
extra scope separately. Do not introduce a broad journal abstraction as
|
|
94
|
+
incidental work. Align partial-trash expectations and documentation with the
|
|
95
|
+
actual preservation guarantee; do not weaken the counterexample.
|
|
96
|
+
|
|
97
|
+
At the audit snapshot this finding had no GitHub implementation issue.
|
|
98
|
+
Duplicate-check and create a focused issue before implementing R01.
|
|
99
|
+
|
|
100
|
+
### F2: verify misclassifies client and inspection failures
|
|
101
|
+
|
|
102
|
+
Severity: low diagnostic defect. Work priority: P2. Existing tracker:
|
|
103
|
+
[#56](https://github.com/plagor44-ux/pi-session-mcp/issues/56).
|
|
104
|
+
|
|
105
|
+
In [src/setup.ts](../../src/setup.ts), `verify()` at reviewed lines 146–149
|
|
106
|
+
reduces the inspection to an `equivalent` boolean. Both `unsupported` and an
|
|
107
|
+
inspection exception become `registration_not_equivalent`.
|
|
108
|
+
|
|
109
|
+
An isolated synthetic-adapter reproduction confirmed:
|
|
110
|
+
|
|
111
|
+
| Inspection | dry-run | verify |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| unsupported | unsupported | registration_not_equivalent |
|
|
114
|
+
| exception | inspect_failed | registration_not_equivalent |
|
|
115
|
+
| absent | absent | registration_not_equivalent |
|
|
116
|
+
| divergent | divergent | registration_not_equivalent |
|
|
117
|
+
|
|
118
|
+
The production wrapper returns `unsupported` when client discovery fails.
|
|
119
|
+
The actual missing-PATH-client reproduction is reported in #56. This review
|
|
120
|
+
executed the orchestrator counterexample, not a real client installation.
|
|
121
|
+
|
|
122
|
+
Smallest proposed correction: preserve existing `unsupported` and
|
|
123
|
+
`inspect_failed` codes; reserve `registration_not_equivalent` for a genuinely
|
|
124
|
+
absent or divergent registration. A new `client_unavailable` code is not
|
|
125
|
+
necessary. Neither failure may start a mutation or MCP handshake. Preserve
|
|
126
|
+
Doctor, ownership and release-binding precedence, and check human/JSON output,
|
|
127
|
+
exit status, documentation and negative Level-2 cases.
|
|
128
|
+
|
|
129
|
+
## Review and CI limits
|
|
130
|
+
|
|
131
|
+
[CI 38307240366](https://github.com/plagor44-ux/pi-session-mcp/actions/runs/38307240366)
|
|
132
|
+
failed on both macOS jobs at the earlier `183d53c` head; Linux passed.
|
|
133
|
+
`f048144` made Linux-only harness checks platform-explicit and `0c7bad3`
|
|
134
|
+
named the platform in lock fail-closed cases. The final head passes the full
|
|
135
|
+
matrix. There is no still-failing final PR check in this observation.
|
|
136
|
+
|
|
137
|
+
GitHub returned no formal review submissions and no inline review threads
|
|
138
|
+
for #55. The [Codex security comment](https://github.com/plagor44-ux/pi-session-mcp/pull/55#issuecomment-6132442390)
|
|
139
|
+
names `183d53c`, a P0 threshold and no merge gate. It does not approve the
|
|
140
|
+
complete final head. The PR description reports independent local reviews;
|
|
141
|
+
their reports were not separately available to this review. Green CI and the
|
|
142
|
+
security summary do not exclude F1.
|
|
143
|
+
|
|
144
|
+
## Checks actually executed by the review
|
|
145
|
+
|
|
146
|
+
Unmodified checkout `e462054`; Linux container, Node.js 24.19.0. No real
|
|
147
|
+
client registrations, models or providers were used. The review itself did
|
|
148
|
+
not modify repository files, create commits/issues/PRs or publish a release.
|
|
149
|
+
The later documentation-preservation change is separate.
|
|
150
|
+
|
|
151
|
+
| Check | Result |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| npm ci | Exit 0 |
|
|
154
|
+
| npm run typecheck | Exit 0 |
|
|
155
|
+
| npm run build:cli | Exit 0 |
|
|
156
|
+
| NODE_OPTIONS=--unhandled-rejections=strict npm test | Exit 1: 41 files passed, 9 failed; 983 tests passed, 52 failed, 6 skipped; 4 unhandled errors |
|
|
157
|
+
| npm run build | Executed separately, exit 0 |
|
|
158
|
+
| npm audit | Exit 0; no vulnerabilities at the time of the query |
|
|
159
|
+
| git diff --check | Exit 0 |
|
|
160
|
+
| git status --short | Empty |
|
|
161
|
+
| Recovery reproduction | F1 confirmed for all three operations |
|
|
162
|
+
| Verify reproduction | F2 confirmed for unsupported and inspection exception |
|
|
163
|
+
| Isolated existing process-table test | createProcessTable().readable() failed in this environment |
|
|
164
|
+
|
|
165
|
+
Failures concentrate on process groups, `/proc`, kernel locks, the guardian
|
|
166
|
+
and dependent crash/harness tests. Direct probes gave inconsistent process
|
|
167
|
+
visibility. The precise cause is unresolved. The isolated process test,
|
|
168
|
+
`src/setup-platform.ts`, `src/setup-process.ts` and `test/process-fixture.ts`
|
|
169
|
+
are unchanged from the PR base. This argues against attributing all 52
|
|
170
|
+
failures to #55 but does not establish the cause of each failure. Do not
|
|
171
|
+
claim a green local acceptance or turn all failures into new product bugs.
|
|
172
|
+
A complete run on a supported native runner remains a gate.
|
|
173
|
+
|
|
174
|
+
## Complete clustered remainder
|
|
175
|
+
|
|
176
|
+
P1 means first or a gate for dependent usage. P2 is bounded follow-up work.
|
|
177
|
+
P3 needs concrete demand. **R01–R23 are roadmap identifiers, not GitHub issue
|
|
178
|
+
numbers.** Only #56 was already an open issue during the audit; other rows are
|
|
179
|
+
findings, evidence gaps or proposed maintenance tasks.
|
|
180
|
+
|
|
181
|
+
### A: correctness and local operation
|
|
182
|
+
|
|
183
|
+
| ID | Priority | Remainder | Deliverable |
|
|
184
|
+
| --- | --- | --- | --- |
|
|
185
|
+
| R01 | P1 | F1 modified-trash data loss | Focused issue and conservative fix; regular foreign file, modified existing content, complete own trash and partial trash counterexamples for apply/remove/rollback |
|
|
186
|
+
| R02 | P2 | F2 / #56 verify classification | Preserve existing codes; negative cases without mutation or handshake |
|
|
187
|
+
| R03 | P1 gate | Local full suite failed | Reproduce on native Linux; distinguish product defects from container prerequisites without retries or weaker process proofs |
|
|
188
|
+
| R04 | P2 | Non-exhaustive start-error list in the orchestration skill | Classify current public start codes as operator-needed, transient or unknown; never classify provider free text |
|
|
189
|
+
|
|
190
|
+
### B: evidence and orchestration
|
|
191
|
+
|
|
192
|
+
| ID | Priority | Remainder | Deliverable |
|
|
193
|
+
| --- | --- | --- | --- |
|
|
194
|
+
| R05 | P1 | No full ten-task Level-3 cycle on Pi SDK 1.x | One frozen build, both controllers, five tasks each, independent snapshots/oracles; preserve failed attempts |
|
|
195
|
+
| R06 | P1 gate | Final supplementary Codex abort run violated scope | Offer handshake only where needed or make it unambiguously task-bound; new run with unchanged strict scope oracles, not a wider allowed-file set |
|
|
196
|
+
| R07 | P2 | No live discovery of the setup-installed Codex home skill | Real discovery of a regular setup-installed copy in an isolated client home; verified revision, no required manual symlink |
|
|
197
|
+
| R08 | P2 | Third concurrent worker and read-only reviewer unproven live | After two-worker acceptance, two writers in separate worktrees plus a reviewer of a frozen result; scope, association, neighbor abort and close |
|
|
198
|
+
| R09 | P2 | Current multi-session live evidence covers Cursor workers only | Level 3 for the normal/local Pi profile actually intended for use; do not transfer Cursor evidence to other providers |
|
|
199
|
+
| R10 | P2 | Current macOS Level-2 path not fully accepted on real hardware | 0.8.x with both clients in isolated homes; prior Claude Code evidence does not automatically cover new skill locks/recovery, and Codex was already pending |
|
|
200
|
+
| R11 | P2 conditional | macOS live use beyond CI | Small real-Mac read-only smoke when needed; heavy suites and parallel inference on suitable Linux hardware |
|
|
201
|
+
| R12 | P3 | Real skill-update crash, customization contention and harness-analysis signal runs absent | Add only targeted evidence when operating experience warrants it; existing provider-free tests are not renamed as live evidence |
|
|
202
|
+
|
|
203
|
+
Two-session operation already has real evidence: Claude Code passed parallel
|
|
204
|
+
and abort; Codex passed parallel. The final Codex abort run failed only
|
|
205
|
+
`range:changes`, because a Cursor worker applied the handshake skill to an
|
|
206
|
+
unrequested file. Abort, neighbor behavior and cleanup passed. This is a
|
|
207
|
+
task/worker outcome, not a demonstrated session-control defect. More than two
|
|
208
|
+
sessions are not documented as technically impossible; their live proof is
|
|
209
|
+
missing.
|
|
210
|
+
|
|
211
|
+
### C: acceptance and release evidence quality
|
|
212
|
+
|
|
213
|
+
| ID | Priority | Remainder | Deliverable |
|
|
214
|
+
| --- | --- | --- | --- |
|
|
215
|
+
| R13 | P2 | Runs bind extension name/version, not package contents | Fingerprint effectively loaded extension trees before/after a run; changed contents invalidate acceptance; no published raw paths |
|
|
216
|
+
| R14 | P2 | Additional Codex skill sources are not bound | Bind actually active CODEX_HOME/system skill sources or demonstrably exclude them; prerequisite for R07 |
|
|
217
|
+
| R15 | P3 | Unreadable client start time immediately after spawn leaves no sighting | Explicit failed/unverified evidence; never infer cleanup from an absent observation |
|
|
218
|
+
| R16 | P2 | Strict unhandled rejections are not explicit in CI | Align the current CI test environment with the local strict command; no broad new matrix |
|
|
219
|
+
| R17 | P3 | npm audit is manual only | Keep the manual release gate; consider one small scheduled advisory check only after further demonstrated drift, in its own issue |
|
|
220
|
+
| R18 | P3 | npm publication has no provenance attestation | Consider Trusted Publishing/provenance as a separate supply-chain decision if external use makes it relevant; not a blocker for bounded local dogfooding |
|
|
221
|
+
|
|
222
|
+
The latest observed canary predates #55. A current-source canary can add
|
|
223
|
+
maintenance evidence, but cannot replace native full-suite or live acceptance.
|
|
224
|
+
It does not authorize an SDK upgrade.
|
|
225
|
+
|
|
226
|
+
### D: documentation and planning
|
|
227
|
+
|
|
228
|
+
| ID | Priority | Remainder | Deliverable |
|
|
229
|
+
| --- | --- | --- | --- |
|
|
230
|
+
| R19 | P2 | v0.8.1 post-release evidence exists only in release notes | Carry it into acceptance with the next change PR, as #55 explicitly planned; do not describe this as a forgotten release operation |
|
|
231
|
+
| R20 | P2 | Historical macOS/extension plans retain unchecked steps | Mark delivered/superseded work with PR references; do not reimplement it |
|
|
232
|
+
| R21 | P2 | No consolidated active roadmap in the successor | Short English docs/roadmap.md with actual remainder, sources and gates, under a focused issue |
|
|
233
|
+
| R22 | P2 | ChatGPT project instructions still describe the former repository/release sequence | Update successor, SDK, macOS, extensions/skills and current ADR ordering; do not reuse v0.3.0 or old #11–#14 as active priorities |
|
|
234
|
+
| R23 | P3 | Acceptance/versioning wording can be misunderstood | Distinguish targeted two-session evidence from full Level 3; clarify MCP-contract versus setup-report versioning |
|
|
235
|
+
|
|
236
|
+
R21 is the documentation created alongside this snapshot. The other rows do
|
|
237
|
+
not become complete merely because they are recorded here.
|
|
238
|
+
|
|
239
|
+
### E: deliberately deferred decisions
|
|
240
|
+
|
|
241
|
+
| Topic | State | Entry condition / smallest useful test |
|
|
242
|
+
| --- | --- | --- |
|
|
243
|
+
| OS/process isolation | ADR 0003; decide before real writable workspaces | Non-disposable repositories or untrusted coding content: separate architecture/threat-model issue; synthetic isolated write test |
|
|
244
|
+
| pi_turn_wait | No implementation now | Routinely more than about five polls per turn with pauses, or demonstrated tool/approval cost. The reported 5–7 polls per invocation do not establish the trigger |
|
|
245
|
+
| Persistence/resume | No demonstrated current need | Actual loss of useful work after restart; otherwise ephemeral sessions |
|
|
246
|
+
| HTTP/remote/mobile | No approved need | Concrete case SSH/existing remote development cannot satisfy; separate ADR/security decision |
|
|
247
|
+
| Finer turn_failed | Upstream-dependent | Closed public final SDK cause discriminator after retry/compaction, with positive and negative cases; no regex on raw errors |
|
|
248
|
+
| Multi-user, UI, credential management | Outside product scope | Separate justified product goal and ADR |
|
|
249
|
+
| Former pi-control #31/#32 | Closed as not_planned | No automatic reopening/migration; a current project-specific need requires separate scope |
|
|
250
|
+
| Former release gates and #11–#14 | Historical | Do not repeat delivered historical gates; acceptance must bind the current build |
|
|
251
|
+
|
|
252
|
+
## Plan and ADR reconciliation
|
|
253
|
+
|
|
254
|
+
| Source | Delivered state | Actual remainder |
|
|
255
|
+
| --- | --- | --- |
|
|
256
|
+
| [macOS plan, 2026-10-10](../superpowers/plans/2026-10-10-macos-setup.md), tasks 1–8 | Platform, runner/guardian, ownership, tests, EOF, CI and docs delivered by #33; #32 closed | Real Codex Mac acceptance, current 0.8.x skill paths, plan checkbox status |
|
|
257
|
+
| [Extension plan, 2026-10-11](../superpowers/plans/2026-10-11-pi-extensions.md), tasks 1–9 | Configuration, resolution, Doctor, stdout guard, prompt source, runtime, contracts and governance delivered by #35/#37/#44; #34 closed | Plan status and current follow-ups; no duplicate implementation |
|
|
258
|
+
| Extension plan, task 10 | Cursor live path documented in acceptance and #55, including Claude Code parallel/abort | Controller/platform limits in cluster B |
|
|
259
|
+
| [ADR 0001](../adr/0001-stdio-first.md) | Local stdio, one trusted peer | No transport project |
|
|
260
|
+
| [ADR 0002](../adr/0002-embedded-pi-sdk.md) | Public embedded APIs, no OS isolation | Read later approved ADR 0006/0007 expansions together |
|
|
261
|
+
| [ADR 0003](../adr/0003-post-mvp-maintenance.md) | Maintenance, no general feature phase | Evaluate revisit triggers using current measurements only |
|
|
262
|
+
| [ADR 0004](../adr/0004-client-contract-not-version.md) | Client contract rather than exact client-version allowlist | Fix #56; do not reinstate the old allowlist |
|
|
263
|
+
| [ADR 0005](../adr/0005-macos-setup-platform.md) | macOS with the same fence guarantee | Current native acceptance |
|
|
264
|
+
| [ADR 0006](../adr/0006-pi-extension-allowlist.md) | Exact locally installed profile extensions | Runtime/content evidence; no automatic install |
|
|
265
|
+
| [ADR 0007](../adr/0007-profile-skill-selection.md) | Operator catalog, profile-selected skills, setup-installed controller skill | F1 and actual discovery; skills neither grant rights nor guarantee task success |
|
|
266
|
+
|
|
267
|
+
## Four gated sprints
|
|
268
|
+
|
|
269
|
+
Dates are a proposal from 2026-10-13, not a capacity commitment. A delayed gate
|
|
270
|
+
shifts dependent work; independent documentation and Mac setup checks may
|
|
271
|
+
continue. Each coding task needs a focused issue first.
|
|
272
|
+
|
|
273
|
+
### Sprint 1: stability and correct diagnostics
|
|
274
|
+
|
|
275
|
+
Proposed window: October 13–14, one or two implementation sessions plus native
|
|
276
|
+
verification. Scope: R01, R02, R03, R19 and directly affected documentation.
|
|
277
|
+
|
|
278
|
+
Create the missing R01 issue after a duplicate check. Claude Code locally
|
|
279
|
+
integrates. Recovery and #56 can run in separate worktrees with read-only
|
|
280
|
+
review/documentation work in parallel. Run the heavy full suite only after
|
|
281
|
+
integration; do not overlap full suites on a small host.
|
|
282
|
+
|
|
283
|
+
- Recovery owns `src/setup-skills.ts` and dedicated recovery counterexamples.
|
|
284
|
+
- #56 owns `src/setup.ts` and targeted lifecycle/verify tests.
|
|
285
|
+
- The integrator owns shared docs, changelog, acceptance and version fields.
|
|
286
|
+
|
|
287
|
+
Exit gate:
|
|
288
|
+
- Modified regular trash contents remain intact under apply/remove/rollback.
|
|
289
|
+
- Complete own intermediates are handled correctly; unprovable partial trees
|
|
290
|
+
remain with a stable report code.
|
|
291
|
+
- Missing clients report unsupported and inspection exceptions inspect_failed;
|
|
292
|
+
neither runs a registration mutation or handshake.
|
|
293
|
+
- Doctor, release-binding and ownership precedence remain intact.
|
|
294
|
+
- Native Level 1 has no unhandled rejections; the final head passes the full
|
|
295
|
+
Linux/macOS matrix and independent code review.
|
|
296
|
+
- Level 2 remains green on actually checked targets; new negative cases are
|
|
297
|
+
recorded separately.
|
|
298
|
+
|
|
299
|
+
Delivery: one consolidated maintenance PR with separate issue commits.
|
|
300
|
+
0.8.2 is a possible patch candidate if the MCP contract is unchanged. The
|
|
301
|
+
version and pre-release evidence belong in that change PR under the current
|
|
302
|
+
release procedure. Merge/tag/publish remain a separate maintainer gate, not
|
|
303
|
+
an action performed by this plan. Do not approve if F1 remains or native
|
|
304
|
+
Level 1 fails.
|
|
305
|
+
|
|
306
|
+
### Sprint 2: make acceptance traceable
|
|
307
|
+
|
|
308
|
+
Proposed window: October 15–16, one or two sessions after Sprint 1. Scope:
|
|
309
|
+
R04, R13, R14, R16 and R19–R23 where narrowly justified. Include R15 only if a
|
|
310
|
+
counterexample establishes a material proof gap.
|
|
311
|
+
|
|
312
|
+
Bind effectively loaded extensions and active skill sources; do not silently
|
|
313
|
+
ignore unknown sources. Offer the handshake only where its task needs it.
|
|
314
|
+
Keep original strict scope oracles. Reconcile historical plans with delivered
|
|
315
|
+
PRs, maintain a short English roadmap and preserve post-release evidence.
|
|
316
|
+
Align strict CI. Check the current-source canary on a frozen candidate without
|
|
317
|
+
moving the SDK pin.
|
|
318
|
+
|
|
319
|
+
Harness evidence, controller-skill failure policy and documentation can run in
|
|
320
|
+
separate worktrees. One owner edits the central harness; the integrator owns
|
|
321
|
+
shared acceptance documentation.
|
|
322
|
+
|
|
323
|
+
Exit gate: changing a bound skill/extension after preparation invalidates a
|
|
324
|
+
run; installed versus linked skills are distinguishable; original failed
|
|
325
|
+
attempts remain recorded; every remainder has an issue or explicit entry
|
|
326
|
+
condition. No new runtime feature phase.
|
|
327
|
+
|
|
328
|
+
### Sprint 3: accept real usage
|
|
329
|
+
|
|
330
|
+
Proposed window: October 17–20, two or three bounded acceptance sessions, not
|
|
331
|
+
a broad implementation package. Scope: R05–R11. Requires Sprint 1 and the
|
|
332
|
+
Sprint-2 evidence bindings before the runs that depend on them.
|
|
333
|
+
|
|
334
|
+
Start on Linux with the full Level-3 matrix for both controllers at the same
|
|
335
|
+
frozen build. Select a normal/local Pi profile actually intended for use;
|
|
336
|
+
record the loaded model before/after every run and never force a model switch
|
|
337
|
+
on shared inference. Use synthetic coding fixtures only. Pre-register tests,
|
|
338
|
+
allowed files, snapshots and oracles. A scope failure remains a failed task.
|
|
339
|
+
|
|
340
|
+
Then run targeted parallel/abort scenarios for both controllers with the
|
|
341
|
+
appropriate Cursor profile. A fresh Codex abort must pass scope too.
|
|
342
|
+
Only afterwards try one small extension to two writers in separate alias
|
|
343
|
+
worktrees and a read-only reviewer of a frozen result. Do not begin with a
|
|
344
|
+
large worker matrix.
|
|
345
|
+
|
|
346
|
+
In parallel, the Mac runs only current Level 2 for both clients and a short
|
|
347
|
+
read-only smoke. Keep heavy suites and parallel large inference off a
|
|
348
|
+
resource-constrained work Mac. If a client is unavailable, retain that gate
|
|
349
|
+
and deliver independent Linux work.
|
|
350
|
+
|
|
351
|
+
Exit gate: meet the existing Level-3 criteria, including at least 8/10
|
|
352
|
+
intended outcomes without a server defect **and** every required scope,
|
|
353
|
+
security and cleanup condition, both client lifecycles, useful follow-ups
|
|
354
|
+
and verified coding. Target 10/10; the 8/10 rule never hides unauthorized
|
|
355
|
+
changes. Codex abort scope passes; setup's installed Codex copy is actually
|
|
356
|
+
read; read-only fixtures remain byte-identical; all sessions close with no
|
|
357
|
+
residual processes or structural leaks. Usage claims cover only tested
|
|
358
|
+
profiles, clients, platforms and concurrency.
|
|
359
|
+
|
|
360
|
+
### Sprint 4: decide the next investment from usage
|
|
361
|
+
|
|
362
|
+
Proposed window: October 21–23, one short evaluation. No feature implementation
|
|
363
|
+
without a separate justified decision.
|
|
364
|
+
|
|
365
|
+
Evaluate failures/causes, scope violations, polls per turn with real pauses,
|
|
366
|
+
task duration, cleanup, actual restart costs and planned non-disposable coding
|
|
367
|
+
workspaces. Route R12/R15/R17/R18 into one concrete follow-up or the deferred
|
|
368
|
+
list according to need.
|
|
369
|
+
|
|
370
|
+
If real writing is next, isolation is the first architecture question. If only
|
|
371
|
+
polling is costly, examine the smallest bounded-wait proposal. If no trigger
|
|
372
|
+
fired, continue maintenance. Persistence and remote access need their own
|
|
373
|
+
evidence. The strongest argument against expansion is the security and
|
|
374
|
+
maintenance surface it adds to a deliberately small local server.
|
|
375
|
+
|
|
376
|
+
Exit gate: documented decision, at most one next investment, a focused issue
|
|
377
|
+
and an appropriate ADR for scope/contract changes. No automatic roadmap to
|
|
378
|
+
1.0 or general release authorization.
|
|
379
|
+
|
|
380
|
+
## Dependencies
|
|
381
|
+
|
|
382
|
+
```mermaid
|
|
383
|
+
flowchart TD
|
|
384
|
+
S1["S1: Recovery and verify fixes"] --> G["Native QA and final review pass"]
|
|
385
|
+
G --> S2["S2: Bind harness evidence"]
|
|
386
|
+
G --> M["Current macOS Level 2"]
|
|
387
|
+
S2 --> S3["S3: Linux Level 3 and multi-session acceptance"]
|
|
388
|
+
M --> S4["S4: Usage boundary and next investment"]
|
|
389
|
+
S3 --> S4
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
The next implementation session is Sprint 1: R01 plus #56 are the smallest
|
|
393
|
+
evidence-backed development step. A published tag alone is not its exit gate.
|
package/docs/roadmap.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Maintenance roadmap
|
|
2
|
+
|
|
3
|
+
Planning basis: main `e462054a37505ef00e1e0c549ebab27e4db7ef55`, 2026-10-13.
|
|
4
|
+
Tracking: [#57](https://github.com/plagor44-ux/pi-session-mcp/issues/57).
|
|
5
|
+
The complete [audit and clustered backlog](reviews/2026-10-13-post-0.8.1-audit.md)
|
|
6
|
+
preserves source bindings, reproductions, checks and all R01–R23 items.
|
|
7
|
+
|
|
8
|
+
PR #55 and v0.8.1 have green final native CI, but the review reproduced a
|
|
9
|
+
skill-recovery data-preservation defect and confirmed #56's verify diagnosis.
|
|
10
|
+
Both were fixed in Sprint 1; real acceptance follows. Recording tasks does not
|
|
11
|
+
mean they are implemented or that their gates passed.
|
|
12
|
+
|
|
13
|
+
## Current state
|
|
14
|
+
|
|
15
|
+
Updated 2026-10-13. Base main `0aae6390c539e1d70138f1efaf297e6193a2b497`
|
|
16
|
+
(the merge of Sprint 2).
|
|
17
|
+
|
|
18
|
+
- R21 (this roadmap) was delivered as documentation by
|
|
19
|
+
[#58](https://github.com/plagor44-ux/pi-session-mcp/pull/58), which closed
|
|
20
|
+
[#57](https://github.com/plagor44-ux/pi-session-mcp/issues/57).
|
|
21
|
+
- Sprint 1 is closed: [#61](https://github.com/plagor44-ux/pi-session-mcp/pull/61),
|
|
22
|
+
merged as `b145f8c`, closed #59 (R01) and #56 (R02). See the
|
|
23
|
+
[Sprint 1 file](sprints/2026-10-13-s1-correctness.md#closure).
|
|
24
|
+
- Sprint 2 is closed: [#69](https://github.com/plagor44-ux/pi-session-mcp/pull/69)
|
|
25
|
+
was merged on 2026-10-13 as `0aae639`, after its final-head CI passed on
|
|
26
|
+
Linux, macOS 15 and macOS 26. It closed #60, #62, #63, #64, #65, #66, #67
|
|
27
|
+
and #68 as completed. See the [Sprint 2 file](sprints/2026-10-13-s2-evidence.md).
|
|
28
|
+
The main CI run on the merge commit then failed on `macos-15` in one harness
|
|
29
|
+
test that timed out on the slow runner; the tree is identical to the green
|
|
30
|
+
pull-request head. Tracked as
|
|
31
|
+
[#70](https://github.com/plagor44-ux/pi-session-mcp/issues/70) and fixed in
|
|
32
|
+
Sprint 3.
|
|
33
|
+
- Sprint 3 is closed: [#75](https://github.com/plagor44-ux/pi-session-mcp/pull/75)
|
|
34
|
+
was merged on 2026-10-13 as `f636e6e` with green CI on Linux, macOS 15
|
|
35
|
+
and macOS 26, also on main; it closed #70 and #71. The first ten-task Level 3
|
|
36
|
+
cycle on Pi SDK `1.x` was accepted (10 of 10, with the maintainer's intended
|
|
37
|
+
profiles `explore-fast` and `code-deepseek`); R06 and R07 passed; R08
|
|
38
|
+
passed for Codex while Claude Code failed one timing criterion
|
|
39
|
+
([#74](https://github.com/plagor44-ux/pi-session-mcp/issues/74)). R10 and R11
|
|
40
|
+
are blocked on the work Mac, with a runbook. See the
|
|
41
|
+
[Sprint 3 file](sprints/2026-10-13-s3-live-usage.md).
|
|
42
|
+
- Release 0.8.2 is prepared in its own pull request: it carries #59, #56, #60
|
|
43
|
+
and the #62 skill change to npm under an unchanged MCP contract. Merge, tag
|
|
44
|
+
and publication are maintainer decisions.
|
|
45
|
+
- Sprint 4 decision inputs for the conditional items R12, R15, R17 and R18 are recorded in the [Sprint 4 decision inputs](sprints/2026-10-13-s4-decision-inputs.md) ([#72](https://github.com/plagor44-ux/pi-session-mcp/issues/72)): R12, R15 and R17 not met, R18 not determinable as of 2026-10-13; this is input, not the Sprint 4 decision.
|
|
46
|
+
|
|
47
|
+
### Sprint 3 task status
|
|
48
|
+
|
|
49
|
+
| Task | Issue | Status |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| Harness tests time out on macOS | [#70](https://github.com/plagor44-ux/pi-session-mcp/issues/70) | verified: CI green on macOS 15 and 26, also on main |
|
|
52
|
+
| R08 three sessions with a read-only reviewer | [#71](https://github.com/plagor44-ux/pi-session-mcp/issues/71) | partially verified: Codex passed, Claude Code failed on timing only; follow-up [#74](https://github.com/plagor44-ux/pi-session-mcp/issues/74) |
|
|
53
|
+
| R05 / R09 ten-task Level 3 cycle | None (acceptance) | verified: accepted, 10 of 10 tasks |
|
|
54
|
+
| R06 new Codex abort run | None (acceptance) | verified |
|
|
55
|
+
| R07 Codex discovery of the setup-installed skill | None (acceptance) | verified |
|
|
56
|
+
| R10 / R11 current macOS Level 2 and smoke | None | blocked: work Mac not reachable; runbook in the Sprint 3 file |
|
|
57
|
+
| R22 ChatGPT project instructions | None (outside this repository) | blocked on an operator action; proposal in the Sprint 2 file |
|
|
58
|
+
|
|
59
|
+
Status words: planned, in progress, implemented (code exists), verified (named
|
|
60
|
+
criteria met with evidence), blocked, failed (ran and missed its criteria; kept
|
|
61
|
+
on record). Sprint 3 is closed; Sprint 4 decides the next investment
|
|
62
|
+
from the evidence of Sprints 1 to 3 and the decision inputs.
|
|
63
|
+
|
|
64
|
+
## Sprints and exit gates
|
|
65
|
+
|
|
66
|
+
The dates are proposed windows, not commitments. Dependent work waits for its
|
|
67
|
+
gate; independent Mac setup verification and documentation may run alongside.
|
|
68
|
+
Later windows shift with the gate of the sprint before them.
|
|
69
|
+
|
|
70
|
+
| Sprint | Proposed window | Work | Exit gate |
|
|
71
|
+
| --- | --- | --- | --- |
|
|
72
|
+
| S1: correctness | Oct 13–14; 1–2 sessions plus native QA | R01 recovery fix, R02/#56 diagnosis, R03 native checks, R19 evidence record | Operator data preserved; correct existing codes; native Level 1, final review/CI and relevant Level 2 pass |
|
|
73
|
+
| S2: evidence | Oct 15–16; 1–2 sessions | R04, R13/R14 resource binding, handshake offering, #60, R16 strict CI, R20, R22 and R23 documentation, current-source canary; R15 not included (entry condition in the Sprint 2 file) | Changed resources invalidate acceptance; original failures retained; remainder has issues or entry conditions |
|
|
74
|
+
| S3: live usage | Oct 17–20; 2–3 bounded sessions | R05–R11: same-build ten-task cycle, Codex abort scope/discovery, third/read-only worker, intended profile, current Mac acceptance | Existing Level-3 gate plus all scope/security/cleanup criteria; no claim beyond tested combinations |
|
|
75
|
+
| S4: decision | Oct 21–23; 1 evaluation | Usage metrics, conditional R12/R15/R17/R18 | Maintenance or at most one justified investment, with focused issue and ADR where required |
|
|
76
|
+
|
|
77
|
+
R-identifiers are planning identifiers, not GitHub issue numbers. #56 was
|
|
78
|
+
the only open implementation tracker at the audit snapshot; #59 was created
|
|
79
|
+
for R01 afterwards. Create a focused, duplicate-checked issue before each new
|
|
80
|
+
implementation task. This roadmap delivers R21's documentation; it does not
|
|
81
|
+
close the other tasks.
|
|
82
|
+
|
|
83
|
+
## Parallel work
|
|
84
|
+
|
|
85
|
+
- S1 recovery and #56 use separate worktrees and file ownership. The
|
|
86
|
+
integrator owns shared docs, changelog and release fields. Full-suite QA
|
|
87
|
+
runs once on the final combined source, without overlapping heavy suites.
|
|
88
|
+
- S2 has one harness owner; skill policy and documentation can proceed
|
|
89
|
+
independently.
|
|
90
|
+
- S3 live runs are sequential on each shared inference endpoint; independent
|
|
91
|
+
current Mac Level-2 setup checks can run in parallel. Only after two-session
|
|
92
|
+
acceptance, try two writers on separate aliases plus one read-only reviewer
|
|
93
|
+
of a frozen result.
|
|
94
|
+
- Keep heavy suites and parallel large-model work off a constrained work Mac.
|
|
95
|
+
|
|
96
|
+
```mermaid
|
|
97
|
+
flowchart TD
|
|
98
|
+
S1["S1: Fix confirmed defects"] --> G["Native QA and review"]
|
|
99
|
+
G --> S2["S2: Bind evidence"]
|
|
100
|
+
G --> M["Current Mac setup acceptance"]
|
|
101
|
+
S2 --> S3["S3: Live usage acceptance"]
|
|
102
|
+
S3 --> S4["S4: Next-investment decision"]
|
|
103
|
+
M --> S4
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Product boundary and deferred work
|
|
107
|
+
|
|
108
|
+
Follow [ADR 0003](adr/0003-post-mvp-maintenance.md), together with the approved
|
|
109
|
+
macOS, extension and skill decisions in ADRs 0005–0007. Maintain local stdio,
|
|
110
|
+
in-memory state and one trusted local peer.
|
|
111
|
+
|
|
112
|
+
| Topic | Entry condition |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| OS isolation | Decide before coding on non-disposable repositories or with untrusted content; profiles/skills are not an OS sandbox |
|
|
115
|
+
| pi_turn_wait | Measured high polling cost per turn with pauses or tool/approval cost; 5–7 polls per invocation is insufficient evidence |
|
|
116
|
+
| Persistence/resume | Actual loss of useful work on restart |
|
|
117
|
+
| HTTP/remote/mobile | Concrete need existing SSH/remote development cannot meet; separate ADR/security decision |
|
|
118
|
+
| Finer turn_failed | Closed public final SDK cause discriminator after retry/compaction, not error-text guessing |
|
|
119
|
+
| Multi-user/UI/credentials | Separate justified product scope and ADR |
|
|
120
|
+
| Explicit unverified code for an unreadable client start time (R15) | A run that passes while the start time was unreadable, or a demonstrated need; today the run fails with `noServerObserved`, so it cannot pass falsely |
|
|
121
|
+
| Former pi-control #31/#32 | Closed as not_planned; no automatic migration/reopening |
|
|
122
|
+
| Former release gates/#11–#14 | Historical; bind current acceptance to the current build |
|
|
123
|
+
|
|
124
|
+
0.8.2 is a possible patch candidate only if the MCP contract remains
|
|
125
|
+
unchanged and its gates pass. Sprint 1 changed no version. Apply the current [release procedure](releasing.md):
|
|
126
|
+
version and pre-release acceptance travel in the change PR. Merge, tagging and
|
|
127
|
+
publication remain maintainer decisions. No release is authorized by this plan.
|