Skip to content

feat(gcp-to-aws): post-Estimate what-if workshop checkpoint - #154

Merged
icarthick merged 9 commits into
awslabs:mainfrom
herosjourney:feat/gcp-what-if-workshop
Jul 20, 2026
Merged

feat(gcp-to-aws): post-Estimate what-if workshop checkpoint#154
icarthick merged 9 commits into
awslabs:mainfrom
herosjourney:feat/gcp-what-if-workshop

Conversation

@herosjourney

@herosjourney herosjourney commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds an optional what-if workshop checkpoint after Estimate for infra-route gcp-to-aws migrations: freeze gcp-resource-inventory.json, edit region/availability/kubernetes/Graviton knobs, refresh Design + Estimate as artifact-only inner runs, snapshot up to 5 scenarios, compare side-by-side.
  • The Graviton knob respects the skill's evidence gate: when graviton_profile carries risk-signal tiers, the sheet surfaces the caveat and the scenario label records it — never a silently optimistic reprice.
  • AI-only / billing-only runs skip the workshop offer (nothing to reprice without an infra inventory). No BigQuery target knobs / no agentic overrides in v1.
  • Renders the scenario table in the migration report's what-if section; per-scenario shareable calculator.aws links (best-effort, never blocks; aligns with Update to Include AWS Pricing Calculator MCP #49's Estimate-phase calculator integration).

Motivation: same as #152/#153 — Transform-style what-if for live SA workshops, one discovery run, multiple priced scenarios. GCP's twist is the checkpoint lives in the prose-orchestrated skill: checkpoint semantics are documented in schema-phase-status.md, all phase-list templates gained the workshop key, and both Estimate (deferred advance + inner-run rules) and Design (inner-run rules) got explicit sections.

Relationship to other PRs

Test plan

  • Fixtures: fixtures/gcp-workshop/ (seed → graviton reprice after-state); python3 check_expected_workshop.py after-graviton-reprice → PASS (inventory byte-frozen, fingerprint match, X86_64→ARM64 design flip, $95→$85 balanced, subset correct)
  • fixtures:check green; both seeds carry the workshop phase key
  • mise run build green (branch previously failed fmt:check/markdownlint — fixed here)
  • Full workshop-loop fresh-agent replay (enter → set graviton → apply → compare → exit) — demo script in the fixture README
  • Confirm AI-only path skips the workshop offer and advances to Generate

Made with Cursor

Port the Heroku workshop pattern for infra-route GCP migrations: freeze
inventory, edit region/HA/compute/Graviton knobs, refresh Design+Estimate as
artifact-only inner runs, and compare scenario snapshots. AI-only/billing-only
runs skip the offer. Includes fixtures + asserter.

Co-authored-by: Cursor <cursoragent@cursor.com>
@herosjourney
herosjourney requested a review from a team as a code owner July 20, 2026 00:23
…ixtures

Inner Design skips state transition; sheet/refresh surface graviton_profile risk;
SKILL resume never recomputes Estimate when workshop is pending; fixtures use real
Q11b prompts and keep incompatible worker on x86.

Co-authored-by: Cursor <cursoragent@cursor.com>
@herosjourney

Copy link
Copy Markdown
Contributor Author

Review fixes landed (d7dc26c)

python3 fixtures/gcp-workshop/check_expected_workshop.py after-graviton-reprice → PASS

@herosjourney

Copy link
Copy Markdown
Contributor Author

Fresh-agent replay (house bar)

Agent from seed/ only (no after-graviton-reprice peek) → enter workshop → graviton Apply & reprice → scenario-002.

python3 check_expected_workshop.py /tmp/replay-gcp-fresh seed
→ PASS — expected-workshop.json assertions hold
  • Inventory frozen; worker stays X86_64; workshop.graviton_note set
  • current_phase: estimate, workshop in_progress
  • Resume rule already in SKILL.md from d7dc26c (GCP does not use INTERPRETER)
  • Transcript agent: GCP replay

Logan Kleier and others added 2 commits July 19, 2026 18:11
Add optional what-if-scenarios executive section from scenarios/index.json
and enforce it in validate-migration-report.py when ≥2 workshop variants exist.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@herosjourney

Copy link
Copy Markdown
Contributor Author

Stakeholder deliverable: what-if section in migration report

  • generate-artifacts-report.md: Section 3b what-if-scenarios (GCP workshop compare columns)
  • validate-migration-report.py + docs: enforce when ≥2 scenarios under --migration-dir

Commits: ead6b1f, 3de3532

…g CI failures: ten files committed with dprint drift (fmt:check) and markdownlint MD025/MD029 (the fixtures README second H1; workshop-assemble's fenced block splitting an ordered list). mise run build now exits 0.
@herosjourney

Copy link
Copy Markdown
Contributor Author

Follow-up on my review: confirmed d7dc26c addressed the resume/Graviton-caveat/fixture items, and the scenario report rendering (ead6b1f, 3de3532) sources knob columns from per-scenario preferences copies as it should. Pushed b19b57d: branch now passes mise run build (pre-existing dprint drift on ten files + markdownlint MD025/MD029 in the fixtures README and workshop-assemble). fixtures-check + the workshop asserter pass on the branch.

… workshop-refresh 6b: after each snapshot, best-effort build_estimate via the aws-pricing-calculator MCP -> shareable calculator.aws URL stored as estimation_summary.calculator_url (null + one chat note on failure; never blocks). Compare table and the migration report's what-if section render the link. AWS computes regional prices server-side when opened -- the honest region answer. Aligns with awslabs#49's Estimate-phase calculator integration (same server, same degradation); server registration (.mcp.json) rides the heroku workshop branch.
@herosjourney

Copy link
Copy Markdown
Contributor Author

Pushed fbea367 — shareable calculator.aws link per workshop scenario (refresh step 6b: best-effort build_estimate, calculator_url in the manifest, compare table + migration-report what-if section render it, never blocks). Aligns with #49's Estimate-phase calculator integration — same server, same degradation rules; server registration in .mcp.json rides #152. Build green.

Clean merge (no conflicts) bringing the branch up to current main (through awslabs#159).
gcp-to-aws is the prose skill (no workshop fragment-id issue); shared:check OK,
both DSL validators green, full mise build green.
Union-resolve fixtures/README.md registry: keep both gcp-workshop (this branch)
and vercel-workshop (awslabs#153, now on main) entries. Full build green.
icarthick added a commit to herosjourney/startups that referenced this pull request Jul 20, 2026
Brings the branch up to current main (through awslabs#153/awslabs#154/awslabs#159). Resolutions:
- fixtures/README.md: union — keep heroku-workshop + vercel-workshop registry lines.
- estimation-infra.schema.json (canonical + vendored): took main's generic workshop-
  metadata description (the 'heroku-to-aws pilot' note is stale now that vercel/gcp
  share the field); shared:sync keeps copies byte-identical.
Full build green.
Union-resolve fixtures/README.md: all three workshop fixture registry lines
(heroku-workshop, vercel-workshop, gcp-workshop) now coexist. Full build green.
@icarthick
icarthick merged commit 908ddf8 into awslabs:main Jul 20, 2026
8 checks passed
icarthick pushed a commit to herosjourney/startups that referenced this pull request Jul 20, 2026
…ode, vendored Merge-last PR: built from awslabs#152 + awslabs#153 + awslabs#154 (plus awslabs#148 via awslabs#152's lineage). After those merge, three near-identical copies of the workshop contract and the estimate Step 0 pricing-mode block would exist -- the exact drift pattern that produced the cached_stale enum bug and the vendored-edited-instead-of-canonical arm64 rates. - skills/shared/workshop/workshop-invariants.md (canonical): frozen discovery + fingerprint, checkpoint state semantics incl. the warm-start rule, the inner-runs allowed/forbidden contract, scenario store rules (max-5 warn-and-name eviction, working-tree==active, estimation_summary core fields), region honesty, and the calculator link procedure. Vendored into all three skills; gcp gains a references/vendored tree (now 4 skills under shared:check). - skills/shared/estimate/pricing-mode.md (canonical Step 0): cache staleness, MCP retry ladder, display modes, and the 5-rung pricing hierarchy incl. the estimated rung. heroku + vercel cost engines now execute the vendored copy as Step 0 instead of restating it; vercel keeps its skill-specific Step 0a-workshop knobs section. - Skill workshop files keep knobs/artifact names/engine refreshes and defer to the invariants file for every invariant (workshop.md hard rules note the canonical wins on disagreement; refresh inner-runs and 6b calculator sections are pointers with skill-specific lines only). - READMEs unioned across the three branches; canonical estimation-infra schema takes the workshop-metadata side + shared:sync. Validated: shared:check green across 4 vendored trees, fixtures-check green (123 json / 8 asserters / 10 seeds), all three workshop asserters PASS on the merged tree, frontmatter validation green, full mise build green.
icarthick pushed a commit that referenced this pull request Jul 20, 2026
…ode, vendored Merge-last PR: built from #152 + #153 + #154 (plus #148 via #152's lineage). After those merge, three near-identical copies of the workshop contract and the estimate Step 0 pricing-mode block would exist -- the exact drift pattern that produced the cached_stale enum bug and the vendored-edited-instead-of-canonical arm64 rates. - skills/shared/workshop/workshop-invariants.md (canonical): frozen discovery + fingerprint, checkpoint state semantics incl. the warm-start rule, the inner-runs allowed/forbidden contract, scenario store rules (max-5 warn-and-name eviction, working-tree==active, estimation_summary core fields), region honesty, and the calculator link procedure. Vendored into all three skills; gcp gains a references/vendored tree (now 4 skills under shared:check). - skills/shared/estimate/pricing-mode.md (canonical Step 0): cache staleness, MCP retry ladder, display modes, and the 5-rung pricing hierarchy incl. the estimated rung. heroku + vercel cost engines now execute the vendored copy as Step 0 instead of restating it; vercel keeps its skill-specific Step 0a-workshop knobs section. - Skill workshop files keep knobs/artifact names/engine refreshes and defer to the invariants file for every invariant (workshop.md hard rules note the canonical wins on disagreement; refresh inner-runs and 6b calculator sections are pointers with skill-specific lines only). - READMEs unioned across the three branches; canonical estimation-infra schema takes the workshop-metadata side + shared:sync. Validated: shared:check green across 4 vendored trees, fixtures-check green (123 json / 8 asserters / 10 seeds), all three workshop asserters PASS on the merged tree, frontmatter validation green, full mise build green. (#157)

Co-authored-by: Logan Kleier <lkleier@amazon.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants