Commit History
-
[NOTICKET] feat: pull one linked partner chunk into the evidence window
Rifqi Hafizuddin +1: Claude Opus 50.4.0 pairs a table chunk with the prose that introduces it (`referenced_by`, both directions) and nothing consumed the pointer. Measured what it would buy, ranking only on the three v2 artifacts -- free, no GLiNER, no spend: clusters top-5 touches a pair BOTH sides only ONE BUMA 83 31 0 31 Komatsu 93 55 0 55 Open Pit 427 70 0 70 Zero of 603 clusters saw both sides. The ranker never co-selects a table and the prose that names it, so the partner is unseen content rather than a duplicate -- and for a bare grid that prose is often its only title ("Troubleshooting of engine (S-mode)" above "S-1 | 6"). Cost at the cap of 1: evidence read +14.5%/+24.5%/+9.9%, i.e. +1.6%/+4.1%/+4.2% of total prompt spend; Open Pit moves 71% -> ~74% of the 2M ceiling. The expansion lives in `top_k`, not `rank_evidence`, for two rea…5d51025 -
[NOTICKET] fix: retire escalation, budget windows by subword (Finding 6 + the over-cap window)
Rifqi Hafizuddin +1: Claude Opus 5Two measurements, two constants. Finding 6 asked for a number either way on escalation. Counted off all six persisted paid runs (v1 K=3 and v2 K=5 x three documents): glossary calls clusters extra definitions from escalation BUMA v1 69 66 3 0 BUMA v2 83 83 0 0 Komatsu v1 94 75 19 0 Komatsu v2 102 93 9 0 Open Pit v1 361 349 12 0 Open Pit v2 430 425 5 0 48 escalation calls, and not one produced a definition the first round had missed. `extraction_status == "escalated"` is set only when a later round succeeds where round 0 failed, and it appears zero times in every file. Why it cannot work as built: escalation hands the model the NEX…1faca81 -
[NOTICKET] fix: test the caption hypothesis; ship the signal at weight 0.0
Rifqi Hafizuddin +1: Claude Opus 5The first paid v2 run produced `definitions_citing_a_caption = 0` on all three documents. Two candidate explanations. Both are now measured and BOTH ARE FALSE. 1. "Captions never reach the term filter." FALSE. A caption is part of Chunk.text, so GLiNER already scans it and already produces mentions from it: 2 of 2 captions on BUMA, 3 of 8 on Open Pit. Feeding captions to the filter would have been a no-op. 2. "Figure-bearing chunks are never selected as evidence." FALSE. A captioned chunk is already inside the top-5 for 22 of 83 BUMA clusters and 64 of 427 Open Pit clusters. To test (2) properly this adds the lever that genuinely was missing: an `asset_caption_names_term` ranker signal. A/B at 2.5 vs 0.0 across all three documents changed the top-5 of ONE cluster out of 603, and moved zero clusters from "no figure" to "has a figure". The real reason is visible by reading them: not one caption in the corpus is a definition. They are figure titles -- "Figure 1.3. Re…36a166e -
[NOTICKET] fix: retire the fuzzy clustering pass; add E1c post-cluster recall
Rifqi Hafizuddin +1: Claude Opus 5`rapidfuzz.token_set_ratio` returns exactly 100 whenever one string's token set is a SUBSET of the other's, so a head noun always absorbed its own compounds and FUZZY_THRESHOLD=92 was inert. Measured across three documents (BUMA standard, Komatsu shop manual, Open Pit textbook Ch.1), the pass made 140 merges: 131 token-subset matches -> all wrong 6 singular/plural pairs -> correct, now folded deterministically 3 gain/loss pty|qty|ua -> wrong; three distinct metrics 94% of its output was wrong and it produced no correct merge that plural folding does not now do. Matching is exact (plural-folded) -> abbreviation<->expansion. token-subset merges 15/18/97 -> 0/0/0 E1c_strict (BUMA) 0.8293 -> 0.8537 (`EWH`, absorbed by `Working Hours`, recovered) After the fix BUMA's remaining unowned gold terms are all ones the FILTER never proposed, so clustering destroys nothing. `normalize(lemma=True)` is scoped to the clustering key path only. rank/evidence.py imports `norm…2cc21c9
-
/feat knowledge management (#20)
- [NOTICKET] docs: knowledge pipeline test integration — context, audited task checklist, DEV_PLAN §0.8 (8e69dc6c638509f4dd7b6775d520fb4aa4efbd3e) - [NOTICKET] docs: knowledge pipeline — reframe kex as prototype, not port target (7cce5ffc9ab88791ac139dbef8e88e124a3d049e) - [NOTICKET] feat(eval): knowledge-extraction gold set, scorer + frozen prototype baseline (60cf4a885ef31a8aa64916f5a70ac5a0e8062c5f) - [NOTICKET] chore: add missing planner and readiness eval results (bd6659b3bf523597e4482b04ab1fcff5e1284d25) - [NOTICKET] feat(knowledge_extraction): free stages — models, seam adapter, filters, cluster, ranking (024c30abd1189119d33508eded334fe5a3ed5011) - [NOTICKET] fix(knowledge_extraction): move runner into the package; fix two ranking defects (72605ff6876a7936ab685d417c766ce820f6214b) - [NOTICKET] feat(knowledge_extraction): span filter — E1 recall 0.8537, matches the frozen baseline (3a016343398753cf730d50548c0e92ff47c6716c) - [NOTICKET] feat(knowledge_extraction): paid extraction …b68816f