238 lines
14 KiB
Markdown
238 lines
14 KiB
Markdown
# Task: Implement PI-150 packaging, E2E, and performance proof
|
|
|
|
## Identity
|
|
|
|
- Task ID: 20260824-pi-release-proof-3e725ac7
|
|
- Mode: Feature
|
|
- Branch: codex/20260824-pi-release-proof-3e725ac7-pi-release-proof
|
|
- Worktree: D:\Datas\OthersProjects\makelore-pi-release-proof-3e725ac7
|
|
- Base commit: 977445ba450f4ad32b6e6db2caf048517513ab39
|
|
- Owner: codex-root
|
|
- Status: Implementation and Spec Pass; PI-150 externally blocked by native non-WSL Linux evidence
|
|
|
|
## Scope
|
|
|
|
- Implement and verify `PI-150 — Packaging, E2E, and performance release proof`
|
|
from cumulative PI-140 delivery base `977445b`.
|
|
- Own final Pi production-closure staging, electron-builder wiring, artifact
|
|
verification, actual packaged Pi/provider-shaped smoke, Coding Electron E2E,
|
|
performance evidence, release note/runbook draft, and README current-state
|
|
updates.
|
|
- Produce Windows x64 and Linux x64 final-product artifact evidence available
|
|
from this host. Keep canonical `.project-docs` updates for PI-160 Integration
|
|
Gate; this feature record contains the task-scoped evidence and promotion
|
|
candidates.
|
|
|
|
## Intent And Constraints
|
|
|
|
- Preserve Main-owned runtime/provider/credential boundaries, the exact pinned
|
|
Pi package and pnpm versions, Makelore app identity, project-scoped state, and
|
|
the single light product system.
|
|
- Final artifact checks must prove Pi version/engine/entry/resources/production
|
|
closure/`get_state`, extension and skill presence, no OpenCode production
|
|
residue, and no development-machine absolute path.
|
|
- `smoke:pi:real` means the actual Pi process seam from the final artifact using
|
|
controlled loopback/provider-shaped endpoints. Real external Provider
|
|
Accounts and real-provider two-worker turns are explicitly waived accepted
|
|
risks, never Pass; every substitute report retains
|
|
`realTurnVerified=false`.
|
|
- The user explicitly skipped macOS validation. Do not manufacture or reuse
|
|
static/cross-platform evidence for macOS x64 or arm64. Per the planner's
|
|
second review this evidence is deferred to PI-160: it remains Not Pass and a
|
|
final cross-platform release blocker, but is not a PI-150 blocker.
|
|
- The canonical project memory at this base is stale and still describes
|
|
OpenCode. Treat the planner-owned PI Spec/ticket and current source as the
|
|
task authority; do not edit canonical memory in this feature worktree.
|
|
- The main worktree is occupied by an older integration task. Remain rooted in
|
|
this isolated worktree and do not inspect or modify peer uncommitted files.
|
|
|
|
## Plan
|
|
|
|
1. Audit the cumulative PI-140 tree against every PI-150 packaging, smoke,
|
|
E2E, performance, release-note, and README requirement; reuse only verified
|
|
existing seams and identify concrete missing behavior.
|
|
2. Implement focused missing harnesses/wiring/tests with behavior-level
|
|
regression coverage, then run typecheck and relevant unit tests.
|
|
3. Run the full pinned validation set and build the Windows x64 final product
|
|
artifact; run its verifier, actual packaged Pi/provider-shaped smoke, and
|
|
required performance scenarios with structured statistics.
|
|
4. Use WSL2 only if available to perform a frozen Linux x64 install, final
|
|
product build, verifier/smoke, and performance run; label any environment or
|
|
artifact limitation precisely.
|
|
5. Record reproducible commands/results, accepted Provider risk, skipped macOS
|
|
release blocker, release note/runbook, README delta, and PI-160 promotion
|
|
candidates; complete the Task Documentation Gate without overstating
|
|
release readiness.
|
|
|
|
## Outcome
|
|
|
|
- Final code candidate `09841c8dbd7c58ce9ecda9dc49ea1c1b57759b67`
|
|
closes the three P1 implementation/proof defects from the planner's second
|
|
review and the two P1 defects from its third review. Final-product proof now
|
|
runs Main from packaged `app.asar`, starts the
|
|
packaged `resources/pi-runtime/dist/cli.js`, receives a real `subagent` tool
|
|
call from a controlled loopback provider, dispatches through the real
|
|
`PiSubagentScheduler`, and starts a real ephemeral Pi child with exactly the
|
|
`find`, `grep`, `ls`, and `read` tools.
|
|
- Each cold and warm proof is one Main-owned correlated timeline containing
|
|
`worker.queue_wait`, `resources.ready`, `worker.spawn`, `rpc.ready`,
|
|
`session.open`, `prompt.accepted`, `agent.start`, `provider.first_event`, and
|
|
`agent.settled`. Direct admission emits an explicit zero-duration queue wait;
|
|
reopening the same session after a resource rebuild is correctly classified
|
|
as warm.
|
|
- `provider.first_event` now accepts only Pi's Provider-backed assistant
|
|
`message_start`, never `turn_start` or the local user-message lifecycle. The
|
|
controlled Provider delays its first response by 75 ms; the packaged smoke
|
|
asserts the source marker, strict timestamp ordering, and a measured delay of
|
|
at least 75% of that value, so the old zero-millisecond false milestone fails.
|
|
- The 4+4 pressure proof now holds four real persistent Pi parents and four
|
|
real ephemeral Pi children as eight distinct live OS processes while four
|
|
write leases are active, proves the product UI remains interactive, and then
|
|
proves all processes, provider requests, process-budget entries, child
|
|
permits, dispatches, parents, and write leases return to zero.
|
|
- Pressure cleanup now attempts every bounded cleanup step even when an earlier
|
|
step fails, keeps the global run handle until cleanup succeeds, and supports
|
|
idempotent retry. Unit tests cover one-shot failure and a hanging step; final
|
|
Windows and Linux products also inject a `parents.settle` failure into a real
|
|
4+4 run, observe the expected first failure, retry, and prove every counter
|
|
and PID returns to zero.
|
|
- Real concurrent parent startup exposed a supported Windows failure in the
|
|
shared managed provider catalog: simultaneous temporary-file renames could
|
|
fail with `EPERM`. Same-path catalog writes are now serialized, with focused
|
|
concurrency regression coverage. This is a product fix, not a proof-only
|
|
workaround.
|
|
- Windows x64 and WSL2 Linux x64 final products passed Pi `0.84.2`
|
|
production-closure, packaged composition, lifecycle, controlled
|
|
provider-shaped, real parent/child extension execution, 4+4
|
|
pressure/isolation, cleanup, and performance qualification. Windows NSIS and
|
|
Linux AppImage/DEB/RPM distributables were produced.
|
|
- Full ASAR enumeration found zero product-owned OpenCode paths. Exact matches
|
|
under the pinned upstream `@earendil-works/pi-ai/dist/providers/opencode*`
|
|
closure remain classified separately because Pi imports them; they are not
|
|
Makelore-owned runtime residue.
|
|
- PI-150 remains blocked only by the missing independent native non-WSL Linux
|
|
desktop/compositor acceptance evidence. WSL2/WSLg is useful final-product
|
|
evidence but is not relabelled as that native environment. PI-160 must not
|
|
start while this blocker remains.
|
|
- QG-004/QG-005 remain `Explicitly Waived / Accepted Risk`, with
|
|
`realTurnVerified=false`; concurrency, credential isolation, and protocol
|
|
compatibility against real Provider accounts are not claimed as Pass.
|
|
- The planner's fourth fixed-range review closed both remaining P1 findings,
|
|
reported `Standards: Pass` and `Spec implementation review: Pass` with zero
|
|
new P0/P1/P2 findings, and independently reconfirmed the Windows packaged
|
|
delayed Provider milestone plus failure-injection/retry cleanup. The PI-150
|
|
gate itself remains `Blocked / Not Done` only because native non-WSL Linux
|
|
desktop/compositor evidence is still absent.
|
|
|
|
## Verification
|
|
|
|
- At the user's request, Windows x64 was rebuilt from clean task HEAD
|
|
`2e1b90b7707aa912c576e042b94823dcb183e162` with the exact pinned pnpm
|
|
`10.33.4` via `pnpm run package:win`. The resulting local NSIS installer is
|
|
`release/Makelore-2.0.0-win-x64.exe`, 208,525,129 bytes, SHA-256
|
|
`316FC05C0DC5DA206FA9BE9AA694BEC6DE9DBB2DFBEEEBCFB67472C7F78AF5A3`.
|
|
Its blockmap SHA-256 is
|
|
`9E6259C90B41F24A0960EC147A50D5FF2527245669CF7BB98665ADF15D420AA9`;
|
|
its final `app.asar` remains byte-identical to the reviewed code candidate at
|
|
SHA-256
|
|
`872E8D1E7F22994EFF10353DF380016A198C59C145EBF63491E13DA1B1071B7F`.
|
|
The local installer has no Authenticode signature and may therefore trigger
|
|
Windows publisher/SmartScreen warnings; no signed-release claim is made.
|
|
- The rebuilt package passed `verify:publish-runtime`,
|
|
`verify:artifact:win`, `verify:artifact:pi`, `smoke:pi:real`, and
|
|
`perf:pi:release`. The three structured reports are
|
|
`release/evidence/pi-artifact-win-2e1b90b.json`,
|
|
`release/evidence/pi-smoke-win-2e1b90b.json`, and
|
|
`release/evidence/pi-performance-win-2e1b90b.json`; smoke and performance
|
|
both record the clean `2e1b90b` commit. Five-sample performance passed all
|
|
budgets with cold/warm Provider-first p95 `136/134 ms`, 4+4 pressure UI p95
|
|
`108 ms`, and exit p95 `18 ms`. The packaged fault-injection run retried the
|
|
same cleanup handle and returned every process and resource counter to zero.
|
|
- Exact pnpm `10.33.4` frozen install passed on Windows and WSL2 Ubuntu 24.04
|
|
x64; both final-product runs were bound to clean commit `09841c8`. The
|
|
lockfile change remains limited to the direct `@electron/asar@3.4.1`
|
|
verifier dependency.
|
|
- Candidate-final Windows checks passed: `pnpm run typecheck`; `pnpm run
|
|
lint:check` with 0 errors and five pre-existing warnings; focused proof tests
|
|
and cleanup tests passed; focused concurrency tests passed; `pnpm test` with
|
|
179 files/1508 passed/2 skipped; `pnpm run test:e2e` with 24/24; and repeated
|
|
`pnpm run build:vite` production builds.
|
|
- Final Windows NSIS `release/Makelore-2.0.0-win-x64.exe` is 208,525,071 bytes
|
|
with SHA-256
|
|
`396D6E8EC2BED60498DBC36CDA714176B629574914B85A5651C73DF8A63CECAA`.
|
|
Its unpacked `app.asar` SHA-256 is
|
|
`872E8D1E7F22994EFF10353DF380016A198C59C145EBF63491E13DA1B1071B7F`.
|
|
The post-installer-build final product proof passed from that ASAR with real
|
|
Pi parent/child PIDs and complete cleanup. Windows structured reports are
|
|
`release/evidence/pi-smoke-win-final.json` and
|
|
`release/evidence/pi-performance-win-final.json`.
|
|
- Windows formal five-sample performance passed every budget and recorded all
|
|
nine cold/warm milestones with five samples each. Cold p95 was queue `0 ms`,
|
|
resources `30 ms`, spawn `18 ms`, RPC `750 ms`, session `4 ms`, accepted `2
|
|
ms`, agent start `1 ms`, Provider first event `151 ms`, and settled `1034
|
|
ms`; warm p95 was `0/10/9/660/1/2/0/144/146 ms`. Five 4+4 pressure samples
|
|
had UI p95 `140 ms`; Renderer first-commit p95 was `33.6862 ms`; exit p95 was
|
|
`16 ms`.
|
|
- WSL2 Linux x64 final product was rebuilt at exact clean commit `09841c8`.
|
|
AppImage/DEB/RPM SHA-256 values are respectively
|
|
`d0923c3d80c046c3e98750f7d55696e2753b710f9441d043a94768e0395a69c5`,
|
|
`930cc826993506f56544adc3c29fcddd993117c04e87332c81d031fd9d1ce070`,
|
|
and `81c1ceefbbe6314dec9c98b1441507458f23eea52c9acbf1360be0db20a88986`.
|
|
Final ASAR SHA-256 is
|
|
`9ce9bce7a36e9d93a866b6982fb53c9e98f410d2dd92003fee2d3370deff7b15`.
|
|
- Linux formal smoke passed Pi `0.84.2` production closure, 10,284-entry ASAR
|
|
enumeration, zero product-owned OpenCode paths, actual final Pi processes,
|
|
real packaged extension/subagent dispatch, 4+4 pressure, and zero cleanup.
|
|
Reports copied beside the Windows evidence are
|
|
`release/evidence/pi-smoke-linux-wsl2-final.json` and
|
|
`release/evidence/pi-performance-linux-wsl2-final.json`.
|
|
- Linux formal five-sample performance passed every budget and recorded all
|
|
nine cold/warm milestones with five samples each. Cold p95 was queue `0 ms`,
|
|
resources `14 ms`, spawn `6 ms`, RPC `480 ms`, session `2 ms`, accepted `2
|
|
ms`, agent start `0 ms`, Provider first event `114 ms`, and settled `740 ms`;
|
|
warm p95 was `0/6/5/467/1/1/0/111/112 ms`. Five 4+4 pressure samples had UI
|
|
p95 `115 ms`; Renderer first-commit p95 was `28.3212 ms`; exit p95 was `9
|
|
ms`.
|
|
- Linux results are WSL2/WSLg final-product evidence, not an independent native
|
|
non-WSL Linux desktop/compositor/distribution acceptance run. Controlled
|
|
provider-shaped smoke issued six requests per protocol (distinct cold, warm,
|
|
and abort-isolation paths); real Provider verification remains false by the
|
|
explicit waiver.
|
|
- Planner re-review of `ead9d1d..6d2232c` passed the fixed diff and
|
|
documentation gates. Its independent Windows packaged rerun measured cold
|
|
and warm Provider-first milestones at `127/129 ms`, both sourced from
|
|
`pi.assistant_message_start` and strictly later than `agent.start`; cleanup
|
|
unit tests passed `2/2`, and the real 4+4 injected-failure run retained the
|
|
same handle for a successful retry with every PID, counter, permit, dispatch,
|
|
lease, and Provider request returning to zero.
|
|
|
|
## Follow-ups
|
|
|
|
- Planner re-review is complete: Standards and Spec implementation both pass,
|
|
the two remaining P1 findings are closed, and no new finding was raised.
|
|
- Do not start PI-160 or integrate the candidate while PI-150 remains blocked
|
|
by the native non-WSL Linux platform evidence boundary. If the planner finds
|
|
no new implementation defect, keep PI-150 as the active frontier until that
|
|
external evidence is supplied or its gate is explicitly re-decided.
|
|
- Keep missing macOS x64/arm64 artifact/runtime/resource/performance evidence as
|
|
`Deferred to PI-160 / Not Pass`; do not promote a final cross-platform release
|
|
without independent macOS execution, but do not use it to block PI-150.
|
|
- Keep the lack of an independent native non-WSL Linux
|
|
desktop/compositor/distribution run explicit. The WSL2/WSLg run qualifies the
|
|
generated Linux artifacts and final process seam but does not erase that
|
|
environment boundary.
|
|
- Real Provider Account and real-provider concurrency/credential/protocol
|
|
compatibility remain accepted risk unless the user explicitly revokes the
|
|
waiver and supplies provider access.
|
|
|
|
## Promotion Candidates
|
|
|
|
- After PI-150 is actually unblocked, PI-160 may promote the current Pi
|
|
runtime/Conversation state from README and
|
|
`docs/pi-runtime-release-runbook.md` into canonical project memory during
|
|
integration review.
|
|
- PI-160 must record QG-004/QG-005 as `Explicitly Waived / Accepted Risk`, with
|
|
`realTurnVerified=false`; this is not a Pass.
|
|
- PI-160 must preserve any unresolved macOS x64/arm64 or native Linux
|
|
missing-evidence blocker; this candidate does not authorize overriding it.
|