{
  "schema": "task-2606.hardening-cases.v1",
  "task_id": "task-2606",
  "track": "TRACK C — TASK_2553_PLUS58_MICRO_FIX (additive-only, +58 frozen anchor byte-0)",
  "ts_kst": "2026-05-19 KST",
  "authority": "memory/tasks/task-2606.md sha256 842758659aa026280c76d27ba6b20e647a239d2e6b0374ebac33f247a8d59037. preflight 정본 memory/events/task-2604-multitrack-preflight-decision_260519.json TrackC.",
  "note": "회장 §2 — +58 Codex HIGH(test15 mock-guard)·MEDIUM#1(coherence cross-assert 누락) micro-fix 의 신규 additive 모듈 fixture. 기존 +58 산출물(test/validator/schema/criteria/fixture) 직접 수정 0 — 본 fixture·신규 모듈만 산출. 아래 pinned digest 는 task-2606 산출 시점 +58 frozen anchor 의 외부 고정 기준(self-hash trivial-equality 차단용 — 모듈 under test 의 자기 해시 함수가 아니라 외부 상수와 대조).",
  "anu_key": "c119085addb0f8b7",
  "anu_chat_id": 6937032012,
  "frozen_plus58_artifacts": {
    "validator_module": "scripts/validate_fallback_acceptance_2553plus58.py",
    "regression_test": "tests/regression/test_fallback_acceptance_2553plus58.py",
    "non_blocking_schema": "schemas/non_blocking_fallback_schema.json",
    "criteria": "memory/events/fallback_acceptance_criteria.json",
    "fixture": "memory/fixtures/task-2553plus58.cases.json"
  },
  "pinned_sha256": {
    "scripts/validate_fallback_acceptance_2553plus58.py": "b3c973d6b7d51ca5757c863ebb89c895c5b58ef86589549819aca72546866345",
    "tests/regression/test_fallback_acceptance_2553plus58.py": "48a8b7428979abdd18c3d88c96394116441f3bc1686461050ae4a138fc962edc",
    "schemas/non_blocking_fallback_schema.json": "5cb2a5df608737dc4cdc13b44b04b599acb3fba741d60cd1ea984f76ae30e6b1",
    "memory/events/fallback_acceptance_criteria.json": "c2b7fdd5f2f48e0c0c2b9c28ef924fb3152f253b3e4db2f255af1c0917859585",
    "memory/fixtures/task-2553plus58.cases.json": "9e58c577ee306dedc5e4e0ec59f8aa73a7fe56fe0ffd77bb21e59434c3c8a5a4"
  },
  "high_mock_guard_defect": {
    "id": "HIGH",
    "codex_finding": "+58 test_15 mock-guard defect — `M.sha256_of(PATH) == _sha(PATH)` 는 양변이 동일 disk 파일을 재해시하므로 모듈/엔트리포인트가 stub 으로 치환되어도 trivially 일치. 외부 고정(pinned) 기대 digest 부재로 stub-only FAIL 을 강제하지 못함.",
    "additive_fix": "신규 tests/regression/test_fallback_acceptance_2606_hardening.py — (1) test-local 독립 hashlib 로 계산한 +58 산출물 digest 가 본 fixture 의 pinned 상수와 일치하는지(외부 anchor), (2) 실 entrypoint code-object 의 co_filename·inspect 소스 해시가 실 SCRIPT_PATH 에서 옴, (3) 모듈 자체 hasher(M.sha256_of) 가 pinned 상수와 일치(정직성), (4) mock-only FAIL: sha256_of 를 상수반환으로 위조한 stub 모듈은 hardening 가드가 거부함을 실증.",
    "plus58_files_byte0": true
  },
  "medium1_coherence_cross_assert_gaps": {
    "id": "MEDIUM#1",
    "codex_finding": "+58 check_criteria_schema_coherence 12-check 가 marked_by_collector_role / bound_after_normal_durable_success / expected_on_fire 의 schema↔criteria↔fixture cross-assert 를 누락.",
    "additive_fix": "신규 scripts/validate_fallback_acceptance_2606_coherence_ext.py — 기존 validator read-only import 후 아래 cross-assert 보강(기존 12-check 는 그대로 재사용·무수정).",
    "cross_asserts": [
      {
        "field": "marked_by_collector_role",
        "schema_expectation": {"const": "ANU"},
        "must_be_in_schema_required": true,
        "criteria_basis": "criteria.safety_invariant + criterion_b — 마크는 독립 ANU collector 가 기록, executor self-* 무효",
        "fixture_valid_marks_must_set": "ANU"
      },
      {
        "field": "bound_after_normal_durable_success",
        "schema_expectation": {"const": true},
        "must_be_in_schema_required": true,
        "criteria_basis": "criteria.applicability + criterion_b — normal callback durable-success 선행 fallback 에만 의미, 미선행 시 NOT_APPLICABLE",
        "fixture_valid_marks_must_set": true
      },
      {
        "field": "expected_on_fire",
        "schema_expectation": {"enum": ["NO-ACTION", "DUPLICATE_CALLBACK_IGNORED"]},
        "must_be_in_schema_required": true,
        "criteria_basis": "criteria.anti_pattern handling set {DUPLICATE_CALLBACK_IGNORED, NO-ACTION} 와 정합 — 발화 시 비차단 무동작",
        "fixture_valid_marks_value_in_enum": true
      }
    ]
  },
  "medium2_no_code_fix": {
    "id": "MEDIUM#2",
    "codex_finding": "runtime callback-actor identity 증명 부재 (acceptance 모듈이 런타임에서 누가 마크를 기록했는지 능동 인증하지 않음).",
    "disposition": "NO-CODE-FIX — design-correct scope boundary. 상세 INFO 기록: memory/events/task-2606.microfix-disposition.json",
    "rationale_summary": "schema 가 owner_key/chat_id/marked_by_collector_role 를 self-MARKING const 로 이미 fail-closed. 런타임 actor 인증은 +49 코드 정본·durable registry collector_key 다층통제의 책임이며, 본 acceptance 모듈은 오프라인 사후 검증기로 설계됨(scope boundary). 모듈에 runtime actor-auth 를 추가하면 runtime architecture 대형변경·scope 확대로 §3/§6 위반."
  },
  "behavioral_regression_observation": {
    "comment": "실 entrypoint 직접 호출 회귀(문서-only 금지). +58 evaluate_fallback_acceptance 를 실 모듈에서 호출, criterion (b) PASS 를 재확인.",
    "task_id": "task-2553+58",
    "fallback_cron_id": "F0683510-FB",
    "fallback_bound": true,
    "normal_callback_durable_success": true,
    "normal_success_unchanged": true,
    "registry_non_blocking_mark_ref": "valid_non_blocking_mark@task-2553plus58.cases.json",
    "expected_verdict": "OPERATIONAL_PASS",
    "expected_satisfied": ["b"]
  },
  "git_invariant": {
    "head": "20456b5f83fc039f2fd6f50f4b94095c29b41bfb",
    "branch": "task/task-2553p1-f1-clean-replacement"
  },
  "frozen_anchors_read_only": [
    "memory/events/task-2553.legacy-pending-fallback-inventory_260518.json",
    "memory/events/task-2553+37.fallback-duplicate-callback-ignored_260518.json",
    "memory/events/callback_4tuple_index.jsonl"
  ],
  "hold_for_chair": false
}
