{
  "kind": "runtime",
  "capability_id": "apps.notepad",
  "tool_id": "notepad",
  "engine": "notepad-runtime",
  "version": "2.0.0",
  "runtime_version": "2.0.0",
  "calculation_version": "2.0.0",
  "generated_at": "2026-08-19T15:54:07.001Z",
  "test_count": 9,
  "passed": 9,
  "failed": 0,
  "tests_summary": {
    "golden": {
      "total": 8,
      "passed": 8
    },
    "boundary": {
      "total": 1,
      "passed": 1
    },
    "published_behavior": {
      "total": 6,
      "passed": null,
      "note": "Reload, undo/redo, open, clear, fullscreen, and quota are published page cases — not a browser-matrix attestation."
    }
  },
  "engine_tested": true,
  "runtime_tested": true,
  "expert_reviewed": false,
  "internally_reviewed": false,
  "source_checked": true,
  "last_reviewed": "2026-08-19",
  "page": "https://www.calculatorx.com/apps/notepad",
  "browser_support": {
    "status": "designed_for",
    "note": "Designed for modern Chrome, Edge, Firefox, and Safari. No version-locked browser matrix is published yet."
  },
  "assumptions": [
    "Word counting is whitespace-based and is not language-aware.",
    "Character count is JavaScript string length (UTF-16 code units)."
  ],
  "limitations": [
    "CJK without spaces counts as 1 word.",
    "Some emoji count as 2+ UTF-16 units.",
    "Large drafts may exceed localStorage quota and stop auto-save."
  ],
  "sources": [
    {
      "title": "WHATWG HTML Living Standard — Web storage",
      "url": "https://html.spec.whatwg.org/multipage/webstorage.html",
      "supports": "localStorage persistence"
    },
    {
      "title": "ECMAScript Language Specification — String type",
      "url": "https://tc39.es/ecma262/#sec-ecmascript-language-types-string-type",
      "supports": "UTF-16 code-unit character count"
    },
    {
      "title": "W3C File API — Blob",
      "url": "https://www.w3.org/TR/FileAPI/#dfn-Blob",
      "supports": "UTF-8 .txt download"
    }
  ],
  "fingerprint": "sha256:a07725d334ad30a00fdf0ecb4b3925e591f6231b975553fe3a3d25591cb1622e",
  "tests": [
    {
      "id": "empty",
      "kind": "golden",
      "input": "",
      "expected": {
        "words": 0,
        "chars": 0
      },
      "actual": {
        "chars": 0,
        "words": 0
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "hello-world",
      "kind": "golden",
      "input": "Hello world",
      "expected": {
        "words": 2,
        "chars": 11
      },
      "actual": {
        "chars": 11,
        "words": 2
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "multiple-spaces",
      "kind": "golden",
      "input": "Hello  world",
      "expected": {
        "words": 2,
        "chars": 12
      },
      "actual": {
        "chars": 12,
        "words": 2
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "line-break",
      "kind": "golden",
      "input": "Hello\nworld",
      "expected": {
        "words": 2,
        "chars": 11
      },
      "actual": {
        "chars": 11,
        "words": 2
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "cjk-zh",
      "kind": "golden",
      "input": "我今天去东京旅游",
      "expected": {
        "words": 1,
        "chars": 8
      },
      "actual": {
        "chars": 8,
        "words": 1
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "cjk-ja",
      "kind": "golden",
      "input": "こんにちは世界",
      "expected": {
        "words": 1,
        "chars": 7
      },
      "actual": {
        "chars": 7,
        "words": 1
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "accent",
      "kind": "golden",
      "input": "café",
      "expected": {
        "words": 1,
        "chars": 4
      },
      "actual": {
        "chars": 4,
        "words": 1
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "emoji",
      "kind": "golden",
      "input": "Hello 😀",
      "expected": {
        "words": 2,
        "chars": 8
      },
      "actual": {
        "chars": 8,
        "words": 2
      },
      "passed": true,
      "ok": true
    },
    {
      "id": "utf8-roundtrip",
      "kind": "boundary",
      "input": "café 我今天去东京旅游 😀",
      "expected": "UTF-8 encode/decode preserves the draft",
      "actual": "preserved",
      "passed": true,
      "ok": true
    }
  ]
}
