# Issue 11 subagent readiness trace

Status: DApp native-child runtime verified. Runtime setup is ready; ticket approvals, frontier selection, implementation acceptance, and cross-repository compatibility checks remain separate gates.

This trace covers the controlled runtime for Issue 11. It does not record CEBA DApp implementation work.

## Stable configuration

| Evidence | Result |
| --- | --- |
| Commit `0bb661e` | Adds `issue-11-implementer`, project model scope, and `/implement-spec` runtime gate. |
| Commit `736bcc2` | Adds the Purchase workflow audit and shared terms. |
| `/subagents-doctor` | Native async runtime, run storage, and project-agent discovery pass. |
| `issue-11-implementer` discovery | Project agent is visible as a native Pi background writer. |
| Assigned worktree | `/home/juli/Devel/ceba-matt/workspace/implementations/issue-11/runtime-probe-dapp` at DApp commit `ea24272`. |

## Probe events

| Event | Result | Decision |
| --- | --- | --- |
| Full probe v1, process `proc_9de0` | Parent waited and did not return child evidence. | Stopped. Do not count as a launch. |
| Full probe v2, process `proc_ab1d` | Exit `127`; shell backticks and `timeout` around a Zsh function broke the command before Pi started. | Fixed quoting. Run `timeout` outside `zsh -lic`. |
| Full probe v3, process `proc_2b95` | Parent stayed active but created no async child artifact. | Stopped. Reduced test to a no-tool canary. |
| Canary v1, process `proc_33fe` | Exit `124`; parent request used unsupported reasoning effort `none` from `--thinking off`. No child launched. | Use `--thinking low`. |
| Parent-only canary | Returned `PARENT_OK` with `--thinking low`. | Parent model route is reachable. This is not child proof. |
| Canary v2, process `proc_5fc4` | Exit `124` after 180 seconds. Parent log contained only shell startup output; no native async run artifact was created. | Failed before child launch. Do not retry through print mode. Use an interactive Pi `/run` or Pi RPC spawn so launch does not depend on a model choosing the tool. |

## Verified launch after stdin correction

Process `proc_c5f8` finished in 34 seconds. Native async run `5d2ff388-1757-449e-a0f6-11e91d389272` completed with exit 0 and output `PROBE_OK`. Artifact: `/tmp/pi-subagents-uid-1000/async-subagent-runs/5d2ff388-1757-449e-a0f6-11e91d389272/status.json`. Requested model: `9router/cx/gpt-6-astra`; resolved model: provider `9router`, model `cx/gpt-6-astra`. Cwd matches the assigned DApp probe worktree. Runner termination was observed.

Writer acceptance was rejected because the deliberately no-tool task omitted commands-run and no-staged-files evidence. Execution success does not mean implementation acceptance. Process `proc_1b5d` now runs the full read-only context/tool/Git-state probe, with stdin closed and a 240-second parent deadline.

## Full runtime probe

Run `8d9f55b0-58a8-497f-acec-4c6e7cc891f6` completed with exit 0, resolved provider `9router`, model `cx/gpt-6-astra`. Its status artifact is under `/tmp/pi-subagents-uid-1000/async-subagent-runs/8d9f55b0-58a8-497f-acec-4c6e7cc891f6/status.json`.

- Native codemode evaluated `2+2` as `4`.
- Runtime registry contained `lens_diagnostics`, `jev_route`, and `ctx_execute`. Their external-service behavior was not tested.
- Coordination-root and DApp worktree `AGENTS.md` were read; child reported both in supplied context.
- Before/after Git status and staged paths were empty. Actual probe HEAD was `ba03534197f89052570108b6a49cd6600f7f98a2`, not the earlier recorded `ea24272`; the reason for that prior discrepancy is not established.
- All three requested skills were readable, but not discovered. Fixed profile: `skillPath: ../../.agents/skills` and `skills: tdd, implement-spec, code-review`. File paths in `skills` were incorrect.
- Writer acceptance remains rejected for the read-only task; no implementation or independent review has been accepted. Do not weaken writer acceptance to make a runtime probe green.

Process `proc_de81` completed in 59 seconds. Run `00bf72d8-739f-4c87-ae95-dabd0c3730a4` completed with exit 0, Astra, and a clean worktree. Artifact records all three names resolved; child prompt contains `tdd` and `code-review`. `implement-spec` is intentionally filtered by `buildSkillInjection` because its frontmatter has `disable-model-invocation: true`. Removed that parent-only skill from the child selection; it remains readable when explicitly needed, not automatically invocable. No application implementation authorized by these probes.

Only the DApp worktree runtime was exercised. Repeat the read-only check in a Protocol worktree before scheduling Protocol writers. External services behind registered tools and application correctness were not tested.

## Pass criteria

A probe passes only when all evidence exists:

1. Native Pi launches `issue-11-implementer` asynchronously.
2. Run artifact names the assigned DApp worktree.
3. Requested and observed model identities agree under strict verification.
4. Child reports `PROBE_OK`.
5. Probe worktree Git status is unchanged.
6. Full read-only probe confirms `codemode`, pi-lens, Jev, and context-mode availability.

A parent response, process start, model catalog entry, or response alias alone is not proof.

## Current risks

- 9router previously returned `cx/gpt-5.6-luna` for several different requested routes. Strict pi-subagents verification correctly rejected those runs.
- `/home/juli/.pi/agent/extensions/subagent/config.json` is global state outside this repository. Any response alias needs independent identity evidence.
- `.pi/settings.json` and `docs/research/subagent-model-routing.md` currently have uncommitted routing work from another process. They are not part of the two stable readiness commits above.

## Diagnosis and controlled correction

The earlier attribution to model tool selection was not supported. Pi's `dist/main.js:49-66` reads non-TTY stdin until EOF; `dist/main.js:726-735` awaits that read before processing the initial prompt. The process manager kept stdin open. Sending an interactive command through the same pipe did not close it. The supposed interactive process `proc_fb81` was stopped after 5171 seconds; no accepted command was established.

The separate parent-only session records a real provider rejection for reasoning effort `none`, but this does not establish the cause of the stalled background canaries.

Correction: run the same print-mode launcher with `</dev/null`, an external deadline, and stdout/stderr retained by the process manager rather than redirected away from its watches. `proc_c5f8` tests this correction with a 120-second cap. No model or profile change. Native launch uses `agent` and `task`, not the unsupported `action: launch` instruction used in earlier prompts.

Do not declare readiness until the child result and full read-only runtime probe pass. Preserve strict model verification; a timeout is not evidence that another model is required.
