← Inside orch contents

Chapter 35 worked answers

These answers use baseline cbfc94ade5b57e449d6b73bf1485b1c5b1647022 and the chapter's linked execution records. Procedures remain scoped to disposable resources.

1. Read the pinned ranges

Server0.3.0 advertises APIv1, agent minimum0.2.0/maximum-tested0.3.0, expected schema16, accepted schema15–16. Expected names the preferred current schema; accepted is the checker's range, not a proof that every package query succeeds at every value. The original fixture omitting migrations15/16 failed on agent_version introduced by16. Keep that observation separate from the declared range.

2. Parse the actual decision

Run the ch35 teaching fixture. Actual real Cobra execution returned no command error for0.1.0 while its JSON status was blocked. Automation must validate the JSON shape, reject status blocked, and explicitly decide whether warnings such as untested-newer require review. A zero exit code alone only establishes successful command/output handling here. The fixture's nodes are controlled inputs, not a live cluster inventory.

3. Partial upgrade is possible

Up applies each migration in its own transaction. If eleven fails after ten committed, status should retain the earlier versions and show the remaining work. Inspect the failing SQL, current/pending records, candidate binary compatibility and verified backup before retrying. Do not edit committed migration history or run down against live data. The actual owned database run applied all16, skipped them on repeated up, and rejected down without allow-down; it did not demonstrate destructive rollback safety.

4. Preserve unresolved state and trace policy

Old running tasks stay. Old failed tasks stay if unresolved; a qualifying running/healthy replacement at the same/newer version or cleanup desired status resolves them for age-based pruning. The recorded deterministic retention test checked these cases. Maintenance allows operations when no relevant enabled window exists; an unrelated window does not freeze the cluster. GitOpsRecords is configurable but the inspected prune method has no GitOps deletion loop. A field is not enforcement until its caller/mutation path exists.

See the corresponding chapter claim ledger for exact immutable source anchors and limitations.

Return to Chapter 35.