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

65 lines
3.2 KiB
Markdown

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