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>
259 lines
7.2 KiB
Markdown
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.
|