Commit History
-
[NOTICKET] feat(knowledge-domain): the declared half — domain TBox + review (V4-9, V4-10)
Rifqi Hafizuddin +1: Claude Opus 5The half that could not be derived: what a domain IS, and what it deliberately is NOT. `measures`, `policies` and `units` fall out of entries; identity and boundary do not, and that is what the review loop exists for. **`boundary` IS DERIVED, and that is the design decision worth keeping.** v3's real lesson was not the rename - it was changing the question so the answer is checkable, `purpose` (composed, unverifiable) becoming `purpose_verbatim` (located, span-checked). A boundary sentence is inherently unquotable, being a statement about ABSENCE, so asking a model to write one reproduces exactly the unfalsifiable claim v3 removed. Instead it is the complement of the covered subdomains over a closed 11-member enum. On the BUMA corpus: covers production, equipment, planning, hauling, loading -> "no approved knowledge about maintenance, drilling_blasting, safety, quality, cost, geology". Deterministic, checkable, and it turns an honest refusal into a fact about the corpus rat…601937c -
[NOTICKET] feat(knowledge-domain): KnowledgeService — the interface agents read through (K1-K4)
Rifqi Hafizuddin +1: Claude Opus 5Three calls, and they ARE the product. The end goal is an MCP service exposing domain knowledge to agents we do not own, so these three are what an external client would be given; our planner becomes the FIRST client rather than the only one, which makes the eventual MCP server a transport rather than a redesign. get_context(user_id, catalog=None) Tier 1 - the card, preloaded lookup(user_id, terms=[...]) Tier 2 - detail, on demand terms_used(user_id, surfaces=[...]) what a finished run actually touched K2 - THE CARD. Two tiers because the preload-vs-lookup question is settled by size and hit-rate, not by kind. The card carries identity, boundary, measures with their formulas/inputs/governing rules, and the full vocabulary as BARE SURFACES - which is the point of it: a term list costs a few hundred tokens and is what stops a planner force-mapping an unrecognised term onto a column that merely looks similar (the pr/13 `pa`-as-"revenue" failure). The card says …ae0e456