Skip to content

P6d: every move is a change, and invariant registry v1.1 - #27

Merged
Ayushxsingh100 merged 6 commits into
mainfrom
feature/p6d
Nov 11, 2026
Merged

Ayushxsingh100 merged 6 commits into
mainfrom
feature/p6d

Conversation

@Ayushxsingh100

Copy link
Copy Markdown
Owner

P6d — every move is a change, and invariant registry v1.1

Inserted after P6c, before P7a. Branch from origin/main at d7c0333. No gate or mini-gate is claimed; the external review verdict is the approval record (C-28). Do not merge before it. After the verdict and the merge, the user tags registry-v1.1.

Decisions (docs/DECISIONS_REGISTER.md)

  • C-177 every move is a change — Decided (authors, 31 Oct 2026); C-129 → Superseded by C-177
  • C-178 registry v1.1 closes C-150, INV-SEC-001/002 version 2, C-155 out of scope — Decided (authors, 11 Nov 2026); C-150 → Decided (authors, 11 Nov 2026): see C-178
  • C-179 §2.9 wording — Decided (authors, 10 Nov 2026)
  • C-180 registry 1.1 stored as integer 2, verifier version stays "1" — Decided (user, 11 Nov 2026)
  • C-181 implementation readings — Proposed (P6d)
  • Also (step 0, docs only, user's request): C-71 → Decided (advisor, 11 Nov 2026), P9 and M6 removed from BUILD_SEQUENCE and PHASE_GATES; the P6 verdict text that was uncommitted on feature/p6c is committed unchanged.

What changed

  • Moves: IdentityMatch.moved, which is required and checked against the refs, so a moved pair can never be UNCHANGED. Impact flag ChangeFlag.MOVED. No new ChangeType. AddressOnlyIdentity is unchanged.
  • Registry v1.1: docs/specs/INVARIANT_REGISTRY_v1.1.md (3 change-log entries, each change marked [v1.1]). INVARIANT_REGISTRY_v1.md is byte-identical (its sha256 is pinned in a test). core/domain/registry_v1_1.py builds the v1.1 definitions. The verifier picks the §3.3 text from predicate.registry. SEC evidence for version 2 cites registry-v1.1.
  • Superseded expectations (C-177): four tests that pinned "a resource-level move is UNCHANGED" now expect MODIFIED. Three domain tests used two addresses as filler and now use one. TestRegistryGap now expects UNKNOWN.

Equivalence on TerraPreserve v1.0 (read-only)

Archive sha256 values equal those in TerraPreserve docs/D6_FREEZE.md (8ec1931). Indeterminate SEC rules that v1.1 makes possible but v1.0 does not: dev primary 0, dev alternate 0, test primary 0, test alternate 0. The dev split has 2 indeterminate rules (tp-v1-F3-0278) whose sources the archive does not record. I read that scenario's Terraform (not run, not changed; user's decision): neither rule has an IPv4 or IPv6 source.

Checks (Python 3.12.10, Windows)

  • dev.py test: 4152 tests OK (skipped=1)
  • pytest: exit 0, 1 skip (symlinks)
  • dev.py lint: black, ruff, mypy clean
  • Mutation checks: 9 of 9 killed. One (dispatch ignores the registry) survived at first; the test added in d882478 kills it.

Review verdict: (link to be added)

🤖 Generated with Claude Code

Ayushxsingh100 and others added 6 commits November 11, 2026 15:09
…moved (Doc 15 §13.3, §23; C-71)

The P6 verdict text was in the working tree of feature/p6c, not on main; it is
carried here unchanged. C-71: the advisor approved the free-of-cost route
(11 Nov 2026); AWS stays offline, so P9 and milestone M6 leave the build
sequence. Docs only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ided; P6d in the build sequence (Doc 01 §16; C-85)

C-177 every move is a change (authors, 31 Oct 2026); C-178 registry v1.1
closes C-150, C-155 out of scope (authors, 11 Nov 2026); C-179 the §2.9
wording (authors, 10 Nov 2026); C-180 the user's decisions on the integer
registry version and the verifier version; C-181 implementation readings
(Proposed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Flag.MOVED (Doc 07 §9; Doc 08 §6; C-177, C-76, C-127)

A pair made by a moved block or by the implicit count move is never
UNCHANGED: with equal fingerprints it is MODIFIED, decided by the move
evidence, and the match is moved. The domain refuses a flag that disagrees
with the refs. Impact carries such a pair with the flag MOVED. No new
ChangeType. Four tests that pinned C-129's "a resource-level move can be
UNCHANGED" now expect MODIFIED (C-177 supersedes it); three domain tests
used two addresses as filler and now use one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le clause; evidence cites the definition's registry (registry v1.1 §1.4, §2.9, §3.3; C-178 to C-181, C-62, C-85)

docs/specs/INVARIANT_REGISTRY_v1.1.md is the v1.0 text with the three
listed changes, each marked [v1.1] and in the change log; the v1.0 file is
unchanged (a test pins its sha256). core/domain/registry_v1_1.py builds the
v1.1 definitions; the verifier reads predicate.registry to choose the §3.3
text. TestRegistryGap now expects UNKNOWN; an unresolved port with
10.0.0.0/8 alone stays PASS. The test pipeline takes definitions and the
registry version as keywords (defaults unchanged). Formatting only in
identity.py and test_moves_are_changes.py from step 3 (black, ruff UP027).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… own registry (registry v1.0 and v1.1 §3.3; C-181 (2))

A mutation that made the dispatch ignore predicate.registry survived the
step 4 tests; this test runs the verifier table on the C-150 configuration
with the v1.0 and v1.1 definitions and kills it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…alue set), the P6d stub in PHASE_GATES, registry v1.1 in SPEC_INDEX (Doc 15 §13; C-178 to C-181, C-85)

Archive sha256 equal to TerraPreserve docs/D6_FREEZE.md (8ec1931). Test
split: no indeterminate SEC ingress rule. Dev split: two, whose sources
the archive does not record; scenario tp-v1-F3-0278's Terraform was read
(not run, nothing changed; user's decision) and neither rule has an IPv4
or IPv6 source. No gate is claimed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Ayushxsingh100
Ayushxsingh100 merged commit 1c3d72b into main Nov 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant