| chore(plan-catalog): D2 — delete the BASIC_TIER_* env overlays from every serving identity (#13285) * chore(plan-catalog): D2 — delete the BASIC_TIER_* env overlays from every serving identity plan_catalog.json is now the only source of plan quotas. The legacy overlays outranked the catalog at runtime (utils/subscription.py _basic_transcription_overlay), which is how the prod API plane advertised 600 free minutes while the listen plane enforced 300. Remove them from both backend-listen charts and both pusher charts; declare them forbidden_env on the four Cloud Run conversation services so the deploy strips them (--remove-env-vars in deploy-backend-stack and sync-backfill-lifecycle) and the live check finds them absent. The _legacy_overlay bridge stays until the prod dispatch proves the deployed values gone. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * test(plan-catalog): lane the D2 retirement checks by cost The subscription-reload case is a per-test fresh module reload and belongs in the slow-guardrail lane; the two cases that drive the real workflow validator over the repository manifest and composite actions stay in the unit lane under a duration-allowlist entry with the reason. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(plan-catalog): strip the retired overlays in the backfill clone step and run the catalog check in CI Cubic review follow-up on the D2 retirement: - The backfill-runtime clone step reads live backend-sync (which still carries the BASIC_TIER_* overlays) and strips vars via REMOVE_ENV_VARS; the four retired names were missing there, so the clone would re-set them on backend-sync-backfill in the same deploy that removes them, nullifying the removal. Add the four names to REMOVE_ENV_VARS and extend the static tripwire to cover REMOVE_ENV_VARS entries. - test_catalog_is_the_only_source_when_no_overlay_is_present is @pytest.mark.slow, but the slow-guardrail lane only runs files listed in tests/slow_guardrail_manifest.txt, so the check executed nowhere. List the file so the lane runs it. Verified: 15 passed (full file); slow lane selects 1/1, unit lane deselects it; black --check clean. * fix(plan-catalog): select the D2 retirement suite from the files it guards; state the scope it actually covers Adversarial review follow-up (2026-09-09): - The chart scan and the deploy-action scan were not selected by the changes they guard. select_backend_unit_tests.py returns False for backend/charts/** except monitoring sources, so re-adding BASIC_TIER_MINUTES_LIMIT_PER_MONTH to a GKE chart passed CI, and the GKE plane has no forbidden_env backstop at deploy time either. Register tests/unit/test_plan_quota_env_retirement.py in workflow_contracts.json under backend_cloud_run_deploy and rendered_gke_deployment_identity, add .github/actions/sync-backfill-lifecycle as a source there, and add that path to backend-unit-tests.yml (it was not in the workflow's paths at all, so a PR touching only that action never started the backend unit job). Verified with the real selector: all four charts, both composite actions and runtime_env.yaml now select the suite; before, none did. - plan-source-of-truth.md claimed flatly that no serving identity carries an overlay. Cloud Run desktop-backend is a ninth serving identity, is not in the cloud_run.services manifest and has no forbidden_env support, so it is covered by evidence not by a gate. Read live (dev + prod, read-only bots): it carries none of the four names, and no desktop router reads a plan transcription limit. Doc now says that instead of the absolute. Tests: retirement suite 15 passed; retirement + runtime-env + rendered-contract + preflight neighbours 183 passed; test_workflow_contracts.py 26 passed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * chore: drop merge-hook Dart format noise from D2 overlay PR The main merge ran the Dart formatter on incoming app files and made this branch look like it touched INV-DATA-1 paths. Restore those files to origin/main so the PR stays quota-overlay-only. Failure-Class: none * chore(plan-catalog): regenerate composed runtime_env after main merge Keep LLM_GATEWAY_ACCOUNTING_ENABLED from #13330 and the D2 BASIC_TIER overlay retirement, then compose the checked-in manifest. Failure-Class: none --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: David Zhang <9387252+Git-on-my-level@users.noreply.github.com> | 2 天前 |