{
  "version": "20260831.1",
  "checkedAt": "2026-08-31",
  "scope": "독립 JavaScript 검사 규칙의 가상 예제. 실제 Gemini 추가 실행이나 업무 성과가 아님.",
  "examples": {
    "json": {
      "input": "[{\"id\":\"A-01\",\"title\":\"자료 확인\",\"owner\":null,\"due\":\"2026-09-01\",\"status\":\"pending\"}]",
      "result": {
        "syntax": true,
        "schema": true,
        "rows": 1,
        "errors": [],
        "note": "이 글의 작업표 계약만 검사합니다. 내용의 사실성·실제 담당자 동의는 검사하지 않습니다."
      }
    },
    "csv": {
      "input": "id,reference,note\r\n00123,12345678901234567,\"앞자리 0, 긴 번호\"\r\n00456,ABC-02,\"따옴표 \"\"예시\"\"\"",
      "result": {
        "rows": 2,
        "columns": 3,
        "warnings": [],
        "protectedValues": [
          {
            "row": 2,
            "column": 1,
            "value": "00123",
            "reason": "앞자리 0"
          },
          {
            "row": 2,
            "column": 2,
            "value": "12345678901234567",
            "reason": "16자리 이상 숫자 모양 식별자"
          },
          {
            "row": 3,
            "column": 1,
            "value": "00456",
            "reason": "앞자리 0"
          }
        ],
        "data": [
          [
            "id",
            "reference",
            "note"
          ],
          [
            "00123",
            "12345678901234567",
            "앞자리 0, 긴 번호"
          ],
          [
            "00456",
            "ABC-02",
            "따옴표 \"예시\""
          ]
        ]
      }
    },
    "duplicates": {
      "input": "id,item,status\n001,자료 확인,pending\n001,자료 확인,pending\n002,링크 확인,pending\n002,링크 확인,done\n,담당 확인,pending",
      "result": {
        "key": "id",
        "groups": [
          {
            "key": "001",
            "type": "완전 일치",
            "rows": [
              {
                "row": 2,
                "values": [
                  "001",
                  "자료 확인",
                  "pending"
                ]
              },
              {
                "row": 3,
                "values": [
                  "001",
                  "자료 확인",
                  "pending"
                ]
              }
            ]
          },
          {
            "key": "002",
            "type": "내용 충돌",
            "rows": [
              {
                "row": 4,
                "values": [
                  "002",
                  "링크 확인",
                  "pending"
                ]
              },
              {
                "row": 5,
                "values": [
                  "002",
                  "링크 확인",
                  "done"
                ]
              }
            ]
          }
        ],
        "missingKeyRows": [
          6
        ],
        "note": "공백·대소문자·앞자리 0을 임의로 합치지 않습니다. 삭제하지 않고 후보만 표시합니다."
      }
    },
    "dates": {
      "input": "2026-09-01\n2026-09-01T00:30:00+09:00\n2026-02-29\n03/04/2026",
      "result": [
        {
          "input": "2026-09-01",
          "kind": "달력 날짜",
          "result": "2026-09-01",
          "note": "시간대로 바꾸지 않음"
        },
        {
          "input": "2026-09-01T00:30:00+09:00",
          "kind": "시점",
          "utc": "2026-08-31T15:30:00.000Z",
          "seoul": "2026-09-01 00:30:00 +09:00"
        },
        {
          "input": "2026-02-29",
          "kind": "보류",
          "note": "모호한 표기·없는 날짜·시간대 없는 시각은 추측하지 않음"
        },
        {
          "input": "03/04/2026",
          "kind": "보류",
          "note": "모호한 표기·없는 날짜·시간대 없는 시각은 추측하지 않음"
        }
      ]
    },
    "filenames": {
      "input": "보고서 초안.txt\nCON.txt\n가.txt\n가.txt\nReport.txt\nreport.txt",
      "result": {
        "planned": [
          {
            "index": 1,
            "original": "보고서 초안.txt",
            "proposed": "보고서_초안.txt",
            "issues": []
          },
          {
            "index": 2,
            "original": "CON.txt",
            "proposed": "file_CON.txt",
            "issues": [
              "Windows 예약 이름"
            ]
          },
          {
            "index": 3,
            "original": "가.txt",
            "proposed": "가.txt",
            "issues": [
              "충돌 후보: 3, 4행"
            ]
          },
          {
            "index": 4,
            "original": "가.txt",
            "proposed": "가.txt",
            "issues": [
              "충돌 후보: 3, 4행"
            ]
          },
          {
            "index": 5,
            "original": "Report.txt",
            "proposed": "Report.txt",
            "issues": [
              "충돌 후보: 5, 6행"
            ]
          },
          {
            "index": 6,
            "original": "report.txt",
            "proposed": "report.txt",
            "issues": [
              "충돌 후보: 5, 6행"
            ]
          }
        ],
        "ready": false,
        "note": "실제 파일을 변경하지 않습니다. 현재 디렉터리의 다른 파일·권한·경로 길이까지 보장하지 않습니다."
      }
    },
    "characters": {
      "input": "가👨‍👩‍👧‍👦é",
      "result": {
        "utf16Units": 14,
        "codePoints": 10,
        "graphemes": 3,
        "nfcCodePoints": 9,
        "lines": 1,
        "note": "검색 제목의 픽셀 폭이나 Google 표시 길이를 판정하는 점수가 아닙니다."
      }
    },
    "links": {
      "input": "https://aigainos.com/archive\nhttps://aigainos.com/automation/gemini-json-schema-test#comparison\njavascript:alert(1)",
      "result": [
        {
          "input": "https://aigainos.com/archive",
          "syntax": "형식 확인",
          "normalized": "https://aigainos.com/archive",
          "fragment": null,
          "note": "실제 접속·HTTP 상태·앵커 존재는 검사하지 않음"
        },
        {
          "input": "https://aigainos.com/automation/gemini-json-schema-test#comparison",
          "syntax": "형식 확인",
          "normalized": "https://aigainos.com/automation/gemini-json-schema-test#comparison",
          "fragment": "#comparison",
          "note": "실제 접속·HTTP 상태·앵커 존재는 검사하지 않음"
        },
        {
          "input": "javascript:alert(1)",
          "syntax": "보류",
          "note": "http/https 주소만 확인합니다."
        }
      ]
    },
    "markdown": {
      "input": "| 이름 | 내용 |\n| --- | --- |\n| 정상 | A\\|B |\n| 확인 | A|B |",
      "result": {
        "columns": 2,
        "dataRows": 2,
        "errors": [
          "4행: 3열 / 헤더 2열"
        ],
        "rows": [
          [
            "이름",
            "내용"
          ],
          [
            "---",
            "---"
          ],
          [
            "정상",
            "A\\|B"
          ],
          [
            "확인",
            "A",
            "B"
          ]
        ],
        "note": "단순 표 구조 검사입니다. HTML 렌더러 전체나 모든 Markdown 방언의 검증기가 아닙니다."
      }
    },
    "percentages": {
      "input": "5, 6",
      "result": {
        "beforePercent": 5,
        "afterPercent": 6,
        "percentagePoints": 1,
        "relativeChangePercent": 20,
        "note": "표본 크기·통계적 유의성·성과의 원인은 이 계산으로 알 수 없습니다."
      }
    },
    "formulas": {
      "input": "id,value\nT-01,=1+1\nT-02,-42.5\nT-03,일반 메모\nT-04,＠SUM(A1:A2)",
      "result": {
        "findings": [
          {
            "row": 2,
            "column": 2,
            "value": "=1+1",
            "type": "수식 해석 가능성 — 검토 필요"
          },
          {
            "row": 3,
            "column": 2,
            "value": "-42.5",
            "type": "숫자 표기 후보 — 업무 규칙으로 확인"
          },
          {
            "row": 5,
            "column": 2,
            "value": "＠SUM(A1:A2)",
            "type": "수식 해석 가능성 — 검토 필요"
          }
        ],
        "note": "위험 후보 탐지이며 안전 인증이 아닙니다. 수식은 실행하지 않습니다. 원본 CSV를 자동으로 다시 저장하지 않습니다."
      }
    }
  }
}