Repository navigation
Conversation
stacknil
force-pushed
the
stacknil/authority-boundary-increment
branch
from
October 15, 2026 10:31
1983ff1 to
e5c6105
Compare
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.
Problem
An otherwise authorized signer request can expire while waiting for the shared transaction lock. Both service entrypoints previously sampled time before that wait, allowing admission or finalization to proceed using stale authorization time.
Invariant
Admission and finalization sample authorization time after acquiring the shared transaction lock. Expired OIDC is rejected before creating admission/publication state. An expired evaluation with valid execution identity still consumes its finalization JTI before refusal, preserving the replay contract.
Design decision
Move the existing clock read into
store.transaction()inissue_evaluation()andfinalize_evaluation(). Add deterministic contention tests using the real shared lock, an Event, and an injected logical clock. The affected files are the signer service, its new time-boundary tests, and two design records underdocs/design-decisions/.Threat/failure model
The demonstrated schedule is an authorized request queued across token or evaluation expiry. It is reproduced locally against the reference/mock signer; production reachability is unproven. Freshness is established at transaction entry. A future blocking adapter or remote publisher needs its own publication-time deadline contract.
Rejected alternatives
Compatibility
Valid requests, idempotent ticket timestamps, exact head/policy binding, publication provenance, JTI ordering, and UNKNOWN reconciliation retain their contracts. Requests whose credentials expire in the queue now fail closed. No schema, dependency, workflow, protected context, policy bundle, or baseline changes are included. The main residual risk is interpreting transaction-entry freshness as a remote publication deadline.
Validation
Independent local reproduction and validation completed on this exact diff:
python -m unittest tests.test_repo_sentinel_signer_time -v: four methods passed, including admission/finalization subcases.python -m unittest discover -s tests -p 'test_repo_sentinel_signer*.py': 80 passed.python -m unittest discover -s tests -p 'test_*.py': 258 run; 253 passed and five platform skips. The skips concern symlink availability and a POSIX-only bootstrap test.See
docs/design-decisions/THREAT-BOUNDARY-AUDIT.mdanddocs/design-decisions/SECURITY-INCREMENT.mdfor the full reproduction and evidence limits. Operational notes in those records describe the audit-time state.This security-boundary change remains draft for delayed review. Remote CI on
e5c6105passed all seven visible checks, including the changed-file gate, synthetic PASS/FAIL/redaction contract, baseline audit, taxonomy/front matter, and changed-Markdown lint. Final remote diff review matched the independently reviewed content; GitHub uses different function labels in two diff hunk headers.GitHub now verifies this signed commit (
verified: true,reason: valid) using the account's public noreply identity and the original GPG key. The identity metadata correction preserves the reviewed source tree, parent, and commit message.Rollback
Revert this commit. No migration, deployment, or policy change is needed; reverting also restores the demonstrated stale-time weakness.