Subchapter 25.48
references/phases/workshop/workshop-refresh.mdMarkdown5 KBView on GitHub
Fragment unit. See
workshop.mdfor how it is composed into the sidebar.
Patches the changed preferences, re-runs Design and Estimate against them, and snapshots the result under . Discover is never re-run — the inventory is unchanged, and re-discovering would make the comparison meaningless as well as slow.
scenarios/Regional dollar deltas are not available — pricing is cache-only. Rates stay cached-file-based and the scenario is labelled accordingly rather than presented as precise.
Follow the canonical allowed/forbidden contract in
references/vendored/workshop/workshop-invariants.md § 3 for every inner
Design/Estimate run. Azure specifics: Design follows design.md § Inner
workshop reprice and Estimate follows estimate-infra.md § Inner workshop
reprice (both skip state transitions); phases.design/phases.estimate stay
"completed"; current_phase stays "estimate" until workshop-assemble.md.
When scenarios/ or scenarios/index.json is absent:
inventory_fingerprint = SHA-256 hex of azure-resource-inventory.json bytes.scenarios/.scenarios/scenario-001.preferences.jsonscenarios/scenario-001.aws-design.jsonscenarios/scenario-001.estimation-infra.jsonscenarios/scenario-001.json (source: "baseline", summary from
estimation-infra.json including the three Premium/Balanced/Optimized
monthly tiers per estimate-infra.md § Scenarios).scenarios/index.json (baseline / active = scenario-001,
max_scenarios: 5).preferences.workshop exists:
{ "active": true, "last_sheet_at": "<now>", "active_scenario_id": "scenario-001" }workshop.md for the sheet.If fingerprint ≠ index.inventory_fingerprint, STOP:
Inventory changed since baseline. Re-run Discover before workshop reprice.
If generate completed, require re-entry confirm and reset generate to pending.
Apply sheet edits. Set workshop.active: true, workshop.last_sheet_at now.
Leave non-knob fields (licensing, identity, VM/DB cutover, app_service_plans
isolation, cluster pattern confirmations) untouched — those are one-time
migration-runbook decisions, not cost-shaping knobs this sidebar reprices.
Forced-architecture guard: If the sheet attempted to set
cpu_architecture to graviton on a row whose forced_by is set, reject the
patch for that field and keep the forced value — see workshop-sheet.md §
Step 3.4.
Per Inner runs. Design must follow design.md § Inner workshop reprice
(skip handoff / phase-status). Estimate must follow estimate-infra.md §
Inner workshop reprice. Chat note after Estimate:
“Workshop reprice Estimate complete; returning to workshop loop.”
scenario-00N.scenarios/{id}.*.preferences_subset: differing knob paths vs baseline.(architecture forced by <resource>) to the label so the
compare view surfaces it without a separate column.recommendation.outcome (one of go,
conditional_go, defer_for_evidence, stay — asserted in estimate.md‘s
postconditions), copy it into the manifest as
estimation_summary.recommendation_outcome; omit/null otherwise — this
feeds the compare view’s Outcome column and flip callout.workshop.active_scenario_id.Return to workshop.md → workshop-compare.md.
Implemented, ported from gcp-to-aws‘s equivalent (which uses the region /
availability / kubernetes / cpu_architecture knob set) and adapted to this
skill’s knobs (region / HA posture / compute target / cost optimization /
cpu_architecture) and its Premium/Balanced/Optimized scenario schema (GCP’s
scenario schema instead uses aws_monthly_premium/_balanced/_optimized
under a different derivation rule — see estimate-infra.md § Scenarios for
this skill’s version). The forced-architecture rejection in Step 3 has no GCP
analogue in the workshop layer (GCP’s Graviton forcing is a risk-signal
caveat carried forward via workshop.graviton_note, not a hard rejection) —
Azure’s forced_by is a harder constraint (a specific Windows resource makes
Graviton architecturally invalid, not merely risky), so the sheet and this
fragment reject the edit outright rather than carrying a soft caveat.