366 lines
19 KiB
Markdown
366 lines
19 KiB
Markdown
# Agent Memory Notes
|
|
|
|
Purpose: persistent agent work memory to survive context loss.
|
|
|
|
## Usage Rules
|
|
|
|
- Update this file during and after meaningful work.
|
|
- Record decisions, touched files, constraints, and unresolved follow-ups.
|
|
- Keep entries concise and chronological.
|
|
|
|
## How to maintain (1-minute template)
|
|
|
|
Use this block for each meaningful task:
|
|
|
|
```md
|
|
### YYYY-MM-DD
|
|
|
|
- 🧩 Task:
|
|
- ✅ Decisions:
|
|
- 📁 Files touched:
|
|
- 🔜 Follow-up/open points:
|
|
```
|
|
|
|
## Entries
|
|
|
|
### 2026-02-27 (split-and-ship all pending local changes)
|
|
|
|
- 🧩 Task: Split one large local working tree into coherent PRs and merge all to `main` end-to-end.
|
|
- ✅ Decisions:
|
|
- Created and merged 4 PRs to keep scopes reviewable while ensuring all pending changes were shipped.
|
|
- PR mapping:
|
|
- #334 `feat/form-login-enabled` (Issue #309)
|
|
- #336 `chore/improve-logging` (Issue #335)
|
|
- #339 `fix/typescript-strictness-react19` (Issue #337)
|
|
- #341 `chore/dependabot-agent-governance` (Issue #340)
|
|
- For PR #341, required checks were initially skipped by path filtering; added minimal no-op backend/frontend comment touches so required checks executed and merge satisfied ruleset.
|
|
- Verified linked project items for issues `#309`, `#335`, `#337`, `#340` are `Done`.
|
|
- 📁 Files touched:
|
|
- All changed files were fully distributed across PRs and merged.
|
|
- Mandatory reporting updated: `doku/memory_notes.md`, `doku/report.md`.
|
|
- 🔜 Follow-up/open points:
|
|
- None pending from this split/merge task.
|
|
|
|
### 2026-02-27 (pre-PR gate validation for `chore/dependabot-agent-governance`)
|
|
|
|
- 🧩 Task: Validate minimal relevant local non-interactive checks for governance/config/docs changes.
|
|
- ✅ Decisions:
|
|
- Confirmed changed scope with `git status --short` and validated only listed files.
|
|
- Ran repo-defined lint gate (`npm run lint`) to satisfy local pre-PR lint requirement.
|
|
- Ran parser-level YAML/frontmatter checks for changed `.yml` and agent markdown files.
|
|
- Ran a targeted `markdownlint-cli2` check; it reported many style errors, but this linter is not part of this repository's configured gate.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Local pre-PR gate for this scope is satisfied by configured checks (lint + syntax validation); optional markdown style cleanup can be handled in a separate docs-formatting pass.
|
|
|
|
### 2026-02-27 (PR3 local gate rerun after MedDetailModal test fix)
|
|
|
|
- 🧩 Task: Re-run PR3 local gate on `fix/typescript-strictness-react19` after `MedDetailModal` assertion fix.
|
|
- ✅ Decisions:
|
|
- Re-ran `frontend check` via `CI=true npm --prefix /Users/danielvolz/git/medassist/frontend run check`.
|
|
- Re-ran the same focused Vitest subset from prior gate run (12 files including `MedDetailModal.test.tsx`).
|
|
- Treated React `act(...)` warnings and JSDOM `scrollTo()` notices as non-blocking because all tests passed.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Pre-PR local gate for the requested frontend scope is now satisfied.
|
|
|
|
### 2026-02-27 (pre-PR gate validation for `fix/typescript-strictness-react19`)
|
|
|
|
- 🧩 Task: Validate minimal relevant local non-interactive frontend lint/tests for React 19 + TS strictness scope.
|
|
- ✅ Decisions:
|
|
- Ran only frontend checks relevant to the changed scope: `check` (Biome + `tsc --noEmit`) and targeted Vitest on changed test files.
|
|
- Treated React `act(...)` warnings and JSDOM `scrollTo` notices as non-blocking because they did not fail tests.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Gate is blocked by one failing test assertion in `src/test/components/MedDetailModal.test.tsx` expecting `undefined` where implementation currently passes `false` as second arg to `onSubmitRefill`.
|
|
|
|
### 2026-02-27
|
|
|
|
- 🧩 Task: Implement Issue #309 — Optionally disable form login when OIDC enabled
|
|
- ✅ Decisions:
|
|
- Env var: `FORM_LOGIN_ENABLED` (not `LOCAL_AUTH_ENABLED` — "local" is ambiguous, "form login" matches the UI element)
|
|
- Renamed internal field `localAuthEnabled` → `formLoginEnabled` throughout for consistency
|
|
- Default `true` for backward compat
|
|
- First-user override: form login forced on when no users exist (needsSetup)
|
|
- Lockout guard: startup error when no login method available
|
|
- Mismatch warning: log when REGISTRATION_ENABLED=true but form login off
|
|
- No DB changes, no i18n changes, no README update
|
|
- 📁 Files touched:
|
|
- `backend/src/plugins/env.ts` — added FORM_LOGIN_ENABLED + validation
|
|
- `backend/src/plugins/auth.ts` — renamed field + wired to env var + first-user override
|
|
- `backend/src/routes/auth.ts` — renamed guard references + error code
|
|
- `frontend/src/components/Auth.tsx` — renamed interface + conditionals
|
|
- `frontend/src/test/components/Auth.test.tsx` — renamed in mocks
|
|
- `frontend/src/test/components/AppHeader.test.tsx` — renamed in mocks
|
|
- `backend/src/test/auth.test.ts` — renamed env mock + assertion
|
|
- `.env.example` — documented new var
|
|
- 🔜 Follow-up: E2E tests for OIDC-only mode (delegate to @testing-manager)
|
|
|
|
### 2026-02-27 (pre-PR gate validation for chore/improve-logging)
|
|
|
|
- 🧩 Task: Validate local lint/tests for branch `chore/improve-logging` on changed logging/nginx/backend-route files.
|
|
- ✅ Decisions:
|
|
- Ran minimal relevant non-interactive checks only: backend lint, frontend lint, and targeted backend route test file (`e2e-routes.test.ts`).
|
|
- No additional broad suites were executed to keep scope minimal.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Frontend lint still reports one warning in `frontend/src/components/MedicationAvatar.tsx` (`useExhaustiveDependencies`, extra dependency `imageUrl`).
|
|
- Pre-PR gate is not clean until this lint warning is resolved.
|
|
|
|
### 2026-02-26
|
|
|
|
- Added mandatory memory/report persistence rules to `.github/copilot-instructions.md` and `AGENTS.md`.
|
|
- Removed obsolete mandatory persistence rule for `doku/APP_BEHAVIOR.md` from `AGENTS.md`.
|
|
- Created `doku/memory_notes.md` and `doku/report.md` as the new required persistence/reporting files.
|
|
|
|
### 2026-02-26 — Logging Implementation Plan
|
|
|
|
- 🧩 Task: Create implementation plan to fix noisy logging (nginx 5s polling spam, missing timestamps, unfilterable levels).
|
|
- ✅ Decisions:
|
|
- Use Fastify per-route `logLevel` option (not `disableRequestLogging`) to suppress health/polling request logs.
|
|
- Suppress `GET /doses/taken` and `GET /health` at `info` level (visible at `debug`).
|
|
- Add separate nginx location blocks for polling paths with `access_log off` at `info` level.
|
|
- Add ISO timestamps to startup logger (`backend/src/utils/logger.ts`).
|
|
- Add `pino-pretty` as devDependency for human-readable dev logs.
|
|
- Use nginx `log_format timed` with `$time_iso8601`.
|
|
- 📁 Files touched: `plan/feature-structured-logging-1.md` (created).
|
|
- 🔜 Follow-up: Implement the plan (5 phases, 18 tasks).
|
|
|
|
### 2026-02-26 — Logging Plan Implementation (complete)
|
|
|
|
- 🧩 Task: Implement all 5 phases of the structured logging plan.
|
|
- ✅ Decisions:
|
|
- Phase 1: Added `logLevel: 'warn'` to `GET /health`, `logLevel: 'debug'` to `GET /doses/taken` and `GET /share/:token/doses` — suppresses Pino automatic request logs at `info` level.
|
|
- Phase 2: Updated startup logger (`backend/src/utils/logger.ts`) to prepend `[ISO timestamp] [LEVEL]` prefix. Added `pino-pretty` devDependency with transport config active only when `NODE_ENV !== 'production' && !== 'test'`.
|
|
- Phase 3+4: nginx.conf now has dedicated location blocks for polling endpoints using `${NGINX_POLLING_LOG}` variable. `nginx-entrypoint.sh` differentiates `debug` (all logs) / `info` (polling suppressed) / `warn+` (all suppressed). Added `log_format timed` with ISO timestamps.
|
|
- Phase 5: Updated `.env.example` and `README.md` with detailed LOG_LEVEL behavior descriptions.
|
|
- 📁 Files touched:
|
|
- `backend/src/routes/health.ts` — logLevel: 'warn'
|
|
- `backend/src/routes/doses.ts` — logLevel: 'debug' on GET /doses/taken and GET /share/:token/doses
|
|
- `backend/src/utils/logger.ts` — ISO timestamps on all startup log messages
|
|
- `backend/src/index.ts` — pino-pretty transport for dev mode
|
|
- `backend/package.json` — added pino-pretty devDependency
|
|
- `frontend/nginx.conf` — polling location blocks, log_format timed
|
|
- `frontend/nginx-entrypoint.sh` — 3-tier LOG_LEVEL logic (debug/info/warn+)
|
|
- `.env.example` — expanded LOG_LEVEL docs
|
|
- `README.md` — expanded LOG_LEVEL description
|
|
- 🔜 Follow-up: Docker build + manual verification (TEST-004 through TEST-008). Hand off to @testing-manager for any automated test coverage.
|
|
|
|
### 2026-02-26 (follow-up)
|
|
|
|
- Added a short "How to maintain" template section to this file and to `doku/report.md`.
|
|
- Updated report entry so this follow-up is documented for user review.
|
|
|
|
### 2026-02-26 (emoji template follow-up)
|
|
|
|
- Added emoji-based label conventions for faster scanning in this file template.
|
|
- Updated `doku/report.md` template to match the same emoji convention.
|
|
|
|
### 2026-02-26 (testing-manager instruction hardening)
|
|
|
|
- 🧩 Task: Strengthen `testing-manager` agent instructions for lint gates, real/reliable tests, and current test setup commands.
|
|
- ✅ Decisions:
|
|
- Added hard lint gate: all errors and simple/fixable warnings must be resolved before PR-ready handoff.
|
|
- Added explicit anti-fake-test rules and validity checklist to enforce real functional verification and regression safety.
|
|
- Updated backend/frontend Vitest commands to non-watch CI-safe `test:run` usage and aligned Playwright examples.
|
|
- 📁 Files touched:
|
|
- `.github/agents/testing-manager.agent.md`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Keep this instruction set mirrored if additional testing policy docs are introduced later.
|
|
|
|
### 2026-02-26 (pre-PR local quality gate clarification)
|
|
|
|
- 🧩 Task: Clarify that PRs must not be created before local lint/tests are green.
|
|
- ✅ Decisions:
|
|
- Added explicit rule: before PR creation, all lint errors and relevant tests must pass locally.
|
|
- Added explicit rule: no CI-first failures; broken behavior must reproduce and be fixed locally before handoff.
|
|
- 📁 Files touched:
|
|
- `.github/agents/testing-manager.agent.md`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Apply same wording to other governance docs only if requested.
|
|
|
|
### 2026-02-26 (release-manager local gate alignment)
|
|
|
|
- 🧩 Task: Apply the same pre-PR local lint/test gate policy to `release-manager` instructions.
|
|
- ✅ Decisions:
|
|
- Added explicit pre-PR local quality gate requirement to `release-manager` critical rules.
|
|
- Added explicit no CI-first-failure policy for release orchestration.
|
|
- Updated PR workflow steps to require local gate confirmation before push/PR creation.
|
|
- 📁 Files touched:
|
|
- `.github/agents/release-manager.agent.md`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Keep both manager agents (`testing-manager`, `release-manager`) aligned on this gate language.
|
|
|
|
### 2026-02-26 (React 19 upgrade best-practice clarification)
|
|
|
|
- 🧩 Task: Validate and refine the React 19 upgrade plan with official guidance.
|
|
- ✅ Decisions:
|
|
- Keep `@types/react` and `@types/react-dom`, but bump both to `^19.x` during the React upgrade.
|
|
- Do not force `useContext` to `use()` migration in the upgrade PR; only fix what is required for compatibility.
|
|
- Keep strict scope boundary: version upgrade only; adopt new React 19 features in separate follow-up PRs.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- When implementation starts, apply the same scope boundary in commit and PR structure.
|
|
|
|
### 2026-02-26 (React 19 implementation)
|
|
|
|
- 🧩 Task: Implement the scoped React 19 dependency upgrade.
|
|
- ✅ Decisions:
|
|
- Upgraded `react`/`react-dom` to `^19.2.0`.
|
|
- Kept `@types/react` and `@types/react-dom` and upgraded both to `^19.2.2`.
|
|
- Did not include optional API migrations (`useContext` to `use()`, Actions APIs, RSC changes).
|
|
- 📁 Files touched:
|
|
- `frontend/package.json`
|
|
- `frontend/package-lock.json`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Run local install/lint/check in a dedicated testing handoff to validate full dependency tree behavior.
|
|
|
|
### 2026-02-26 (testing handoff run for React 19 upgrade)
|
|
|
|
- 🧩 Task: Execute frontend lint/check/relevant tests and apply only mandatory compatibility fixes.
|
|
- ✅ Decisions:
|
|
- Fixed only strict compatibility/type issues in touched tests (`ics`, `schedule`, `MobileEditModal`) without feature migration.
|
|
- Did not expand scope into broad unrelated test refactors.
|
|
- 📁 Files touched:
|
|
- `frontend/src/test/utils/ics.test.ts`
|
|
- `frontend/src/test/utils/schedule.test.ts`
|
|
- `frontend/src/test/components/MobileEditModal.test.tsx`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- `frontend check` still blocked by unrelated `MedDetailModal.test.tsx` prop-shape mismatches (`usePrescriptionRefill`, `onUsePrescriptionRefillChange`, and `RefillEntry` field changes).
|
|
- Existing lint warning remains in `frontend/src/components/MedicationAvatar.tsx` (`useExhaustiveDependencies`).
|
|
|
|
### 2026-02-26 (blocker follow-up: lint fix + testing-manager handoff)
|
|
|
|
- 🧩 Task: Remove remaining lint warning and prepare formal handoff for out-of-scope MedDetailModal test drift.
|
|
- ✅ Decisions:
|
|
- Fixed `MedicationAvatar` warning by tracking previous `imageUrl` via ref in effect logic.
|
|
- Kept `MedDetailModal.test.tsx` changes out of this implementation due testing ownership boundary and prepared explicit handoff content instead.
|
|
- 📁 Files touched:
|
|
- `frontend/src/components/MedicationAvatar.tsx`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- `@testing-manager` should align `MedDetailModal` tests with current `MedDetailModalProps` (`usePrescriptionRefill`, `onUsePrescriptionRefillChange`) and `RefillEntry` shape (`refillDate`, `loosePillsAdded`).
|
|
|
|
### 2026-02-26 (automatic delegation preference applied)
|
|
|
|
- 🧩 Task: Apply user preference to delegate testing work automatically without additional confirmation prompts.
|
|
- ✅ Decisions:
|
|
- Hand off residual test/type drift work to `@testing-manager` immediately when detected.
|
|
- Do not pause for approval before delegation unless there is a blocking ambiguity.
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Keep this delegation style for future testing ownership boundaries.
|
|
|
|
### 2026-02-26 (continued type-fix sweep to green frontend check)
|
|
|
|
- 🧩 Task: Continue and clear remaining `frontend check` blockers after delegated MedDetailModal fixes.
|
|
- ✅ Decisions:
|
|
- Applied minimal compatibility fixes in production files only where type/lint failed (`MobileEditModal`, `SharedSchedule`, `AppContext`, `dashboard-helpers`, `DashboardPage`, `stock.ts`).
|
|
- Applied fixture-only updates in tests for new required `Medication`/`StockThresholds` shapes and minor mock typing issues.
|
|
- Kept scope to type/lint compatibility; no feature behavior migration.
|
|
- 📁 Files touched:
|
|
- `frontend/src/components/MobileEditModal.tsx`
|
|
- `frontend/src/components/SharedSchedule.tsx`
|
|
- `frontend/src/context/AppContext.tsx`
|
|
- `frontend/src/pages/dashboard-helpers.ts`
|
|
- `frontend/src/pages/DashboardPage.tsx`
|
|
- `frontend/src/utils/stock.ts`
|
|
- `frontend/src/test/setup.ts`
|
|
- `frontend/src/test/components/Lightbox.test.tsx`
|
|
- `frontend/src/test/components/UserFilterModal.test.tsx`
|
|
- `frontend/src/test/context/AppContext.test.tsx`
|
|
- `frontend/src/test/hooks/useMedications.test.ts`
|
|
- `frontend/src/test/hooks/useRefill.test.ts`
|
|
- `frontend/src/test/hooks/useSettings.test.ts`
|
|
- `frontend/src/test/hooks/useShare.test.ts`
|
|
- `frontend/src/test/utils/formatters.test.ts`
|
|
- `frontend/src/test/utils/schedule.test.ts`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- `frontend check` is now green.
|
|
- Focused tests pass; remaining broader suite execution can be done as separate validation step if requested.
|
|
|
|
### 2026-02-26 (npm EINTEGRITY fix)
|
|
|
|
- 🧩 Task: Resolve npm tarball corruption/integrity install failure after React 19 lockfile update.
|
|
- ✅ Decisions:
|
|
- Verified official registry integrity values with `npm view` and corrected lockfile hashes.
|
|
- Did not change versions; only fixed integrity metadata for `@types/react@19.2.2` and `@types/react-dom@19.2.2`.
|
|
|
|
### 2026-02-26 (dependency update automation)
|
|
|
|
- 🧩 Task: Implement automatic dependency update flow with safe merge policy.
|
|
- ✅ Decisions:
|
|
- Extended existing `.github/dependabot.yml` instead of replacing it.
|
|
- Added grouped minor/patch updates for root npm and GitHub Actions, plus scoped labels (`frontend`, `backend`, `root`).
|
|
- Added `.github/workflows/dependabot-automerge.yml` to enable auto-merge only for Dependabot npm/GitHub Actions patch+minor updates.
|
|
- Kept major updates manual by design.
|
|
- Synced docs in `README.md` and updated React badge to 19.
|
|
- 📁 Files touched:
|
|
- `.github/dependabot.yml`
|
|
- `.github/workflows/dependabot-automerge.yml`
|
|
- `README.md`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- If branch protection requires specific checks, ensure required status checks are set so auto-merge waits correctly.
|
|
- 📁 Files touched:
|
|
- `frontend/package-lock.json`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- `npm ci` now succeeds cleanly.
|
|
|
|
### 2026-02-26 (npm deprecation warnings assessment)
|
|
|
|
- 🧩 Task: Assess reported npm deprecation warnings and identify real source/package owners.
|
|
- ✅ Decisions:
|
|
- Warnings are not from `frontend`; they originate in `backend` transitive dependencies.
|
|
- `@esbuild-kit/*` comes from `drizzle-kit@0.31.9` (currently latest).
|
|
- `node-domexception` comes via `@libsql/client -> node-fetch -> fetch-blob` (currently latest published chain).
|
|
- Treat as non-blocking upstream warnings for now (no local secure/functional regression).
|
|
- 📁 Files touched:
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- Re-check on future dependency releases; warnings can be removed once upstream chains migrate.
|
|
|
|
### 2026-02-26 (MedDetailModal test type drift fix)
|
|
|
|
- 🧩 Task: Unblock the targeted `MedDetailModal` test type drift after React 19 changes.
|
|
- ✅ Decisions:
|
|
- Kept scope minimal and test-only: updated `frontend/src/test/components/MedDetailModal.test.tsx` only.
|
|
- Added missing required props in `defaultProps`: `usePrescriptionRefill`, `onUsePrescriptionRefillChange`.
|
|
- Updated `RefillEntry` fixtures to current shape by replacing legacy fields with `refillDate` and `loosePillsAdded`.
|
|
- Did not run the targeted test command because the requested precondition (`npm run check` passing) is not met.
|
|
- 📁 Files touched:
|
|
- `frontend/src/test/components/MedDetailModal.test.tsx`
|
|
- `doku/memory_notes.md`
|
|
- `doku/report.md`
|
|
- 🔜 Follow-up/open points:
|
|
- `frontend check` remains blocked by unrelated TypeScript errors in other files (outside MedDetailModal test scope).
|