P7: project secrets keys and drills (forge-agent, app-skeleton) #118
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gate: "Projects work independently; recipient isolation tested". Status 2026-10-13: convention and code merged; the keys are the remaining work and are yours to hold.
Done
secrets/<name>.sops.ymlconvention, Secrets section in the app deployment contract,scripts/tests/test-project-key-isolation.sh, 8/8 with throwaway keys), forge-agent #3 (.sops.yamlplaceholders, ADR 0011, tests pinning env-over-.env), app-skeleton #1 (.env.example,.sops.yamlstub,staging-checkmoved toephemeral-largeandjfraeysd/infratypo fixed).go run ./dev testpasses in that state.Open (operator machine)
age1REPLACE_...placeholders in.sops.yaml.secrets/dev.sops.ymlfrom the current local.env(FORGE_TEST_URL,FORGE_TEST_REPO,FORGE_TEST_USER,FORGE_TEST_TOKEN); runsops exec-env secrets/dev.sops.yml -- go run ./dev integrationonce.secrets/dev.sops.yml; neither forge-agent key decrypts infra'ssecrets/vault.sops.yml(and vice versa). Record fingerprints in each repo's recovery doc..env.example.staging-checkTODOs per app (APP_REPO,APP_CHECK_EXTRA_VARS).docs/secrets-remediation.mdfrom "Code met, keys pending" to Met.P7 status 2026-10-14 (operator-confirmed): forge-agent keys done. Operator key in Keychain
sops-age/forge-agent, recovery key in personal Bitwardensops-age-recovery-forge-agentplus an offline copy;secrets/dev.sops.ymlencrypted from the local.env;sops exec-env secrets/dev.sops.yml 'go run ./dev integration'passes; the isolation drill passed with the real keys both ways.Found on the way and fixed:
sops exec-envtakes exactly two arguments (file, one quoted command), so the-- <command>form in ADR 0001/0011 and the contract runbook failed with "missing file to decrypt" (infra #146, forge-agent #4); the integration harness now allows 90 s per request (forge-agent #5,FORGE_TEST_TIMEOUToverrides) because the scratch forge is a swapping 1 GB host. Note: the integration test's header says it targets a disposable forge, but its repojfraeys/forge-agent-itlives on the production Forgejo.Still open: forge-agent: commit
.sops.yaml,secrets/dev.sops.yml,docs/secrets-recovery.mdon a branch; gate test 2 (an app deploys through the contract); app-skeleton staging-check TODOs and keys if it adopts the convention; decision for fetch_ml / afk_bot. The P7 row in docs/secrets-remediation.md is "Keys met; gate test 2 pending" (infra #147), not Met. The wizard is removed in #147 (migration-only).