feat(domain): seasonal tagging for maintenance items#733
Conversation
There was a problem hiding this comment.
Pull request overview
This PR implements seasonal tagging for maintenance items, addressing issue #686 which requests a "what should I do this season?" dashboard view that makes the app feel domain-aware for homeowners.
Changes:
- Adds a
Seasonstring field toMaintenanceItem(withspring/summer/fall/winterconstants) stored as-is in SQLite via GORM AutoMigrate, plus season select in add/edit forms and inline edit overlay - Adds a "Season" table column (badge-styled
cellStatus, pin-filterable) and a new "Seasonal" dashboard section displaying items tagged with the current calendar season (northern-hemisphere mapping) - Adds compact display labels (
spr/sum/fall/win), Wong-palette status styles for all four seasons, and comprehensive tests covering CRUD round-trips, inline edit, dashboard rendering, and the data layer
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
plans/seasonal-tagging.md |
Design document for the feature |
internal/data/models.go |
Adds Season field to MaintenanceItem and season constants |
internal/data/meta_generated.go |
Regenerated to include ColSeason constant and season in TableExtractColumns |
internal/data/dashboard.go |
Adds SeasonForMonth helper and ListMaintenanceBySeason query |
internal/data/dashboard_test.go |
Tests for ListMaintenanceBySeason (including soft-delete exclusion) and SeasonForMonth |
internal/app/tables.go |
Adds maintenanceColSeason enum value, column spec, and maintenanceSeasonCell helper used by both row builders |
internal/app/styles.go |
Adds StatusStyle cases for all four seasons |
internal/app/forms.go |
Adds Season to maintenanceFormData, seasonOptions(), season select in both add/edit forms and inline edit |
internal/app/compact.go |
Adds short season labels to statusLabels map |
internal/app/handlers.go |
Adds season to SyncFixedValues for pin-filter support |
internal/app/dashboard.go |
Adds Seasonal field to dashboardData, loads and renders the "Seasonal" dashboard section |
internal/app/rows_test.go |
Tests season cell rendering in maintenanceRows |
internal/app/handler_form_wiring_test.go |
Tests season inline edit opens form overlay (not inline input) |
internal/app/handler_crud_test.go |
Tests SyncFixedValues for season and season create/edit round-trips |
internal/app/form_save_test.go |
User-level tests for create/edit/inline-edit with season |
internal/app/dashboard_test.go |
Tests seasonal section display and empty-state behavior |
AGENTS.md |
Extends the TDD rule from regression bugs to all feature work |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is
Additional details and impacted files
🚀 New features to boost your workflow:
|
e9209ba to
795c20e
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
081edbb to
795c20e
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The previous rule only covered regression tests. Reframe as "tests are the spec" -- if they pass but the feature is incomplete, the tests are wrong. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a Season field to MaintenanceItem so homeowners can tag tasks by season (spring, summer, fall, winter). Surfaces across the full stack: table column with cellStatus badge, add/edit forms, inline edit, pin-filtering, and a new "Seasonal" dashboard section showing items tagged with the current calendar season. closes #686 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…table The new Season column shifted Appliance from index 3 to 4. Use the typed maintenanceColAppliance constant instead of a bare integer so the sub-table inline edit dispatches to the correct full-table column. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The comment claimed skipColEdit remaps sub-table col 3 to full-table col 4 (maintenanceColSeason). In reality, maintenanceColSeason is 3 and since 3 < skipAt (maintenanceColAppliance=4), no remap occurs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
b397332 to
9ee2834
Compare
Use constant names only; the whole point of named constants is to abstract over their numeric values. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 17 out of 17 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Summary
Seasonstring field toMaintenanceItemwith constants: spring, summer, fall, winter (empty = no season)cellStatusbadge rendering and pin-filtering supportcloses #686