docs(spec): fail closed across config, adapters, and the installer - #25
Draft
antstanley wants to merge 1 commit into
Draft
docs(spec): fail closed across config, adapters, and the installer#25antstanley wants to merge 1 commit into
antstanley wants to merge 1 commit into
Conversation
This was referenced Aug 5, 2026
antstanley
force-pushed
the
spec/fail-closed-config-and-adapters
branch
2 times, most recently
from
August 5, 2026 08:22
820316a to
64ec11c
Compare
antstanley
changed the base branch from
main
to
spec/resolve-config-placeholders
August 5, 2026 08:22
antstanley
marked this pull request as draft
August 5, 2026 08:25
This was referenced Aug 5, 2026
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
antstanley
force-pushed
the
spec/fail-closed-config-and-adapters
branch
from
August 5, 2026 11:29
64ec11c to
8879c5f
Compare
This was referenced Aug 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
Stacked PR 3 of 16 — part of stack #35, which targets
main.Base: #23 (
spec/resolve-config-placeholders) · Followed by: #24This PR's diff shows only its own change. Merge the stack bottom-up; do not merge this before its base.
Why it sits at position 3: Layers closed-domain config types onto #23's seam and replaces the
Validation at loadsection #29 restored. Merges before #24, which then supersedes the audit defaults in its committed-default block.Scope of this PR
This PR currently carries the change spec. It will also carry the implementation plan and the build work for that spec — plan and code land as later commits on this same branch, so the spec, its plan, and its implementation review and merge as one unit.
Review order within the PR: spec first, then plan, then implementation.
Cross-cutting change spec establishing a fail-closed principle and applying it to seven confirmed fail-open sites.
The rule. A security control that cannot be evaluated must deny; a configuration that cannot be validated must refuse to start; a control that could not run did not pass.
The sites.
registration.modecompared by string equality against a single literal, so an operator typo silently re-opens just-in-time registration and any anonymous client with a genuine IdP account provisions itself an account plus a 30-day session.issuer/audiencedefaults on validation-critical values.http://where TLS should be required.Each gets a concrete rejection point — startup for everything configuration-shaped, plus a derived-from-key-material algorithm cross-check. The structural preventive is hardening Option 2:
RawConfig/Configtwo-stage parse, oneresolve()every entry point calls, typed enums and newtypes replacing bare strings, with string equality against a single literal named as the anti-pattern being removed.Compatibility is stated as a table of exactly which deployments stop booting and what the operator does, with a two-phase permissive-warning rollout for the config half only.
Two judgment calls worth reviewing.
examples/aws-web/config/oidc-exchange.tomlusesECDSA_SHA_256andexamples/ecs-fargate/config/fargate.tomlusesECDSA_SHA256— both AWSSigningAlgorithmSpecnames that the adapter's closed match rejects. Either reference deployment boots, passes health checks, and 500s on every sign-in, which strongly suggests neither has been run end to end.Pre-existing divergence found:
changes/merged/2026-07-01-complete_config_loading.mdis markedMerged, but itsValidation at loadsection never reached06-configuration.md— while the code does implement it. The spec treatsValidation at loadas an Add that folds in the shipped checks, resolving the divergence on merge.Overlapping sites are cross-referenced to the parallel config-placeholder, admin-plane and runtime-parity specs rather than restated.
Drafted with the
spec-creatorplugin from a deep security scan of the repository at53cbdec9. Spec only — no source changes.