{
  "schema": "local-recipe-evidence/v2",
  "status": "PASS_WITH_EXPLICIT_LIMITS",
  "recordedAt": "2026-10-17T22:23:03+09:00",
  "scope": "Separate local sample, not original author or specified-model reproduction.",
  "runtime": {
    "node": {
      "node": "v24.13.1",
      "timezone": "Asia/Seoul"
    },
    "browser": "Ego Lite Chromium desktop viewport emulation",
    "servedOver": "localhost HTTP"
  },
  "unitChecks": [
    {
      "id": "habit-streak-three",
      "status": "PASS"
    },
    {
      "id": "habit-gap-breaks",
      "status": "PASS"
    },
    {
      "id": "habit-yesterday",
      "status": "PASS"
    },
    {
      "id": "habit-midnight-fixture",
      "status": "PASS"
    },
    {
      "id": "habit-leap-fixture",
      "status": "PASS"
    },
    {
      "id": "habit-invalid-json",
      "status": "PASS"
    },
    {
      "id": "habit-invalid-day",
      "status": "PASS"
    },
    {
      "id": "habit-duplicate-id",
      "status": "PASS"
    }
  ],
  "browserObservations": [
    {
      "id": "habit-initial",
      "state": {
        "state": {
          "version": 1,
          "habits": []
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-completed",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "점심 뒤 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"점심 뒤 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-reloaded",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "점심 뒤 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"점심 뒤 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-sample",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "점심 뒤 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": true,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"점심 뒤 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-renamed",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "저녁 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"저녁 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-fault",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "저녁 10분 걷기",
              "days": []
            }
          ]
        },
        "sample": false,
        "fault": true,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"저녁 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-fault-reload",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "저녁 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"저녁 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-delete-first",
      "state": {
        "state": {
          "version": 1,
          "habits": [
            {
              "id": "06add725-0f59-4cd1-ad64-afa1709d7b23",
              "name": "저녁 10분 걷기",
              "days": [
                "2026-10-17"
              ]
            }
          ]
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[{\"id\":\"06add725-0f59-4cd1-ad64-afa1709d7b23\",\"name\":\"저녁 10분 걷기\",\"days\":[\"2026-10-17\"]}]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-deleted",
      "state": {
        "state": {
          "version": 1,
          "habits": []
        },
        "sample": false,
        "fault": false,
        "blocked": false,
        "stored": "{\"version\":1,\"habits\":[]}",
        "today": "2026-10-17"
      }
    },
    {
      "id": "habit-width-360",
      "state": {
        "scrollWidth": 360,
        "clientWidth": 360,
        "bodyCut": "visible"
      }
    },
    {
      "id": "habit-width-390",
      "state": {
        "scrollWidth": 390,
        "clientWidth": 390,
        "bodyCut": "visible"
      }
    },
    {
      "id": "habit-width-768",
      "state": {
        "scrollWidth": 768,
        "clientWidth": 768,
        "bodyCut": "visible"
      }
    },
    {
      "id": "habit-width-1440",
      "state": {
        "scrollWidth": 1440,
        "clientWidth": 1440,
        "bodyCut": "visible"
      }
    }
  ],
  "issues": [
    {
      "kind": "실제 검사에서 발견",
      "observed": "2026-02-31이 형식 정규식만 통과했습니다. 또 창 초점마다 전체 목록을 다시 만들어 버튼 조작이 중단됐습니다.",
      "change": "달력 날짜를 다시 변환해 대조하고 날짜가 달라질 때만 초점 복귀 갱신을 하도록 수정했습니다.",
      "result": "불가능한 날짜 거절과 실제 버튼 조작·저장·삭제를 다시 실행해 통과했습니다."
    },
    {
      "kind": "의도적 오류 주입",
      "observed": "저장 실패 스위치가 localStorage 쓰기만 막도록 했습니다. 실제 용량 초과를 일으킨 것은 아닙니다.",
      "change": "화면 편집본과 마지막 저장본을 구분하고 오류를 알립니다.",
      "result": "이전 저장 문자열과 새로고침 뒤 마지막 완료 상태가 유지됐습니다."
    }
  ],
  "packageReproduction": {
    "id": "habit-tracker-garden",
    "source": "freshly extracted sample-source.zip",
    "initialized": true,
    "details": {
      "state": {
        "version": 1,
        "habits": []
      },
      "sample": false,
      "fault": false,
      "blocked": false,
      "stored": "{\"version\":1,\"habits\":[]}",
      "today": "2026-10-17"
    }
  },
  "scopeBoundaries": [
    "기록은 현재 주소·브라우저의 localStorage에 저장됩니다. 자료 삭제·시크릿 모드·다중 탭 동시 수정은 별도 복구 설계 대상입니다.",
    "날짜 계산은 함수 입력, 저장 오류는 모의 실패 스위치로 시험했습니다. 실제 자정 경과·OS 시간대 변경·브라우저 용량 초과·저장 권한 차단·손상 저장본 복구는 검사 범위 밖입니다.",
    "직접 작성한 별도 로컬 샘플의 동작 기록입니다. 원작 재현이나 지정 AI 모델 간 성능 비교와 구분합니다.",
    "화면 폭 검사는 데스크톱 Chromium 뷰포트 에뮬레이션 기준입니다. 실제 단말·Safari·Firefox·장기 운영은 별도 환경 시험 대상입니다."
  ]
}
