Files
duocthu/coordination/CLAUDE_CLAIM_2026-08-14.md
T

3.2 KiB

Claude ownership claim — 2026-08-14

Working from Feature-List-AI-Duoc-thu-V1.md (new file, owner-added this session): a live 17-query audit against production found 5/26 features fully passing, plus one reproducible bug (incomplete_answer on any two-section question, e.g. "Chỉ định và chống chỉ định của Aspirin"). Full audit + plan were reviewed and approved by the owner before starting (C:\Users\vuxba\.claude\plans\snug-sparking-goose.md, not in-repo).

Checked WORK_SPLIT_2026-08-10.md (Codex owns rag/**) against the more recent per-session claims: CLAUDE_CLAIM_2026-08-11.md and CLAUDE_CLAIM_2026-08-12.md both show Claude editing rag/answer.py / rag/agent.py directly after that split, each time with an explicit claim and an explicit "not touching" list rather than treating the 08-10 split as still absolute. Following that same practice here.

git log confirms production is on current HEAD (4f867aa, "Deploy to production" succeeded 2026-08-14T04:59:27Z) — three same-day/previous-day commits (3c6262e, 623fd62, f662835) already fixed adjacent bugs; none of them touch the scope below.

Work split across 3 branches/PRs this session

  • PR1 (this claim, branch agent/fix-clarify-and-safety-messaging): the incomplete_answer bug fix + 3 small response-text/UI fixes.
  • PR2 (next): two new read-only endpoints — list sections per drug, verbatim section text.
  • PR3 (last): query-history persistence (new Postgres column via additive migration, new endpoint, frontend wiring).

Each will get its own claim update / follow-up entry here as it starts.

PR1 — files claimed now

  • apps/ai-service/rag/sections.py — add a multi-match helper only; SectionResolver.resolve()'s existing single-match behavior is unchanged (other callers depend on "or nothing at all").
  • apps/ai-service/rag/understanding.py — detect when a turn names ≥2 distinct sections, route to the existing missing_attribute clarify instead of silently collapsing to one and generating a wrong-scope answer.
  • apps/ai-service/rag/agent.py — vary the out_of_scope message (price/vendor/brand vs. genuinely off-topic) instead of one shared string.
  • apps/ai-service/rag/answer.py — fixed, non-generated notice block on list_mode (condition→drug) answers, same "module constant" pattern as the existing DISCLAIMER.
  • apps/ai-service/tests/test_understanding.py, apps/ai-service/tests/test_section_routing.py, apps/ai-service/tests/test_agent.py, apps/ai-service/tests/test_grounded_generation.py — new/updated tests for the above.
  • packages/ui/src/ChatBubble.tsx — render the existing message.disclaimer field per-message (data already flows end-to-end, just never rendered).

Not touching: rag/service.py, rag/routing.py, retrieval adapters, ingestion/, or anything under the pre-existing dirty docs/ deletion block already in the working tree (unrelated restructuring, left alone).

Local-only, no deploy

Per standing instruction: build + test locally only. No push, no PR open/merge, no deploy without the owner's explicit go for each PR. Postgres backup + rollback.yml awareness apply to PR3 (the only one with a schema change), noted in the plan file.