Remove cloud leftovers from the local edition console
Supersedes drafts 10170 and 10138 (one topic: AC-21/AC-23 quality on the real install).
Reproduction (Task 10133 walk of a real install, plus Task 10131's visual walk):
- Automation > Automations lists ~50 cloud system crons, enabled and running (billing, Stripe, SES, Bedrock, CloudWatch, headscale, node groups, NodeLink, node orders/rentals/SSM, project memory, support KB incl. a `jaah.ai` crawl — breaks AC-22 when it runs — SIEM, SOC 2 collectors, ECS, sign-up drafts).
- Settings > Tasks and Settings > Runners show a "Project memory" row.
- Directory > Secrets > New offers Slack, Telegram bot, Headscale, Stripe types.
- Audit > Workflows lists Slack/Telegram sends, token billing, tailnet retag/converge, Slack card settle.
- Settings > Providers names MicroVM nodes in gap text.
- Console calls removed `/api/operator/transfers/kinds` (404 in browser console on every page).
- jaahd polls `/api/agent/memory/bundle` every minute (ERROR on 404) and runs `tailscale status` each minute.
- Accounts list shows Org column and cross-org Share; "Others see your email" banner/Profile text and the "task notifications reached no one… Integrations" banner assume multi-user/Slack.
- Public tree still ships unreachable billing/Stripe web source (`components/billing/`, `lib/stripe.ts`, `@stripe/*`, `OrgSwitcherList`, `CreateOrgDialog`, `pages/customers/**`) — PRD §7 says no Stripe/billing in the public repo.
- Onboarding Setup guide steps must not point at removed surfaces.
Fix: register only local crons under `edition.IS_LOCAL` (pin the set with a test); hide the listed rows/types/columns/banners in local; stop the removed-route call and jaahd's memory/tailscale polls in local; untangle web imports so `tools/local_edition/manifest.toml` excludes the billing/org/customers source. Help link: keep docs.jaah.ai (user-initiated, not phone-home) — decided to avoid new surface.
Out of scope: cloud console behaviour (PRD §7: unchanged); API route table (pinned by `apps/api/tests/test_routers_cloud.py`).
Done means:
- A test pins the local cron set; none of the cloud crons above registers on a fresh install.
- No Settings tab, Secrets type, Audit workflow list, Accounts column or banner names a removed feature (component tests with edition mocked + screenshot of the built-tree console at desktop and 390 px).
- No browser-console 404 on any page of a fresh install; no recurring jaahd ERROR on an idle local node.
- `local-edition-check.yml` and `./dc check quick` green; cloud pages unchanged.
Outcome
Removed cloud leftovers from local edition: local-only crons (pinned; cloud rows deleted at boot), hidden cloud Secrets/Workflows/UI, no jaahd memory/tailscale polls, billing source out of public tree. Fresh install: 0 404s, 0 node ERRORs. #6959 merged, dev deploy green. Draft 10190 filed. Memory: none applied; proposed 1 gotcha.
Artifacts
Activity
- Ready
- Runner started
- Runner ended (done)