Scrub internal names from CE tree
Epic: Security audit of development keys and container artifacts. This child = Architecture C7 (PRD R8). It waits for "Cut aws and bedrock from CE tree": most cloud env var names leave the tree with that cut, and this child scrubs what is left.
## Original requirement (verbatim, epic body)
- "Internal architecture names leak: the path `infra/jaah/terraform/modules/ecs/main.tf` and cloud environment variable names. Low risk."
- "It should not break anything in prod or dev"
Operator decision D6: scrub them from the CE tree and remove the sensitive allowances.
## Approach (Architecture C7)
- Remove the two `[[sensitive.allow]]` entries at `tools/community_edition/manifest.toml:166-174`.
- `apps/api/app/credential_keys.py`: reword the cloud refusal to "the environment's KMS key ARN (`CREDENTIAL_KMS_KEY_ID`)" with no repo path. The string ships whichever branch runs.
- `apps/api/app/config.py`: reword both terraform path mentions (`modules/ecs/main.tf` and `session-analytics.tf`) the same way. Comments become prose without the path, or point to `docs/architecture.md`, which does not ship.
- Cloud env var names: for each env var that the ECS task definition sets and that no shipped module reads, grep the built tree. Scrub every hit outside a reader.
## PRD R8 — Scrub internal names from the CE tree (A5; D6) — verbatim
- AC8.1 No shipped CE file contains `infra/jaah/terraform` paths or cloud-only environment variable names; the two `[[sensitive.allow]]` entries permitting `infra/jaah/terraform/modules/ecs/main.tf` (for `config.py` and `credential_keys.py`) are removed so the mirror's sensitive check enforces it. Cloud error messages may keep them (edition-specific text).
Credentials & reach:
- Quick/full gate, pytest, CE tree build + `check_tree`, installer harness, tree console build | Worktree only (`./dc`, `tools/community_edition/*.py` present) | verified — files present on h2; no credential needed
- PR checks / merge lane / Jaah Deploy run status | `jaah-forge` (pre-authenticated for the task) | verified — read verb `pr list` succeeded from h2
- Dev console boots, sign-in, Slack/Telegram settings, attachment upload (AC2.3, AC4.5, AC9.2) | `org/console/dev-login` (credential_get succeeded); environment: dev control plane | **deferred** to a node with reach. dev timed out from h2 (prod `app.jaah.ai` answered 200). Operator answer A5: a green Jaah Deploy is the gate, and the browser check runs on a node that reaches dev; a builder without reach records it deferred
Out of scope: PRD §5, verbatim:
- Do NOT change `infra/community-edition/node/install_clis.sh`'s vendor `curl https://claude.ai/install.sh | bash` (D8; deferred follow-up).
- Do NOT sign or digest-pin the cloud deploy images pushed by Jaah Deploy, nor add deploy-time verification (D3 chose CE + base images only).
- Do NOT add a CI/terraform guard over ECS env (D7 verify-only).
- Do NOT cosign-sign `SHA256SUMS` (D4).
- Do NOT remove Slack, Telegram, headscale, AWS, KMS, S3 or Bedrock from the cloud edition — the prune is CE-tree only.
- Do NOT change the session-secret / dev-seed / insecure-agent refusals' semantics or the `FIXTURE_APP_ENVS` set.
- Do NOT touch `infra/jaah/terraform` resources (only read them for R2).
- Do NOT change port binds, setup-loopback rule, cookie flags or rate limits (A6 positives).
- Architecture boundary: no new `[[sensitive.allow]]` entries; do not rename env vars a shipped module reads; do not change refusal semantics — wording only.
Done means:
- AC8.1 — `grep -rn "infra/jaah/terraform" <built CE tree>` prints nothing; the two allowances are gone from `tools/community_edition/manifest.toml`; the mirror check (sensitive) for `jaah-ce` green with them gone; the report lists each ECS-set env var name grepped in the built tree and shows that every remaining hit is a reader; the reworded refusals still name the variable to set, so they stay actionable (existing refusal tests green).
- AC9.1 `./dc check quick` green on the branch; merge lane `./dc check full` green.
- AC9.2 The PR's Jaah Deploy succeeds to dev; dev console loads and a user can sign in. (browser part deferred — dev unreachable from h2; operator A5: green Jaah Deploy is the gate)
Activity
- Draft
- Ready