Skip to content

chore(migrate): refresh pricing caches + weekly strict staleness workflow (stacked on #151) - #155

Merged
icarthick merged 3 commits into
awslabs:mainfrom
herosjourney:feat/pricing-cache-refresh
Jul 22, 2026
Merged

chore(migrate): refresh pricing caches + weekly strict staleness workflow (stacked on #151)#155
icarthick merged 3 commits into
awslabs:mainfrom
herosjourney:feat/pricing-cache-refresh

Conversation

@herosjourney

@herosjourney herosjourney commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Motivation: every cache had quietly crossed its own declared freshness window (#151's warn-only check reports 3 of 4 stale on main), so every estimate — including both fresh-agent estimate replays run this week — silently degraded to cached_fallback accuracy. Nothing owned the refresh.

Changes

Cache refresh (verified)

  • Spot-checked the highest-traffic rates against published pricing pages: AWS Fargate Linux/x86 us-east-1 per-second rates convert exactly to the cached $0.04048/vCPU-hr and $0.004445/GB-hr (source); Heroku dyno flat rates (Eco $5 flat, Basic $7, Standard-1X $25, Standard-2X $50, Performance-M $250, Performance-L/L-RAM $500) match devcenter.
  • No rates changed → date bump with verification provenance recorded in _meta.last_verification and the markdown cache header. Vendored copies synced.
  • gcp's pricing-cache.md (2026-07-17) was already inside its window; untouched.

Weekly strict gate

  • New .github/workflows/pricing-staleness.yml: scheduled Monday run of the zero-dep tool with --strict (checkout + node 24, no installs). Build keeps warn-only so a stale cache never fails unrelated PRs; the schedule makes staleness a visible failure someone owns, prompting the next fix: update Bedrock pricing cache and model lifecycle for July 2026 #131-style refresh.

Relationship to other PRs

Test plan

  • mise run build green on the branch
  • pricing:staleness reports 4/4 caches fresh after the refresh; --strict exits 0
  • Verified --strict exits 1 against main's stale state (the workflow would correctly fail today without this refresh)

Logan Kleier added 2 commits July 19, 2026 16:09
…t Two zero-dep TS tools (Node 24 type-stripping, same pattern as the existing validators), both wired into the lint aggregate: fixtures:check -- the replay fixture sets are the plugin's regression harness, and they rot in ways the build never saw: capture manifests referencing files that were never committed (a repo-root .gitignore build/ rule once silently swallowed three canned .next manifests), seed .phase-status.json files lagging behind the phases a skill declares, and asserters carrying syntax newer than the ambient python. Now CI checks: every fixture JSON parses, every asserter ast-parses (no bytecode litter), every manifest captures[]/api[] entry with status ok resolves to a file on disk (failed/skipped may be absent) and build.files exist, nothing under fixtures/ is gitignored, and every seed phase list exactly matches the owning skill's declared _phase set. Validated against all four in-flight fixture sets (heroku/gcp/vercel x2) -- and it immediately caught a real one: the vercel seed omitted the declared scaffold phase (fixed on that branch as d11db7b). pricing:staleness -- every pricing cache declares its own freshness contract (_meta.last_updated + staleness_days, or a Last updated line with a documented 30-day window) but nothing enforced it; caches quietly crossed their own thresholds and every estimate degraded to fallback accuracy. Warn-only in build (a stale cache must not fail unrelated PRs); --strict exits 1 for a scheduled freshness workflow. Currently reports 3/4 caches stale, which is the point.
…low All caches had crossed their own declared freshness windows (the new pricing:staleness tool reports 3/4 stale), so every estimate was degrading to cached_fallback accuracy. Refresh: spot-verified the highest-traffic rates against published pricing pages -- Fargate Linux/x86 us-east-1 per-second rates convert exactly to the cached $0.04048/vCPU-hr and $0.004445/GB-hr, and Heroku dyno flat rates (Eco $5 flat, Basic $7, Standard-1X $25, Standard-2X $50, Performance-M $250, Performance-L $500) match devcenter -- no rate changes needed, so this is a verified date bump with provenance recorded in _meta.last_verification / the cache header. Vendored copies synced. New .github/workflows/pricing-staleness.yml: weekly scheduled run of the zero-dep staleness tool with --strict (build keeps the warn-only mode so a stale cache never fails unrelated PRs; the schedule makes staleness a visible failure someone owns, prompting a awslabs#131-style data refresh).
@herosjourney
herosjourney requested review from a team as code owners July 20, 2026 01:48
icarthick added a commit to herosjourney/startups that referenced this pull request Jul 22, 2026
Clean merge (no conflicts) bringing the branch to current main. The two new
zero-dep CI tools validated against main's current fixture sets:
- fixtures:check OK (139 json, 9 asserters, 3 manifests / 51 refs, 10 seeds)
- pricing:staleness reports 1/5 stale (heroku cache) — WARN-ONLY in build by design;
  awslabs#155 (stacked on this) does the actual refresh.
Full mise build green.
Brings the branch to current main (after awslabs#151's staleness tool merged). awslabs#155's
cache refresh now takes effect: pricing:staleness reports 5/5 fresh (was 1/5 stale),
--strict exits 0, and the new weekly .github/workflows/pricing-staleness.yml is present.

Also shared:sync'd vercel's vendored aws-infra-pricing.json to canonical (it lacked
the new _meta.last_verification provenance field awslabs#155 adds). shared:check OK (4 trees),
full build green.
@icarthick
icarthick merged commit 2898a6f into awslabs:main Jul 22, 2026
8 checks passed
icarthick added a commit to herosjourney/startups that referenced this pull request Jul 22, 2026
Resolves conflicts after the workshop stack + awslabs#149/awslabs#151/awslabs#155/awslabs#162 landed:
- heroku-to-aws SKILL.md + heroku-live-capture/README.md: took main (stale awslabs#148/awslabs#150
  lineage; main has the merged workshop/what-if + Scenario C content).
- gcp-live-capture/README.md: kept THIS branch's added 'Scenario C — derived GCP
  baseline' block (its genuine new content; main's side empty there).
- migrate/README.md: took main (adds vercel + agent-advisor reqs; awslabs#149's gcloud GCP
  requirement lines already present above the conflict).

New gcp-infra-pricing-cache.md auto-enrolls in pricing:staleness (6/6 fresh) and the
seed-baseline fixtures pass fixtures:check (141 json / 10 asserters). Full build green.
icarthick added a commit to herosjourney/startups that referenced this pull request Jul 22, 2026
Union-resolved mise.toml lint group: fixtures:assert (this PR) + fixtures:check +
pricing:staleness (from awslabs#151/awslabs#155, now on main) all run in build.

Registered the two gcp-live-capture asserters that landed via awslabs#149/awslabs#156 after this
branch was cut (the PR's own registry-completeness guard correctly flagged them):
- gcp-live-capture/check_expected_baseline.py (smoke — already exits 1 cleanly)
- gcp-live-capture/check_expected_drift.py (smoke — added the same missing-artifact
  guard this PR applies to the other 4, replacing a FileNotFoundError traceback with
  a clean one-line FAIL + exit 1)

fixtures:assert now 10/10 (3 golden, 7 smoke). Full build green.
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