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
@inrupt/solid-client@1.23.1 — the most widely used Solid client library — drives Cistern 0.2.0 with 8/8 passing and zero Cistern-specific code:
Operation
Result
read root container as a dataset
PASS
create container (saveSolidDatasetAt)
PASS
write an RDF document (Thing + foaf:name)
PASS
read back, exact round-trip of the value
PASS
containment — parent lists the child
PASS
binary upload (saveFileInContainer)
PASS
binary read back (getFile)
PASS
unauthenticated read refused
PASS (401)
Auth was a custom fetch adding Authorization: Bearer <owner token>; Cistern has no Solid-OIDC yet, so there is no DPoP path to exercise. Run against ghcr.io/enrichmeai/cistern:0.2.0, both containers on one Docker network so minted IRIs matched.
Why this matters
It is conformance evidence of a kind the CTH currently cannot give.cth/BASELINE.md reads 0/41 because the harness never reaches an assertion. A third-party client exercising the real protocol surface is the strongest external signal available today.
It reduces the urgency of the TypeScript half of T7.9 Client SDKs — thin Java and TypeScript clients for applications #101. If the standard client already works, the argument for shipping our own JS client — a second toolchain in a JVM-native project, competing with Inrupt's — is much weaker. The Java client may still earn its place; the TS one needs re-justifying.
It is a regression risk that nothing currently guards. Any change to content negotiation, containment serialisation, ETags or status codes could silently break the ecosystem's default client.
Scope
Adopt the probe as a CI job: start the built image, run the client against it, assert all operations.
Pin the client version; treat a failure as a conformance bug in Cistern, not in the test.
Document in docs/INTEGRATION.md that the standard client works, with the bearer-fetch snippet — this is a better answer to "is there an SDK?" than an SDK.
Known trap to document
@inrupt/solid-client → jsonld@5.2.0 → @digitalbazaar/http-client → esm@3.2.25, which hard-crashes Node 23 (native assertion in InternalModuleStat). Works on Node 20. A developer trying the obvious thing on current Node hits this before reaching Cistern — name the supported Node version.
DoD
CI job runs the interop suite against the built image on every PR.
INTEGRATION.md documents the standard-client path and the Node version constraint.
Measured result
@inrupt/solid-client@1.23.1— the most widely used Solid client library — drives Cistern 0.2.0 with 8/8 passing and zero Cistern-specific code:saveSolidDatasetAt)foaf:name)saveFileInContainer)getFile)Auth was a custom
fetchaddingAuthorization: Bearer <owner token>; Cistern has no Solid-OIDC yet, so there is no DPoP path to exercise. Run againstghcr.io/enrichmeai/cistern:0.2.0, both containers on one Docker network so minted IRIs matched.Why this matters
cth/BASELINE.mdreads 0/41 because the harness never reaches an assertion. A third-party client exercising the real protocol surface is the strongest external signal available today.Scope
docs/INTEGRATION.mdthat the standard client works, with the bearer-fetchsnippet — this is a better answer to "is there an SDK?" than an SDK.Known trap to document
@inrupt/solid-client→jsonld@5.2.0→@digitalbazaar/http-client→esm@3.2.25, which hard-crashes Node 23 (native assertion inInternalModuleStat). Works on Node 20. A developer trying the obvious thing on current Node hits this before reaching Cistern — name the supported Node version.DoD