docs: correct Bash cwd override contract

This commit is contained in:
jb
2026-09-04 16:27:42 -04:00
parent f61f197dbc
commit bda414abbe
+16 -15
View File
@@ -2,15 +2,15 @@
## Status
- Status: active
- Current phase: 5. Implement owned slices
- Next safe action: implement the approved `@jbcode/pi-bash-cwd` package and turn the retained red reproduction into its focused regression test.
- Status: waiting
- Current phase: 3. Design and obtain plan approval
- Next safe action: obtain approval for the corrected explicit-`cwd` tool contract before further product mutation.
## Request and scope
- Request: address the first repository TODO so Bash execution honors the current Pi tool context inside hidden Git worktrees.
- In scope: reproduce the Pi 0.84.4 behavior; add a repository-owned, publishable `@jbcode/pi-bash-cwd` extension that delegates to Pi's built-in Bash implementation using each call's `ctx.cwd`; test workspace-root, nested-package, and missing-directory execution in a disposable hidden worktree; update package inventory and documentation; remove the resolved TODO.
- Out of scope: upgrading Pi, changing Bash's public per-call arguments, installing or publishing the new package, deploying, pushing, or modifying live/production data.
- In scope: reproduce the Pi 0.84.4 behavior; add a repository-owned, publishable `@jbcode/pi-bash-cwd` extension with an optional `cwd` tool argument resolved from the live session context; delegate command execution to Pi's built-in Bash implementation; test workspace-root, nested-package, relative-path, and missing-directory execution in a disposable hidden worktree; update package inventory and documentation; remove the resolved TODO.
- Out of scope: upgrading Pi, installing or publishing the new package, deploying, pushing, or modifying live/production data.
## Git identity
@@ -22,8 +22,9 @@
## Acceptance criteria
- [ ] `@jbcode/pi-bash-cwd` overrides the built-in `bash` tool without changing its public arguments, output, truncation, cancellation, timeout, session-environment, or renderer contracts.
- [ ] The override constructs the delegated built-in tool with the current execution `ctx.cwd`, rather than the extension factory's process directory.
- [ ] `@jbcode/pi-bash-cwd` overrides the built-in `bash` tool with one backward-compatible optional `cwd` argument while preserving the existing command, timeout, output, truncation, cancellation, session-environment, and renderer contracts.
- [ ] Absolute and relative `cwd` values resolve from the live session `ctx.cwd`; omitted `cwd` retains the session directory.
- [ ] The requested directory is validated before delegating command execution.
- [ ] A regression test executes `pwd` from both a disposable hidden worktree root and a nested workspace package directory and observes the requested directory.
- [ ] A missing requested working directory fails before the shell command can create a sentinel side effect.
- [ ] Package inventory, README guidance, and the upstream Pi 0.85.0 packaging blocker TODO are synchronized.
@@ -33,10 +34,10 @@
## Approved implementation plan and gates
- Plan/specification source: user request, `docs/todos.md`, and upstream Pi 0.84.4/0.85.0 source under `/srv/data/opensrc/repos/github.com/earendil-works/pi/`.
- Exact plan: pending revised approval. Proposed: (1) create `extensions/bash-cwd` as a publishable `@jbcode/pi-bash-cwd` package; (2) override `bash` by preserving the host's built-in schema, metadata, rendering, and execution behavior while constructing the delegated built-in tool from the live `ctx.cwd`; (3) move the red regression into the package and cover hidden-worktree root, nested package, and fail-before-sentinel cases; (4) add the package to workspace/package checks and root test execution; (5) document installation and compatibility, remove the resolved Bash cwd TODO, annotate historical workaround text, and add a separate TODO for removing the local override after a usable upstream release; (6) run focused package tests, packaging checks, typecheck, and the full repository suite.
- Plan approval: approved by the user through `ask_user` on 04SEP2026 after selecting `local_override` and `publishable_package`.
- Exact plan: pending corrected approval. Proposed: (1) keep `extensions/bash-cwd` as the approved publishable package; (2) replace the built-in Bash schema with its existing `command` and `timeout` fields plus optional `cwd`; (3) resolve relative `cwd` from `ctx.cwd`, validate that the result is a directory, and only then construct and invoke Pi's built-in Bash definition for that directory; (4) preserve built-in rendering, prompt metadata, output, timeout, cancellation, truncation, and session environment by spreading and delegating to the host definition; (5) revise the regression to pass explicit absolute and relative `cwd` arguments while the session context remains the primary fixture checkout, covering hidden-worktree root, nested package, omitted cwd, and fail-before-sentinel cases; (6) retain approved package inventory/docs/full-verification work and record that Pi 0.85.0's separate `ctx.cwd` correction does not add this per-call argument.
- Plan approval: pending because direct use of the live Bash tool proved the prior `ctx.cwd`-only plan did not satisfy the original explicit-`cwd` report.
- UI classification and direction approval: non-UI; no prototype gate applies.
- Risk decisions and scope: the approved Pi dependency upgrade was abandoned and fully restored after Pi 0.85.0 failed to load. No new dependency will be added. The new package remains repository-only and will not be installed, published, or added to the active global Pi environment in this task.
- Risk decisions and scope: the Pi dependency upgrade remains abandoned. The corrected tool schema adds one optional, backward-compatible field and uses the repository's existing `typebox` dependency. The package remains repository-only and will not be installed, published, or added to the active global Pi environment in this task.
## Ownership
@@ -44,7 +45,7 @@
| --- | --- | --- | --- | --- | --- |
| Workflow setup and research | parent Pi session `01a06e08-8d07-76a7-a116-d7e3baf55b87` | 15 minutes | workflow record only | Before: clean `main` at `7e7cfdb`; after: clean feature worktree at `5f853dc` | Complete |
| Initial dependency-plan implementation | parent Pi session `01a06e08-8d07-76a7-a116-d7e3baf55b87` | 15 minutes | `package.json`, `bun.lock`, focused test, workflow record | Before: clean feature worktree at `9d68d5f`; after: Pi 0.85.0 upgrade restored; focused red test retained unstaged | Paused and replanned after upstream packaging blocker |
| Local override implementation | parent Pi session `01a06e08-8d07-76a7-a116-d7e3baf55b87` | 15 minutes | `extensions/bash-cwd/**`, `scripts/bash-cwd.test.mjs` removal, `package.json`, `scripts/package-workspaces.test.mjs`, `README.md`, `docs/todos.md`, `docs/workflow/skill-led-development-workflow-plan.md`, workflow record | Before: feature worktree at `070ba3d` with inspected red-test changes | In progress |
| Local override implementation | parent Pi session `01a06e08-8d07-76a7-a116-d7e3baf55b87` | 15 minutes | `extensions/bash-cwd/**`, `scripts/bash-cwd.test.mjs` removal, `package.json`, `scripts/package-workspaces.test.mjs`, `README.md`, `docs/npm-packages.md`, `docs/todos.md`, `docs/workflow/skill-led-development-workflow-plan.md`, workflow record | Before: feature worktree at `f61f197` with inspected product changes | Paused for corrected contract approval |
## Verification matrix
@@ -67,7 +68,7 @@
- Mutator identities: parent Pi session `01a06e08-8d07-76a7-a116-d7e3baf55b87`
- Standards reviewer identity, digest confirmation, and verdict: pending
- Specification reviewer identity, digest confirmation, and verdict: pending
- Findings and remediation cycles: Pi 0.85.0 includes the upstream `ctx.cwd` correction but its public package imports undeclared `@earendil-works/pi-server`, causing `ERR_MODULE_NOT_FOUND`. The user rejected adding that dependency and selected a repository-owned override. The attempted catalog/lock upgrade was restored; a focused red test remains as inspected uncommitted work pending replan approval.
- Findings and remediation cycles: Pi 0.85.0 includes a separate upstream `ctx.cwd` correction but its public package imports undeclared `@earendil-works/pi-server`, causing `ERR_MODULE_NOT_FOUND`; the user selected a repository-owned override instead. During implementation, a direct live call with an extra `cwd` field still printed the primary checkout, proving Pi's schema/executor silently ignore the requested per-call directory and the first local design addressed the wrong seam. Current uncommitted package/test/docs changes were inspected; further mutation is paused for the corrected explicit-argument plan.
- Before/after reviewer Git evidence: pending
## Integration and rollback
@@ -80,6 +81,6 @@
## Checkpoints and blockers
- Last committed valid checkpoint: revised-plan record commit `070ba3d`
- Blockers: none.
- Exact next safe action: commit this approval checkpoint, then implement the approved local override.
- Last committed valid checkpoint: local-override approval commit `f61f197`
- Blockers: corrected explicit-`cwd` plan approval.
- Exact next safe action: present this corrected plan and ask the user to approve or reject the additive Bash tool argument.