Skip to content

refactor(migrate): canonical workshop invariants + estimate pricing-mode, vendored (merge after #152-#154) - #157

Merged
icarthick merged 1 commit into
awslabs:mainfrom
herosjourney:feat/workshop-shared-contract
Jul 20, 2026
Merged

refactor(migrate): canonical workshop invariants + estimate pricing-mode, vendored (merge after #152-#154)#157
icarthick merged 1 commit into
awslabs:mainfrom
herosjourney:feat/workshop-shared-contract

Conversation

@herosjourney

@herosjourney herosjourney commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Extracts the what-if workshop contract and the estimate Step 0 pricing-mode logic into canonical skills/shared files, vendored into the skills and guarded by shared:check byte-identity.
  • Reconciles the three workshop branches' overlapping README/schema edits in one place (they would otherwise be three separate merge conflicts on main).

Motivation: once #152#154 land, the plugin carries three near-identical copies of the workshop contract and three copies of the Step 0 pricing-mode block. That drift pattern has already bitten twice: the cached_stale enum existed in specs but not the schema, and the arm64 Fargate/EC2 rates were edited in a vendored copy instead of canonical. Copies that must agree need a single source with a byte-identity check — shared:sync already provides it.

Changes

skills/shared/workshop/workshop-invariants.md (canonical)

The cross-skill workshop contract: frozen discovery + fingerprint abort rule; checkpoint state semantics (never current_phase, deferred advance, the warm-start don't-recompute rule); the inner-runs allowed/forbidden table; scenario-store rules (max-5 with warn-and-name eviction, working-tree == active, estimation_summary core fields incl. calculator_url); region honesty; the shareable-calculator-link procedure. Vendored into all three skills — gcp gains a references/vendored/ tree, so shared:check now guards 4 skills.

skills/shared/estimate/pricing-mode.md (canonical Step 0)

Cache staleness check, MCP retry ladder, pricing-mode display strings, and the 5-rung pricing hierarchy including the estimated rung. The heroku and vercel cost engines now execute the vendored copy as their Step 0 instead of restating it (vercel keeps its skill-specific Step 0a-workshop knobs section). gcp's differently-structured estimate prose is out of scope, noted for a future pass.

Skill files

Keep only what's genuinely skill-specific (knobs, artifact names, vercel's Recommend refresh, gcp's Graviton evidence gate) and defer to the invariants file for everything invariant, with an explicit "the canonical file wins on disagreement" note.

Cross-branch reconciliation

READMEs unioned (Heroku live-discovery section + Vercel requirements + all three fixture registry lines); canonical estimation-infra.schema.json takes the workshop-metadata side; vendored copies synced.

Relationship to other PRs

Test plan

  • shared:check green across all 4 vendored trees
  • fixtures:check green on the merged tree (123 JSON, 8 asserters, 10 phase-status seeds)
  • All three workshop asserters PASS against their committed after-states on the merged tree
  • Frontmatter validation green; full mise run build green

…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
icarthick force-pushed the feat/workshop-shared-contract branch from dfcd533 to 4dff728 Compare July 20, 2026 18:42
@icarthick
icarthick merged commit 2ee3ecf into awslabs:main Jul 20, 2026
8 checks passed
icarthick added a commit that referenced this pull request Jul 23, 2026
Per product decision, remove the vercel-to-aws migration skill entirely. This is a
forward-removal (not a git-revert): vercel landed via shared/cross-skill commits
(#153/#157/#162/#155/#152/#176) that also carried heroku/gcp/sidebar work, so
reverting those merge commits was not viable.

Removed:
- skills/vercel-to-aws/ (full skill, 57 files incl. its references/vendored/ copies)
- fixtures/vercel-capture/ + fixtures/vercel-workshop/ (replay fixture sets)
- Orphaned vercel report validator + its test + golden fixtures (lived at plugin
  level, not under the skill dir): scripts/validate-assessment-report.py,
  tests/test_validate_assessment_report.py, fixtures/assessment-report-{reference,stub}.html,
  fixtures/tier1-signals-reference.json (vercel prescan fixture, no consumers)
- Deregistered from all 3 plugin manifests (.claude/.codex/.cursor-plugin): dropped
  vercel/next-js/nextjs/opennext keywords, the 'Vercel' mentions in descriptions, and
  the codex 'Assess my Vercel migration' example prompt
- Stripped vercel from both READMEs (intro bullets, triggers, Vercel→AWS mapping table,
  trigger-table row, requirement bullet, DSL-architecture section: 'five skills'→'four',
  removed the resumability-ledger note) + fixtures/README registry line
- Dropped vercel asserter entries from tools/run-asserters.py (10→6 asserters)
- Stripped stale vercel cross-refs: heroku SKILL.md workshop-arch note, gcp
  schema-workshop-scenarios arch-defaults line, canonical workshop-invariants
  {SKILL_LABEL}/{INVENTORY} placeholders (shared:sync propagated to vendored copies)

PRESERVED (heroku + gcp depend on these — #157's shared architecture): canonical
skills/shared/workshop/workshop-invariants.md + skills/shared/estimate/pricing-mode.md
and their heroku/gcp vendored copies. shared:check drops 4→3 trees cleanly (the sync
tool auto-discovers consumers). Left legit non-skill refs: gcp's vercel.json detection
signal, 'Vercel AI SDK' framework name, historical PR-context notes.

Verified: shared:check OK (3 trees byte-identical), fixtures:assert 6/6, all validators
green (heroku/gcp/agent-advisor), dprint + markdownlint clean, full mise run build green.
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