Changelog
phil/well-known-bundleAll notable changes to phil/well-known-bundle will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.0-alpha - 2026-11-11
Added
PhilWellKnownBundleand thephil_well_knownconfiguration:cache_max_ageand one section per document, each off until it is turned on. A value a document could not serve is refused when the container is built.WellKnownController: every document from one controller, withX-Robots-Tag: noindex; a successful answer that sets no cache of its own ispublicforcache_max_ageseconds, carries anETagand answers304to a request that holds it.WellKnownRouteLoaderandconfig/routes.php: one exact route per document,GETandHEAD, stateless, loaded again when the documents change.WellKnownDocument,#[AsWellKnownDocument]and thephil_well_known.documenttag, with apathunder/.well-known/or absolute and an optionalroute;WellKnownPassrefuses a bad path, a path or a route served twice, and a class that is not a document.WellKnownPathchecks the paths.security.txt(RFC 9116):SecurityTxt, withContactandExpiresrequired,Encryption,Acknowledgments,Preferred-Languages,Canonical,PolicyandHiring, each value checked against its field; anExpiresin the past refused when the container is built.SecurityTxtSigner, the port of an OpenPGP cleartext signature.SecurityTxtExpiryCheck, registered with phil/monitoring-bundle: itssecurity_txthealth check is degraded fromsecurity_txt.expiry_warning_daysdays beforeExpires, 30 by default, and down once the date has passed.change-password: a302to a route, with its parameters, or to anhttps://URL or a path.- WebFinger (RFC 7033):
WebFingerQuery, read from the raw query string with its repeatedrel, and bounded;WebFingerResource,acct:andhttps:URIs;WebFingerDescriptorandWebFingerLink, written as JRD;WebFingerResolver, autoconfigured after theStaticWebFingerResolverofwebfinger.resources;WebFinger, which merges the descriptors and filters the links.400for a bad query,404with an empty body for a resource no resolver knows; CORS on every answer. A fuzz target for the query reader. - NodeInfo 2.1:
NodeInfo,NodeInfoSoftwareandNodeInfoUsage, the protocols and services of the 2.1 schema;NodeInfoProviderandConfiguredNodeInfoProvider; the discovery document at/.well-known/nodeinfoand the document atnodeinfo.path. did.jsonfordid:web, from the configuration or a JSON file, served asapplication/did+jsonorapplication/did+ld+json;did-configuration.jsonwith JWT or JSON-LD linked DIDs, from the configuration or files;atproto-did, the site's DID or the DID of each host;Did, which checks the syntax.apple-app-site-associationandassetlinks.json, from Android apps with their fingerprints and from statements.documents: fixed documents of the configuration, from a string or a file, with their media type and CORS.InvalidValueandWellKnownException.WebFingerBench: a WebFinger query among 1,000 accounts, an unknown one, and a fixed document.- The documentation in
doc/, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.