Split from #602. api.reservePath handles exclusive claims on protocol-pinned paths, but the webfinger/remotestorage collision witnessed in the 33-plugin exercise is a different shape: both plugins legitimately own parts of the same /.well-known/webfinger document. A reservation primitive can only make that failure loud (one boot error instead of a silent loser) — it can't make it work.
The fix for shared documents is a registry: plugins contribute links/properties, the host owns the route and merges contributions into one JRD response.
Sketch
api.webfinger.addLink({ rel: 'http://tools.ietf.org/id/draft-dejong-remotestorage', href: ... });
or a generic api.documents.contribute('/.well-known/webfinger', mergeFn) if more shared docs emerge (host-meta, nodeinfo).
Consumers witnessed
- webfinger/ + remotestorage/ (the collision pair — load order currently decides between a boot failure and silent link loss)
- Potentially the DAV discovery docs and nodeinfo down the line.
Refs #602, the 33-plugin report.
Split from #602.
api.reservePathhandles exclusive claims on protocol-pinned paths, but the webfinger/remotestorage collision witnessed in the 33-plugin exercise is a different shape: both plugins legitimately own parts of the same/.well-known/webfingerdocument. A reservation primitive can only make that failure loud (one boot error instead of a silent loser) — it can't make it work.The fix for shared documents is a registry: plugins contribute links/properties, the host owns the route and merges contributions into one JRD response.
Sketch
or a generic
api.documents.contribute('/.well-known/webfinger', mergeFn)if more shared docs emerge (host-meta, nodeinfo).Consumers witnessed
Refs #602, the 33-plugin report.