Files
resolutionflow/.ai/TODO.md
Michael Chihlas 1559feb759
Some checks failed
Mirror to GitHub / mirror (push) Successful in 11s
CI / frontend (pull_request) Successful in 5m43s
CI / e2e (pull_request) Failing after 6m40s
CI / backend (pull_request) Has been cancelled
docs(ai): track currentChatRef silent-swallow follow-up in TODO
The guard pattern that masked the prefill-ref bug fixed in PR #153 is
applied across handleSend, handleTaskSubmit, selectChat, refreshFacts,
refreshActiveFix, and refreshPreview. Worth either logging the
mismatch path or distinguishing expected-stale from unexpected-stale
so the next instance of this class of bug surfaces instead of hiding.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 00:24:25 -04:00

3.2 KiB

TODO.md

Backlog of work NOT currently active. Read only when CURRENT_TASK.md status is complete. Format: - [ ] short description — optional link to issue/PR

Up next

  • Parallelize backend pytest with pytest-xdist. landing as PR #151. Verified locally: backend suite 22 min → 4m 28s with -n auto on the 8-core homelab runner. Per-worker DB isolation via PYTEST_XDIST_WORKER in conftest.py.

Backlog

  • Frontend lint warnings cleanup. 23 react-hooks/exhaustive-deps warnings remain after PR #149 (mostly missing-deps in useEffect). Either fix them or audit them for known-safe ones and add eslint-disable comments. Not blocking CI today.
  • Audit filterwarnings ignores added in wip(handoff): restore backend suite to green. Codex added narrow ResourceWarning filters for unclosed socket/transport/event-loop noise from pytest-asyncio teardown. Worth periodically reviewing whether those are still needed (e.g. when bumping pytest-asyncio) — if a real warning appears in those forms it would be silenced.
  • Add data-testid attributes to e2e-critical interactive elements. PR #152 fixed five Playwright tests by chasing UI-text changes (SessionsSession History, Account SettingsAccount Management, /assistant/pilot, "Flow Sessions" tab, Resume button on session cards). Each was a one-line selector update, but every UI churn re-breaks them. Adding stable data-testid attributes on the targeted elements (page heading wrappers, tab nav, primary action buttons) and switching tests to getByTestId would make these immune to copy/route renames. Scope it small — start with SessionHistoryPage heading, the AI/Flow Sessions tab buttons, the per-session Resume button, and the command-palette FlowPilot option.
  • Per-test transactional rollback in test_db fixture. Bigger engineering than xdist (which we already shipped). Instead of DROP SCHEMA public CASCADE per test, wrap each test in a savepoint and rollback at teardown. ~30-40% additional speedup on top of xdist for test-DB-heavy tests. Real refactor; only worth it if the suite gets significantly larger or runs more frequently.
  • Consider pytest-testmon for PR-time test selection. Tracks which tests touched which source files and only re-runs affected ones. Best for small PRs touching ~few files. Adds cache-invalidation complexity; only worth it if the suite stays painfully long even after xdist.
  • AssistantChatPage currentChatRef guard is a silent returnhandleSend, handleTaskSubmit, selectChat, refreshFacts, refreshActiveFix, and refreshPreview all bail with if (currentChatRef.current !== sentForChatId) return when stale. This is by design for chat switching, but it also silently masked the prefill-ref bug fixed in PR #153 — the user just saw "no AI response" with no log, no toast, no Sentry event. Either (a) log a console.warn/Sentry breadcrumb on the mismatch path so future drift is visible, or (b) split "expected stale" (chat switch) from "unexpected stale" (ref never updated) so only the latter alerts. Pair with an audit of every currentChatRef.current = ... assignment vs every setActiveChatId(...) call to make sure they're paired everywhere.