Commit Graph

62 Commits

Author SHA1 Message Date
89758fd1a5 Merge branch 'feature/micropub-v1' v1.0.0-rc.1 2025-11-24 12:43:06 -07:00
06dd9aa167 chore: Bump version to 1.0.0-rc.1
Release candidate for V1.0.0 with complete IndieWeb support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:42:44 -07:00
d8828fb6c6 feat: Implement Micropub endpoint for creating posts (Phase 3)
Following design in /docs/design/micropub-endpoint-design.md and
/docs/decisions/ADR-028-micropub-implementation.md

Micropub Module (starpunk/micropub.py):
- Property normalization for form-encoded and JSON requests
- Content/title/tags extraction from Micropub properties
- Bearer token extraction from Authorization header or form
- Create action handler integrating with notes.py CRUD
- Query endpoints (config, source, syndicate-to)
- OAuth 2.0 compliant error responses

Micropub Route (starpunk/routes/micropub.py):
- Main /micropub endpoint handling GET and POST
- Bearer token authentication and validation
- Content-type handling (form-encoded and JSON)
- Action routing (create supported, update/delete return V1 error)
- Comprehensive error handling

Integration:
- Registered micropub blueprint in routes/__init__.py
- Maps Micropub properties to StarPunk note format
- Returns 201 Created with Location header per spec
- V1 limitations clearly documented (no update/delete)

All 23 Phase 3 tests pass
Total: 77 tests pass (21 Phase 1 + 33 Phase 2 + 23 Phase 3)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:33:39 -07:00
e5050a0a7e feat: Implement IndieAuth token and authorization endpoints (Phase 2)
Following design in /docs/design/micropub-architecture.md and
/docs/decisions/ADR-029-micropub-v1-implementation-phases.md

Token Endpoint (/auth/token):
- Exchange authorization codes for access tokens
- Form-encoded POST requests per IndieAuth spec
- PKCE support (code_verifier validation)
- OAuth 2.0 error responses
- Validates client_id, redirect_uri, me parameters
- Returns Bearer tokens with scope

Authorization Endpoint (/auth/authorization):
- GET: Display consent form (requires admin login)
- POST: Process approval/denial
- PKCE support (code_challenge storage)
- Scope validation and filtering
- Integration with session management
- Proper error handling and redirects

All 33 Phase 2 tests pass (17 token + 16 authorization)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:26:54 -07:00
4b0ac627e5 docs: Update README to v0.9.5 with architect-approved corrections
- Update version to 0.9.5 throughout README
- Clarify Micropub as coming in v1.0 (currently in development)
- Add note that database auto-initializes on first run
- Fix deployment documentation link to standards location
- Add .gitignore entry for test.ini temporary file

All changes approved by architect agent.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:21:09 -07:00
2eaf67279d docs: Standardize all IndieAuth spec references to W3C URL
- Updated 42 references from indieauth.spec.indieweb.org to www.w3.org/TR/indieauth
- Ensures consistency across all documentation
- Points to the authoritative W3C specification
- No functional changes, documentation update only

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 11:54:04 -07:00
2ecd0d1bad docs: Add Micropub V1 Phase 1 implementation progress report
Documents completion of token security implementation:
- Database migration complete
- Token management module with comprehensive tests
- All 21 tests passing
- Security issues resolved (datetime UTC, schema detection)

Phase 1 complete. Ready for Phase 2 (endpoints).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 11:53:20 -07:00
3b41029c75 feat: Implement secure token management for Micropub
Implements token security and management as specified in ADR-029:

Database Changes (BREAKING):
- Add secure tokens table with SHA256 hashed storage
- Add authorization_codes table for IndieAuth token exchange
- Drop old insecure tokens table (invalidates existing tokens)
- Update SCHEMA_SQL to match post-migration state

Token Management (starpunk/tokens.py):
- Generate cryptographically secure tokens
- Hash tokens with SHA256 for secure storage
- Create and verify access tokens
- Create and exchange authorization codes
- PKCE support (optional but recommended)
- Scope validation (V1: only 'create' scope)
- Token expiry and revocation support

Testing:
- Comprehensive test suite for all token operations
- Test authorization code replay protection
- Test PKCE validation
- Test parameter validation
- Test token expiry

Security:
- Tokens never stored in plain text
- Authorization codes single-use with replay protection
- Optional PKCE for enhanced security
- Proper UTC datetime handling for expiry

Related:
- ADR-029: Micropub IndieAuth Integration Strategy
- Migration 002: Secure tokens and authorization codes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 11:52:09 -07:00
e2333cb31d chore: Add documentation-manager agent configuration
This agent helps maintain documentation organization and ensures
README.md stays current with the codebase.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 11:43:17 -07:00
dca9604746 docs: Address Micropub design issues and clarify V1 scope
- Create ADR-029 for IndieAuth/Micropub integration strategy
- Address all critical issues from developer review:
  - Add missing 'me' parameter to token endpoint
  - Clarify PKCE as optional extension
  - Define token security migration strategy
  - Add authorization_codes table schema
  - Define property mapping rules
  - Clarify two authentication flows
- Simplify V1 scope per user decision:
  - Remove update/delete operations from V1
  - Focus on create-only functionality
  - Reduce timeline from 8-10 to 6-8 days
- Update project plan with post-V1 roadmap:
  - Phase 11: Update/delete operations (V1.1)
  - Phase 12: Media endpoint (V1.2)
  - Phase 13: Advanced IndieWeb features (V2.0)
  - Phase 14: Enhanced features (V2.0+)
- Create token security migration documentation
- Update ADR-028 for consistency with simplified scope

BREAKING CHANGE: Token migration will invalidate all existing tokens for security
2025-11-24 11:39:13 -07:00
5bbecad01d docs: Design Micropub endpoint architecture for V1 release
- Add comprehensive Micropub endpoint design document
- Define token management approach for IndieAuth
- Specify minimal V1 feature set (create posts, queries)
- Defer media endpoint and advanced features to post-V1
- Add ADR-028 documenting implementation strategy
- 8-10 day implementation timeline to unblock V1

The Micropub endpoint is the final blocker for V1.0.0 release.
2025-11-24 11:19:59 -07:00
800bc1069d docs: Update architecture overview to reflect v0.9.5 implementation
Comprehensively updated docs/architecture/overview.md to document the
actual v0.9.5 implementation instead of aspirational V1 features.

Major Changes:

1. Executive Summary
   - Added version tag (v0.9.5) and status (Pre-V1 Release)
   - Updated tech stack: Python 3.11, uv, Gunicorn, Gitea Actions
   - Added deployment context (container-based, CI/CD)

2. Route Documentation
   - Public routes: Documented actual routes (/, /note/<slug>, /feed.xml, /health)
   - Admin routes: Updated from /admin/* to /auth/* (v0.9.2 change)
   - Added development routes (/dev/login)
   - Clearly marked implemented vs. planned routes

3. API Layer Reality Check
   - Notes API: Marked as NOT IMPLEMENTED (optional, deferred to V2)
   - Micropub endpoint: Marked as NOT IMPLEMENTED (critical V1 blocker)
   - RSS feed: Marked as IMPLEMENTED with full feature list (v0.6.0)

4. Authentication Flow Updates
   - Documented PKCE implementation (v0.8.0)
   - Updated IndieLogin flow to use /authorize endpoint (v0.9.4)
   - Added trailing slash normalization (v0.9.1)
   - Documented session token hashing (SHA-256)
   - Updated cookie name (starpunk_session, v0.5.1)
   - Corrected code verification endpoint usage

5. Database Schema
   - Added schema_migrations table (v0.9.0)
   - Added code_verifier to auth_state (v0.8.0)
   - Documented automatic migration system
   - Added session metadata fields (user_agent, ip_address)
   - Updated indexes for performance

6. Container Deployment (NEW)
   - Multi-stage Containerfile documentation
   - Gunicorn WSGI server configuration
   - Health check endpoint
   - CI/CD pipeline (Gitea Actions)
   - Volume persistence strategy

7. Implementation Status Section (NEW)
   - Comprehensive list of implemented features (v0.3.0-v0.9.5)
   - Clear documentation of unimplemented features
   - Micropub marked as critical V1 blocker
   - Standards validation status (partial)

8. Success Metrics
   - Updated with actual achievements
   - 70% complete toward V1
   - Container deployment working
   - Automated migrations implemented

Security documentation now accurately reflects PKCE implementation,
session token hashing, and correct IndieLogin.com API usage.

All route tables, data flow diagrams, and examples updated to match
v0.9.5 codebase reality.

Related: Architect validation report identified need to update
architecture docs to reflect actual implementation vs. planned features.
2025-11-24 11:03:44 -07:00
b184bc1316 docs: Update implementation plan to reflect v0.9.5 reality
Updated docs/projectplan/v1/implementation-plan.md to accurately track
current implementation status and clearly document unimplemented features.

Changes:
- Updated current version from 0.4.0 to 0.9.5
- Updated progress summary: Phases 1-5 complete (70% overall)
- Added "CRITICAL: Unimplemented Features" section with clear status
  - Micropub endpoint: NOT IMPLEMENTED (critical V1 blocker)
  - Notes CRUD API: NOT IMPLEMENTED (optional, deferred to V2)
  - RSS feed: IMPLEMENTED (v0.6.0, needs verification)
  - IndieAuth token endpoint: NOT IMPLEMENTED (for Micropub)
  - Microformats validation: PARTIAL (markup exists, not validated)

- Updated summary checklist to reflect actual implementation:
  - Admin web interface: COMPLETE (v0.5.2)
  - Public web interface: COMPLETE (v0.5.0)
  - RSS feed: COMPLETE (v0.6.0)
  - Authentication: COMPLETE (v0.8.0 with PKCE)
  - Test coverage: 87% overall
  - Standards compliance: PARTIAL

- Updated timeline with realistic path to V1:
  - Completed: ~35 hours (Phases 1-5)
  - Remaining: ~15-25 hours (Micropub + validation)
  - Path to V1: Micropub (12h), validation (4h), docs (3h), release (2h)

- Updated quality gates to reflect v0.9.5 achievements:
  - Test coverage: 87% (exceeds 80% target)
  - Manual testing: Complete (IndieLogin working)
  - Production deployment: Complete (container + CI/CD)
  - Security tests: Complete (PKCE, token hashing)

This update ensures the implementation plan accurately reflects the
significant progress made from v0.4.0 to v0.9.5 while clearly
documenting what remains for V1 release.

Related: Architect validation report identified discrepancies between
documented V1 scope and actual v0.9.5 implementation.
2025-11-24 11:03:05 -07:00
354c18b5b8 docs: Add comprehensive documentation navigation guide to CLAUDE.md
Added "Documentation Navigation" section with:
- Clear explanation of docs/ folder structure and purpose of each subdirectory
- Guidelines for finding existing documentation before implementing features
- Practical rules for when to create ADRs, design docs, reports, or standards
- File naming conventions for different document types

This improves agent and developer ability to navigate the documentation
system and maintain proper organization standards.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 10:28:55 -07:00
cebd3fb71e docs: Renumber duplicate ADRs to eliminate conflicts
Resolved all duplicate ADR numbers by renumbering based on chronological order:

ADR Renumbering Map:
- ADR-006-indieauth-client-identification.md → ADR-023
- ADR-010-static-identity-page.md → ADR-024
- ADR-019-indieauth-pkce-authentication.md → ADR-025
- ADR-022-indieauth-token-exchange-compliance.md → ADR-026
- ADR-022-indieauth-authentication-endpoint-correction.md → ADR-027

Files Kept Original Numbers (earliest chronologically):
- ADR-006-python-virtual-environment-uv.md (2025-11-18 19:21:31)
- ADR-010-authentication-module-design.md (2025-11-18 20:35:36)
- ADR-019-indieauth-correct-implementation.md (2025-11-19 15:43:38)
- ADR-022-auth-route-prefix-fix.md (2025-11-22 18:22:08)

Updated:
- ADR titles inside each renamed file
- Cross-references in implementation reports
- CHANGELOG.md references to ADR-025
- Renamed associated report files to match new ADR numbers
2025-11-24 10:25:00 -07:00
066cde8c46 docs: Extract and organize CLAUDE.MD content, restructure documentation
This commit performs comprehensive documentation reorganization:

1. Extracted testing checklist from CLAUDE.MD to docs/standards/testing-checklist.md
   - Consolidated manual testing checklist
   - Added validation tools and resources
   - Created pre-release validation workflow

2. Streamlined CLAUDE.md to lightweight operational instructions
   - Python environment setup (uv)
   - Agent-developer protocol
   - Key documentation references
   - Removed redundant content (already in other docs)

3. Removed CLAUDE.MD (uppercase) - content was redundant
   - All content already exists in architecture/overview.md and projectplan docs
   - Only unique content (testing checklist) was extracted

4. Moved root documentation files to appropriate locations:
   - CONTAINER_IMPLEMENTATION_SUMMARY.md -> docs/reports/2025-11-19-container-implementation-summary.md
   - QUICKFIX-AUTH-LOOP.md -> docs/reports/2025-11-18-quickfix-auth-loop.md
   - TECHNOLOGY-STACK-SUMMARY.md -> docs/architecture/technology-stack-legacy.md
   - TODO_TEST_UPDATES.md -> docs/reports/2025-11-19-todo-test-updates.md

5. Consolidated design folders:
   - Moved all docs/designs/ content into docs/design/
   - Renamed PHASE-5-EXECUTIVE-SUMMARY.md to phase-5-executive-summary.md (consistent naming)
   - Removed empty docs/designs/ directory

6. Added ADR-021: IndieAuth Provider Strategy
   - Documents decision to build own IndieAuth provider
   - Explains rationale and trade-offs

Repository root now contains only: README.md, CLAUDE.md, CHANGELOG.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 10:17:50 -07:00
610ec061ca ci: Add docker and git to workflow dependencies
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 20:51:04 -07:00
f0570c2cb1 ci: Fix Node.js install logic with proper conditionals
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 20:48:43 -07:00
35376b1a5a ci: Install Node.js in workflow for actions support
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 20:46:41 -07:00
fb238e5bd6 ci: Add manual trigger for container build workflow
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 20:16:40 -07:00
b4ddc6708e Update .gitea/workflows/build-container.yml 2025-11-24 04:12:07 +01:00
f3965959bc ci: Replace GitLab CI with Gitea Actions workflow
Switched from GitLab CI to Gitea Actions for container builds.
Triggers on version tags, pushes to Gitea Container Registry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 20:09:12 -07:00
e97b778cb7 ci: Add GitLab CI/CD pipeline for container builds
Builds and pushes container images to GitLab Container Registry
when version tags (v*.*.*) are pushed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 19:59:41 -07:00
9c65723e9d fix: Handle empty FLASK_SECRET_KEY in config (v0.9.5)
os.getenv() returns empty string instead of using default when env var
is set but empty. This caused SECRET_KEY to be empty when FLASK_SECRET_KEY=""
was in .env, breaking Flask sessions/flash messages.

Now treats empty string same as unset, properly falling back to SESSION_SECRET.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.5
2025-11-23 19:36:08 -07:00
a6f3fbaae4 fix: Use authorization endpoint for IndieAuth code verification (v0.9.4)
IndieAuth authentication-only flows should redeem the code at the
authorization endpoint, not the token endpoint. The token endpoint
is only for authorization flows that need access tokens.

- Remove grant_type parameter (only needed for token flows)
- Change endpoint from /token to /authorize
- Update debug logging to reflect code verification flow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.4
2025-11-22 19:19:37 -07:00
cbef0c1561 fix: Add grant_type to IndieAuth token exchange (v0.9.3)
The token exchange request was missing the required grant_type parameter
per OAuth 2.0 RFC 6749. IndieAuth providers that properly validate this
were rejecting the request with a 422 error.

- Add grant_type=authorization_code to token exchange data
- Add ADR-022 documenting the spec compliance requirement

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.3
2025-11-22 18:50:23 -07:00
44a97e4ffa fix: Change auth blueprint prefix from /admin to /auth (v0.9.2)
The auth routes were registered under /admin/* but the IndieAuth
redirect_uri was configured as /auth/callback, causing 404 errors
when providers redirected back after authentication.

- Change auth blueprint url_prefix from "/admin" to "/auth"
- Update test expectations for new auth route paths
- Add ADR-022 documenting the architectural decision

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.2
2025-11-22 18:22:08 -07:00
78165ad3be test: Add IndieLogin test form for debugging
Test page with exact form from IndieLogin.com API docs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 17:57:40 -07:00
deb26fbce0 Add debug logging for complete authorization URL
Shows the exact GET request URL being sent to IndieLogin.com's
/authorize endpoint, including all query parameters in their
encoded form. This helps debug authentication flow issues.

- Added debug log after auth_url construction in initiate_login()
- Logs complete URL with all parameters before redirect
- Version remains 0.9.1 (debugging enhancement only)
2025-11-19 16:35:50 -07:00
69b4e3d376 docs: Add v0.9.1 implementation report
Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 16:29:52 -07:00
ba0f409a2a fix: Add trailing slash to SITE_URL and enhance debug logging (v0.9.1)
Fix 1: SITE_URL trailing slash normalization
- IndieLogin.com requires client_id URLs to have trailing slash for root domains
- Added automatic normalization in load_config() after env loading
- Added secondary normalization after config overrides (for test compatibility)
- Fixes "client_id is not registered" authentication errors
- Updated redirect_uri construction to avoid double slashes

Fix 2: Enhanced httpx debug logging
- Added detailed request logging before token exchange POST
- Added detailed response logging after token exchange POST
- Shows exact HTTP method, URL, headers, and body for troubleshooting
- All sensitive data (tokens, verifiers) automatically redacted
- Supplements existing _log_http_request/_log_http_response helpers

Version: 0.9.1 (PATCH - bug fixes)
- Updated __version__ in starpunk/__init__.py
- Added CHANGELOG entry for v0.9.1

Tests: 486/514 passing (28 pre-existing failures from v0.8.0)
- No new test failures introduced
- Trailing slash normalization verified in config
- Debug logging outputs verified

Related: IndieLogin.com authentication flow
Following: docs/standards/git-branching-strategy.md

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.1
2025-11-19 16:27:13 -07:00
ebca9064c5 docs: Add ADR-020 and migration system implementation guidance
Architecture documentation for automatic database migrations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 16:11:17 -07:00
9a805ec316 Implement automatic database migration system
Following design in ADR-020, implementation guidance, and quick reference.

Phase 1: Migration System Core (starpunk/migrations.py)
- Create migration runner with fresh database detection
- Implement is_schema_current() heuristic for fresh DB detection
- Add helper functions (table_exists, column_exists, index_exists)
- Complete error handling with MigrationError exception
- 315 lines of production code

Phase 2: Database Integration (starpunk/database.py)
- Modify init_db() to call run_migrations()
- Add logger parameter handling
- 5 lines changed for integration

Phase 3: Comprehensive Testing (tests/test_migrations.py)
- 26 tests covering all scenarios (100% pass rate)
- Tests for fresh DB, legacy DB, helpers, error handling
- Integration test with actual migration file
- 560 lines of test code

Phase 4: Version and Documentation
- Bump version to 0.9.0 (MINOR increment per versioning strategy)
- Update CHANGELOG.md with comprehensive v0.9.0 entry
- Create implementation report documenting all details

Features:
- Fresh database detection prevents unnecessary migrations
- Legacy database detection applies pending migrations automatically
- Migration tracking table records all applied migrations
- Idempotent execution safe for multiple runs
- Fail-safe: app won't start if migrations fail
- Container deployments now fully automatic

Testing:
- All 26 migration tests passing (100%)
- Fresh database scenario verified (auto-skip)
- Legacy database scenario verified (migrations applied)
- Idempotent behavior confirmed

Documentation:
- Implementation report in docs/reports/
- CHANGELOG.md updated with v0.9.0 entry
- All architecture decisions from ADR-020 implemented

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.9.0
2025-11-19 16:08:33 -07:00
5e50330bdf feat: Implement PKCE authentication for IndieLogin.com
This fixes critical IndieAuth authentication by implementing PKCE (Proof Key
for Code Exchange) as required by IndieLogin.com API specification.

Added:
- PKCE code_verifier and code_challenge generation (RFC 7636)
- Database column: auth_state.code_verifier for PKCE support
- Issuer validation for authentication callbacks
- Comprehensive PKCE unit tests (6 tests, all passing)
- Database migration script for code_verifier column

Changed:
- Corrected IndieLogin.com API endpoints (/authorize and /token)
- State token validation now returns code_verifier for token exchange
- Authentication flow follows IndieLogin.com API specification exactly
- Enhanced logging with code_verifier redaction

Removed:
- OAuth metadata endpoint (/.well-known/oauth-authorization-server)
  Added in v0.7.0 but not required by IndieLogin.com
- h-app microformats markup from templates
  Modified in v0.7.1 but not used by IndieLogin.com
- indieauth-metadata link from HTML head

Security:
- PKCE prevents authorization code interception attacks
- Issuer validation prevents token substitution attacks
- Code verifier securely stored, redacted in logs, and single-use

Documentation:
- Version: 0.8.0
- CHANGELOG updated with v0.8.0 entry and v0.7.x notes
- ADR-016 and ADR-017 marked as superseded by ADR-019
- Implementation report created in docs/reports/
- Test update guide created in TODO_TEST_UPDATES.md

Breaking Changes:
- Users mid-authentication will need to restart login after upgrade
- Database migration required before deployment

Related: ADR-019

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.8.0
2025-11-19 15:43:38 -07:00
caabf0087e fix: Remove hidden attributes from h-app microformat
h-app was invisible to IndieAuth parsers due to hidden and
aria-hidden attributes, preventing proper client discovery.

- Remove hidden and aria-hidden="true" from h-app div
- Update version to 0.7.1
- Update CHANGELOG with fix details

This provides backward compatibility for IndieAuth services
that rely on h-app microformat parsing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.7.1
2025-11-19 14:59:29 -07:00
01e66a063e feat: Add detailed IndieAuth logging with security-aware token redaction
- Add logging helper functions with automatic token redaction
- Implement comprehensive logging throughout auth flow
- Add production warning for DEBUG logging
- Add 14 new tests for logging functionality
- Update version to v0.7.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.7.0
2025-11-19 14:51:30 -07:00
8be079593f fix: Implement OAuth Client ID Metadata Document endpoint
Fixes critical IndieAuth authentication failure by implementing modern
JSON-based client discovery mechanism per IndieAuth spec section 4.2.

Added /.well-known/oauth-authorization-server endpoint returning JSON
metadata with client_id, redirect_uris, and OAuth capabilities.

Added <link rel="indieauth-metadata"> discovery hint in HTML head.

Maintained h-app microformats for backward compatibility with legacy
IndieAuth servers.

This resolves "client_id is not registered" error from IndieLogin.com
by providing the metadata document modern IndieAuth servers expect.

Changes:
- Added oauth_client_metadata() endpoint in public routes
- Returns JSON with client info (24-hour cache)
- Uses config values (SITE_URL, SITE_NAME) not hardcoded URLs
- Added indieauth-metadata link in base.html
- Comprehensive test suite (15 new tests, all passing)
- Updated version to v0.6.2 (PATCH increment)
- Updated CHANGELOG.md with detailed fix documentation

Standards Compliance:
- IndieAuth specification section 4.2
- OAuth Client ID Metadata Document format
- IANA well-known URI registry
- RFC 7591 OAuth 2.0 Dynamic Client Registration

Testing:
- 467/468 tests passing (99.79%)
- 15 new tests for OAuth metadata and discovery
- Zero regressions in existing tests
- Test coverage maintained at 88%

Related Documentation:
- ADR-017: OAuth Client ID Metadata Document Implementation
- IndieAuth Fix Summary report
- Implementation report in docs/reports/

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 14:33:23 -07:00
16dabc0e73 Fix IndieAuth client identification by making h-app visible
Following diagnosis in /docs/architecture/indieauth-client-diagnosis.md
and decision in /docs/decisions/ADR-006-indieauth-client-identification.md

Problem: The h-app microformat had hidden aria-hidden="true" attributes
that made it invisible to IndieAuth parsers, causing "client_id is not
registered" errors when authenticating with external providers.

Solution: Remove hidden attributes from h-app div in templates/base.html
to allow IndieAuth parsers to discover client metadata.

This ensures IndieAuth providers can validate our application during
the authorization flow.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 14:09:56 -07:00
dd85917988 docs: add IndieAuth client identification analysis and decision
Architect analysis identified the root cause of 'client_id is not
registered' error: h-app microformat is hidden from parsers.

Includes:
- Complete diagnosis of IndieAuth client registration issue
- ADR-006: IndieAuth Client Identification decision record
- Implementation guidelines for developer

Developer task: Remove hidden attributes from h-app div.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 14:09:14 -07:00
68669b9a6a docs: add reference IndieAuth identity page implementation
Add minimal, production-ready static HTML identity page as reference
implementation for IndieAuth authentication.

Includes:
- Complete identity-page.html with h-card and IndieAuth endpoints
- Architectural documentation and rationale
- ADR-010: Static Identity Page decision record
- Customization guide for users

The example is zero-dependency, copy-paste ready, and guaranteed to
work with IndieLogin.com and StarPunk. Pre-configured for
thesatelliteoflove.com as working example.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 13:03:49 -07:00
155cae8055 chore: remove VERSION from .env.example
VERSION is now automatically sourced from the package __version__
variable in config.py, so it should not be set in environment variables.

This prevents version inconsistencies and ensures the displayed version
always matches the code version.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 12:31:56 -07:00
93634d2bb0 fix: use __version__ as default for VERSION config
The config.py was defaulting to hardcoded '0.6.0' instead of using
the package __version__ variable. This caused the footer to show the
wrong version number even after updating to 0.6.1.

Now config.py imports and uses __version__ as the default, ensuring
version consistency across the codebase.

Fixes version display bug in v0.6.1.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 12:17:08 -07:00
6d7002fa74 Merge hotfix: IndieAuth client discovery (v0.6.1)
Critical Hotfix - IndieAuth Client Discovery
=============================================

Problem Fixed:
--------------
Production IndieAuth authentication was failing with error:
'This client_id is not registered (https://starpunk.thesatelliteoflove.com)'

Root Cause:
-----------
StarPunk was missing IndieAuth client discovery metadata. IndieLogin.com
could not verify the client_id because no client identification information
was present in the application HTML.

Solution Implemented:
--------------------
Added h-app microformats markup to base.html footer to provide IndieAuth
client discovery metadata per IndieWeb standards.

Changes:
--------
- Added h-app microformats to templates/base.html
- Version bumped to v0.6.1
- Added 6 comprehensive tests for h-app markup (100% passing)
- Updated CHANGELOG.md with v0.6.1 release notes
- Created ADR-016: IndieAuth Client Discovery
- Created comprehensive analysis and implementation reports

Test Results:
-------------
- Total Tests: 455/456 passing (99.78%)
- New Tests: 6 for h-app microformats (100% passing)
- No Regressions: All existing tests still pass

Standards Compliance:
--------------------
- IndieAuth client discovery (h-app microformats)
- Microformats2 h-app specification
- HTML5 hidden attribute standard
- ARIA accessibility standard

Bug Classification:
------------------
- Severity: Critical (blocked production authentication)
- Type: Phase 3/4 bug (missed during implementation)
- Fix Type: Hotfix (immediate release required)

Expected Outcome:
-----------------
IndieLogin.com can now verify StarPunk as a legitimate OAuth client,
enabling production authentication to work correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.6.1
2025-11-19 11:46:32 -07:00
6a29b0199e Fix IndieAuth client discovery for production authentication
Add h-app microformats markup to base.html to enable IndieLogin.com
to verify StarPunk as a legitimate OAuth client. Without this markup,
IndieLogin returns "client_id is not registered" error, blocking all
production authentication.

The h-app markup provides client identification per IndieAuth legacy
standard, which is widely supported by authorization servers including
IndieLogin.com.

Changes:
- Add h-app microformats div to base.html footer (hidden)
- Update version to v0.6.1 (patch release per ADR-008)
- Update CHANGELOG.md with v0.6.1 release notes
- Add 6 comprehensive tests for h-app markup (all passing)
- Create ADR-016 documenting client discovery decision
- Create architecture analysis report
- Create implementation report

Tests: 456 total, 455 passing (99.78%)
New tests: 6 for h-app microformats (100% passing)

Fixes critical bug preventing production authentication.

Related: Phase 3 Authentication implementation, ADR-016

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 11:44:35 -07:00
3e9639f17b Merge Phase 5: RSS feed and production container
Phase 5 Complete - v0.6.0
========================

RSS Feed Generation:
- RSS 2.0 feed at /feed.xml
- Server-side caching (5 minutes) with ETag support
- RFC-822 date formatting
- Feed auto-discovery in HTML
- 50 item limit (configurable)
- 96% test coverage for feed module

Production Container:
- Multi-stage Containerfile (174MB image, 30% under target)
- Podman and Docker compatible
- Health check endpoint at /health
- Gunicorn WSGI server (4 workers)
- Non-root user execution (security)
- Volume persistence for data
- compose.yaml for orchestration
- Reverse proxy configs (Caddy + Nginx)

Quality Metrics:
- Tests: 449/450 passing (99.78%)
- Coverage: 88% overall
- Image size: 174MB (target: <250MB)
- Startup time: ~5 seconds (target: <10s)

Architecture Reviews:
- RSS Implementation: 98/100 (Excellent)
- Container Implementation: 96/100 (Grade A)
- Both approved for production deployment

Documentation:
- ADR-014: RSS Feed Implementation
- ADR-015: Phase 5 Implementation Approach
- 660-line deployment guide
- Comprehensive implementation reports
- Architectural validation reports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
v0.6.0
2025-11-19 10:31:35 -07:00
6863bcae67 docs: add Phase 5 design and architectural review documentation
- Add ADR-014: RSS Feed Implementation
- Add ADR-015: Phase 5 Implementation Approach
- Add Phase 5 design documents (RSS and container)
- Add pre-implementation review
- Add RSS and container validation reports
- Add architectural approval for v0.6.0 release

Architecture reviews confirm 98/100 (RSS) and 96/100 (container) scores.
Phase 5 approved for production deployment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 10:30:55 -07:00
23ec054dee docs: add Phase 5 containerization summary
Quick reference document summarizing:
- All deliverables and implementation details
- Testing results and performance metrics
- Deployment workflows and configuration
- Success criteria verification
- Next steps and recommendations

Phase 5 containerization: Complete 
2025-11-19 10:16:21 -07:00
8d593ca1b9 docs: add container deployment guide and implementation report
Complete Phase 5 containerization documentation:
- Add comprehensive container deployment guide (500+ lines)
- Document Podman and Docker deployment workflows
- Include reverse proxy setup for Caddy and Nginx
- Add troubleshooting, monitoring, and maintenance sections
- Document --userns=keep-id requirement for Podman
- Add backup/restore procedures
- Include performance tuning guidelines
- Add security best practices

Implementation report includes:
- Technical implementation details
- Testing results and metrics
- Challenge resolution (Podman permissions)
- Security and compliance verification
- Integration with RSS feed
- Lessons learned and recommendations

Updated CHANGELOG.md:
- Document container features in v0.6.0
- Add configuration variables
- List deployment capabilities
- Note Podman and Docker compatibility

Phase 5 containerization: 100% complete
2025-11-19 10:14:35 -07:00
c559f89a7f feat: add production container support with health check endpoint
Implements Phase 5 containerization specification:
- Add /health endpoint for container monitoring
- Create multi-stage Containerfile (Podman/Docker compatible)
- Add compose.yaml for orchestration
- Add Caddyfile.example for reverse proxy (auto-HTTPS)
- Add nginx.conf.example as alternative
- Update .env.example with container and RSS feed variables
- Add gunicorn WSGI server to requirements.txt

Container features:
- Multi-stage build for smaller image size
- Non-root user (starpunk:1000)
- Health check with database connectivity test
- Volume mount for data persistence
- Resource limits and logging configuration
- Security headers and HTTPS configuration examples

Health check endpoint:
- Tests database connectivity
- Verifies filesystem access
- Returns JSON with status, version, and environment

Following Phase 5 design in docs/designs/phase-5-rss-and-container.md
2025-11-19 10:02:41 -07:00
fbbc9c6d81 docs: add Phase 5 RSS implementation report
Complete implementation report documenting:
- RSS feed generation module and route
- Configuration and template updates
- Comprehensive testing (44 tests, 88% coverage)
- Standards compliance (RSS 2.0, RFC-822, IndieWeb)
- Performance and security considerations
- Git workflow and commit history
- Success criteria verification
- Lessons learned and next steps

Phase 5 Part 1 (RSS) is now complete.
2025-11-19 09:00:08 -07:00