Commit History
-
[NOTICKET] fix: add a fault-code label, measured; re-diagnose the Komatsu tables
Rifqi Hafizuddin +1: Claude Opus 5The Komatsu manual prints 27 service codes ([CA559], [CB2249]) in plain prose and the pipeline returned ZERO mentions for them. Not a parsing problem -- the codes are in `Chunk.text` verbatim. No label was asking: a code is not a component, a symptom, a check or an action, so neither `broad` nor the parked `diagnostic` set proposed one. GLiNER finds them readily once asked, 6 of 6 on the probe chunk at 0.54-0.69 against a 0.25 floor. `fault code` added to `diagnostic`, plus a `broad_codes` A/B arm. It is deliberately NOT in `broad`, because a label is not additive -- GLiNER runs flat NER and a new label competes for spans: mentions clusters code clusters E1c_strict BUMA 251 -> 200 86 -> 67 0 -> 0 0.8537 -> 0.7805 Komatsu 449 -> 548 93 -> 161 0 -> 17 -- Open Pit 787 -> 711 427 -> 377 0 -> 0 -- BUMA loses 51 mentions, 19 clusters and three gold terms; Open Pit loses 76 mentions…366697c -
[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