Repository navigation
Conversation
doublewhy
force-pushed
the
1434-typed-runtime-domain
branch
from
October 9, 2026 13:25
6e425be to
9a80447
Compare
doublewhy
marked this pull request as ready for review
October 9, 2026 15:28
9 of 11 tasks
doublewhy
force-pushed
the
1434-typed-runtime-domain
branch
from
October 13, 2026 06:34
9a80447 to
5672244
Compare
doublewhy
marked this pull request as draft
October 13, 2026 19:39
… an untyped string RuntimeDomain is a str enum, so a backend entry whose domain was the plain string "provisioning" passed the value comparison in the plan-ownership check and was committed. The control-plane submission and credential paths compare the domain by identity, so every later planner-authorized plan for that resource was refused as incoherent, and the resource could not be torn down. Backend snapshot admission now requires a RuntimeDomain member, next to the typed profile-binding check. Two test helpers that built backend results with string domains now use RuntimeDomain.PROVISIONING, so the closed-excess test keeps failing for closed excess.
Collected by running the pinned specification artifacts through the production pipeline, replaying the 10 retained formal cases with replay_case, the 4 production cases with their raes processor argv, and the 14 participant test functions against this branch's source, then recorded with python -m tools.research_capture record.
doublewhy
force-pushed
the
1434-typed-runtime-domain
branch
from
October 14, 2026 02:52
5672244 to
ef84ce3
Compare
doublewhy
marked this pull request as ready for review
October 14, 2026 03:56
This branch has not been deployed
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.
Summary
SnapshotEntry.domainis typedRuntimeDomain, astrenum, but backend snapshot admission never checked it, and_identity_violationcompares by value ("provisioning" == RuntimeDomain.PROVISIONING). Ondev, a provisioner result with plain-string domains was committed by bothRuntimeManager.applyand the control plane; identity checks on submission and credential paths then refused the planner-authorized teardown ofprovision.node.web(runtime.plan-resource-incoherent).Admission now refuses an entry whose domain is not a
RuntimeDomainmember. This source is evidence-bound, so both research families get new captures (docs/develop/research-captures.md). Retained outcomes, classifications and claim limits are unchanged.Requirement UIDs
ASR-532(Runtime Backend Result Integrity):backend-result-admission.md: a backend "MUST NOT rewrite" the plan-owned runtime domain;ASR-532/requirement.mdalready listsbackend_snapshot_contracts.pyas IMPLEMENTS. No scope file; no requirement record changes.Related Issues
Closes #1434
ADR Impact
backend-result-admission.md.Changes
_domain_violation, checked first in_entry_violation, requirestype(entry.domain) is RuntimeDomain, else "Backend snapshot contains an untyped runtime domain.", which the shape gate turns intoruntime.backend-contract-invalid, keeping the predecessor._returned(test_issue_1200) and_snapshot_from_plan(test_issue_1067) now buildRuntimeDomain.PROVISIONING, so the closed-excess test still fails for closed excess, and asserts that message.python -m tools.research_capture record): specification-coveragecapture-0be8c669…and formal-validationcapture-86296e4c…, with receipts. Bound to implementation digest719a546cff12at source commit0d85e547,checkout_stateclean; no numbered file, index or pin changes.Issue verification-plan bullets, verbatim; "fails without" =
backend_snapshot_contracts.pyfrom dev:RuntimeManager.applyis refused withruntime.backend-contract-invalidand leaves the snapshot unchanged.backend_snapshot_contracts.py:_domain_violationtest_issue_1434_typed_runtime_domain.pymanager case: committed (assert True is False)canonical / test-shard, run 38503323059provision.node.web.runtime.plan-resource-incoherentcanonical / test-shard, run 38503323059devbefore the fix.test_issue_1200_mixed_runtime_constraints.py,test_issue_1067_resolved_realization_authority.py,test_issue_158_runtime_result_integrity.pyand thetest_issue_1204_result_*modules as targeted modules, with and without-m integration._returned: 13 of 46test_issue_1200cases fail; reverted_snapshot_from_plan: closed-excess message assertion failscanonical / test-shard: 175 passed (178 with the #1434 module);-m integrationselects noneorigin/dev.fast-feedback: passed (Test Plan)Test Plan
uv run --project implementations/python --frozen --all-extras python -m pytest implementations/python/tests/test_issue_1434_typed_runtime_domain.py -q -p no:cacheprovider: 3 passed (2 fail without the fix).Evidence: a shared collector (
collect_research_evidence.py, kept outside this repository) ran on the clean, rebased tree. It ran the 6 pinned specification artifacts through_execute_artifact(0 rejections; 38 of 42 stages passed, 4 preregistered non-execution), thenrecompute_analysis(10 of 10 load-bearing checks pass). It replayed the 10 retained formal cases withreplay_case, ran the 4 production cases with theirraes processorargv and the 14 participant test functions (18 passed), thenrecompute_claim_results. All 20 observations match their expected outcomes. The only drift from dev's templates is in the formal snapshot: replay commandretained-case-replaywith its real argv, and Python 3.12.3. Both checkers passed at the head and on a scratch worktree ofgit merge-tree --write-tree origin/dev HEAD.nox -s contracts -- --base-rev origin/devpassed.nox -s verify-fast-feedback -- --base-rev origin/devpassed and ran the three changed test modules (79 passed).nox -s lintpassed.CI at head
ef84ce34(dev base 348c490): run 38503323059, 28 checks pass,deployskipped, SonarCloud passed.Ground Control Checks
make policy; requirement governance skipped)Traceability
Checklist