C4. `coverage` gains two keys, and every key it had keeps its bytes: - `absent_terms`: the question's words the bundle holds in NO form -- not as written, and not through a relative it uses (`bm25.query_groups`, the same bridge the ranking reads through); - `weak`: true when one such word exists or nothing was delivered. A reading with its rule in the open, never a verdict about the bundle. It is computed for both rankings (`bm25.absent_terms` serves the fusion). The retrieval gate's `marked` -- the one reading both gates share -- reads `weak` beside its own bar, never instead of it; the known-negative that strips the payload's words now strips both readings. Words that only FRAME a question are stopwords in both languages (`how often`, `hvor ofte`, `hva står i`, `what does it say`), and so are the Norwegian function words spelled without their letters (`naar`, `paa`), the way ASCII-only text writes them. Read as topic words they would be "absent" from any collection that never uses them, which is what the synthetic sets showed on three answered questions before the list was extended. The working method says what to do with it, in one sentence each: the skill template's step 3 and the MCP server's instructions (1 253 bytes, under the 2 048 a client keeps) -- rephrase in the bundle's words, and if it stays weak, say the bundle does not cover the question. The search gate's table for this commit is kept in local state. Suite on a clean tree after `git add`: 2397 passed, 2 skipped, 4 xfailed. ruff, ruff format, mypy --strict clean. Retrieval gate unchanged at the rows the previous commit left red. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
126 lines
3.8 KiB
JSON
126 lines
3.8 KiB
JSON
{
|
|
"contract": "okf-consumption/2",
|
|
"bundle": {
|
|
"bundle_id": "b-golden-segmented-okf-v0-2",
|
|
"ref": "sha256-tree:cce7a02c769793cdb6e3afda45c955461b57373deab13a986d8bf7843d6e436f"
|
|
},
|
|
"budget": {
|
|
"unit": "utf-8 bytes of emitted JSON",
|
|
"instrument": "okf_consume.measure (len of the ensure_ascii=False JSON encoding, utf-8)",
|
|
"limit": 120000,
|
|
"spent": 2289,
|
|
"known_positive": {
|
|
"case": "docs/consumption-contract.md, encoded as a JSON string",
|
|
"expected": 19837,
|
|
"measured": 19837,
|
|
"raw_bytes": 19358,
|
|
"encoding_delta": 479
|
|
}
|
|
},
|
|
"denominators": {
|
|
"considered": 3,
|
|
"withheld": 0,
|
|
"delivered": 3
|
|
},
|
|
"question": "Hva sier veiledningen om krav?",
|
|
"coverage": {
|
|
"question_terms": [
|
|
"hva",
|
|
"sier",
|
|
"veiledningen",
|
|
"krav"
|
|
],
|
|
"unanswered_in_bundle": [
|
|
"hva",
|
|
"sier"
|
|
],
|
|
"unanswered_in_payload": [
|
|
"hva",
|
|
"sier"
|
|
],
|
|
"absent_terms": [],
|
|
"weak": false
|
|
},
|
|
"excerpts": [
|
|
{
|
|
"bundle_id": "b-golden-segmented-okf-v0-2",
|
|
"concept_id": "veiledning",
|
|
"sha256": "8f1f4d940887b96b39496d0aceb7a4fa212553510165917427e4f7e9efb98b03",
|
|
"adjudication": "proposed",
|
|
"trust_tier": "unverified",
|
|
"bundle_id_inherited": false,
|
|
"title": "Veiledning for eksempelbundel",
|
|
"sources": [
|
|
{
|
|
"resource": "veiledning.md",
|
|
"title": "veiledning.md"
|
|
}
|
|
],
|
|
"source_file": "veiledning.md",
|
|
"source_sha256": "6906ec0acbcfc246e825bda9863c716eb5611b465020e8204eeb448c32343f7d",
|
|
"source_lines": "[1, 4]",
|
|
"source_offset": "[0, 94]",
|
|
"text_sha256": "82d67ff01367a1a56532130e077956048004ac047e6062eae2143d96704c4a92",
|
|
"text": "\n# Veiledning for eksempelbundel\n\nDenne teksten er syntetisk og finnes kun for a pinne bytes.",
|
|
"rank": 1
|
|
},
|
|
{
|
|
"bundle_id": "b-golden-segmented-okf-v0-2",
|
|
"concept_id": "krav/1-1/foerste-krav",
|
|
"sha256": "84145512284a8bbc1a8905c73d0de3f0e0cb7081cf517f778fe88a610d2b4f62",
|
|
"adjudication": "proposed",
|
|
"trust_tier": "unverified",
|
|
"bundle_id_inherited": false,
|
|
"title": "Foerste krav",
|
|
"sources": [
|
|
{
|
|
"resource": "veiledning.md",
|
|
"title": "veiledning.md"
|
|
}
|
|
],
|
|
"source_file": "veiledning.md",
|
|
"source_sha256": "6906ec0acbcfc246e825bda9863c716eb5611b465020e8204eeb448c32343f7d",
|
|
"source_lines": "[5, 8]",
|
|
"source_offset": "[94, 176]",
|
|
"parent": {
|
|
"concept_id": "veiledning",
|
|
"title": "Veiledning for eksempelbundel"
|
|
},
|
|
"text_sha256": "08447c690087834883a78fb9f40d474c68b2526ed57d0dafe01c4868db3c04f0",
|
|
"text": "\n## 1.1 Foerste krav\n\nEt krav som beskriver den foerste betingelsen i eksempelet.",
|
|
"rank": 2
|
|
},
|
|
{
|
|
"bundle_id": "b-golden-segmented-okf-v0-2",
|
|
"concept_id": "krav/1-2/andre-krav",
|
|
"sha256": "4f8a869aa4e898ec1a30595951b3e198e09091d76c41078a52e821000eb9e22c",
|
|
"adjudication": "proposed",
|
|
"trust_tier": "unverified",
|
|
"bundle_id_inherited": false,
|
|
"title": "Andre krav",
|
|
"sources": [
|
|
{
|
|
"resource": "veiledning.md",
|
|
"title": "veiledning.md"
|
|
}
|
|
],
|
|
"source_file": "veiledning.md",
|
|
"source_sha256": "6906ec0acbcfc246e825bda9863c716eb5611b465020e8204eeb448c32343f7d",
|
|
"source_lines": "[9, 11]",
|
|
"source_offset": "[176, 253]",
|
|
"parent": {
|
|
"concept_id": "veiledning",
|
|
"title": "Veiledning for eksempelbundel"
|
|
},
|
|
"text_sha256": "4c181e1debb141d3cb1a7bd47249fdac1c0b2c5db1b47cf255ef8f04f83ec840",
|
|
"text": "\n## 1.2 Andre krav\n\nEt krav som beskriver den andre betingelsen i eksempelet.",
|
|
"rank": 3
|
|
}
|
|
],
|
|
"withheld": {
|
|
"total": 0,
|
|
"by_rule": {},
|
|
"nearest": [],
|
|
"complete": true
|
|
}
|
|
}
|