You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The octad has eight modalities. The planner and the VCL type checker handle six. verisim-provenance and verisim-spatial are full, tested crates that
the planner cannot schedule and the type checker does not know about.
Ruled 2026-07-28: keep 6 for now and track the gap here, rather than widen
the enums as a drive-by. Two reasons, and the second is the one that matters.
Where the 6 is
rust-core/verisim-planner/src/lib.rs — Modality has six constructors
(Graph, Vector, Tensor, Semantic, Document, Temporal) and Modality::ALL is [Modality; 6]. execution_priority covers only those six.
src/vcl/VCLTypeChecker.res:60 — availableModalities lists the same six,
while VCLTypes.res:18-26 defines eight (adding ProvenanceModality and SpatialModality).
availableModalities is never read. It appears exactly twice in src/vcl/*.res — its declaration at :43 and its initialiser at :60. Nothing
consumes it. So adding Provenance and Spatial to that list is correct,
costless, and changes no behaviour whatsoever. Shipping it as "fixed the
six-modality bug" would be an overclaim — the field would still be dead, just
dead with eight entries instead of six.
The honest fix is two parts:
Add the two constructors, and
Either consume the field — reject a proposition or epistemic request naming
a modality that is not available — or delete it as dead weight.
Until (2) is decided, (1) is cosmetic.
Scope when this is picked up
Decide: does availableModalities become load-bearing, or get deleted?
Modality enum + ALL + execution_priority for Provenance and Spatial
(the priority values are a real decision — Semantic is 90 because ZKP is
expensive; where do provenance-chain walks and R-tree lookups sit?)
formal/Planner.vmodality Inductive and execution_priority follow the
Rust, in the same change — they are a mirror, and a silent divergence
there is worse than the gap itself
The octad has eight modalities. The planner and the VCL type checker handle
six.
verisim-provenanceandverisim-spatialare full, tested crates thatthe planner cannot schedule and the type checker does not know about.
Ruled 2026-07-28: keep 6 for now and track the gap here, rather than widen
the enums as a drive-by. Two reasons, and the second is the one that matters.
Where the 6 is
rust-core/verisim-planner/src/lib.rs—Modalityhas six constructors(Graph, Vector, Tensor, Semantic, Document, Temporal) and
Modality::ALLis[Modality; 6].execution_prioritycovers only those six.src/vcl/VCLTypeChecker.res:60—availableModalitieslists the same six,while
VCLTypes.res:18-26defines eight (addingProvenanceModalityandSpatialModality).formal/Planner.v—modalityis now anInductivewith six constructors,deliberately mirroring the Rust rather than the octad (see feat(formal): discharge optimize_is_permutation — axiom to theorem, in both modules #206). A model that
covered eight would stop describing the code it validates.
Why this is not a one-line fix
availableModalitiesis never read. It appears exactly twice insrc/vcl/*.res— its declaration at:43and its initialiser at:60. Nothingconsumes it. So adding
ProvenanceandSpatialto that list is correct,costless, and changes no behaviour whatsoever. Shipping it as "fixed the
six-modality bug" would be an overclaim — the field would still be dead, just
dead with eight entries instead of six.
The honest fix is two parts:
a modality that is not available — or delete it as dead weight.
Until (2) is decided, (1) is cosmetic.
Scope when this is picked up
availableModalitiesbecome load-bearing, or get deleted?Modalityenum +ALL+execution_priorityfor Provenance and Spatial(the priority values are a real decision — Semantic is 90 because ZKP is
expensive; where do provenance-chain walks and R-tree lookups sit?)
formal/Planner.vmodalityInductive andexecution_priorityfollow theRust, in the same change — they are a mirror, and a silent divergence
there is worse than the gap itself
VCLTypeChecker.res+VCLTypes.resalignmentRelated
optimize_is_permutationand mirrors the Rust's six; theheader records why.
abstraction omitted exactly the two
PlanNodefields the optimizer wasdropping. Worth checking whether the missing two modalities hide anything
similar.