Our @context stays JSON-LD 1.0, and a 500 no longer takes a host out
The proof term added with integrity proofs had a @graph container, which only JSON-LD 1.1 knows: Smithereen's reader refused every document carrying our context with a 500. Those 500s, retried, then put Smithereen's host in quarantine for an hour, and every delivery to it waited. Proofs are canonicalised as JSON (JCS), so the term loses nothing as a plain id; a test keeps every term within 1.0. Only an unreachable host, a timeout or a gateway's 502, 503 or 504 now counts against a host: a 500 is the server failing on that one activity, retried on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
b66f0acf4e
commit
b478049303
5 files changed
+63
-4
No files matched your search
@@ -258,7 +258,11 @@ namespace PrivaPub.Federation.Outbox
|
||||
_logger.LogInformation("Delivery to {Inbox} refused with {Status}", payload.Inbox, status);
|
||||
return JobOutcome.Dead($"{status} {response.ReasonPhrase}");
|
||||
}
|
||||
await _breaker.Failed(job.Host, $"{status}", token);
|
||||
// a gateway's 502, 503 or 504 says the server behind it is down, which counts against the host; any other 5xx
|
||||
// says the server is up and failed on this activity (Smithereen's 500 on a document its JSON-LD reader
|
||||
// refused), retried on its own while the host's other deliveries go on
|
||||
if (status is 502 or 503 or 504)
|
||||
await _breaker.Failed(job.Host, $"{status}", token);
|
||||
return JobOutcome.Retry($"{status} {response.ReasonPhrase}");
|
||||
}
|
||||
catch (BlockedDestinationException ex)
|
||||
|
||||
@@ -81,13 +81,14 @@ namespace PrivaPub.Federation.Rendering
|
||||
["wallPostVisibility"] = "sm:wallPostVisibility",
|
||||
["allowedTo"] = "sm:allowedTo",
|
||||
// FEP-521a keys and FEP-8b32 proofs, defined here rather than by the data-integrity and multikey contexts,
|
||||
// which strict JSON-LD readers would have to fetch
|
||||
// which strict JSON-LD readers would have to fetch. JSON-LD 1.0 only: Smithereen's reader refuses the whole
|
||||
// document over a 1.1 term (proof's @graph container there; our proofs are canonicalised as JSON, by JCS)
|
||||
["assertionMethod"] = new JsonObject { ["@id"] = "sec:assertionMethod", ["@type"] = "@id", ["@container"] = "@set" },
|
||||
["Multikey"] = "sec:Multikey",
|
||||
["controller"] = new JsonObject { ["@id"] = "sec:controller", ["@type"] = "@id" },
|
||||
["publicKeyMultibase"] = new JsonObject { ["@id"] = "sec:publicKeyMultibase", ["@type"] = "sec:multibase" },
|
||||
["DataIntegrityProof"] = "sec:DataIntegrityProof",
|
||||
["proof"] = new JsonObject { ["@id"] = "sec:proof", ["@type"] = "@id", ["@container"] = "@graph" },
|
||||
["proof"] = new JsonObject { ["@id"] = "sec:proof", ["@type"] = "@id" },
|
||||
["cryptosuite"] = new JsonObject { ["@id"] = "sec:cryptosuite", ["@type"] = "sec:cryptosuiteString" },
|
||||
["proofValue"] = new JsonObject { ["@id"] = "sec:proofValue", ["@type"] = "sec:multibase" },
|
||||
["proofPurpose"] = new JsonObject { ["@id"] = "sec:proofPurpose", ["@type"] = "@vocab" },
|
||||
|
||||
Reference in new issue
Block a user