Skip to content

sdk.html: verification is not independent of our uptime - #29

Merged
BTCBoyd merged 1 commit into
masterfrom
fix/sdk-uptime-claim
Aug 9, 2026
Merged

sdk.html: verification is not independent of our uptime#29
BTCBoyd merged 1 commit into
masterfrom
fix/sdk-uptime-claim

Conversation

@BTCBoyd

@BTCBoyd BTCBoyd commented Aug 9, 2026

Copy link
Copy Markdown
Member

Second finding from reading sdk.html end to end — after I had already edited it earlier in this pass without reading it. Editing is not covering, including when I do it.

The claim

The DID document is public, the schema URLs are frozen and immutable, and revocation status lists are static public files. Verification requires neither our permission nor our uptime.

Two of the three supporting components are false, and so is the conclusion.

Uptime. onUnreachable: 'cache-then-deny' is the only implemented mode — src/core/config.ts:73 throws on any other value, and types.ts:266 documents it as "refresh-first; cache under maxStalenessHours; deny otherwise". A revocation list we fail to serve becomes a denial once the cache goes stale. That is a dependency on our uptime, and a deliberate one.

Static files. Observer's own clause-zero status list is served by api.observerprotocol.org/api/v1/demo/clause-zero/status-list — measured 200 application/json. It is an API endpoint, not a static public file.

index.html already says this correctly ("It fails closed, and it will refuse us too"), so the correction reuses that sentence rather than adding a third phrasing.

The permission half is true and is kept: there is nothing to authenticate to and nothing we can withhold to make a credential stop verifying.

Why the check did not catch it

This instance was untagged and invisible to claimPatterns for the third distinct vocabulary reason in one pass: "neither our permission nor our uptime" shares no wording with "call back to us" or "nothing from us". Added our uptime and permission from us as patterns.

The lesson is not that the pattern list is now complete. It is that the subject keeps getting spelled a new way, so the matcher has to keep being widened from the site's own examples — and a sweep that found three variants is not evidence there was no fourth.

Base case re-run: removing this tag fails the check, restoring it passes. All three checks green.

…us list is not a static file

Second finding from reading sdk.html end to end, after editing it earlier in the
pass without reading it. Editing is not covering, including when I do it.

"The DID document is public, the schema URLs are frozen and immutable, and
revocation status lists are static public files. Verification requires neither
our permission nor our uptime."

Two of the three components are false and so is the conclusion:

- `onUnreachable: 'cache-then-deny'` is the ONLY implemented mode
  (src/core/config.ts:73 throws on any other value; types.ts:266 documents it as
  "refresh-first; cache under maxStalenessHours; deny otherwise"). A revocation
  list we fail to serve becomes a DENIAL once the cache is stale. That is a
  dependency on our uptime, and a deliberate one.
- Observer's own clause-zero status list is served by
  api.observerprotocol.org/api/v1/demo/clause-zero/status-list, measured 200
  application/json. It is an API endpoint, not a static public file.

index.html already states this correctly — "It fails closed, and it will refuse
us too" — so the correction reuses that sentence rather than adding a third
phrasing of it.

The permission half IS true and is kept: there is nothing to authenticate to and
nothing we can withhold to make a credential stop verifying.

This instance was untagged and invisible to claimPatterns for the third distinct
vocabulary reason in one pass: "neither our permission nor our uptime" shares no
wording with "call back to us" or "nothing from us". Added "our uptime" and
"permission from us" as patterns. The subject keeps being spelled a new way, so
the answer is to keep widening the matcher from the site's own examples rather
than to trust that the last sweep found the last variant.

Base case re-run: removing this tag fails the check, restoring it passes.
@netlify

netlify Bot commented Aug 9, 2026

Copy link
Copy Markdown

Deploy Preview for observerprotocol ready!

Name Link
🔨 Latest commit edf0f46
🔍 Latest deploy log https://app.netlify.com/projects/observerprotocol/deploys/6a7816587df8030008c9e707
😎 Deploy Preview https://deploy-preview-29--observerprotocol.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@BTCBoyd
BTCBoyd merged commit 0c909a2 into master Aug 9, 2026
8 checks passed
@BTCBoyd
BTCBoyd deleted the fix/sdk-uptime-claim branch August 9, 2026 05:56
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