Files
StarPunk/docs/design/v1.2.0/2025-12-09-v1.2.0-release.md
Phil Skentelbery 372064b116 feat(tags): Add tag archive route and admin interface integration
Implement Phase 3 of v1.3.0 tags feature per microformats-tags-design.md:

Routes (starpunk/routes/public.py):
- Add /tag/<tag> archive route with normalization and 404 handling
- Pre-load tags in index route for all notes
- Pre-load tags in note route for individual notes

Admin (starpunk/routes/admin.py):
- Parse comma-separated tag input in create route
- Parse tag input in update route
- Pre-load tags when displaying edit form
- Empty tag field removes all tags

Templates:
- Add tag input field to templates/admin/edit.html
- Add tag input field to templates/admin/new.html
- Use Jinja2 map filter to display existing tags

Implementation details:
- Tag URL parameter normalized to lowercase before lookup
- Tags pre-loaded using object.__setattr__ pattern (like media)
- parse_tag_input() handles trim, dedupe, normalization
- All existing tests pass (micropub categories, admin routes)

Per architect design:
- No pagination on tag archives (acceptable for v1.3.0)
- No autocomplete in admin (out of scope)
- Follows existing media loading patterns

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 11:42:16 -07:00

259 lines
7.2 KiB
Markdown

# v1.2.0 Release Report
**Date**: 2025-12-09
**Version**: 1.2.0
**Release Type**: Stable Minor Release
**Previous Version**: 1.1.2
## Overview
Successfully promoted v1.2.0-rc.2 to stable v1.2.0 release. This is a major feature release adding comprehensive media support, author discovery, custom slugs, and enhanced syndication feeds.
## Release Process
### 1. Version Updates
**File**: `starpunk/__init__.py`
- Updated `__version__` from `"1.2.0-rc.2"` to `"1.2.0"`
- Updated `__version_info__` from `(1, 2, 0, "dev")` to `(1, 2, 0)`
### 2. CHANGELOG Updates
**File**: `CHANGELOG.md`
- Merged rc.1 and rc.2 entries into single `[1.2.0]` section
- Added release date: 2025-12-09
- Consolidated all features and fixes from both release candidates
- Maintained chronological order of changes
### 3. Git Operations
**Commit**: `927db4a`
```
release: Bump version to 1.2.0
Promote v1.2.0-rc.2 to stable v1.2.0 release
- Merged rc.1 and rc.2 changelog entries
- Updated version in starpunk/__init__.py
- All features tested in production
```
**Tag**: `v1.2.0` (annotated)
- Comprehensive release notes included
- Documents all major features
- Notes standards compliance
- Includes upgrade instructions
### 4. Container Images
Built and pushed container images:
- `git.thesatelliteoflove.com/phil/starpunk:v1.2.0`
- `git.thesatelliteoflove.com/phil/starpunk:latest`
**Image Size**: 190 MB
**Base**: Python 3.11-slim
**Build**: Multi-stage with uv package manager
### 5. Registry Push
Successfully pushed to remote:
- Git commit pushed to `origin/main`
- Git tag `v1.2.0` pushed to remote
- Container images pushed to `git.thesatelliteoflove.com` registry
## Release Contents
### Major Features
#### Media Upload & Display
- Upload up to 4 images per note (JPEG, PNG, GIF, WebP)
- Automatic image optimization with Pillow library
- File size limit: 10MB per image
- Dimension limit: 4096x4096 pixels
- Auto-resize images over 2048px
- EXIF orientation correction
- Social media style layout (media first, then text)
- Optional captions for accessibility
- Responsive image sizing with proper CSS
#### Feed Media Enhancement
- Media RSS namespace (xmlns:media) for structured metadata
- RSS enclosure element for first image (per RSS 2.0 spec)
- Media RSS media:content elements for all images
- Media RSS media:thumbnail element for preview
- JSON Feed image field (per JSON Feed 1.1 spec)
- Enhanced display in modern feed readers (Feedly, Inoreader, NetNewsWire)
#### Author Profile Discovery
- Automatic h-card discovery from IndieAuth identity
- Caches author information (name, photo, bio, rel-me links)
- 24-hour cache TTL
- Graceful fallback to domain name
- Never blocks login functionality
- Eliminates need for manual author configuration
#### Complete Microformats2 Support
- Full h-entry markup with required properties
- Author h-card nested within each h-entry
- Proper p-name handling (only when explicit title)
- u-uid and u-url match for permalink stability
- Homepage as h-feed with proper structure
- rel-me links from discovered profile
- dt-updated property when note modified
- Passes Microformats2 validation
#### Custom Slugs
- Web UI custom slug input field
- Optional field with auto-generation fallback
- Read-only after creation (preserves permalinks)
- Automatic validation and sanitization
- Helpful placeholder text and guidance
- Matches Micropub mp-slug behavior
### Fixes from RC Releases
#### RC.2 Fixes
- Media display on homepage (not just individual note pages)
- Responsive image sizing with container constraints
- Caption display (alt text only, not visible text)
- Logging correlation ID crash in non-request contexts
#### RC.1 Fixes
- All features tested and validated in production
## Standards Compliance
- W3C Micropub Specification
- Microformats2 h-entry, h-card, h-feed
- RSS 2.0 with Media RSS extension
- JSON Feed 1.1 specification
- IndieWeb best practices
## Testing
- 600+ tests passing
- All features tested in production (rc.1 and rc.2)
- Enhanced feed reader compatibility verified
- Media upload and display validated
- Author discovery tested with multiple profiles
## Upgrade Instructions
### From v1.1.2
No breaking changes. Simple upgrade process:
1. Pull latest code: `git pull origin main`
2. Checkout tag: `git checkout v1.2.0`
3. Restart application
### Configuration
No configuration changes required. All new features work automatically.
Optional configuration for media:
- `MEDIA_MAX_SIZE` - Max file size in bytes (default: 10MB)
- `MEDIA_MAX_DIMENSION` - Max dimension in pixels (default: 4096)
- `MEDIA_RESIZE_THRESHOLD` - Auto-resize threshold (default: 2048)
## Verification
### Version Check
```bash
$ uv run python -c "from starpunk import __version__; print(__version__)"
1.2.0
```
### Git Tag
```bash
$ git tag -l v1.2.0
v1.2.0
$ git log -1 --oneline
927db4a release: Bump version to 1.2.0
```
### Container Images
```bash
$ podman images | grep starpunk | grep v1.2.0
git.thesatelliteoflove.com/phil/starpunk v1.2.0 20853617ebf1 190 MB
git.thesatelliteoflove.com/phil/starpunk latest 20853617ebf1 190 MB
```
## Documentation
### Updated Files
- `/home/phil/Projects/starpunk/starpunk/__init__.py`
- `/home/phil/Projects/starpunk/CHANGELOG.md`
### Release Documentation
- Git tag annotation with full release notes
- This implementation report
- CHANGELOG.md with complete details
### Existing Documentation (Unchanged)
- `/home/phil/Projects/starpunk/docs/design/v1.2.0-media-css-design.md`
- `/home/phil/Projects/starpunk/docs/design/v1.1.2-caption-alttext-update.md`
- `/home/phil/Projects/starpunk/docs/design/media-display-fixes.md`
- `/home/phil/Projects/starpunk/docs/reports/2025-11-28-media-display-fixes.md`
## Release Timeline
- **2025-11-28**: v1.2.0-rc.1 released (initial feature complete)
- **2025-12-09**: v1.2.0-rc.2 released (media display fixes)
- **2025-12-09**: v1.2.0 stable released (production validated)
## Backwards Compatibility
Fully backward compatible with v1.1.2. No breaking changes.
- Existing notes display correctly
- Existing feeds continue working
- Existing configuration valid
- Existing clients unaffected
## Known Issues
None identified. All features tested and stable in production.
## Next Steps
### Post-Release
1. Monitor production deployment
2. Update any documentation references to version numbers
3. Announce release to users
### Future Development (v1.3.0 or v2.0.0)
- Additional IndieWeb features (Webmentions, etc.)
- Enhanced search capabilities
- Performance optimizations
- User-requested features
## Related Documentation
- `/home/phil/Projects/starpunk/docs/standards/versioning-strategy.md`
- `/home/phil/Projects/starpunk/docs/standards/git-branching-strategy.md`
- `/home/phil/Projects/starpunk/CHANGELOG.md`
## Compliance
This release follows:
- Semantic Versioning 2.0.0
- Keep a Changelog format
- Git workflow from versioning-strategy.md
- Developer protocol from CLAUDE.md
## Summary
Successfully promoted v1.2.0-rc.2 to stable v1.2.0 release. All steps completed:
- Version updated in `starpunk/__init__.py`
- CHANGELOG.md updated with merged entries
- Git commit created and pushed
- Annotated tag `v1.2.0` created and pushed
- Container images built (v1.2.0 and latest)
- Container images pushed to registry
- All verification checks passed
The release is now available for production deployment.