Declare explicit, receipt-verifiable objective lifecycle relations - #243
Merged
Conversation
Replace the kernel's overloaded bind mutation with five explicit lifecycle relations — preserve, bind-initial, advance, replace, and clear — each with its own capability and receipt-provable lineage. Prescriptions and receipts record the declared relation (schemas 3 and 5) and receipt validation proves it from binding lineage alone. Software delivery replaces the binds_requested_objective flag with the declared relation, keeps objective.bind for initial configuration over verified absence, and adds an explicit objective.replace transition for different-objective reconfiguration (admission schema 10, receipt schema 14). A new domain-neutral ObjectiveLifecycleConformance suite proves the relations over a multi-revision register, including concurrency, staleness, failure, replay, restart, receipt-chain, and dishonest-implementation laws.
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
BindObjectiveMutationwith five explicit lifecycle relations —preserve,bind-initial,advance,replace, andclear— each requiring its own capability (objective.bind,objective.advance,objective.replace,objective.clear). Initial binds require verified absence and may bind any valid externally versioned revision; advances keep the objective identity and move to exactly the next revision, rejecting gaps, downgrades, duplicates, overflow, and same-revision fingerprint substitution; replacements must be declared and rebind a different identity; clears remove an existing binding; preserve cannot silently change one.binds_requested_objectivepolicy flag with the declared relation:objective.bindconfigures the first objective over verified absence, and a newobjective.replacecore transition declares different-objective reconfiguration, projected through the compiler into the kernel's replace relation. Admissions bump to schema 10 and delivery receipts to schema 14 with exact committed-history readers for the previous shapes and no aliases or shims. Untargeted canonical selection still reconfigures a supplied different objective — now through the declared replacement.ObjectiveLifecycleConformancesuite over a multi-revision register: valid binds, advances, declared replacements, and clears; rejection of every invalid lineage before effects; per-relation capability isolation; concurrent successors settling exactly once; stale and pre-clear prescriptions; verification and commit failures that never advance accepted state; replay and cross-instance replay rejection; restart reconstruction; and receipt-chain continuity. White-box law tests prove torn commits, blind concurrent commits, cleared-binding resurrection, relabeled relations, and restart state resets fail the shared laws.Test plan
go vet ./... && go build ./...(boatstack)go test ./...— full suite including the newTestObjectiveLifecycleConformanceand dishonest-variant law testsgo test -race ./...— full race suitepython3 -m unittest discover -s .github/tests -p 'test_*.py'— repository contract, 69 testsnpm run test:flow-sdk && npm run docs:checkand required-mode frontend conformance (BOATSTACK_REQUIRE_FLOW_FRONTEND=1)release_notes.py check-policy) over the exact range