This commit resolves all documentation issues identified in the comprehensive review: CRITICAL FIXES: - Renumbered duplicate ADRs to eliminate conflicts: * ADR-022-migration-race-condition-fix → ADR-037 * ADR-022-syndication-formats → ADR-038 * ADR-023-microformats2-compliance → ADR-040 * ADR-027-versioning-strategy-for-authorization-removal → ADR-042 * ADR-030-CORRECTED-indieauth-endpoint-discovery → ADR-043 * ADR-031-endpoint-discovery-implementation → ADR-044 - Updated all cross-references to renumbered ADRs in: * docs/projectplan/ROADMAP.md * docs/reports/v1.0.0-rc.5-migration-race-condition-implementation.md * docs/reports/2025-11-24-endpoint-discovery-analysis.md * docs/decisions/ADR-043-CORRECTED-indieauth-endpoint-discovery.md * docs/decisions/ADR-044-endpoint-discovery-implementation.md - Updated README.md version from 1.0.0 to 1.1.0 - Tracked ADR-021-indieauth-provider-strategy.md in git DOCUMENTATION IMPROVEMENTS: - Created comprehensive INDEX.md files for all docs/ subdirectories: * docs/architecture/INDEX.md (28 documents indexed) * docs/decisions/INDEX.md (55 ADRs indexed with topical grouping) * docs/design/INDEX.md (phase plans and feature designs) * docs/standards/INDEX.md (9 standards with compliance checklist) * docs/reports/INDEX.md (57 implementation reports) * docs/deployment/INDEX.md (deployment guides) * docs/examples/INDEX.md (code samples and usage patterns) * docs/migration/INDEX.md (version migration guides) * docs/releases/INDEX.md (release documentation) * docs/reviews/INDEX.md (architectural reviews) * docs/security/INDEX.md (security documentation) - Updated CLAUDE.md with complete folder descriptions including: * docs/migration/ * docs/releases/ * docs/security/ VERIFICATION: - All ADR numbers now sequential and unique (50 total ADRs) - No duplicate ADR numbers remain - All cross-references updated and verified - Documentation structure consistent and well-organized These changes improve documentation discoverability, maintainability, and ensure proper version tracking. All index files follow consistent format with clear navigation guidance. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
7.0 KiB
ADR-027: Versioning Strategy for Authorization Server Removal
Status
Accepted
Context
We have identified that the authorization server functionality added in v1.0.0-rc.1 was architectural over-engineering. The implementation includes:
- Token endpoint (
POST /indieauth/token) - Authorization endpoint (
POST /indieauth/authorize) - Token verification endpoint (
GET /indieauth/token) - Database tables:
tokens,authorization_codes - Complex OAuth 2.0/PKCE flows
This violates our core principle: "Every line of code must justify its existence." StarPunk V1 only needs authentication (identity verification), not authorization (access tokens). The Micropub endpoint can work with simpler admin session authentication.
We are currently at version 1.0.0-rc.3 (release candidate). The question is: what version number should we use when removing this functionality?
Decision
Continue with release candidates and fix before 1.0.0 final: 1.0.0-rc.4
We will:
- Create version
1.0.0-rc.4that removes the authorization server - Continue iterating through release candidates until the system is truly minimal
- Only release
1.0.0final when we have achieved the correct architecture - Consider this part of the release candidate testing process
Rationale
Why Not Jump to 2.0.0?
While removing features is technically a breaking change that would normally require a major version bump, we are still in release candidate phase. Release candidates explicitly exist to identify and fix issues before the final release. The "1.0.0" milestone has not been officially released yet.
Why Not Go Back to 0.x?
Moving backward from 1.0.0-rc.3 to 0.x would be confusing and violate semantic versioning principles. Version numbers should always move forward. Additionally, the core functionality (IndieAuth authentication, Micropub, RSS) is production-ready - it's just over-engineered.
Why Release Candidates Are Perfect For This
Release candidates serve exactly this purpose:
- Testing reveals issues (in this case, architectural over-engineering)
- Problems are fixed before the final release
- Multiple RC versions are normal and expected
- Users of RCs understand they are testing pre-release software
Semantic Versioning Compliance
Per SemVer 2.0.0 specification:
- Pre-release versions (like
-rc.3) indicate unstable software - Changes between pre-release versions don't require major version bumps
- The version precedence is:
1.0.0-rc.3 < 1.0.0-rc.4 < 1.0.0 - This is the standard pattern: fix issues in RCs, then release final
Honest Communication
The version progression tells a clear story:
1.0.0-rc.1: First attempt at V1 feature complete1.0.0-rc.2: Bug fixes for migration issues1.0.0-rc.3: More migration fixes1.0.0-rc.4: Architectural correction - remove unnecessary complexity1.0.0: Final, minimal, production-ready release
Consequences
Positive
- Maintains forward version progression
- Uses release candidates for their intended purpose
- Avoids confusing version number changes
- Clearly communicates that 1.0.0 final is the stable release
- Allows multiple iterations to achieve true minimalism
- Sets precedent that we'll fix architectural issues before declaring "1.0"
Negative
- Users of RC versions will experience breaking changes
- Might need multiple additional RCs (rc.5, rc.6) if more issues found
- Some might see many RCs as a sign of instability
Migration Path
Users on 1.0.0-rc.1, rc.2, or rc.3 will need to:
- Backup their database
- Update to 1.0.0-rc.4
- Run migrations (which will clean up unused tables)
- Update any Micropub clients to use session auth instead of bearer tokens
Alternatives Considered
Option 1: Jump to v2.0.0
- Rejected: We haven't released 1.0.0 final yet, so there's nothing to major-version bump from
Option 2: Release 1.0.0 then immediately 2.0.0
- Rejected: Releasing a known over-engineered 1.0.0 violates our principles
Option 3: Go back to 0.x series
- Rejected: Version numbers must move forward, this would confuse everyone
Option 4: Use 1.0.0-alpha or 1.0.0-beta
- Rejected: We're already in RC phase, moving backward in stability indicators is wrong
Option 5: Skip to 1.0.0 final with changes
- Rejected: Would surprise RC users with breaking changes in what should be a stable release
Implementation Plan
-
Version 1.0.0-rc.4:
- Remove authorization server components
- Update Micropub to use session authentication
- Add migration to drop unnecessary tables
- Update all documentation
- Clear changelog entry explaining the architectural correction
-
Potential 1.0.0-rc.5+:
- Fix any issues discovered in rc.4
- Continue refining until truly minimal
-
Version 1.0.0 Final:
- Release only when architecture is correct
- No over-engineering
- Every line justified
Changelog Entry Template
## [1.0.0-rc.4] - 2025-11-24
### Removed
- **Authorization Server**: Removed unnecessary OAuth 2.0 authorization server
- Removed token endpoint (`POST /indieauth/token`)
- Removed authorization endpoint (`POST /indieauth/authorize`)
- Removed token verification endpoint (`GET /indieauth/token`)
- Removed `tokens` and `authorization_codes` database tables
- Removed PKCE verification for authorization code exchange
- Removed bearer token authentication
### Changed
- **Micropub Simplified**: Now uses admin session authentication
- Micropub endpoint only accessible to authenticated admin user
- Removed scope validation (unnecessary for single-user system)
- Simplified to basic POST endpoint with session check
### Fixed
- **Architectural Over-Engineering**: Returned to minimal implementation
- V1 only needs authentication, not authorization
- Single-user system doesn't need OAuth 2.0 token complexity
- Follows core principle: "Every line must justify its existence"
### Migration Notes
- This is a breaking change for anyone using bearer tokens with Micropub
- Micropub clients must authenticate via IndieAuth login flow
- Database migration will drop `tokens` and `authorization_codes` tables
- Existing sessions remain valid
Conclusion
Version 1.0.0-rc.4 is the correct choice. It:
- Uses release candidates for their intended purpose
- Maintains semantic versioning compliance
- Communicates honestly about the development process
- Allows us to achieve true minimalism before declaring 1.0.0
The lesson learned: Release candidates are valuable for discovering not just bugs, but architectural issues. We'll continue iterating through RCs until StarPunk truly embodies minimal, elegant simplicity.
References
- Semantic Versioning 2.0.0
- ADR-008: Versioning Strategy
- ADR-021: IndieAuth Provider Strategy
- StarPunk Philosophy
Decision Date: 2024-11-24 Decision Makers: StarPunk Architecture Team Status: Accepted and will be implemented immediately