# 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`.