It was written by an AI agent as a clean-slate exploration, published here only as an experiment. It is NOT a W3C deliverable, NOT a work item, and NOT a position of the W3C Linked Web Storage Working Group or of any individual. It is a personal experiment in the
jeswr/namespace, tags no one, and requests nothing of anyone. Treat it as an AI-generated design study, not a standard.
A Fable (AI) re-write of the Linked Web Storage design, in complete normative form, over the
ground the LWS WG's Working Drafts cover partially — offered as input to that group only if and
when its human editor chooses. The working name JLWS and the https://w3id.org/jeswr/lws#
namespace are placeholders (see docs/OPEN-QUESTIONS.md Q1); nothing is minted under w3.org.
Status: PUBLISHED AS A PUBLIC EXPERIMENT (maintainer-authorised, 2026-07-05). It remains an
AI-authored draft awaiting review by the human editor; the open questions in
docs/OPEN-QUESTIONS.md (esp. namespace + posture) are still live.
index.html— the JLWS Core Protocol (ReSpec; open locally — ReSpec loads from w3.org). A wire-compatible superset of the LWS WD (lws10-core, WD 2026-06-22): it keeps the WD's sound mechanisms verbatim (byte-native resources; containment-as-metadata; JSON-LD container listings; RFC 9264 linkset metadata with strict If-Match/428 discipline; POST-create/Slug; Range MUST;Depth: infinitydelete; the RFC 8693 exchange → audience-restricted ≤300 s at+jwt → Bearer authorization chain prototyped injeswr/lws-keycloak) and diverges only on identified gaps: RFC 9728 discovery replacing the bespokeas_uri/lws-configuration; idempotentPUT + If-None-Match: *create; strict container ≠ data-resource separation; guaranteed URI-path alignment; CID-shaped storage description withconformsToversion URIs and a real capability registry; SSE + WebSocket notification bindings beside the signed-webhook binding; a WebAuthn authentication suite; optional negotiated proof-of-possession presentation (DPoP / DPoP-SK) over the Bearer baseline; strict-ODRL access requests & grants (the editor's upstream PR #109, realised) with VC receipts, delegation, and groups as extensions; and a normative SSRF + oracle-freedom + threat-model security section. Every divergence is marked inline and registered in the spec's Divergence Register appendix.rdf-transform.html— the JLWS RDF Content Transformation Profile: the opt-in that makes a byte-native storage RDF-aware. Per-media-typeContentNegotiationcapability entries pinned tohttps://w3id.org/jeswr/lws/transform/rdf-1; RDF 1.1 abstract-syntax round-trip semantics; authoritative-bytes + per-representation ETags + precondition rules killing the Solid lost-update ambiguity; anormalizesflag for parse-on-ingest stores; RDF PATCH only when the profile is on; the index/query enrichment hook; and the informative Solid-on-JLWS mapping (Solid as a profile on top of the substrate).DECISIONS.md— the four adopted steer defaults + every WD divergence and repo-shape decision (D1–D20), each with rationale and primary-source citations, for the maintainer's review/correction.docs/OPEN-QUESTIONS.md— the 10 open questions carried from the research brief, split UNANSWERED/GATING (name+namespace, publication, container-as-data-resource, resumable uploads) vs adopted defaults.docs/DESIGN-BRIEF.md— the research foundation (primary-source-cited survey of the WG, its drafts, minutes, issues, and the maintainer's own prior LWS artifacts).test-vectors/— the conformance test-vector suite: 154 language-neutral (input, operation, expected-outcome) cases across 10 suites in theagentic-solid-conformanceformat, each pinning normative clauses by spec section id; JSON cases with Turtle/JSON-LD/N-Quads fixtures plus real signed EdDSA at+jwt, RFC 9421 webhook, DPoP-SK hmac-sha256 attestation, and WebAuthn assertion-bundle fixtures; aGAPS.mdinventorying the un-vectorable normative statements. Includes the composition suites fromdocs/alignment/:dpop-sk, the WebAuthn wire-contract cases, the a2a-rdfAgentInteractionServicediscovery pair, and the rdf-1 advertisement contract. The expected verdicts are spec-derived (no reference server implementation exists yet — see the suite README's provenance note); theevaluate-accessdecisions are additionally reproduced by executing the normative rule setsemantics/access-decision.n3(below). This suite is the conformance target the first implementation (the plannedsolid-server-rsLWS work) builds to.semantics/— the executable access-decision semantics:access-decision.n3, the normative Notation3 rule set defining the strict ODRL profile'sevaluate-accessdecision function (permit-derivation over recorded grants; one-directional action inclusion; trailing-slash-guarded target coverage; conjunctive, fail-closed constraint satisfaction; deny = decision-time closed-world absence of a permit derivation), referenced normatively fromindex.html#odrl-profileand linked from the affected companion statements viasc:formalModel. Executed by EYE (eyereasoner):test-suite/tools/oracle-access.mjsruns it as the definitional oracle over everyevaluate-accessvector (the vectors and the rule set must never disagree), andtest-suite/test/access-oracle.test.mjsprobes it adversarially (prefix escapes, widening-injection containment, malformed constraints). Seesemantics/README.md.formal/tla/— the TLC-checked TLA+ temporal models of the stateful/temporal normative statements no request/response vector can express (theGAPS.mdclass): the access-grant + revocation lifecycle (JlwsRevocation.tla— where TLC refuted the original two-clocks text of#grants-are-recordsand now checks the single-clock + acknowledgment-barrier replacement clean, DECISIONS.md D22), lost-update freedom under the strict If-Match/428 discipline (JlwsConditionalUpdate.tla), and atomic containment/membership (JlwsContainment.tla). Counterexample configs are kept on file as witnesses;formal/tla/run-tlc.shasserts every config's expected verdict. Linked from the affected companion statements viasc:formalModel. Seeformal/tla/README.md.test-suite/— the executable conformance suite: a Node runner that plays the committed test-vectors against a target server URL and reports per-normative-statement pass / fail / untested verdicts keyed to the companion statement IDs, honouring the E / A-int / A-exist / P testability spine (only server-deniable enforceable statements execute; audit-class statements report as evidence-checks; skips carry their reason). Ships self-tests (strict + lenient in-process mocks as positive/negative controls for the runner itself) and a committed dated CSS-baseline scoreboard — how an existing Solid server (CSS 7.1.9) scores against the clean-slate spec, with failures framed as findings about the delta, not bugs. Seetest-suite/README.md.index.statements.ttl/rdf-transform.statements.ttl— the machine-readable normative-statement companions (thejeswr/spec-companionformat: W3Cspec:requirement markup as a sidecar graph + the E / A-int / A-exist / P testability spine). Onespec:Requirementper BCP 14 statement — stable id, verbatim validator-checked quote, canonical RFC 2119 level, conformance-class binding, section anchor — wired to its test-vector case(s) where one exists and to an honestsc:testGapwhere none does, so each companion doubles as the test-suite requirement index (statements with gaps = the vector backlog). Keywordless normative clauses are catalogued assc:extractionNoteerrata candidates rather than dressed up as statements. The full-text specs stay the normative documents; the companions are derived sidecars, re-extracted in the same commit as any normative-text change.shapes/— normative SHACL shapes, one per document conformance class the core spec defines: the container representation (#container-properties), the storage description (#discovery-model), the two strict-ODRL access documents — request and grant (#odrl-profile), the notification envelope (#notification-envelope), and the subscription document with its three binding subtypes (#subscription-api). Each constraint carries the companion statement id (JLWSC-…) or defining clause it encodes — the machine-checkable chain spec requirement → SHACL shape — and each file's header names what is deliberately NOT graph-checkable (behavioural/HTTP-level rules the test-vectors carry, e.g. the fail-closed OPEN action set of#odrl-profile: an unknown action grants nothing at enforcement but does not invalidate the document). Fixtures live inexamples/positive/(must conform) andexamples/negative/(each violates one distinct constraint; they double as canaries against vacuous targeting);scripts/validate-conformance.shruns pySHACL over both and fails on any positive non-conformance or negative conformance. The shapes validate the RDF graph a conforming JSON-LD document means under the normative context sketch (#jsonld-context); once the full context document ships in this repository, JSON-LD-native fixture validation and a reconciliation of thejlws:-defaulted term IRIs (topic,inbox,source,receiveFrom,expires,capability,subscriptionType) against it are the tracked follow-up, as is delegating full CID-1.0 document validation (JLWSC-DM-7) to a CID validator (the shapes encode the machine-checkable CID core). The RFC 9264 linkset resource (#metadata) and RFC 9457 problem-details documents are JSON, not JSON-LD — they have no graph form to shape and stay with the test-vector suite; group membership documents (#groups, OPTIONAL) are not yet specified tightly enough to shape without inventing requirements.
Companion specs planned (slots reserved in the core): query services (TypeIndex/TypeSearch + access-controlled SPARQL), versioning (RFC 5829 + Memento), and the full Solid-on-JLWS profile.
Spec-only repo: no build. The gate is HTML well-formedness of the two ReSpec docs plus the
test-vector consistency check (manifests ↔ cases ↔ clause pins ↔ fixtures ↔ signatures; the
vectors are generator output — edit test-vectors/tools/suites/*.mjs and regenerate, never
the emitted files):
node tools/check-html.mjs index.html rdf-transform.html
node test-vectors/tools/check.mjs
node test-vectors/tools/generate.mjs # regenerate; git diff must stay clean
# the executable access-decision semantics MUST reproduce every evaluate-access
# vector (needs `npm install` in test-suite/ once — eyereasoner):
node test-suite/tools/oracle-access.mjs
# statement companions (validator + shapes live in jeswr/spec-companion):
node <spec-companion>/tools/validate.mjs index.statements.ttl --spec-html index.html
node <spec-companion>/tools/validate.mjs rdf-transform.statements.ttl --spec-html rdf-transform.html
# document-conformance-class SHACL shapes vs their fixtures (needs pyshacl):
sh scripts/validate-conformance.sh
# TLA+ temporal models vs their expected TLC verdicts (needs java 11+; the
# runner resolves tla2tools.jar fail-closed — see formal/tla/README.md):
sh formal/tla/run-tlc.sh
# executable conformance suite self-tests (needs `npm install` in test-suite/ once):
cd test-suite && npm test(stdlib-only tag-balance + structure check; Node ≥ 20). Plus roborev on every commit
(.roborev.toml, codex reviewer).
The check is structural only — tag balance, required ReSpec section ids, internal-link
targets. It does not execute ReSpec, so a biblio typo or config error that breaks the render
would pass it. Before any publication (docs/OPEN-QUESTIONS.md Q2), the gate must grow a real
ReSpec render smoke-test (respec2html / a headless browser render of both documents); this is
queued with the publication follow-ups in docs/OPEN-QUESTIONS.md.
Drafted with AI assistance (Claude Fable 5, Anthropic) from the W3C LWS WG's published
drafts and repository (w3c/lws-protocol @ 4fa93ee), the WG's minutes and issue tracker, the
maintainer's own prototypes (jeswr/lws-keycloak spec prose, jeswr/lws-acp, upstream PR
#109), and the IETF/W3C primary sources cited throughout. Awaiting review by the human
editor (Jesse Wright). See each spec's SOTD.