SpecsCLIIssue 49 Stale Control Plane Stable Baseline
Implementation Notes: Issue 49 Stale Control Plane Stable Baseline
Implementation Notes: Issue 49 Stale Control Plane Stable Baseline
Summary
Stable baseline resolution now checks the latest published stable release before accepting control-plane metadata when the release source is reachable. If the control plane reports a different stable version than the published stable release path, the CLI materializes and uses the published stable baseline as canonical. This applies to both default stable resolution and explicit stable refresh.
Changes
apps/cli/src/baseline/resolve.tsseparates latest stable release lookup from baseline materialization so stable resolution can compare control-plane metadata against the release source.apps/cli/src/baseline/resolve.test.tscovers stale or different control-plane metadata plus a published stable release for refresh and default stable paths.- Root docs and the scaffolding runbook explain that stable resolution verifies control-plane freshness before writing.
Validation Evidence
bun --cwd apps/cli test src/baseline/resolve.test.tsbun --cwd apps/cli test src/baseline/resolve.test.tswith default-stable mismatched control-plane regressionbun --cwd apps/cli test src/baseline/resolve.test.ts src/update/run.test.tsbun run checkgit diff --checkbun run apps/cli/src/index.ts update --check --baseline stable --refresh-baseline --json
Manual Review Checklist
| Check | Result | Evidence |
|---|---|---|
| Stale control-plane stable metadata fixed | Pass | Refresh and default-stable regressions resolve the published stable release instead of mismatched control plane metadata. |
| Bundled fallback semantics preserved | Pass | Existing baseline and update tests remain in the required validation set. |
| Operator guidance updated | Pass | Root docs and the CLI scaffolding runbook describe stable freshness verification. |
| Traevolution reconciliation remains out of scope | Pass | This change fixes Harness resolver behavior only. |