Commit Graph

273 Commits

Author SHA1 Message Date
Jason Stedwell 9f446d7b01 Align package versions with docs: 1.0.0 -> 0.8.1
Build and Push Docker Image / build (push) Successful in 32s
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>
2026-07-06 15:45:02 -05:00
Jason Stedwell a06ddf0435 Docs: bring all documentation current with v0.8.1
Build and Push Docker Image / build (push) Successful in 16s
- README: v0.8.1 highlights, Node 18+ requirement + client install step for
  manual dev setup, health/genetics features listed, release summary updated
- API.md: paginated response shapes for dogs/litters, validation + status-code
  behavior (400/404), full breeding heat-cycle CRUD, genetics PUT/DELETE,
  pedigree COI/relations/cancer-lineage endpoints, corrected Litter object
- DEVELOPMENT.md: two-layer migration approach documented with schema-drift
  warning, heat_cycles/cancer_history tables, Toast/ConfirmDialog UI patterns
  (no alert/window.confirm), full env-var table, auth-deferred decision noted
- INSTALL.md: fixed API smoke-test (old /api/health root path doesn't exist),
  master -> main
- ROADMAP: v0.8.1 entry; Phase 4b checkboxes reconciled with what's actually
  built; Phase 6 progress; pre-deploy prod-DB check added to QA list

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:43:23 -05:00
Jason Stedwell f7a5e8ecb8 Docs: API.md + ROADMAP.md updates for the health-record overhaul
Build and Push Docker Image / build (push) Successful in 33s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 15:07:04 -05:00
Jason Stedwell f3fc01f31c Polish: live OFA age warning, puppy sorting, responsive fixes, form hints
- 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>
2026-07-06 15:06:32 -05:00
Jason Stedwell 55d636b512 Client UX: toast system, confirm dialogs, load-error banners, nav fix, 404 page
- 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>
2026-07-06 14:55:32 -05:00
Jason Stedwell 31b1d903f4 Remove dead debug scripts test_app.js / test_express.js
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:47:41 -05:00
Jason Stedwell 5e45031789 Harden dog endpoints: parent validation, 404s, safe photo handling, transactions
- safeParsePhotos(): corrupted photo_urls JSON no longer crashes every request
  that loads the dog
- DELETE /photos/:idx rejects NaN/out-of-range indexes with 400 (was silent no-op)
- PUT /:id returns 404 for missing dogs (was silent success)
- POST/PUT validate sire/dam exist, have the right sex, and aren't the dog itself
- Dog create (dog+parents), update (dog+parent swap), and cascade delete now run
  in transactions — no more partial writes

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:47:41 -05:00
Jason Stedwell 1f1e0c3e5a Deps: bump better-sqlite3 to ^11 (Node 18-24 prebuilds), drop unused auth deps
bcrypt, jsonwebtoken, express-validator, express-rate-limit were never imported.
better-sqlite3 9.x fails to compile on Node >=22.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:45:22 -05:00
Jason Stedwell ce287f63d1 Fix schema drift: fresh installs were broken
- Create heat_cycles table in init.js (breeding.js used it but nothing created it)
- Add litters columns the routes actually use (breeding_date, whelping_date, puppy_count)
- Add health_records columns used by puppy logs (record_date, description)
- Puppy log insert now also sets NOT NULL test_date
- Migration 002 no-ops on a fresh DB instead of crashing on missing dogs table
- init.js honors DB_PATH and creates the data dir, so migrations and the app
  always target the same file

Verified: full heat-cycle/litter/puppy-log CRUD passes against a virgin database.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 14:45:22 -05:00
Jason Stedwell c9d2aa734e Health records: typed fields per record type, document upload, delete button
- 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>
2026-07-06 14:39:45 -05:00
jason e2e8e00dff Fix docker-build.yml push trigger branch to match default branch
Build and Push Docker Image / build (push) Successful in 1m10s
2026-07-02 10:07:30 -05:00
jason 9a9f958dbb Update docker-build.yml workflow 2026-07-02 10:03:09 -05:00
jason 9051094c9b docker-build.yml: build + push :latest only, no cleanup step
Build and Push Docker Image / build (push) Failing after 2s
Operator preference: build and push the :latest image to the registry and
leave it; no per-build host cleanup (handle orphan images separately).
2026-06-30 07:07:10 -05:00
jason db2509cd03 docker-build.yml: push :latest only + clean up host build images
Build and Push Docker Image / build (push) Failing after 3s
- drop per-commit :sha tag (registry stays one tag per repo)
- remove the built image and prune dangling layers after push so CI builds
  stop accumulating orphan images on the Unraid host
2026-06-29 23:07:37 -05:00
jason d178b28567 Delete directory '.zenflow/tasks'
Build and Push Docker Image / build (push) Has been cancelled
2026-06-29 23:01:00 -05:00
jason 49ad7ef8f8 Update docker-build.yml: run on forgerunner host label, fix doubled image path
Build and Push Docker Image / build (push) Failing after 23s
2026-06-29 22:58:02 -05:00
jason 761387388d Add .gitea/workflows/docker-build.yml
Build and Push Docker Image / build (push) Successful in 30s
2026-03-29 14:22:45 -05:00
jason 4394286d0b Delete .gitea/workflows/docker-publish.yml 2026-03-29 14:15:19 -05:00
jason b8633863b0 fix: add pagination to unbounded GET endpoints
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>
2026-03-16 16:40:28 -05:00
jason fa7a336588 docs 2026-03-12 11:26:48 -05:00
jason c3696ba015 docker 2026-03-12 07:43:30 -05:00
jason c483096c63 qs 2026-03-12 07:40:50 -05:00
jason e4e3b44fcf Delete RELEASE_NOTES_v0.4.0.md 2026-03-12 07:38:32 -05:00
jason 78e15d08af Delete CLEANUP_NOTES.md 2026-03-12 07:38:27 -05:00
jason 454665b9cb Delete TEST.md 2026-03-12 07:38:04 -05:00
jason d8557fcfca database 2026-03-12 07:37:20 -05:00
jason 5f68ca0e8b readmes 2026-03-12 07:35:15 -05:00
jason 42bab14ac3 reverse pedigree 2026-03-12 07:27:41 -05:00
jason 5ca594fdc7 external dogs 2026-03-12 07:21:44 -05:00
jason 13185a5281 Roadmap 2,3,4 2026-03-11 23:48:35 -05:00
jason 17b008a674 Merge pull request 'stroke fix' (#55) from pedigree-update into master
Reviewed-on: #55
2026-03-11 15:49:55 -05:00
jason 9b3210a81e stroke fix 2026-03-11 15:49:46 -05:00
jason 81357e87ae Merge pull request 'halo effect' (#54) from pedigree-update into master
Reviewed-on: #54
2026-03-11 15:41:57 -05:00
jason 8abd5e2db6 halo effect 2026-03-11 15:41:30 -05:00
jason a63617d9c0 Merge pull request 'remove shadow' (#53) from pedigree-update into master
Reviewed-on: #53
2026-03-11 15:37:49 -05:00
jason 7195aaecfc remove shadow 2026-03-11 15:37:38 -05:00
jason 34bf29d8bf Merge pull request 'text update' (#52) from pedigree-update into master
Reviewed-on: #52
2026-03-11 15:33:49 -05:00
jason 4f3074b1f4 text update 2026-03-11 15:33:23 -05:00
jason 3c7ba1775f Merge pull request 'ped changes' (#51) from pedigree-update into master
Reviewed-on: #51
2026-03-11 15:27:42 -05:00
jason 0a0a5d232c ped changes 2026-03-11 15:26:35 -05:00
jason 58b53c981e feat: Add pedigree routes for COI calculation, direct relation checks, and ancestral/descendant trees. 2026-03-11 14:48:59 -05:00
Zenflow 7b941c9a9a Push from Zen 2026-03-11 13:15:01 -05:00
Zenflow 055364f467 New task (zenflow 738246ea)
In the Pairing Simulator page, I am getting the error:

**Error:**Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Fid and fix the bug
2026-03-11 13:12:01 -05:00
Zenflow b8eadd9efa "Fix_COI_display_consistency" 2026-03-11 13:09:08 -05:00
Zenflow ff1eb455dc "Fix_COI_and_routes" 2026-03-11 13:07:04 -05:00
Zenflow c22ebbe45c New task (zenflow 738246ea)
In the Pairing Simulator page, I am getting the error:

**Error:**Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Fid and fix the bug
2026-03-11 13:02:24 -05:00
Zenflow e5f7b2b053 Implementation
Task complete.
2026-03-11 09:59:42 -05:00
Zenflow c00b6191e7 Investigation and Planning
I've completed the investigation and planning for the External Dogs UI issues. I found that `ExternalDogs.jsx` used undefined CSS classes and a different layout than `DogList.jsx`. I've documented my findings and a proposed fix in [.zenflow/tasks/6e6e64eb-cb72-459e-b943-27554a749459/investigation.md](./.zenflow/tasks/6e6e64eb-cb72-459e-b943-27554a749459/investigation.md) and updated the [plan.md](./.zenflow/tasks/new-task-6e6e/plan.md).
2026-03-11 09:59:42 -05:00
Zenflow 0f9d3cf187 Initialize task: New task 2026-03-11 09:59:42 -05:00
Zenflow 2daccf7d8c INIT (zenflow 9c6862b8)
Scan the code, build the .md files you need to make it easier for the agent to preform modifications and fix bugs
2026-03-11 09:51:35 -05:00