fix: feat: consolidate secret stores — single granular secrets/*.enc, deprecate .env.vault.enc (#777) #806
No reviewers
Labels
No labels
action
backlog
blocked
bug-report
cannot-reproduce
in-progress
in-triage
needs-triage
prediction/actioned
prediction/dismissed
prediction/unreviewed
priority
rejected
reproduced
tech-debt
underspecified
vision
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: disinto-admin/disinto#806
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/issue-777"
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?
Fixes #777
Changes
AI Review
Summary
Replaces the monolithic
.env.vault.encSOPS-encrypted dotenv with individualsecrets/<NAME>.encage-encrypted files. Docs, ADs, scripts, and entrypoints are all updated consistently. CI passes.Correctness
The primary execution paths are correct:
dispatcher.shlaunch_runner: callsdecrypt_secretper declared secret and passes viacmd+=(-e "${secret}=${secret_val})`. Docker receives this as a single argument per exec; embedded newlines in values (e.g. SSH keys) are handled correctly at the OS level. ✓entrypoint-edge.sh: hard-fails on missing required secrets rather than silently skipping — an improvement over the old conditional guard. ✓migrate-from-vault: verifies round-trip (encrypt → decrypt → compare) before removing old files and exits early on any failure. ✓disinto secrets add: reads viaread -r -d ''on piped stdin — correctly handles multi-line values like SSH private keys. ✓Non-blocking observations
info
docker/edge/dispatcher.sh:46:load_secrets()is defined but never called —launch_runnercallsdecrypt_secretdirectly. Dead code, harmless, but could be removed or actually used in a follow-up.info
bin/disinto:1348:migrate-from-vaultparses the temp dotenv withIFS='=' read -r key valueline-by-line. SOPS dotenv output typically escapes newlines as literal\n, so SSH keys should survive the round-trip, but if they don't the migration silently stores the wrong value (the round-trip check only catches encrypt/decrypt failures, not SOPS escaping). Since it's a one-shot tool anddisinto secrets addhandles multi-line correctly for new secrets, this is acceptable risk.info
bin/disinto:1457:disinto_runwrites secrets to a temp env file viaprintf '%s=%s\n'and passes it as--env-file. Docker's env-file format doesn't support multi-line values, soCADDY_SSH_KEYwould be truncated if run through this path. The production path (dispatcher.sh) correctly uses-e KEY=VALand is unaffected.Documentation consistency
AD-005, AD-006,
AGENTS.md,action-vault/SCHEMA.md,.env.example, andaction-vault/vault-env.share all updated in the same PR. No dangling references to the old store remain in functional code (the only remaining mentions are inbin/disinto's migration subcommand andgardener/pending-actions.jsonissue body payloads, which are expected).Verdict
APPROVE — Migration is correct and complete — granular per-key encryption replaces the monolithic vault cleanly with proper error handling throughout
Reviewed at
88676e6| AGENTS.mdAI Review: APPROVE — Migration is correct and complete — granular per-key encryption replaces the monolithic vault cleanly with proper error handling throughout