feat(tags): Add database schema and tags module (v1.3.0 Phase 1)
Implements tag/category system backend following microformats2 p-category specification. Database changes: - Migration 008: Add tags and note_tags tables - Normalized tag storage (case-insensitive lookup, display name preserved) - Indexes for performance New module: - starpunk/tags.py: Tag management functions - normalize_tag: Normalize tag strings - get_or_create_tag: Get or create tag records - add_tags_to_note: Associate tags with notes (replaces existing) - get_note_tags: Retrieve note tags (alphabetically ordered) - get_tag_by_name: Lookup tag by normalized name - get_notes_by_tag: Get all notes with specific tag - parse_tag_input: Parse comma-separated tag input Model updates: - Note.tags property (lazy-loaded, prefer pre-loading in routes) - Note.to_dict() add include_tags parameter CRUD updates: - create_note() accepts tags parameter - update_note() accepts tags parameter (None = no change, [] = remove all) Micropub integration: - Pass tags to create_note() (tags already extracted by extract_tags()) - Return tags in q=source response Per design doc: docs/design/v1.3.0/microformats-tags-design.md Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
222
docs/design/v1.1.1/v1.1.0-release-status.md
Normal file
222
docs/design/v1.1.1/v1.1.0-release-status.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# StarPunk v1.1.0 "SearchLight" Release Status
|
||||
|
||||
## Release Overview
|
||||
|
||||
**Version**: v1.1.0
|
||||
**Codename**: SearchLight
|
||||
**Release Date**: 2025-11-25
|
||||
**Status**: RELEASED ✅
|
||||
**Previous Version**: v1.0.1
|
||||
|
||||
## Completed Features
|
||||
|
||||
### Core Features
|
||||
|
||||
#### 1. Full-Text Search with FTS5 ✅
|
||||
**Status**: COMPLETE
|
||||
**ADR**: ADR-034
|
||||
**Report**: `/home/phil/Projects/starpunk/docs/reports/v1.1.0-implementation-report.md`
|
||||
**Implementation**:
|
||||
- SQLite FTS5 virtual table for search
|
||||
- Complete search UI with results page
|
||||
- API endpoint `/api/search`
|
||||
- Navigation search box integration
|
||||
- Security hardening (XSS prevention, query validation)
|
||||
- 41 new tests (API, integration, security)
|
||||
|
||||
#### 2. Custom Slugs via Micropub mp-slug ✅
|
||||
**Status**: COMPLETE
|
||||
**ADR**: ADR-035
|
||||
**Report**: `/home/phil/Projects/starpunk/docs/reports/v1.1.0-implementation-report.md`
|
||||
**Implementation**:
|
||||
- Micropub mp-slug property extraction
|
||||
- Slug validation and sanitization
|
||||
- Reserved slug protection
|
||||
- Sequential numbering for conflicts
|
||||
- Integration with notes.py
|
||||
|
||||
#### 3. Database Migration System Redesign ✅
|
||||
**Status**: COMPLETE
|
||||
**ADR**: ADR-033
|
||||
**Report**: `/home/phil/Projects/starpunk/docs/reports/v1.1.0-implementation-report.md`
|
||||
**Implementation**:
|
||||
- Renamed SCHEMA_SQL to INITIAL_SCHEMA_SQL
|
||||
- Clear documentation of baseline vs current schema
|
||||
- Improved migration system clarity
|
||||
- No functional changes (documentation improvement)
|
||||
|
||||
#### 4. RSS Feed Ordering Fix ✅
|
||||
**Status**: COMPLETE
|
||||
**ADR**: None (bug fix)
|
||||
**Report**: `/home/phil/Projects/starpunk/docs/reports/v1.1.0-implementation-report.md`
|
||||
**Implementation**:
|
||||
- Fixed feedgen order reversal bug
|
||||
- Added regression test
|
||||
- Newest posts now display first
|
||||
|
||||
#### 5. Custom Slug Extraction Bug Fix ✅
|
||||
**Status**: COMPLETE
|
||||
**ADR**: None (bug fix)
|
||||
**Implementation**:
|
||||
- Fixed mp-slug extraction from Micropub requests
|
||||
- Proper error handling for invalid slugs
|
||||
|
||||
## Technical Improvements
|
||||
|
||||
### Architecture Decision Records (ADRs)
|
||||
|
||||
| ADR | Title | Status | Notes |
|
||||
|-----|-------|--------|-------|
|
||||
| ADR-033 | Database Migration Redesign | IMPLEMENTED | Clear baseline schema |
|
||||
| ADR-034 | Full-Text Search | IMPLEMENTED | FTS5 with UI |
|
||||
| ADR-035 | Custom Slugs | IMPLEMENTED | mp-slug support |
|
||||
| ADR-036 | IndieAuth Token Verification Method | DOCUMENTED | Design decision |
|
||||
| ADR-039 | Micropub URL Construction Fix | IMPLEMENTED | v1.0.x fix |
|
||||
|
||||
### Test Coverage
|
||||
|
||||
- **New Tests Added**: 41 (search functionality)
|
||||
- **Total Tests**: 598
|
||||
- **Passing**: 588
|
||||
- **Known Issues**: 10 flaky timing tests (pre-existing, race condition tests)
|
||||
- **Coverage Areas**:
|
||||
- Search API validation
|
||||
- Search UI integration
|
||||
- Search security (XSS, SQL injection)
|
||||
- RSS feed ordering
|
||||
- Custom slug validation
|
||||
|
||||
## Files Changed
|
||||
|
||||
### New Files
|
||||
- `migrations/005_add_fts5_search.sql`
|
||||
- `starpunk/routes/search.py`
|
||||
- `starpunk/search.py`
|
||||
- `starpunk/slug_utils.py`
|
||||
- `templates/search.html`
|
||||
- `tests/test_search_api.py`
|
||||
- `tests/test_search_integration.py`
|
||||
- `tests/test_search_security.py`
|
||||
|
||||
### Modified Files
|
||||
- `starpunk/__init__.py` (FTS index population)
|
||||
- `starpunk/database.py` (SCHEMA_SQL rename)
|
||||
- `starpunk/feed.py` (order fix)
|
||||
- `starpunk/migrations.py` (comments)
|
||||
- `starpunk/notes.py` (custom_slug, FTS integration)
|
||||
- `starpunk/micropub.py` (mp-slug extraction)
|
||||
- `starpunk/routes/__init__.py` (search routes)
|
||||
- `templates/base.html` (search box)
|
||||
- `tests/test_feed.py` (regression test)
|
||||
|
||||
## Version History
|
||||
|
||||
### v1.1.0 (2025-11-25) - "SearchLight"
|
||||
- Added full-text search with FTS5
|
||||
- Added custom slug support via Micropub mp-slug
|
||||
- Fixed RSS feed ordering (newest first)
|
||||
- Redesigned migration system documentation
|
||||
- Fixed custom slug extraction bug
|
||||
|
||||
### v1.0.x Series
|
||||
- **v1.0.1** (2025-11-24): Fixed Micropub URL double-slash bug
|
||||
- **v1.0.0** (2025-11-24): Initial release with IndieAuth + Micropub
|
||||
|
||||
## Backwards Compatibility
|
||||
|
||||
✅ **100% Backwards Compatible**
|
||||
- No breaking API changes
|
||||
- Existing notes display correctly
|
||||
- Existing Micropub clients work unchanged
|
||||
- Database migrations handle all upgrade paths
|
||||
- RSS feeds remain valid
|
||||
|
||||
## Deferred to v1.2.0
|
||||
|
||||
Based on architectural review, the following items are deferred:
|
||||
|
||||
1. **Hierarchical Slugs** - Slugs with `/` for subdirectories
|
||||
2. **Search Configuration** - SEARCH_ENABLED flag
|
||||
3. **Enhanced Highlighting** - Better search term highlighting
|
||||
4. **Configurable Title Length** - Make 100-char limit configurable
|
||||
|
||||
## Release Metrics
|
||||
|
||||
- **Development Time**: ~12 hours (all phases)
|
||||
- **Lines of Code Added**: ~1,500
|
||||
- **Test Coverage**: Maintained >85%
|
||||
- **Performance**: Search queries <100ms
|
||||
- **Security**: XSS and SQL injection prevention
|
||||
|
||||
## Quality Assurance
|
||||
|
||||
### Validation Completed
|
||||
- ✅ All tests pass (except pre-existing flaky tests)
|
||||
- ✅ RSS feed validates
|
||||
- ✅ Micropub compliance maintained
|
||||
- ✅ IndieAuth functionality unchanged
|
||||
- ✅ HTML validation passes
|
||||
- ✅ Security tests pass
|
||||
|
||||
### Manual Testing Required
|
||||
- [ ] Browser search functionality
|
||||
- [ ] Micropub client with mp-slug
|
||||
- [ ] RSS reader validation
|
||||
- [ ] Production upgrade path
|
||||
|
||||
## Release Notes
|
||||
|
||||
### For Users
|
||||
|
||||
**New Features:**
|
||||
- 🔍 **Full-Text Search**: Find notes quickly with the new search box in navigation
|
||||
- 🔗 **Custom URLs**: Set custom slugs when publishing via Micropub clients
|
||||
- 📰 **RSS Fix**: Feed now correctly shows newest posts first
|
||||
|
||||
**Improvements:**
|
||||
- Better error messages for invalid slugs
|
||||
- Faster note lookups with search indexing
|
||||
- More robust database migration system
|
||||
|
||||
### For Developers
|
||||
|
||||
**Technical Changes:**
|
||||
- SQLite FTS5 integration for search
|
||||
- New slug validation utilities
|
||||
- Improved migration system documentation
|
||||
- 41 new tests for search functionality
|
||||
|
||||
**API Changes:**
|
||||
- New endpoint: `GET /api/search?q=query`
|
||||
- New Micropub property: `mp-slug` support
|
||||
- Search results page: `/search?q=query`
|
||||
|
||||
## Support and Documentation
|
||||
|
||||
- **Implementation Report**: `/docs/reports/v1.1.0-implementation-report.md`
|
||||
- **ADRs**: `/docs/decisions/ADR-033` through `ADR-036`
|
||||
- **Migration Guide**: Automatic - no manual steps required
|
||||
- **API Documentation**: Updated in `/docs/api/`
|
||||
|
||||
## Next Steps
|
||||
|
||||
### Immediate (v1.1.1)
|
||||
- Optional search configuration flags
|
||||
- Enhanced search highlighting
|
||||
- Performance monitoring setup
|
||||
|
||||
### Future (v1.2.0)
|
||||
- Hierarchical slugs with subdirectories
|
||||
- Webmentions support
|
||||
- Media attachments
|
||||
- Tag system
|
||||
|
||||
## Conclusion
|
||||
|
||||
StarPunk v1.1.0 "SearchLight" successfully delivers critical search functionality, custom URL support, and important bug fixes while maintaining 100% backwards compatibility. The release represents a significant improvement in usability and functionality for the IndieWeb CMS.
|
||||
|
||||
---
|
||||
|
||||
**Document Created**: 2025-11-25
|
||||
**Status**: COMPLETE - Released
|
||||
**Next Version**: v1.1.1 (patch) or v1.2.0 (minor)
|
||||
Reference in New Issue
Block a user