Files
stack/docs/scratchpads/tess-m2-001-pi-service.md
jason.woltje e3b5113be2
All checks were successful
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/push/ci Pipeline was successful
feat(tess): add configurable Pi interaction service (#728)
2026-07-13 02:59:27 +00:00

41 lines
1.8 KiB
Markdown

# TESS-M2-001 — Pi Interaction Service
## Scope
- Add a generic rostered/systemd Pi operator-interaction service in
`packages/mosaic/framework`.
- Pin the service to `openai/gpt-5.6-sol`, high reasoning, and the
`operator-interaction` tool policy.
- Keep identity as provisioning data; the product name appears only in the
committed example roster.
## Security and Configuration Invariants
1. The chosen display/roster name is supplied as data and must exactly match the
generic systemd instance.
2. The service fails before launch if runtime, model, reasoning, or tool policy
differs from the pinned policy.
3. Effective-policy output includes only name, runtime, model, reasoning, and
tool policy; it does not inspect or output credential variables.
4. The default example is replaceable without a source change; the TDD suite
provisions `Nova` from the same profile.
## Evidence
- `src/fleet/tess-service-profile.test.ts` proves a `Nova` provisioning path,
roster parser/env serialization, effective-policy output, fail-fast drift
rejection, and absence of the product name from generic source/profile.
- `test-fleet-units.sh` validates the generic interaction systemd unit requires
per-agent config and invokes fail-fast startup validation.
- `test-start-agent-session.sh` proves the tool-policy value is exported into
the Pi pane; `compose-contract.spec.ts` proves it becomes an explicit
runtime contract block.
- Fresh-worktree dependency install plus root `pnpm typecheck`, `pnpm lint`,
`pnpm format:check`, and `pnpm test` passed; package/full fleet suites passed.
- Independent Codex code and security reviews passed with no remaining findings.
## Delivery Notes
- Branch starts from fresh `origin/main` at `86a50138`.
- PR targets `main` and references issue `#708`.