PairingSimulator read 'data.dogs' from GET /api/dogs, but that endpoint returns
a paginated { data, total, ... } object — the fallback silently produced an
empty list, so no sires or dams ever appeared. Same latent wrong-response-key
bug as the Start Heat Cycle female list fixed in 55d636b.
Switch to GET /api/dogs/all (unpaginated, kennel + external — no 50-dog page
cap) and surface load failures in the existing error card instead of
swallowing them.
Verified in-browser: dropdowns populate, parent-offspring pairing shows the
'Related' warning and computes COI 25.00% with common ancestor listed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The docs/roadmap use the 0.8.x scheme; package.json was scaffold-default 1.0.0.
The startup banner reads its version from package.json, so it now reports 0.8.1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- HealthRecordForm shows a live amber warning under Test Date when the dog is
under the OFA minimum certification age (submit-time block unchanged)
- LitterDetail puppies sortable by name / sex / birth date
- Responsive at 375px: DogDetail photos+info grid stacks, header wraps;
puppy grid uses min(220px,100%); navbar wraps with scrollable icon row;
calendar uses minmax(0,1fr) columns so cells shrink instead of overflowing
- LitterForm explains why sire/dam selects are locked when editing
- Add .claude/launch.json for the vite dev server
Verified in-browser at 375px and desktop: no horizontal overflow on any page.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New ToastProvider/useToast (self-built, no dep): success/error toasts replace
all five alert() calls, with server error messages surfaced
- New ConfirmProvider/useConfirm promise-based dialog replaces all six
window.confirm sites, showing what is being deleted; Escape/overlay cancels
- Dashboard + BreedingCalendar loaders use Promise.allSettled with a
danger banner + Retry instead of silently blanking on fetch failure
- Settings load failure now surfaces a toast instead of vanishing
- Fix BreedingCalendar females list: read paginated {data} shape (was .dogs,
so 'Start Heat Cycle' never listed any females)
- Nav links highlight on detail routes (/dogs/123, /pedigree/5)
- Catch-all 404 route with link back to Dashboard
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- HealthRecordForm: per-type field configs (vaccination/exam/surgery/medication),
expanded OFA test catalog with result scales, min-age validation, expiry rules
- Document upload (PDF/image, 15MB) via new POST /api/health/upload
- Delete button for health records on DogDetail
- Fold legacy vet_name into performed_by; normalize payload per record type
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
All list endpoints now accept ?page and ?limit (default 50, max 200) and
return { data, total, page, limit } instead of a bare array, preventing
memory and performance failures at scale.
- GET /api/dogs: adds pagination, server-side search (?search) and sex
filter (?sex), and a stats aggregate (total/males/females) for the
Dashboard to avoid counting from the array
- GET /api/litters: adds pagination; also fixes N+1 query by fetching
all puppies for the current page in a single query instead of one per
litter
- DogList: moves search/sex filtering server-side with 300ms debounce;
adds Prev/Next pagination controls
- LitterList: uses paginated response; adds Prev/Next pagination controls
- Dashboard: reads counts from stats/total fields instead of array length
- LitterDetail, LitterForm: switch dogs fetch to /api/dogs/all (complete
list, no pagination, for sire/dam dropdowns)
- DogForm: updates litters fetch to use paginated response shape
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Compute projected whelp date (breeding_date + 63 days) client-side
- Mark projected whelp day on calendar grid with Baby icon + teal ring
- Show whelp range (earliest/expected/latest) tooltip on calendar cell
- Add 'Projected Whelp' entry to legend
- Show projected whelp date on active cycle cards below breeding date
- Active cycle cards navigate to whelp month if outside current view