fix(pi): serialize write-leased tool batches
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Task: Fix Bash tool execution bridge
|
||||
|
||||
## Identity
|
||||
|
||||
- Task ID: 20260902-fix-bash-tool-bridge-9c4e7a12
|
||||
- Mode: Feature
|
||||
- Branch: codex/20260902-fix-bash-tool-bridge-9c4e7a12-fix-bash-tool-bridge
|
||||
- Worktree: /Users/inmanx/Documents/makelore-fix-bash-tool-bridge-9c4e7a12
|
||||
- Base commit: 6073bd6f4ce269b067b13e1eed0371b38dc2c054
|
||||
- Owner: codex
|
||||
- Status: Completed
|
||||
|
||||
## Scope
|
||||
|
||||
- Reproduce and fix the Makelore-managed Pi tool-batch deadlock that delays
|
||||
parallel Bash calls until the five-minute HTTP idle timeout.
|
||||
- Preserve project-scoped write-lease isolation while making Bash/edit/write
|
||||
tools execute sequentially inside one assistant tool batch.
|
||||
- Add real Agent Server coverage for two Bash calls, including a command-level
|
||||
timeout, and verify the same resource path used by packaged builds.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
- Keep Pi `0.84.2` as the sole runtime and keep Renderer isolated from Pi wire.
|
||||
- Do not replay an accepted mutation or weaken the cross-Conversation/project
|
||||
write lease; only remove the same-batch pre-execution self-deadlock.
|
||||
- Retain parallel execution for batches containing only read-only tools where
|
||||
Pi supports it.
|
||||
- Treat packaging as a verification path, not as a substitute for the source
|
||||
correction.
|
||||
|
||||
## Outcome
|
||||
|
||||
- Reproduced the stall with the real Pi Agent Server process. Pi `0.84.2`
|
||||
prepares every tool in a parallel batch before it executes any of them, while
|
||||
Makelore acquires the project write lease in `tool_call` and releases it in
|
||||
`tool_result`. Two Bash calls in one assistant response therefore self-deadlocked:
|
||||
the first held the lease without starting and the second waited for that lease.
|
||||
- Confirmed that the apparent five-minute Bash hang came from the Agent Server
|
||||
HTTP idle timeout around the managed-extension request, not from a missing
|
||||
shell dependency or the Bash command timeout. Packaging alone would retain the
|
||||
same behavior because it ships this Agent Server resource and extension bundle.
|
||||
- Marked built-in `bash`, `edit`, and `write` tools as sequential whenever an
|
||||
Agent thread is rebound. Marked dynamically declared product tools that require
|
||||
the same project write lease as sequential in the generated Makelore extension.
|
||||
Read-only tool batches keep Pi's parallel behavior.
|
||||
- Advanced the managed extension artifact from v4 to v5 and synchronized the
|
||||
release proof and worker-opening expectations.
|
||||
- Added a real-process regression that emits two Bash calls in one assistant
|
||||
response. The first exercises its explicit command timeout and the second must
|
||||
still run successfully without waiting for the HTTP idle timeout.
|
||||
|
||||
## Verification
|
||||
|
||||
- Pre-fix regression: the new real-process test failed with the second Bash result
|
||||
equal to `fetch failed`, reproducing the production failure under a 250 ms HTTP
|
||||
idle timeout.
|
||||
- Focused regression: `pnpm exec vitest run
|
||||
tests/unit/pi-agent-server-process-real.test.ts
|
||||
tests/unit/pi-extension-bundle.test.ts
|
||||
tests/unit/pi-managed-worker-opener.test.ts --maxWorkers=2` passed 3 files and
|
||||
9 tests.
|
||||
- `pnpm run typecheck` passed.
|
||||
- `pnpm test` passed 213 files and 1,733 tests; 3 tests were skipped.
|
||||
- `pnpm run lint:check` passed with 0 errors and 5 existing warnings in
|
||||
`src/pages/Home/index.tsx` and `src/pages/Makelore/index.tsx`.
|
||||
- `pnpm run build:vite` passed for Renderer, Electron Main, Preload, and the
|
||||
release utility worker, proving the fixed Agent Server resource is included by
|
||||
the production build path.
|
||||
- `git diff --check` passed.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- Integrate this feature branch into local `main`, update the canonical current
|
||||
state/README, restart Makelore, and use the real-process regression as the
|
||||
non-destructive smoke check instead of replaying the user's accepted turn.
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Promote the write-lease batch rule to README/current state: write-leased Pi
|
||||
tools are serialized within one assistant batch, while read-only tools may
|
||||
remain parallel.
|
||||
- Record the full-suite, production-build, and real-process regression results in
|
||||
the evidence index during integration.
|
||||
Reference in New Issue
Block a user