Commit History
-
[NOTICKET] feat(knowledge): review diff + the rule/domain boundary (r4, o2)
Rifqi Hafizuddin +1: Claude Opus 5r4 `changed_fields()` and `review_diff()`. The queue can now say WHAT moved rather than only that something did - which was the ask: show before / after, do not send the expert back to read the entry from the start. `changed` is empty when the approval still stands, so the screen can say "nothing to re-read" instead of rendering two identical panes. `before` is what the expert actually had in front of them; for an `edited` decision that is their own corrected text, not the model's claim. A test pins changed_fields() and has_mutated() to the same answer - two notions of "has this changed" that can disagree is the same defect as two notions of readiness. o2 The rule/domain boundary, written down in the output contract. The two blurred on screen during the 8 Sep review and a boundary nobody has recorded is one the prompts cannot hold. The test: if removing it would change how a NUMBER IS COMPUTED OR SOURCED it is a rule; if it would only …5cb2e2d -
[NOTICKET] feat(knowledge): incremental ingest — versions, reuse, staleness (i1-i7)
Rifqi Hafizuddin +1: Claude Opus 5The 2026-09-08 "ingest bertahap" items, against four rulings taken 2026-09-14. i5 Identity is `doc_id`; the same document arriving with different bytes is a NEW VERSION of it, not a new document. That is what keeps an amended file's approvals attached - entity_id derives from doc_id, which does not move. The reuse check moves to find_document_by_hash (any version): computing the next version first and then looking it up would miss the row that already holds those bytes and re-parse a document we already have, turning the idempotency guarantee into a paid no-op. The artifact's own `version` is ignored - parsing stamps 1 on every parse and cannot know what the tenant already holds. i2 A term this company has already approved is no longer re-extracted. One LLM call per cluster is the entire cost of the glossary branch, so every recognised term is a call not made - and it is also what stops one concept arriving as term 1.1 and term 1.2. Ids s…72e18a5