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

7.2 KiB

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

$ uv run python -c "from starpunk import __version__; print(__version__)"
1.2.0

Git Tag

$ git tag -l v1.2.0
v1.2.0

$ git log -1 --oneline
927db4a release: Bump version to 1.2.0

Container Images

$ 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
  • /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.