feat(spec-039): Webmention support — recv + send + discovery + idempotency #41
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "hence/plan-IMPL-039"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements all four flows of SPEC-039 (Webmention) as a sibling to SPEC-038 RSS — pragmatic v1 executed without running DESIGN-039's Tier 2 design phase. Plan:
plans/IMPL-039-webmention.spl.SPEC-039 stays at
status: strawman. The strawman explicitly says "Do not implement against this version." This PR ships against it anyway with default-leaning answers for the six deferred ADRs (flow coverage = all four; static receive = recipe; moderation = hybrid defeasible-rule; storage = central JSONL; identity = URL-only; idempotency = persisted JSONL log). DESIGN-039 surveys / cross-model review / threat model formalisation are still open work — they should run in a follow-up cycle to graduate the spec.What's wired
POST /webmentiononzetl serve(gated on[webmention].enabled). Source-fetch reuses SPEC-038's SSRF-safe transport; pure-core verification (REQ-3903) and hybrid moderation (REQ-3905). Persists accept →received.jsonl, queue →queue.jsonl.zetl buildwalksdist/, extracts external links, computes the idempotency diff againstsent.jsonl, discovers each target's endpoint, and POSTs new + changed pairs. Removed-link re-POST per REQ-3907.<link rel="webmention" href="...">injected viavault.webmention_endpointin default / docs / minimal / fountain themes.zetl webmention {list,accept,reject,status}with--jsonoutput..zetl/webmentions/{received,sent,queue}.jsonl; tombstones are append records.Non-additive changes
ureqpromoted fromsemanticfeature to default deps (the receive + send transports use it).vault.webmention_endpoint: Option<String>onVaultContext.<link rel="webmention">line.Test plan
cargo test --lib webmentiontests/webmention_integration.rscovers HP-3901/3905/3906/3908, T1/T8 probes, replay (T7), idempotency zero-POST property, link-removal re-POST (HP-3904)--features reason,--features history,--all-featurescleancargo fmtclean,cargo clippy --lib --testsclean on webmention modules[webmention]config + a counterparty to exchange POSTs with (webmention.rocks fixture run is documented as v2 work)[webmention].send_enabled = true; verify on staging vault before flipping the flag in productionFollow-ups (filed as comments, not blockers)
zetl webmention send <page>manual escape-hatch (currently stubbed)zetl reason explain accept-mention X Yworks (REQ-3914)🤖 Generated with Claude Code
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.