Scope
Introduce a deploy.targets.* config contract in packages/config/src/domain/schemas/deploy-schema.ts, generalizing the current deploy.windows.*-only schema to a per-target discriminated map with a shared base + per-target member schemas. Clean break — no back-compat alias (decision D5, user override 2026-07-03: alpha, breaking changes allowed, ship the production-grade shape directly). The Windows SERVY lane is re-keyed to deploy.targets.windows.
Target / adapter
Config surface for all targets (foundation for every other deploy slice).
Acceptance criteria
deploy.targets map keyed by target name; windows member reuses the current Windows field set verbatim under the new key path.
- Shared base extracted (mode
compile|script, denoPath, compileTarget, concurrency, timeouts, bundle opts, workspace, v8HeapMb, generateEnvFile, logging, health); target-specific fields kept in member schemas.
- Unused
docker sub-block + denoBaseImage: 'denoland/deno:2.5' pin migrate under a docker/compose target and re-pin to denoland/deno:2.
deploy.windows.* no longer accepted; one-line migration note in config/release docs.
deno task check + config schema tests green.
Dependencies
None. Unblocks every other deploy slice (Phase 0 foundation).
Tier / phase
BETA · Phase 0 · milestone 0.0.1-beta.1
Parent epic: #327
Scope
Introduce a
deploy.targets.*config contract inpackages/config/src/domain/schemas/deploy-schema.ts, generalizing the currentdeploy.windows.*-only schema to a per-target discriminated map with a shared base + per-target member schemas. Clean break — no back-compat alias (decision D5, user override 2026-07-03: alpha, breaking changes allowed, ship the production-grade shape directly). The Windows SERVY lane is re-keyed todeploy.targets.windows.Target / adapter
Config surface for all targets (foundation for every other deploy slice).
Acceptance criteria
deploy.targetsmap keyed by target name;windowsmember reuses the current Windows field set verbatim under the new key path.compile|script,denoPath,compileTarget, concurrency, timeouts, bundle opts,workspace,v8HeapMb,generateEnvFile,logging,health); target-specific fields kept in member schemas.dockersub-block +denoBaseImage: 'denoland/deno:2.5'pin migrate under a docker/compose target and re-pin todenoland/deno:2.deploy.windows.*no longer accepted; one-line migration note in config/release docs.deno task check+ config schema tests green.Dependencies
None. Unblocks every other deploy slice (Phase 0 foundation).
Tier / phase
BETA · Phase 0 · milestone 0.0.1-beta.1
Parent epic: #327