Files
medassist-ng/doku/memory_notes.md
T

19 KiB

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:

### 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 localAuthEnabledformLoginEnabled 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).