{
  "schema": "anu.task2617.detected_pattern.v1",
  "task_id": "task-2617",
  "source_scan": "task-2616 (memory/events/task-2616.scan-result.json · remediation-scope-proposal.json)",
  "category": "critical7.arbitrary_fs_write.cli_output_path",
  "generated_kst": "2026-05-19 13:53 KST",
  "canonical_ws_root": "/home/jay/workspace",
  "detected_count": 3,
  "detected": [
    {
      "file": "anu_v3/batch_hold_adjudicator.py",
      "task_id": "task-2610",
      "arg": "--output",
      "sink_kind": "Path(a.output).write_text",
      "sink_line_pre": 656,
      "sha256_before": "b255bb4223c22f2ee238b7461994a349917ef23e7504e93e6df7dd83136b03e7",
      "sha256_after": "2683b473535befd0b110ffe904babd3d4a118034c7315ba070c96e03d71dadd3",
      "stdout_default_branch": "sys.stdout.write(out + \"\\n\")  — 불변",
      "remediation": "if a.output 분기를 cli_output_path_guard.atomic_guarded_write 경유로 교체. else stdout 분기 byte 불변."
    },
    {
      "file": "anu_v3/batch_dependency_classifier.py",
      "task_id": "task-2613+1",
      "arg": "--out",
      "sink_kind": "Path(args.out).write_text",
      "sink_line_pre": 725,
      "sha256_before": "93ffc27e7cd3b59c082ad9fd67c4dac0d1a02e4900691ae6cb79304044c33f40",
      "sha256_after": "7e1bad7ff8c4811b10cda20b80809dcafe69f05e30de341ba72c01af123b7fc2",
      "stdout_default_branch": "print(text) — 불변",
      "remediation": "if args.out 분기를 guard 경유로 교체. task-2613+1 이 명시적 CHAIR_HOLD 로 남긴 --out Critical7 의 회장 승인 후속 해제. dependency 분류 로직 byte 불변."
    },
    {
      "file": "anu_v3/pre_authorized_evidence_bundle_builder.py",
      "task_id": null,
      "is_new_finding": true,
      "arg": "--out",
      "sink_kind": "Path(args.out).write_text",
      "sink_line_pre": 581,
      "sha256_before": "9344f9aa7bd37da9979e39222c782f8544f638b1d99f33bbdda0bff1514ea06a",
      "sha256_after": "5fd92c4939a4e4a01ba15be138365199349144e52d32d2c2da1dff8afa4bdc5f",
      "stdout_default_branch": "print(text) — 불변",
      "chair_hold_release": "신규 Critical7. task-2617 §2 에서 회장 직접 sha256 명시 승인 → HOLD 해제·remediation 적용.",
      "remediation": "if args.out 분기를 guard 경유로 교체. evidence bundle 빌드 로직 byte 불변."
    }
  ],
  "stdout_only_safe_excluded": [
    {
      "file": "anu_v3/auto_remediation_planner.py",
      "sha256_baseline": "150e79992dbbfe41a432abf6096a8ade0e897f0eef23c86e585103b1eaa5b364",
      "sha256_after": "150e79992dbbfe41a432abf6096a8ade0e897f0eef23c86e585103b1eaa5b364",
      "byte0": true
    },
    {
      "file": "anu_v3/codex_high_classifier.py",
      "sha256_baseline": "214af21eac48b184e37d4ed86403417636098c84f4e573cad949454ec3964006",
      "sha256_after": "214af21eac48b184e37d4ed86403417636098c84f4e573cad949454ec3964006",
      "byte0": true
    },
    {
      "file": "anu_v3/critical7_classifier.py",
      "sha256_baseline": "6143a2d25fff1f15201feb461c9ce28e62d3400f5893264fe445d311fe4877f2",
      "sha256_after": "6143a2d25fff1f15201feb461c9ce28e62d3400f5893264fe445d311fe4877f2",
      "byte0": true
    }
  ],
  "guard_module": "anu_v3/cli_output_path_guard.py",
  "policy": "config/cli_output_path_policy.yaml",
  "scope_note": "검출 3건 한정. task-2611+1 label precedence scope 미접촉. 검출 3건 외 임의 리팩터링 0."
}
