diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cae15f..06cc00c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.1] - 2025-11-19 + +### Fixed +- **CRITICAL**: Fixed IndieAuth client discovery to enable production authentication +- Added h-app microformats markup to base.html for IndieAuth client verification +- IndieLogin.com can now verify StarPunk as a legitimate OAuth client +- Resolves "client_id is not registered" error that blocked all production authentication + +### Changed +- Added hidden h-app metadata div to footer with SITE_URL and SITE_NAME +- h-app markup uses aria-hidden="true" and hidden attribute for screen reader and visual hiding +- Implements IndieAuth legacy client discovery standard for backward compatibility + +### Standards Compliance +- IndieAuth client discovery (legacy h-app microformats) +- Microformats2 h-app specification +- HTML5 hidden attribute standard +- ARIA accessibility standard + +### Related Documentation +- ADR-016: IndieAuth Client Discovery Mechanism +- IndieAuth client discovery analysis report + ## [0.6.0] - 2025-11-19 ### Added diff --git a/docs/decisions/ADR-016-indieauth-client-discovery.md b/docs/decisions/ADR-016-indieauth-client-discovery.md new file mode 100644 index 0000000..8094ada --- /dev/null +++ b/docs/decisions/ADR-016-indieauth-client-discovery.md @@ -0,0 +1,308 @@ +# ADR-016: IndieAuth Client Discovery Mechanism + +## Status + +Accepted + +## Context + +StarPunk uses IndieLogin.com as a delegated IndieAuth provider for admin authentication. During the first production deployment to https://starpunk.thesatelliteoflove.com, authentication failed with the error: + +``` +Request Error +There was a problem with the parameters of this request. + +This client_id is not registered (https://starpunk.thesatelliteoflove.com) +``` + +### Root Cause + +The IndieAuth specification requires authorization servers to verify client applications by fetching the `client_id` URL and discovering client metadata. StarPunk's implementation was missing this client discovery mechanism entirely. + +### Why This Was Missed + +1. Phase 3 authentication design focused on the authentication flow but didn't address client identification +2. Testing used DEV_MODE which bypasses IndieAuth entirely +3. The IndieAuth spec has evolved over time (2020 → 2022 → current) with different discovery mechanisms +4. Client discovery is a prerequisite that wasn't explicitly called out in our design + +### IndieAuth Client Discovery Standards + +The IndieAuth specification (as of 2025) supports three discovery mechanisms: + +#### 1. OAuth Client ID Metadata Document (Current - 2022+) + +A JSON document at `/.well-known/oauth-authorization-server` or linked via `rel="indieauth-metadata"`: + +```json +{ + "issuer": "https://example.com", + "client_id": "https://example.com", + "client_name": "App Name", + "client_uri": "https://example.com", + "redirect_uris": ["https://example.com/callback"] +} +``` + +**Pros**: Current standard, machine-readable, clean separation +**Cons**: Newer standard, may not be supported by older servers + +#### 2. h-app Microformats (Legacy - Pre-2022) + +HTML microformats markup in the page: + +```html +