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