Files
StarPunk/docs/decisions/ADR-042-versioning-strategy-for-authorization-removal.md
Phil Skentelbery e589f5bd6c docs: Fix ADR numbering conflicts and create comprehensive documentation indices
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>
2025-11-25 13:28:56 -07:00

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:

  1. Create version 1.0.0-rc.4 that removes the authorization server
  2. Continue iterating through release candidates until the system is truly minimal
  3. Only release 1.0.0 final when we have achieved the correct architecture
  4. 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 complete
  • 1.0.0-rc.2: Bug fixes for migration issues
  • 1.0.0-rc.3: More migration fixes
  • 1.0.0-rc.4: Architectural correction - remove unnecessary complexity
  • 1.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:

  1. Backup their database
  2. Update to 1.0.0-rc.4
  3. Run migrations (which will clean up unused tables)
  4. 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

  1. 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
  2. Potential 1.0.0-rc.5+:

    • Fix any issues discovered in rc.4
    • Continue refining until truly minimal
  3. 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


Decision Date: 2024-11-24 Decision Makers: StarPunk Architecture Team Status: Accepted and will be implemented immediately