Follow-up to #640 Phase 2 (PRs land via Phase 2 cascade).
Per Phase 1 inventory + ADR 0040 Assumption 8: cmd/wfctl/deploy_providers.go::findIaCPluginDir uses json.Unmarshal without schema validation. A typo in computePlanVersion (e.g. "v2.0" or "V2") would silently fall back to v1 dispatch, breaking the Phase 2 hard-cutover contract.
Phase 2 design doc records three implementation options for this gate:
- Full
pluginmanifest package (schema-driven, generic)
- Reuse existing
schema/ JSON Schema validator
- Lightweight
computePlanVersion ∈ {v1, v2} enum check (minimum viable)
Pick at design time. Track via this issue.
Filed per Phase 2 plan Pre-dispatch setup step 2 (team-lead action). See docs/plans/2026-05-16-v2-lifecycle-phase2.md.
Follow-up to #640 Phase 2 (PRs land via Phase 2 cascade).
Per Phase 1 inventory + ADR 0040 Assumption 8:
cmd/wfctl/deploy_providers.go::findIaCPluginDirusesjson.Unmarshalwithout schema validation. A typo incomputePlanVersion(e.g. "v2.0" or "V2") would silently fall back to v1 dispatch, breaking the Phase 2 hard-cutover contract.Phase 2 design doc records three implementation options for this gate:
pluginmanifestpackage (schema-driven, generic)schema/JSON Schema validatorcomputePlanVersion ∈ {v1, v2}enum check (minimum viable)Pick at design time. Track via this issue.
Filed per Phase 2 plan Pre-dispatch setup step 2 (team-lead action). See docs/plans/2026-05-16-v2-lifecycle-phase2.md.