Refuse production startup when the Heimdall app secret is blank #83

Merged
heimdall merged 2 commits from heimdall/appsecret-empty-refusal into main 2026-11-12 19:27:59 +00:00
Member

Cuts follow-up heimdall-body:bifrost-appsecret-empty-refusal (residual of #78).

  • StartupConfigurationValidator, non-Development/Testing branch: a blank resolved HeimdallOptions.AppSecret (from AppSecretFile or AppSecret) is a startup failure naming both options, never a value.
  • Tests (HostTrustTests, through the validator): blank and whitespace refuse in Production; present passes and the refusal never echoes it; Development and Testing start blank. Red before the cut (2 failing), green after.
  • Docs: heimdall-app-secret-file.md.
  • Full suite 1430 pass, 0 fail (with VOIDBOT_CULTLIB_ROOT set).
  • Deploy note: a build with this refuses to start without the key. Eureka's list keeps the key in bifrost.env until the file is proven, so its custody states (a) and (b) both pass.

🤖 Generated with Claude Code

Cuts follow-up heimdall-body:bifrost-appsecret-empty-refusal (residual of #78). - `StartupConfigurationValidator`, non-Development/Testing branch: a blank resolved `HeimdallOptions.AppSecret` (from `AppSecretFile` or `AppSecret`) is a startup failure naming both options, never a value. - Tests (HostTrustTests, through the validator): blank and whitespace refuse in Production; present passes and the refusal never echoes it; Development and Testing start blank. Red before the cut (2 failing), green after. - Docs: heimdall-app-secret-file.md. - Full suite 1430 pass, 0 fail (with VOIDBOT_CULTLIB_ROOT set). - Deploy note: a build with this refuses to start without the key. Eureka's list keeps the key in bifrost.env until the file is proven, so its custody states (a) and (b) both pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A missing secret silently switched Discord and Patreon member sign-in off.
Outside Development and Testing the validator now fails naming
Heimdall:AppSecretFile and Heimdall:AppSecret, never a value.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Member

Soul pass on 1739d55 (fresh agent): promise holds. Real WebApplicationFactory start through Program.cs: Production refuses with neither option, passes with env or file secret, whitespace refuses, empty file stops earlier in ResolveAppSecret, Dev/Testing start; mutants (delete check, IsNullOrEmpty, check in Dev branch) each fail tests; full suite 1430/1430. Two findings, both fixed in the follow-up commit: (Medium) deploy-main-to-live.md still said startup does not fail on a missing key; (Low) the no-echo test never fired the new check, renamed to what it checks. The verdict could not be admitted to Huginn because the cut carries no cut_spec/cut_report.

Soul pass on 1739d55 (fresh agent): promise holds. Real WebApplicationFactory start through Program.cs: Production refuses with neither option, passes with env or file secret, whitespace refuses, empty file stops earlier in ResolveAppSecret, Dev/Testing start; mutants (delete check, IsNullOrEmpty, check in Dev branch) each fail tests; full suite 1430/1430. Two findings, both fixed in the follow-up commit: (Medium) deploy-main-to-live.md still said startup does not fail on a missing key; (Low) the no-echo test never fired the new check, renamed to what it checks. The verdict could not be admitted to Huginn because the cut carries no cut_spec/cut_report.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Bifrost!83
No description provided.