Skip to content

feat: prove cross-entity read-guards in composite verify - #420

Draft
rita-aga wants to merge 13 commits into
mainfrom
grok/composite-budget
Draft

feat: prove cross-entity read-guards in composite verify#420
rita-aga wants to merge 13 commits into
mainfrom
grok/composite-budget

Conversation

@rita-aga

Copy link
Copy Markdown
Collaborator

Why

temper verify treated a cross_entity_state guard as a free boolean unless a trigger connected the two entities. A guard that only reads another type (Katagami: CompleteSynthesis requires DesignLanguage UnderReview) never entered the joint model. INCOMPLETE also exited 0.

Rita: the joint proof has to finish at spec-check time. Runtime 409 is not that proof.

What

  • Seed cover and plan scope close over cross_entity_state guards as well as trigger edges.
  • temper verify --specs-dir A --specs-dir B unions both apps into one composite (curation + commons).
  • INCOMPLETE fails the command.
  • Tests: File in dir A / Workspace in dir B composes to [File, Workspace], 4 joint states, VERIFIED.

Not in this PR

Instance multiplicity (N copies of one type in the joint BFS). That is not required for the Katagami actor experiment. Runtime already creates N directions.

Test plan

  • cargo test -p temper-verify --lib composite
  • cargo test -p temper-cli
  • pre-push full suite

Composite seed cover and plan scope now close over cross_entity_state
guards, not only trigger edges, so a guard that only reads another
entity is concrete in the joint model. INCOMPLETE fails the command.
temper verify accepts repeated --specs-dir so two apps compose into
one joint proof.
Keeps the production file under the 500-line ratchet after the
multi-dir composite proof landed.
A default max_counter of 2 made CompleteResearch (min 3 directions)
unsatisfiable. Scan MinCount/MaxCount/ListLengthMin and inhabit that
universe so a machine the spec can run is a machine the checker can too.
Plan-build failure (unknown trigger target) was printed as
"BFS budget exhausted" with 0 states. That hid the real finding:
CurationDirection joins DesignLanguage, which is not in a
curation-only --specs-dir. Print other_violations instead.
Axum's 2MiB default 413'd a synthesize trajectory (8.6MiB).
Same class as blob ingest.
…e states

Composite BFS was Incomplete on fat catalog types because the joint
vector carried every local bool/counter/list and Stateright's
target_state_count counted generated edges. Project each entity to the
fields the join actually reads (status) and walk unique joint states.

Katagami both-dirs: 342176 unique, VERIFIED, no dropped reactions.
Regression that the status-join composite is not vacuous: firing
ReviewAgent.RecordVerdict from DesignLanguage.SubmitForReview while the
reviewer is still SubmissionReceived must be VIOLATED.
…join

Stateright eventually ignored `from`, so QueryEventuallyResolves was
true at initial Idle even when ReadingQuery was a trap. Check that every
reachable `from` status can still reach a target. never(Published) with
Publish enabled was already caught; add the regression tests.
A join can fail AssignmentEventuallyResolved with zero drops. The exit
line must say which property failed.
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