Confirmed-live, verified 2026-08-10 15:37 UTC against run 31404558326.
tests/integration/test_demo_contract.py:107 (and 2 sibling assertions) pin len(meta["free_commodities"]) == 9. The demo API has intentionally served 37 free codes since api#5207 merged 2026-07-28 (app/controllers/v1/demo_controller.rb:39 FREE_COMMODITIES expansion - gas hubs/JKM/futures/DI still gated, so this is a stale pin, not a paywall leak).
Every Scheduled SDK Synthetic run since has failed: 60 of the last 60 hourly runs red, nobody acting - the monitor now cries wolf hourly and would mask a real SDK regression.
Fix (3 lines): assert the free list is a superset of the original 9 core codes and >= 9, mirroring the un-pinned catalog-count pattern already in the same file.
Same bug class the file itself warns about two lines above the pin. Labeled from measured impact: the synthetic is our only continuous SDK-against-production check and it has been dark 2.5+ days.
🤖 Generated with Claude Code
Confirmed-live, verified 2026-08-10 15:37 UTC against run 31404558326.
tests/integration/test_demo_contract.py:107(and 2 sibling assertions) pinlen(meta["free_commodities"]) == 9. The demo API has intentionally served 37 free codes since api#5207 merged 2026-07-28 (app/controllers/v1/demo_controller.rb:39FREE_COMMODITIES expansion - gas hubs/JKM/futures/DI still gated, so this is a stale pin, not a paywall leak).Every Scheduled SDK Synthetic run since has failed: 60 of the last 60 hourly runs red, nobody acting - the monitor now cries wolf hourly and would mask a real SDK regression.
Fix (3 lines): assert the free list is a superset of the original 9 core codes and
>= 9, mirroring the un-pinned catalog-count pattern already in the same file.Same bug class the file itself warns about two lines above the pin. Labeled from measured impact: the synthetic is our only continuous SDK-against-production check and it has been dark 2.5+ days.
🤖 Generated with Claude Code