Begin removing view related code and docs
This commit is contained in:
@@ -50,26 +50,21 @@ content identity from ergonomic naming and namespace organization.
|
||||
The content store must not be married to `tricu` or Haskell.
|
||||
|
||||
It stores a small set of portable Arboricx artifacts: module manifests,
|
||||
complete tree terms, and direct View Contract types. Lower-level Merkle/bundle
|
||||
complete tree terms, and direct Contract terms. Lower-level Merkle/bundle
|
||||
formats exist for transport and DAG tooling, but the store core should treat all
|
||||
objects as content-addressed bytes with formats/media types.
|
||||
|
||||
`tricu` and Haskell are clients/tooling. They are not the semantic owners of the
|
||||
store.
|
||||
|
||||
### 2.3 View Contracts are portable enough to integrate
|
||||
### 2.3 Contracts are portable enough to integrate
|
||||
|
||||
The store may integrate with View Contracts because the checker and evidence
|
||||
format are pure Tree Calculus / portable tree data. View Contracts are not a
|
||||
Haskell-private or `tricu`-private semantic layer.
|
||||
The store may integrate with Contracts because a contract is itself an ordinary
|
||||
Tree Calculus term. Contracts are not a Haskell-private or `tricu`-private
|
||||
semantic layer.
|
||||
|
||||
The module resolver may emit typed-program evidence, but checker semantics remain
|
||||
unchanged:
|
||||
|
||||
```text
|
||||
Haskell emits evidence.
|
||||
tricu judges evidence.
|
||||
```
|
||||
A module manifest may reference a contract object, but the contract is evaluated
|
||||
by ordinary Tree Calculus reduction, not by a special checker.
|
||||
|
||||
### 2.4 Modules should reflect definitions as they actually exist
|
||||
|
||||
@@ -95,11 +90,11 @@ Arboricx CAS / Merkle Store
|
||||
Arboricx Bundle
|
||||
compact indexed transport/execution format
|
||||
|
||||
View Contract Artifact
|
||||
portable evidence/checker data over tree artifacts
|
||||
Contract Term
|
||||
ordinary tree-valued contract function, applied by reduction
|
||||
|
||||
Module Manifest
|
||||
immutable export map from names to content objects and optional contracts
|
||||
immutable export map from names to content objects and optional contract terms
|
||||
|
||||
Workspace
|
||||
mutable aliases, selected versions, package pins, and user-facing names
|
||||
@@ -109,8 +104,8 @@ tricu
|
||||
```
|
||||
|
||||
The content store stores objects. Arboricx defines important object formats.
|
||||
View Contracts define portable checking artifacts. `tricu` produces and consumes
|
||||
those formats.
|
||||
Contracts are ordinary tree-valued functions; `tricu` produces and consumes those
|
||||
formats.
|
||||
|
||||
### 3.1 Execution imports versus contract checking
|
||||
|
||||
@@ -122,30 +117,29 @@ Calculus values are complete normal forms: importing `foo` does not require
|
||||
hydrating separate `bar` or `baz` exports that may have helped build it. This is
|
||||
the fast path for `!import`, including `!Local` imports.
|
||||
|
||||
View Contract checking is a separate evidence-gathering path. It may load
|
||||
exported direct view types for the symbols that participate in a check. That
|
||||
slower path must remain behind the typed program boundary:
|
||||
Contract checking is a runtime boundary check. It may load exported contract term
|
||||
objects for the symbols that participate in a boundary. That slower path remains
|
||||
separate from execution hydration:
|
||||
|
||||
```text
|
||||
Haskell emits evidence.
|
||||
tricu judges evidence.
|
||||
Haskell loads contract terms.
|
||||
tricu applies them by reduction.
|
||||
```
|
||||
|
||||
Reusable view catalogs are ordinary tricu libraries/tree terms, not a separate
|
||||
Reusable contract catalogs are ordinary `tricu` libraries/tree terms, not a separate
|
||||
core CAS artifact kind.
|
||||
|
||||
For locally built workspace modules, advertised direct export views are
|
||||
producer-checked before the manifest alias is written. Producer checking includes
|
||||
advertised views from any imported modules used by that source, so a module
|
||||
For locally built workspace modules, advertised direct export contracts may be
|
||||
checked before the manifest alias is written. Producer checking includes
|
||||
advertised contracts from any imported modules used by that source, so a module
|
||||
cannot publish a local annotated export that contradicts a dependency's exported
|
||||
view. If producer checking fails, the module alias is not written.
|
||||
contract. If producer checking fails, the module alias is not written.
|
||||
|
||||
Consumer checking then resolves selected module exports, decodes their
|
||||
`arboricx.view-contract.type.v1` refs, and emits trusted `KnownView` evidence
|
||||
for the local imported symbols. Those facts are module-boundary assumptions:
|
||||
local workspace builds create them after producer-side checking, while external
|
||||
or prebuilt manifests are trusted inputs for now. In all cases, compatibility
|
||||
with local requirements is still judged by the portable checker in `lib/view.tri`.
|
||||
Consumer checking then resolves selected module exports and loads their exported
|
||||
contract term objects. Those contracts are applied at the import boundary using
|
||||
the standard contract helpers. For external or prebuilt manifests, the advertised
|
||||
contract is a trusted boundary declaration; the consumer may still re-apply it at
|
||||
the boundary.
|
||||
|
||||
## 4. Content Store Direction
|
||||
|
||||
@@ -167,11 +161,11 @@ Current module/check object kinds:
|
||||
```text
|
||||
arboricx.module-manifest.v1
|
||||
arboricx.tree-term.v1
|
||||
arboricx.view-contract.type.v1
|
||||
arboricx.tree-term.v1
|
||||
```
|
||||
|
||||
Merkle nodes and indexed bundles remain lower-level Arboricx transport/DAG
|
||||
formats, but they are not the module/eval storage model. typed programs and view
|
||||
formats, but they are not the module/eval storage model. typed programs and contract
|
||||
catalogs are ordinary tree terms unless a future external tooling use case proves
|
||||
that they need their own object kind.
|
||||
|
||||
@@ -295,7 +289,7 @@ metadata:
|
||||
license
|
||||
createdBy
|
||||
optional:
|
||||
view contract artifact refs
|
||||
contract artifact refs
|
||||
ABI/media type info
|
||||
source/provenance refs
|
||||
```
|
||||
@@ -312,7 +306,7 @@ name: "map"
|
||||
object: sha256:...
|
||||
kind: arboricx.tree-term.v1
|
||||
abi: arboricx.abi.tree.v1
|
||||
view: sha256:... -- optional View Contract artifact
|
||||
contract: sha256:... -- optional contract term
|
||||
source: sha256:... -- optional source/provenance object
|
||||
```
|
||||
|
||||
@@ -343,7 +337,7 @@ The future pipeline should be:
|
||||
parse source
|
||||
resolve imports/names to module exports and content refs
|
||||
lower source using resolved refs
|
||||
emit a view-tree artifact
|
||||
emit a contract artifact
|
||||
check evidence when requested
|
||||
store/export artifacts
|
||||
```
|
||||
@@ -392,36 +386,37 @@ This is the right identity for:
|
||||
### 8.2 Module/export identity
|
||||
|
||||
The module manifest is the higher-level artifact boundary. It pairs each export
|
||||
name with its compiled tree term and optional direct View Contract type.
|
||||
name with its compiled tree term and an optional contract term reference.
|
||||
|
||||
The content store should not require extra definition/source/provenance objects,
|
||||
and fully untyped Tree Calculus code must remain valid.
|
||||
|
||||
## 9. View Contract Integration
|
||||
## 9. Contract Integration
|
||||
|
||||
View Contracts should attach to modules/exports as portable artifacts.
|
||||
Contracts attach to modules/exports as ordinary tree-term objects. A contract is
|
||||
a `tricu` function `Tree -> Result Tree Tree`; it is not a special artifact
|
||||
kind and it does not require a separate checker binary.
|
||||
|
||||
An imported definition can be assigned a local numeric symbol while lowering a
|
||||
typed program. Its global identity remains a content hash or module export ref.
|
||||
A module manifest pairs each export name with its compiled tree term and an
|
||||
optional contract term reference. The importer loads the contract object and
|
||||
applies it at the boundary.
|
||||
|
||||
This is the intended split:
|
||||
An imported definition can be assigned a local name while lowering source. Its
|
||||
global identity remains a content hash or module export ref. The intended split
|
||||
is:
|
||||
|
||||
```text
|
||||
typed program local symbol: 3
|
||||
Debug label: "List.map"
|
||||
Resolved object: sha256:...
|
||||
Exported view: Fn [...]
|
||||
Local source name: "List.map"
|
||||
Resolved object: sha256:...
|
||||
Exported contract: sha256:...
|
||||
```
|
||||
|
||||
De Bruijn-style integer symbols are still appropriate inside a typed program. They
|
||||
are local evidence identifiers, not global content identity.
|
||||
There is no typed-program evidence graph and no local numeric checker symbols.
|
||||
The contract term itself is the authority.
|
||||
|
||||
We should not make global objects depend on numeric checker symbols.
|
||||
|
||||
Untyped code remains valid with no contract artifact. If a boundary needs to
|
||||
participate in checking but has no information, it may use `Any` or rely on
|
||||
policy. We should not pretend all untyped functions have an infinite
|
||||
`Any -> Any -> ...` contract.
|
||||
Untyped code remains valid with no contract artifact. If a boundary has no
|
||||
contract information, it simply performs no runtime check. We should not pretend
|
||||
that untyped functions have an implicit `Any -> Any -> ...` contract.
|
||||
|
||||
## 10. Import Syntax Direction
|
||||
|
||||
@@ -457,7 +452,7 @@ A plausible migration path:
|
||||
index layer.
|
||||
5. Define module manifest objects.
|
||||
6. Teach source imports to resolve manifests/exports instead of rewriting ASTs.
|
||||
7. Attach View Contract artifacts to module exports.
|
||||
7. Attach contract terms to module exports.
|
||||
8. Gradually migrate existing `lib/` and `demos/` imports.
|
||||
|
||||
Compatibility shims may keep existing `!import` working during migration.
|
||||
@@ -496,9 +491,9 @@ Modules:
|
||||
Workspace:
|
||||
mutable human aliases, version selections, and package/module pins
|
||||
|
||||
View Contracts:
|
||||
portable evidence artifacts attached to exports and checked by pure Tree
|
||||
Calculus code
|
||||
Contracts:
|
||||
ordinary tree-valued functions attached to exports and applied by pure Tree
|
||||
Calculus reduction at boundaries
|
||||
```
|
||||
|
||||
The key architectural rule is that hashes provide stable identity, while names
|
||||
|
||||
Reference in New Issue
Block a user