Skip to content

Develop - #501

Draft
namedgraph wants to merge 12 commits into
masterfrom
develop
Draft

namedgraph wants to merge 12 commits into
masterfrom
develop

Conversation

@namedgraph

Copy link
Copy Markdown
Member

No description provided.

namedgraph and others added 12 commits October 25, 2026 16:10
…ariants it keeps

A write may type a document with def:Root, dh:Container or dh:Item only, and must leave it typed
with one (422, checkDocumentTypes). A class grant matches a document's own types, so this keeps a
grant of any other class away from the documents of either dataspace.

The Lean model gains the same type rule on Step, and Step.adminTyped and Step.typed prove that every
write keeps AdminTyped and Typed, the two hypotheses a request could falsify. Step 3 of the formal
roadmap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…l on it

formal/http is a Lean model of the graph store of its own: the store, the writes (Write, which is
the former Step without its authorization), the invariants they keep, and the answer to every
request as a program, with every status and the store after it. A refused request changes
nothing, and a request that goes through is a Write. The hierarchy invariant now rests on put()'s
409 for a missing parent rather than on the decision.

formal/acl requires it by path. Step is an authorized Write, and Gate.lean puts the decision in
front of the graph store's answer: 403 is the decision's and nothing else's, and what goes through
is an authorized Write, so the server keeps every invariant. PUT's containment is the server's:
sioc:has_parent of a container, sioc:has_container otherwise.

ldh-http runs the answer, and ldh-acl --request the gated one. The replay compares the server's
status and the document's graph after each request with it, under random preconditions and
payloads; its PATCH is now a DELETE/INSERT the server accepts, where INSERT DATA was refused.
Step 4 of the formal roadmap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model's graph is a list, so a dh:Item the payload states and put() asserts again was printed
twice, while the server stores it once: ldh-acl prints each triple once, and the replay compares
sorted unique lines. Found replaying seed 15426 against a stack built from this branch; with it,
seeds 15426, 101, 2027 and 31337 match the server on every status and graph.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ETag.lean takes the entity tag as a function of the document and its graph, collision-free by
assumption, resolves If-Match against the stored graph as evaluatePreconditions does, and proves
that a write guarded by the tag of the graph a client read changes the store only if the document
still holds that graph.

Memento.lean transcribes the TimeGate (the closest commit, the more recent of two as close, the
most recent with no datetime), the TimeMap (the history, each Memento a revision of the next one
down it), the commit queue (once drained, the newest version is the document's graph) and the
version file, where the root document and a top-level document named root collide.

The TimeGate is replayed against the Java on 500 cases ldh-http --select-cases generates, which
GraphVersioningServiceTest checks and the Formal workflow regenerates, and against the server by
tests/http/versioning/memento-conformance.sh on a versioned dataspace.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Type documents with the hierarchy classes only, and prove the ACL invariants it keeps
A section after the test suite's: what the graph store and access control models prove, how the Formal workflow and
the HTTP replay keep them tied to the code, and a link to the roadmap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model the graph store's answer to every request, and put the ACL model on it
Model entity tags and Memento in the graph store model

This branch has not been deployed

No deployments
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