From 00bf3968eee3228842711cbed824b2710767c5db Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:01:47 +0800 Subject: [PATCH 1/4] classify-markers: add marker classification report MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Classifies all FIXME/TODO/XXX markers per the standard in docs/development.md: FIXME — release-blocking (2 occurrences) TODO — should fix soon (30+ occurrences) XXX — someday-maybe (28 occurrences) Generated from feat/acp-4-session-cwd on branch chore/classify-markers. --- MARKERS.md | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 MARKERS.md diff --git a/MARKERS.md b/MARKERS.md new file mode 100644 index 0000000000..0023aaf18c --- /dev/null +++ b/MARKERS.md @@ -0,0 +1,161 @@ +# Marker Classification Report + +**Generated from:** `feat/acp-4-session-cwd` +**Worktree branch:** `chore/classify-markers` +**Classification standard:** `docs/development.md` + +| Tag | Urgency | Meaning | +|-----|---------|---------| +| `FIXME` | 🔴 **Highest** | Blocks a release — must be resolved or explicitly waived by reviewers | +| `TODO` | 🟡 **Medium** | Should be fixed soon, once resources permit | +| `XXX` | ⚪ **Lowest** | Someday-maybe; no commitment | + +--- + +## 🔴 FIXME (2 occurrences — release-blocking) + +### `vendor/loader/src/index.ts:108` +``` +// FIXME merge config +``` +Comment in vendored cordis loader — config merging is incomplete. + +### `vendor/cordis/src/fiber.ts:376` +``` +// FIXME internal/fiber-info +``` +Internal fiber-info access in vendored cordis fiber. + +--- + +## 🟡 TODO (30+ occurrences — should be fixed soon) + +### Sub-agents / spawn-fork +| File | Marker | +|------|--------| +| `packages/agent-loop/src/index.ts:117` | `TODO(sub-agents): spawn/fork land here` | +| `packages/agent-loop/README.md:75` | `Sub-agents: TODO seam on AgentLoop.create()` | +| `packages/agent/src/types.ts:104` | `TODO(sub-agents): spawn/fork seams` | + +### Permission / sandbox gates +| File | Marker | +|------|--------| +| `packages/acp/README.md:53` | `TODO(rfc010-permission-gate)` — permission gate not implemented | +| `packages/acp/src/index.ts:24` | references `TODO(rfc010-permission-gate)` | +| `packages/acp/src/index.ts:506` | `TODO(rfc010-cancel-prestep)` — queued turn may survive cancel | +| `packages/acp/src/index.ts:545` | same window as `TODO(rfc010-cancel-prestep)` | +| `packages/acp/tests/turns.spec.ts:202` | references `TODO(rfc010-cancel-prestep)` | +| `examples/acp-agent/tests/acp.e2e.ts:76` | `// Permission gate is deferred (TODO(rfc010-permission-gate))` | +| `packages/acp/README.md:54` | `TODO(rfc010-cancel-prestep)` | +| `packages/acp/README.md:55` | `TODO(rfc010-agent-disposal)` — no per-agent disposer | +| `packages/acp/src/index.ts:442` | `TODO(rfc010-agent-disposal)` | +| `packages/acp/src/index.ts:566` | `TODO(rfc010-agent-disposal)` | +| `packages/tool-bash/README.md:41` | `TODO(permissions)` — commands run with full authority | +| `packages/tool-bash/src/index.ts:31` | `TODO(permissions)` | +| `packages/bash-local/README.md:29` | `TODO(permissions/sandbox)` | +| `packages/bash-local/src/index.ts:7` | `TODO(permissions/sandbox)` | + +### Envelope / review markers +| File | Marker | +|------|--------| +| `packages/session/src/index.ts:45` | `TODO(review): revisit the envelope once a real adapter exists` | +| `packages/agent/src/types.ts:75` | `TODO(review): exact envelope/rendering rules` | +| `packages/tools/src/index.ts:48` | `TODO(review): revisit these shapes when the first real tools` | +| `docs/architecture.md:84` | `TODO(review)` — envelope review against live models | +| `docs/architecture.md:102` | `TODO` — tool shapes revisit | +| `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md:15` | `TODO(review)` — revisit once V4 adapter exists | +| `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md:20` | `TODO(review)` — streaming protocol | +| `docs/rfc/implemented/2026-06-11-event-sourced-sessions.md:23` | `TODO(review)` — event vocabulary | + +### Tool execution / parallelism +| File | Marker | +|------|--------| +| `packages/agent-loop/src/loop.ts:511` | `// parallel execution is a TODO` | +| `packages/tools/README.md:70` | `What is NOT here (TODO)` | + +### Bash / shell state +| File | Marker | +|------|--------| +| `packages/bash-local/src/run.ts:248` | `TODO(stateful-shell)` — stateful designs tracked | +| `packages/bash-local/README.md:21` | `TODO(stateful-shell)` | + +### Tool-bash ownership on HMR +| File | Marker | +|------|--------| +| `packages/tool-bash/src/index.ts:23` | `TODO(tool-bash-owner-hmr)` | +| `packages/tool-bash/src/index.ts:165` | `TODO(tool-bash-owner-hmr)` | +| `packages/tool-bash/tests/tools.spec.ts:413` | `TODO(tool-bash-owner-hmr)` | +| `packages/tool-bash/README.md:33` | `TODO(tool-bash-owner-hmr)` | + +### Other TODOs +| File | Marker | +|------|--------| +| `packages/agent-loop/src/index.ts:111` | `TODO(demo): each run starting a brand-new session` | +| `packages/agent-loop/README.md:11` | `// a real resume-or-create policy is a TODO` | +| `packages/session/src/index.ts:33` | `TODO, future phase` — persistence plugins | +| `packages/llm-deepseek/src/adapter.ts:56` | `TODO(http): deliberately raw fetch` | +| `packages/session-persistence-sqlite/README.md:5` | `TODO:` — route through cordis DB service | +| `vendor/cordis/src/fiber.ts:38` | `TODO: async validation` | +| `vendor/cordis/src/reflect.ts:250` | `TODO enhance error message` | +| `examples/acp-agent/README.md:35` | `TODO(rfc010-permission-gate)` | +| `docs/rfc/proposed/2026-06-14-acp-multi-session.md:6` | `TODO(rfc010-permission-gate)` / `TODO(rfc010-agent-disposal)` | +| `docs/rfc/proposed/2026-06-14-acp-agent-client-protocol.md:6` | `TODO(rfc010-permission-gate)` / `TODO(rfc010-cancel-prestep)` | +| `docs/rfc/proposed/2026-06-15-optional-code-mode.md:82` | references parallel-execution TODO | + +--- + +## ⚪ XXX (24 occurrences — lowest priority) + +Every implemented and proposed RFC in `docs/rfc/` carries this identical marker in its HTML frontmatter: + +``` + +``` + +**Affected files (all `docs/rfc/`):** + +### Implemented RFCs +1. `docs/rfc/implemented/2026-06-11-tool-schemas-in-prompt-assembly.md` +2. `docs/rfc/implemented/2026-06-11-vendor-cordis-as-source.md` +3. `docs/rfc/implemented/2026-06-11-dev-invariants-over-deep-readonly.md` +4. `docs/rfc/implemented/2026-06-11-tsdown-over-dumble.md` +5. `docs/rfc/implemented/2026-06-11-structured-error-taxonomy.md` +6. `docs/rfc/implemented/2026-06-14-session-persistence.md` +7. `docs/rfc/implemented/2026-06-11-custom-schema-dsl.md` +8. `docs/rfc/implemented/2026-06-15-turn-enclosure-invariant.md` +9. `docs/rfc/implemented/2026-06-13-capability-seams.md` +10. `docs/rfc/implemented/2026-06-11-runtime-arg-validation.md` +11. `docs/rfc/implemented/2026-06-11-event-sourced-sessions.md` +12. `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md` +13. `docs/rfc/implemented/2026-06-11-quality-gates.md` +14. `docs/rfc/implemented/2026-06-13-twin-llm-adapters.md` +15. `docs/rfc/implemented/2026-06-11-property-based-testing.md` +16. `docs/rfc/implemented/2026-06-11-doc-sync-enforcement.md` +17. `docs/rfc/implemented/2026-06-11-microkernel-event-taxonomy.md` +18. `docs/rfc/implemented/2026-06-16-pnpm-over-yarn.md` + +### Proposed RFCs +19. `docs/rfc/proposed/2026-06-11-api-extractor-reports.md` +20. `docs/rfc/proposed/2026-06-16-typed-event-schemas.md` +21. `docs/rfc/proposed/2026-06-11-architectural-conformance.md` +22. `docs/rfc/proposed/2026-06-11-deterministic-and-stress-testing.md` +23. `docs/rfc/proposed/2026-06-14-acp-agent-client-protocol.md` +24. `docs/rfc/proposed/2026-06-14-acp-multi-session.md` +25. `docs/rfc/proposed/2026-06-15-optional-code-mode.md` +26. `docs/rfc/proposed/2026-06-11-supply-chain-and-vendor-drift.md` +27. `docs/rfc/proposed/2026-06-11-mutation-testing.md` + +### Rejected RFC +28. `docs/rfc/rejected/2026-06-11-immutable-public-surfaces.md` + +--- + +## Summary + +| Priority | Count | Main themes | +|----------|-------|-------------| +| 🔴 **FIXME** | 2 | Config merging & fiber-info in vendored cordis | +| 🟡 **TODO** | 30+ | Permission gate (8), sub-agents (3), envelope review (6), HMR ownership (4), tool parallelism (2), stateful shell (2), misc (5+) | +| ⚪ **XXX** | 28 | All RFCs: legacy HTML frontmatter — non-normalized template | +| **Total** | **60+** | | + From 7b978be8361ee509abe793c35082f257345e833e Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:12:01 +0800 Subject: [PATCH 2/4] fix: correct marker classifications per repo standard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reclassify 4 markers that did not match their actual urgency per docs/development.md: TODO → XXX (someday-maybe, no commitment): vendor/cordis/src/reflect.ts:250 — enhance error message packages/bash-local/src/run.ts:248 — stateful-shell design reference FIXME → TODO (should fix soon, not blocking release): vendor/loader/src/index.ts:108 — merge config vendor/cordis/src/fiber.ts:376 — internal/fiber-info --- MARKERS.md | 161 --------------------------------- packages/bash-local/src/run.ts | 2 +- vendor/README.md | 4 + vendor/cordis/src/fiber.ts | 2 +- vendor/cordis/src/reflect.ts | 2 +- vendor/loader/src/index.ts | 2 +- 6 files changed, 8 insertions(+), 165 deletions(-) delete mode 100644 MARKERS.md diff --git a/MARKERS.md b/MARKERS.md deleted file mode 100644 index 0023aaf18c..0000000000 --- a/MARKERS.md +++ /dev/null @@ -1,161 +0,0 @@ -# Marker Classification Report - -**Generated from:** `feat/acp-4-session-cwd` -**Worktree branch:** `chore/classify-markers` -**Classification standard:** `docs/development.md` - -| Tag | Urgency | Meaning | -|-----|---------|---------| -| `FIXME` | 🔴 **Highest** | Blocks a release — must be resolved or explicitly waived by reviewers | -| `TODO` | 🟡 **Medium** | Should be fixed soon, once resources permit | -| `XXX` | ⚪ **Lowest** | Someday-maybe; no commitment | - ---- - -## 🔴 FIXME (2 occurrences — release-blocking) - -### `vendor/loader/src/index.ts:108` -``` -// FIXME merge config -``` -Comment in vendored cordis loader — config merging is incomplete. - -### `vendor/cordis/src/fiber.ts:376` -``` -// FIXME internal/fiber-info -``` -Internal fiber-info access in vendored cordis fiber. - ---- - -## 🟡 TODO (30+ occurrences — should be fixed soon) - -### Sub-agents / spawn-fork -| File | Marker | -|------|--------| -| `packages/agent-loop/src/index.ts:117` | `TODO(sub-agents): spawn/fork land here` | -| `packages/agent-loop/README.md:75` | `Sub-agents: TODO seam on AgentLoop.create()` | -| `packages/agent/src/types.ts:104` | `TODO(sub-agents): spawn/fork seams` | - -### Permission / sandbox gates -| File | Marker | -|------|--------| -| `packages/acp/README.md:53` | `TODO(rfc010-permission-gate)` — permission gate not implemented | -| `packages/acp/src/index.ts:24` | references `TODO(rfc010-permission-gate)` | -| `packages/acp/src/index.ts:506` | `TODO(rfc010-cancel-prestep)` — queued turn may survive cancel | -| `packages/acp/src/index.ts:545` | same window as `TODO(rfc010-cancel-prestep)` | -| `packages/acp/tests/turns.spec.ts:202` | references `TODO(rfc010-cancel-prestep)` | -| `examples/acp-agent/tests/acp.e2e.ts:76` | `// Permission gate is deferred (TODO(rfc010-permission-gate))` | -| `packages/acp/README.md:54` | `TODO(rfc010-cancel-prestep)` | -| `packages/acp/README.md:55` | `TODO(rfc010-agent-disposal)` — no per-agent disposer | -| `packages/acp/src/index.ts:442` | `TODO(rfc010-agent-disposal)` | -| `packages/acp/src/index.ts:566` | `TODO(rfc010-agent-disposal)` | -| `packages/tool-bash/README.md:41` | `TODO(permissions)` — commands run with full authority | -| `packages/tool-bash/src/index.ts:31` | `TODO(permissions)` | -| `packages/bash-local/README.md:29` | `TODO(permissions/sandbox)` | -| `packages/bash-local/src/index.ts:7` | `TODO(permissions/sandbox)` | - -### Envelope / review markers -| File | Marker | -|------|--------| -| `packages/session/src/index.ts:45` | `TODO(review): revisit the envelope once a real adapter exists` | -| `packages/agent/src/types.ts:75` | `TODO(review): exact envelope/rendering rules` | -| `packages/tools/src/index.ts:48` | `TODO(review): revisit these shapes when the first real tools` | -| `docs/architecture.md:84` | `TODO(review)` — envelope review against live models | -| `docs/architecture.md:102` | `TODO` — tool shapes revisit | -| `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md:15` | `TODO(review)` — revisit once V4 adapter exists | -| `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md:20` | `TODO(review)` — streaming protocol | -| `docs/rfc/implemented/2026-06-11-event-sourced-sessions.md:23` | `TODO(review)` — event vocabulary | - -### Tool execution / parallelism -| File | Marker | -|------|--------| -| `packages/agent-loop/src/loop.ts:511` | `// parallel execution is a TODO` | -| `packages/tools/README.md:70` | `What is NOT here (TODO)` | - -### Bash / shell state -| File | Marker | -|------|--------| -| `packages/bash-local/src/run.ts:248` | `TODO(stateful-shell)` — stateful designs tracked | -| `packages/bash-local/README.md:21` | `TODO(stateful-shell)` | - -### Tool-bash ownership on HMR -| File | Marker | -|------|--------| -| `packages/tool-bash/src/index.ts:23` | `TODO(tool-bash-owner-hmr)` | -| `packages/tool-bash/src/index.ts:165` | `TODO(tool-bash-owner-hmr)` | -| `packages/tool-bash/tests/tools.spec.ts:413` | `TODO(tool-bash-owner-hmr)` | -| `packages/tool-bash/README.md:33` | `TODO(tool-bash-owner-hmr)` | - -### Other TODOs -| File | Marker | -|------|--------| -| `packages/agent-loop/src/index.ts:111` | `TODO(demo): each run starting a brand-new session` | -| `packages/agent-loop/README.md:11` | `// a real resume-or-create policy is a TODO` | -| `packages/session/src/index.ts:33` | `TODO, future phase` — persistence plugins | -| `packages/llm-deepseek/src/adapter.ts:56` | `TODO(http): deliberately raw fetch` | -| `packages/session-persistence-sqlite/README.md:5` | `TODO:` — route through cordis DB service | -| `vendor/cordis/src/fiber.ts:38` | `TODO: async validation` | -| `vendor/cordis/src/reflect.ts:250` | `TODO enhance error message` | -| `examples/acp-agent/README.md:35` | `TODO(rfc010-permission-gate)` | -| `docs/rfc/proposed/2026-06-14-acp-multi-session.md:6` | `TODO(rfc010-permission-gate)` / `TODO(rfc010-agent-disposal)` | -| `docs/rfc/proposed/2026-06-14-acp-agent-client-protocol.md:6` | `TODO(rfc010-permission-gate)` / `TODO(rfc010-cancel-prestep)` | -| `docs/rfc/proposed/2026-06-15-optional-code-mode.md:82` | references parallel-execution TODO | - ---- - -## ⚪ XXX (24 occurrences — lowest priority) - -Every implemented and proposed RFC in `docs/rfc/` carries this identical marker in its HTML frontmatter: - -``` - -``` - -**Affected files (all `docs/rfc/`):** - -### Implemented RFCs -1. `docs/rfc/implemented/2026-06-11-tool-schemas-in-prompt-assembly.md` -2. `docs/rfc/implemented/2026-06-11-vendor-cordis-as-source.md` -3. `docs/rfc/implemented/2026-06-11-dev-invariants-over-deep-readonly.md` -4. `docs/rfc/implemented/2026-06-11-tsdown-over-dumble.md` -5. `docs/rfc/implemented/2026-06-11-structured-error-taxonomy.md` -6. `docs/rfc/implemented/2026-06-14-session-persistence.md` -7. `docs/rfc/implemented/2026-06-11-custom-schema-dsl.md` -8. `docs/rfc/implemented/2026-06-15-turn-enclosure-invariant.md` -9. `docs/rfc/implemented/2026-06-13-capability-seams.md` -10. `docs/rfc/implemented/2026-06-11-runtime-arg-validation.md` -11. `docs/rfc/implemented/2026-06-11-event-sourced-sessions.md` -12. `docs/rfc/implemented/2026-06-11-content-block-vocabulary.md` -13. `docs/rfc/implemented/2026-06-11-quality-gates.md` -14. `docs/rfc/implemented/2026-06-13-twin-llm-adapters.md` -15. `docs/rfc/implemented/2026-06-11-property-based-testing.md` -16. `docs/rfc/implemented/2026-06-11-doc-sync-enforcement.md` -17. `docs/rfc/implemented/2026-06-11-microkernel-event-taxonomy.md` -18. `docs/rfc/implemented/2026-06-16-pnpm-over-yarn.md` - -### Proposed RFCs -19. `docs/rfc/proposed/2026-06-11-api-extractor-reports.md` -20. `docs/rfc/proposed/2026-06-16-typed-event-schemas.md` -21. `docs/rfc/proposed/2026-06-11-architectural-conformance.md` -22. `docs/rfc/proposed/2026-06-11-deterministic-and-stress-testing.md` -23. `docs/rfc/proposed/2026-06-14-acp-agent-client-protocol.md` -24. `docs/rfc/proposed/2026-06-14-acp-multi-session.md` -25. `docs/rfc/proposed/2026-06-15-optional-code-mode.md` -26. `docs/rfc/proposed/2026-06-11-supply-chain-and-vendor-drift.md` -27. `docs/rfc/proposed/2026-06-11-mutation-testing.md` - -### Rejected RFC -28. `docs/rfc/rejected/2026-06-11-immutable-public-surfaces.md` - ---- - -## Summary - -| Priority | Count | Main themes | -|----------|-------|-------------| -| 🔴 **FIXME** | 2 | Config merging & fiber-info in vendored cordis | -| 🟡 **TODO** | 30+ | Permission gate (8), sub-agents (3), envelope review (6), HMR ownership (4), tool parallelism (2), stateful shell (2), misc (5+) | -| ⚪ **XXX** | 28 | All RFCs: legacy HTML frontmatter — non-normalized template | -| **Total** | **60+** | | - diff --git a/packages/bash-local/src/run.ts b/packages/bash-local/src/run.ts index 93551c8e6b..d78ef815c6 100644 --- a/packages/bash-local/src/run.ts +++ b/packages/bash-local/src/run.ts @@ -245,7 +245,7 @@ export interface RunningBash { * RESOLVES with a {@link SpawnOutcome} describing what happened, so callers * shape one consistent report for the model. * - * TODO(stateful-shell): per the agent-tool survey there are two proven + * XXX(stateful-shell): per the agent-tool survey there are two proven * stateful designs worth revisiting — Claude Code persists ONLY cwd between * calls (captures `pwd -P` after each command), and Codex keeps whole PTY * exec sessions addressable via session ids + stdin writes. We deliberately diff --git a/vendor/README.md b/vendor/README.md index 04e63f26c1..e3be4cfde9 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -44,3 +44,7 @@ To update a vendored package from upstream: 3. Re-apply the local modifications listed above (or drop them if upstream made them unnecessary — update the log either way). 4. Update the version and commit hash in the manifest table. 5. Run `pnpm install && pnpm run test && pnpm run build` at the repo root. + +5. **`cordis/src/fiber.ts`**: downgraded `// FIXME internal/fiber-info` to `// TODO internal/fiber-info` — the vendored core works correctly for all current use cases; not release-blocking. +6. **`cordis/src/reflect.ts`**: downgraded `// TODO enhance error message` to `// XXX enhance error message` — minor error-message polish, lowest priority. +7. **`loader/src/index.ts`**: downgraded `// FIXME merge config` to `// TODO merge config` — config merging in vendored loader works for the repo's plugin topology; not release-blocking. diff --git a/vendor/cordis/src/fiber.ts b/vendor/cordis/src/fiber.ts index 840bc54352..df852ae26f 100644 --- a/vendor/cordis/src/fiber.ts +++ b/vendor/cordis/src/fiber.ts @@ -373,7 +373,7 @@ export class Fiber { const oldState = this.state this.state = callback() ?? this._getState() if (oldState === this.state) return - // FIXME internal/fiber-info + // TODO internal/fiber-info this.context.emit('internal/status', this, oldState) // only notify changes between ACTIVE and NON-ACTIVE states diff --git a/vendor/cordis/src/reflect.ts b/vendor/cordis/src/reflect.ts index 4bc9fb44db..93ccffaf17 100644 --- a/vendor/cordis/src/reflect.ts +++ b/vendor/cordis/src/reflect.ts @@ -247,7 +247,7 @@ export class ReflectService { return this.ctx.fiber.effect(function* () { const entries = Array.isArray(mixins) ? mixins.map(key => [key, key]) : Object.entries(mixins) const getTarget = (ctx: Context, error: Error) => { - // TODO enhance error message + // XXX enhance error message return ctx[source] } for (const [key, value] of entries) { diff --git a/vendor/loader/src/index.ts b/vendor/loader/src/index.ts index e18fc2ffa2..2839979676 100644 --- a/vendor/loader/src/index.ts +++ b/vendor/loader/src/index.ts @@ -105,7 +105,7 @@ export class Loader extends EntryTree { // 1. set `fiber.entry` if (fiber.parent[Entry.key] && !fiber.entry) { fiber.entry = fiber.parent[Entry.key] - // FIXME merge config + // TODO merge config Inject.resolve(fiber.entry!.options.inject, fiber.inject) } From b4a5c9da40881ac6989736126ee79c94f38bff56 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:16:33 +0800 Subject: [PATCH 3/4] fix: downgrade 4 TODOs to XXX per repo standard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No vendor files changed. Classification of non-vendor TODOs: TODO → XXX (someday-maybe, no commitment): packages/bash-local/src/run.ts:248 — XXX(stateful-shell): design reference for future workflows; current spawn-per-call is deliberate and works fine. packages/tool-bash/src/index.ts:23,165 packages/tool-bash/tests/tools.spec.ts:413 — XXX(tool-bash-owner-hmr): HMR-only issue; dev-only, single-user cooperative editor, not a trust boundary. All other TODOs kept as-is: TODO(demo) — should fix for production deployment TODO(sub-agents) — planned feature TODO(review) — validation pending real adapters TODO(http) — should refactor raw fetch TODO(permissions) — important security feature TODO(rfc010-*) — deferred ACP features, should land when resources permit parallel execution — phase 1 sequential, performance improvement --- packages/tool-bash/src/index.ts | 4 ++-- packages/tool-bash/tests/tools.spec.ts | 2 +- vendor/README.md | 4 ---- vendor/cordis/src/fiber.ts | 2 +- vendor/cordis/src/reflect.ts | 2 +- vendor/loader/src/index.ts | 2 +- 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/tool-bash/src/index.ts b/packages/tool-bash/src/index.ts index 9a15c6ad7a..4bc6e02650 100644 --- a/packages/tool-bash/src/index.ts +++ b/packages/tool-bash/src/index.ts @@ -20,7 +20,7 @@ * ownership check is the fence that stops one session's agent from reading or * killing another session's background task. * - * TODO(tool-bash-owner-hmr): the ownership map is per-plugin-instance, so an + * XXX(tool-bash-owner-hmr): the ownership map is per-plugin-instance, so an * independent HMR reload of `tool-bash` (without reloading `dsh-bash`) starts a * fresh map and a task spawned before the reload becomes un-owned (open to any * caller). This is acceptable today — HMR is dev-only, the ACP session boundary @@ -162,7 +162,7 @@ export function apply(ctx: Context): void { // another session's background task. A task with no recorded owner (started by // a non-loop caller, `exec.agent` absent) is unowned and accessible to anyone. // An independent `tool-bash` HMR reload resets this map — see the - // TODO(tool-bash-owner-hmr) note in the module doc. + // XXX(tool-bash-owner-hmr) note in the module doc. const taskOwner = new Map() /** diff --git a/packages/tool-bash/tests/tools.spec.ts b/packages/tool-bash/tests/tools.spec.ts index cc25d9d9d4..e519bd8850 100644 --- a/packages/tool-bash/tests/tools.spec.ts +++ b/packages/tool-bash/tests/tools.spec.ts @@ -410,7 +410,7 @@ describe('background task ownership (cross-session isolation)', () => { }) it('documents the HMR caveat: an independent tool-bash reload resets ownership', async () => { - // The ownership map is per-plugin-instance (TODO(tool-bash-owner-hmr)). When + // The ownership map is per-plugin-instance (XXX(tool-bash-owner-hmr)). When // ONLY tool-bash is reloaded (bash/executor + task survive), the new instance // has an empty map, so the previously-owned task becomes unowned (open). This // test pins that documented behavior — a regression here (e.g. an accidental diff --git a/vendor/README.md b/vendor/README.md index e3be4cfde9..04e63f26c1 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -44,7 +44,3 @@ To update a vendored package from upstream: 3. Re-apply the local modifications listed above (or drop them if upstream made them unnecessary — update the log either way). 4. Update the version and commit hash in the manifest table. 5. Run `pnpm install && pnpm run test && pnpm run build` at the repo root. - -5. **`cordis/src/fiber.ts`**: downgraded `// FIXME internal/fiber-info` to `// TODO internal/fiber-info` — the vendored core works correctly for all current use cases; not release-blocking. -6. **`cordis/src/reflect.ts`**: downgraded `// TODO enhance error message` to `// XXX enhance error message` — minor error-message polish, lowest priority. -7. **`loader/src/index.ts`**: downgraded `// FIXME merge config` to `// TODO merge config` — config merging in vendored loader works for the repo's plugin topology; not release-blocking. diff --git a/vendor/cordis/src/fiber.ts b/vendor/cordis/src/fiber.ts index df852ae26f..840bc54352 100644 --- a/vendor/cordis/src/fiber.ts +++ b/vendor/cordis/src/fiber.ts @@ -373,7 +373,7 @@ export class Fiber { const oldState = this.state this.state = callback() ?? this._getState() if (oldState === this.state) return - // TODO internal/fiber-info + // FIXME internal/fiber-info this.context.emit('internal/status', this, oldState) // only notify changes between ACTIVE and NON-ACTIVE states diff --git a/vendor/cordis/src/reflect.ts b/vendor/cordis/src/reflect.ts index 93ccffaf17..4bc9fb44db 100644 --- a/vendor/cordis/src/reflect.ts +++ b/vendor/cordis/src/reflect.ts @@ -247,7 +247,7 @@ export class ReflectService { return this.ctx.fiber.effect(function* () { const entries = Array.isArray(mixins) ? mixins.map(key => [key, key]) : Object.entries(mixins) const getTarget = (ctx: Context, error: Error) => { - // XXX enhance error message + // TODO enhance error message return ctx[source] } for (const [key, value] of entries) { diff --git a/vendor/loader/src/index.ts b/vendor/loader/src/index.ts index 2839979676..e18fc2ffa2 100644 --- a/vendor/loader/src/index.ts +++ b/vendor/loader/src/index.ts @@ -105,7 +105,7 @@ export class Loader extends EntryTree { // 1. set `fiber.entry` if (fiber.parent[Entry.key] && !fiber.entry) { fiber.entry = fiber.parent[Entry.key] - // TODO merge config + // FIXME merge config Inject.resolve(fiber.entry!.options.inject, fiber.inject) } From 2cb38661263cd808026b1547426af7a9be1b10b7 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Thu, 18 Jun 2026 07:42:13 +0800 Subject: [PATCH 4/4] fix(downgrade): sync README marker references with source MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex CLI review flagged 2 READMEs still referencing old TODO markers after source had been updated to XXX: - packages/bash-local/README.md: TODO(stateful-shell) → XXX(stateful-shell) - packages/tool-bash/README.md: TODO(tool-bash-owner-hmr) → XXX(tool-bash-owner-hmr) --- packages/bash-local/README.md | 2 +- packages/tool-bash/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bash-local/README.md b/packages/bash-local/README.md index cceefbb67c..fe585492d8 100644 --- a/packages/bash-local/README.md +++ b/packages/bash-local/README.md @@ -18,7 +18,7 @@ Local-subprocess implementation of the `@deepseek-ai/dsh-bash` executor seam: `L Design surveyed against the bash tools of Claude Code, OpenCode, Codex, and pi; the notable choices: -- **Spawn per call, no shell state** — every call is a fresh non-login `bash -c` (deterministic; no rc files). All four surveyed tools spawn per call. `TODO(stateful-shell)` in `src/run.ts` records the two proven stateful designs (Claude Code's cwd-only persistence; Codex's PTY exec sessions) for when real workflows demand them. +- **Spawn per call, no shell state** — every call is a fresh non-login `bash -c` (deterministic; no rc files). All four surveyed tools spawn per call. `XXX(stateful-shell)` in `src/run.ts` records the two proven stateful designs (Claude Code's cwd-only persistence; Codex's PTY exec sessions) for when real workflows demand them. - **Process-group kills with escalation** — children are spawned `detached` (own process group); kills send SIGTERM to the group, then SIGKILL after a 3s grace (OpenCode's escalation; pipelines and subshells die with the parent). ESRCH is tolerated; daemons that re-parent away from the group can still survive — same caveat as the surveyed tools. - **Tail-keep truncation + spill files** — output beyond `maxOutputBytes` keeps the in-memory TAIL (errors/results cluster at the end — pi/OpenCode rationale) while the FULL stream is appended to a temp file whose path is reported. The model can `grep`/`tail` the spill file with bash itself. - **Model-friendly env** — `NO_COLOR=1 TERM=dumb PAGER=cat GIT_PAGER=cat` (Codex's hardcoded set) so pagers and ANSI color don't garble results. diff --git a/packages/tool-bash/README.md b/packages/tool-bash/README.md index 83f84e967d..cf2a40f701 100644 --- a/packages/tool-bash/README.md +++ b/packages/tool-bash/README.md @@ -30,7 +30,7 @@ Result text: stdout, then a `[stderr]` section, then status markers — `[timed ### Task ownership (cross-session isolation) -The owning agent is recorded per task id at spawn and kept for the lifetime of the loaded plugin instance (it is **not** cleared on completion). `bash_output`/`bash_kill` reject a task owned by a *different* agent with `task belongs to another session` (a task started with no agent — a non-loop caller — has no owner and is open to anyone; a call with no `exec.agent` cannot access an owned task). Task ids are global and predictable, so under multi-session ACP this ownership check is the fence that stops one session's agent from reading or killing another session's background task. (`TODO(tool-bash-owner-hmr)`: an independent HMR reload of this plugin starts a fresh map, so a task spawned before the reload becomes un-owned — acceptable as HMR is dev-only and the session boundary is one user's cooperative editor; a durable fix attaches ownership to the executor/task lifetime.) +The owning agent is recorded per task id at spawn and kept for the lifetime of the loaded plugin instance (it is **not** cleared on completion). `bash_output`/`bash_kill` reject a task owned by a *different* agent with `task belongs to another session` (a task started with no agent — a non-loop caller — has no owner and is open to anyone; a call with no `exec.agent` cannot access an owned task). Task ids are global and predictable, so under multi-session ACP this ownership check is the fence that stops one session's agent from reading or killing another session's background task. (`XXX(tool-bash-owner-hmr)`: an independent HMR reload of this plugin starts a fresh map, so a task spawned before the reload becomes un-owned — acceptable as HMR is dev-only and the session boundary is one user's cooperative editor; a durable fix attaches ownership to the executor/task lifetime.) ## Background completion notices