Provider grid residue: retire jaahd plan_gate
Two leftovers from epic 9912 (provider grid as a plan term), found by its Finish (9928).
## 1. Dead `plan_gate` capability in the node catalogue (deferred F2)
Reproduction: `rg -n "plan_gate" apps/ --glob '!**/migrations/**' --glob '!**/tests/**'` → only `apps/jaahd/agent_providers.py:212-214` (field + comment naming `non_claude_engines` and `provider_auth_policy.py::engine_on_plan`, both deleted by PR #6880) and the values at `:518, :628, :801, :1016`. Nothing in `apps/api` or `apps/web/src` reads it any more (C1 dropped `plan_gate` from `apps/web/src/types.ts`).
Cause: the epic's PRD forbade touching `apps/jaahd`, so C1 left the field (Architecture §1.6, F2).
Fix: delete the `plan_gate` field, its comment and every `plan_gate=` value from `apps/jaahd/agent_providers.py`. First confirm the API side tolerates the field's absence on the node wire (the capabilities model the API parses: grep `capabilities` in `apps/api/app`); if any API model REQUIRES it, make that field optional/ignored in the same PR. Leave the frozen migration `202610251500_provider_grid.py` untouched.
## 2. Grammar slip on the registry gate
Reproduction: on dev as operator with "All orgs", open `/agents/registry` → the page reads "ACP registry agents runs inside one org". Cause: `apps/web/src/lib/planSwitches.tsx:95` labels the gate `'ACP registry agents'` (plural, set by PR #6887) and `:177` renders `${feature} runs inside one org`.
Fix: make the sentence agree for every label (e.g. label `'ACP registry'`, or render "… run inside one org" for plural labels) — pick the smaller change; update `apps/web/src/lib/planSwitches.test.tsx`. Also make the `noneHint` at `:181` say where the switch now lives for the grid gates: "Turn it on in an org's Overrides › Providers under Customers." (per `docs/standards/ui-copy-standards.md`).
Out of scope: dropping DB columns (separate follow-up 9928-provider-grid-contract), any resolver/door logic, the Providers tab layout, other `planSwitches` labels' wording beyond the agreement fix, any other jaahd capability field.
Done means:
| # | Criterion | Verify |
|---|---|---|
| 1 | No `plan_gate` left outside migrations/tests | `rg -n "plan_gate" apps/ --glob '!**/migrations/**' --glob '!**/test_migration_*'` → only unrelated hits (e.g. slack/telegram `plan_gate` tests that are about a different gate) or none; jaahd tests green (`./dc test` for jaahd per skill testing) |
| 2 | Node → API capability report still accepted | API test that parses a node catalogue without `plan_gate` passes |
| 3 | Registry gate copy is grammatical and points to Providers | unit test asserts the new sentence; browser on dev `/agents/registry` as operator, All orgs → no "agents runs" |
| 4 | Gates | `./dc check quick` green; merge lane `./dc check full` green; `python3 tools/check_context.py` pass |
Outcome
Retired jaahd plan_gate (API reads the module directly, no wire change); plan-picker title now agrees ("ACP registry agents run…") and grid gates point to Overrides › Providers. Quick gate + tests green, visual check OK; #6890 merged a5f926beb, Jaah Deploy green. Memory: used mem-25288.
Artifacts
Activity
- Ready
- Runner started
- Runner ended (done)