Skip to content

Declare explicit, receipt-verifiable objective lifecycle relations - #243

Merged
bigboateng merged 2 commits into
mainfrom
objective-lifecycle-relations
Aug 23, 2026
Merged

Declare explicit, receipt-verifiable objective lifecycle relations#243
bigboateng merged 2 commits into
mainfrom
objective-lifecycle-relations

Conversation

@bigboateng

Copy link
Copy Markdown
Contributor

Summary

  • Replace the kernel's overloaded BindObjectiveMutation with five explicit lifecycle relations — preserve, bind-initial, advance, replace, and clear — 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.
  • Record the declared relation in prescriptions (schema 3) and receipts (schema 5); receipt validation proves the relation from the receipt's own prior/requested/result binding lineage without recovering transition semantics from a program body. Invalid lifecycle relations are rejected before effects, and freshness stays bound to exact state, observation, program, authority, and objective binding.
  • Replace software delivery's binds_requested_objective policy flag with the declared relation: objective.bind configures the first objective over verified absence, and a new objective.replace core 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.
  • Add a domain-neutral ObjectiveLifecycleConformance suite 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.
  • Regenerate the checked catalog artifacts (64 executable transitions), update the repository contract pins, architecture and workflow docs, and add the release note.

Test plan

  • go vet ./... && go build ./... (boatstack)
  • go test ./... — full suite including the new TestObjectiveLifecycleConformance and dishonest-variant law tests
  • go test -race ./... — full race suite
  • python3 -m unittest discover -s .github/tests -p 'test_*.py' — repository contract, 69 tests
  • npm run test:flow-sdk && npm run docs:check and required-mode frontend conformance (BOATSTACK_REQUIRE_FLOW_FRONTEND=1)
  • Release-note policy (release_notes.py check-policy) over the exact range
  • Boatstack self-review converged with zero blocking findings; sealed attestation committed

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.
@bigboateng
bigboateng merged commit 8658bbe into main Aug 23, 2026
18 checks passed
@bigboateng
bigboateng deleted the objective-lifecycle-relations branch August 23, 2026 18:35
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