{
  "schemaVersion": "radar-local-browser-observation-summary-1",
  "title": "架空CSVの読込・条件変更・消去時に行った、ローカル実ブラウザーの限定観測",
  "recordKind": "historical_observation_summary_not_reproduction_package",
  "preparedOn": "2026-09-26",
  "observedOnJapan": "2026-09-22",
  "observationWindowUTC": [
    "2026-09-21T19:15:18.619000+00:00",
    "2026-09-21T19:15:50.256000+00:00"
  ],
  "scope": {
    "tool": "固定費レーダー 無料CSV確認",
    "productVersion": "0.2.3",
    "readerEngineVersion": "0.2.2",
    "executionModel": "同じ端末内の専用ローカルoriginで、固定CSVを実ファイル選択して3つの実Web Workerで処理した。HTMLに観測コードを追加し、Workerには観測コードを前置した。",
    "mainAndReaderBytes": "記録対象の公開コードと同じバイト列。",
    "workerBytes": "元Workerの末尾は記録対象の公開コードと同じ。前置コードがあるため応答全体は本番と異なる。",
    "csp": "元HTMLのmeta CSPを保持。追加のWorker CSPヘッダーは付けない。",
    "productionOriginObserved": false,
    "originalObservationNotRerunOnPreparedDate": true
  },
  "sourceFiles": [
    {
      "path": "/csv-check/",
      "bytes": 9609,
      "sha256": "9f04cab3fe16247f24fbeeebd42b035ca6013f6a4a288ce133ba32ea86452472"
    },
    {
      "path": "/csv-check/check.js",
      "bytes": 7169,
      "sha256": "832b45d9a736ab5ee32de19bea75268274181da78cc1df739d39fd88a9428489"
    },
    {
      "path": "/csv-check/check-worker.js",
      "bytes": 4703,
      "sha256": "92dff91ee1cd3416d7fc3dff09f39a5f9b45ed79855d8cf1f7ff37057c69da92"
    },
    {
      "path": "/csv-check/product-reader.js",
      "bytes": 23167,
      "sha256": "e36fe6fce7198ec84286f55468d8de0bbac13aee5ea41ac89ad13e46c3c30cd9"
    },
    {
      "path": "/csv-check/check.css",
      "bytes": 2667,
      "sha256": "92f75da72cbad99646ce4d55195077fbd6e5625f43b8e044e0bc9c6c691668b6"
    },
    {
      "path": "/csv-check/fictional-reader-example.csv",
      "bytes": 151,
      "sha256": "6f29092d16e6089af7b065287356023a05fb50ca21b34c1b9697a104e608be04"
    }
  ],
  "syntheticInput": {
    "path": "/csv-check/fictional-reader-example.csv",
    "bytes": 151,
    "sha256": "6f29092d16e6089af7b065287356023a05fb50ca21b34c1b9697a104e608be04",
    "columns": [
      "利用日",
      "利用店名",
      "利用金額"
    ],
    "rows": [
      [
        "2026/01/08",
        "架空ストレージ",
        1000
      ],
      [
        "2026/02/08",
        "架空ストレージ",
        1000
      ],
      [
        "2026/02/10",
        "架空ストレージ",
        -1000
      ]
    ],
    "actualCustomerData": false
  },
  "operations": [
    "正対照を通常処理とは別工程で実行し、後片付けの照合を済ませた。",
    "固定の架空CSVをファイル選択して読み込んだ。",
    "支出はプラス、日付・利用店名・金額の列を確認して再読込した。",
    "支出はマイナスに変更して再読込した。",
    "読み込んだ内容を消す操作を行い、入力・プレビュー・結果の消去を確認した。"
  ],
  "readerResults": [
    {
      "step": "initial-read",
      "expenseSign": "positive",
      "inputBytes": 151,
      "acceptedRows": 2,
      "excludedRows": 1,
      "firstExpenseDate": "2026-01-08",
      "lastExpenseDate": "2026-02-08"
    },
    {
      "step": "column-confirmation",
      "expenseSign": "positive",
      "inputBytes": 151,
      "acceptedRows": 2,
      "excludedRows": 1,
      "firstExpenseDate": "2026-01-08",
      "lastExpenseDate": "2026-02-08"
    },
    {
      "step": "negative-sign",
      "expenseSign": "negative",
      "inputBytes": 151,
      "acceptedRows": 1,
      "excludedRows": 2,
      "firstExpenseDate": "2026-02-10",
      "lastExpenseDate": "2026-02-10"
    }
  ],
  "observedApplication": {
    "workerCount": 3,
    "mainNetworkAPICalls": 0,
    "workerNetworkAPICalls": 0,
    "mainStorageAPICalls": 0,
    "workerStorageAPICalls": 0,
    "allWorkerAuditResultsReceivedBeforeTermination": true,
    "hooksRemainedInstalled": true,
    "clearOperationConfirmed": true,
    "localStaticAssetGETs": 6,
    "staticAssetGETDetails": [
      {
        "path": "/csv-check/check-worker.js",
        "count": 3
      },
      {
        "path": "/csv-check/product-reader.js",
        "count": 3
      }
    ],
    "staticAssetExplanation": "3つのWorkerコードと、それぞれが読み込むproduct-reader.jsの取得。通常処理中の固定アセットGETであり、通信0という結果ではない。",
    "storageComparison": {
      "categories": [
        "localStorage",
        "sessionStorage",
        "cookie",
        "indexedDB",
        "cacheStorage",
        "opfs"
      ],
      "beforeAfterComparisonMatched": true,
      "snapshotContentsPublished": false
    }
  },
  "observedAPIScope": {
    "networkCounterAPIs": [
      "fetch",
      "XMLHttpRequest.open",
      "XMLHttpRequest.send",
      "WebSocket",
      "EventSource",
      "WebTransport",
      "RTCPeerConnection",
      "webkitRTCPeerConnection",
      "navigator.sendBeacon"
    ],
    "storageCounterFamilies": [
      "Storage",
      "IndexedDB",
      "CacheStorage/Cache",
      "OPFS/FileSystem",
      "FilePicker",
      "openDatabase",
      "document.cookie.set"
    ],
    "counterMeaning": "実装したフックが記録した通常アプリ処理の呼び出し数。正対照、観測処理自身、Worker生成と静的importScriptsは別に扱う。ブラウザー全通信の件数ではない。",
    "main": {
      "installedCount": 46,
      "installedAPIs": [
        "fetch",
        "XMLHttpRequest.open",
        "XMLHttpRequest.send",
        "WebSocket",
        "EventSource",
        "WebTransport",
        "RTCPeerConnection",
        "webkitRTCPeerConnection",
        "navigator.sendBeacon",
        "Storage.setItem",
        "Storage.removeItem",
        "Storage.clear",
        "indexedDB.open",
        "indexedDB.deleteDatabase",
        "IDBObjectStore.put",
        "IDBObjectStore.add",
        "IDBObjectStore.delete",
        "IDBObjectStore.clear",
        "IDBCursor.update",
        "IDBCursor.delete",
        "IDBDatabase.createObjectStore",
        "IDBDatabase.deleteObjectStore",
        "CacheStorage.open",
        "CacheStorage.delete",
        "Cache.add",
        "Cache.addAll",
        "Cache.put",
        "Cache.delete",
        "navigator.storage.getDirectory",
        "FileSystemDirectoryHandle.getFileHandle",
        "FileSystemDirectoryHandle.getDirectoryHandle",
        "FileSystemDirectoryHandle.removeEntry",
        "FileSystemFileHandle.createWritable",
        "FileSystemFileHandle.move",
        "FileSystemFileHandle.remove",
        "FileSystemWritableFileStream.write",
        "FileSystemWritableFileStream.truncate",
        "FileSystemWritableFileStream.close",
        "FileSystemWritableFileStream.abort",
        "showSaveFilePicker",
        "showDirectoryPicker",
        "BroadcastChannel",
        "BroadcastChannel.postMessage",
        "MessagePort.postMessage",
        "serviceWorker.register",
        "document.cookie.set"
      ],
      "absentAPIs": [
        "FileSystemFileHandle.createSyncAccessHandle",
        "FileSystemSyncAccessHandle.write",
        "FileSystemSyncAccessHandle.truncate",
        "FileSystemSyncAccessHandle.flush",
        "FileSystemSyncAccessHandle.close",
        "openDatabase"
      ],
      "absentMeaning": "この実行環境に存在しなかったAPI。呼び出し0回という観測結果とは別。"
    },
    "eachOfThreeWorkers": {
      "installedCount": 43,
      "installedAPIs": [
        "fetch",
        "XMLHttpRequest.open",
        "XMLHttpRequest.send",
        "WebSocket",
        "EventSource",
        "WebTransport",
        "indexedDB.open",
        "indexedDB.deleteDatabase",
        "IDBObjectStore.put",
        "IDBObjectStore.add",
        "IDBObjectStore.delete",
        "IDBObjectStore.clear",
        "IDBCursor.update",
        "IDBCursor.delete",
        "IDBDatabase.createObjectStore",
        "IDBDatabase.deleteObjectStore",
        "CacheStorage.open",
        "CacheStorage.delete",
        "Cache.add",
        "Cache.addAll",
        "Cache.put",
        "Cache.delete",
        "navigator.storage.getDirectory",
        "FileSystemDirectoryHandle.getFileHandle",
        "FileSystemDirectoryHandle.getDirectoryHandle",
        "FileSystemDirectoryHandle.removeEntry",
        "FileSystemFileHandle.createWritable",
        "FileSystemFileHandle.createSyncAccessHandle",
        "FileSystemFileHandle.move",
        "FileSystemFileHandle.remove",
        "FileSystemWritableFileStream.write",
        "FileSystemWritableFileStream.truncate",
        "FileSystemWritableFileStream.close",
        "FileSystemWritableFileStream.abort",
        "FileSystemSyncAccessHandle.write",
        "FileSystemSyncAccessHandle.truncate",
        "FileSystemSyncAccessHandle.flush",
        "FileSystemSyncAccessHandle.close",
        "BroadcastChannel",
        "BroadcastChannel.postMessage",
        "MessagePort.postMessage",
        "importScripts",
        "Worker"
      ],
      "absentAPIs": [
        "RTCPeerConnection",
        "webkitRTCPeerConnection",
        "navigator.sendBeacon",
        "Storage.setItem",
        "Storage.removeItem",
        "Storage.clear",
        "showSaveFilePicker",
        "showDirectoryPicker",
        "openDatabase",
        "serviceWorker.register",
        "SharedWorker"
      ],
      "absentMeaning": "この実行環境に存在しなかったAPI。呼び出し0回という観測結果とは別。"
    },
    "installedIsNotPositiveControlCoverage": "installedは観測コードを設置した意味で、全APIを正対照で実行した意味ではない。"
  },
  "positiveControl": {
    "phase": "separate_from_application",
    "windowFetch": "元ページのCSPによるnative拒否を記録。通信成功の確認とは扱わない。",
    "workerFetch": {
      "nativeCompleted": true,
      "responseStatus": 200,
      "expectedBodyMatched": true
    },
    "storageFamiliesExercisedOnMain": [
      "localStorage",
      "sessionStorage",
      "cookie",
      "indexedDB",
      "cacheStorage",
      "opfs"
    ],
    "storageFamiliesExercisedOnWorker": [
      "indexedDB",
      "cacheStorage",
      "opfs"
    ],
    "syntheticEntriesCleanedAndCompared": true,
    "allOptionalAPIsExercised": false
  },
  "review": {
    "method": "AI支援で作成した観測コードと保存結果を、実ブラウザー操作とは別の確認工程で照合した。",
    "independentBrowserRerun": false,
    "humanExpertSupervision": false
  },
  "anomaliesRetained": [
    "初期表示工程にfaviconの404があった。通常処理の6GETと分けている。",
    "初期表示工程にインラインスタイルのCSP違反があった。通常処理中の違反は記録されていない。",
    "WorkerのResourceTimingに負のdurationがあり、速度測定として利用しない。"
  ],
  "limitations": [
    "計測コードを加えたローカル実行であり、本番originや全ブラウザー通信のHAR/CDP記録ではない。",
    "この固定入力と操作の観測であり、実際の明細、全カード形式、全端末、拡張機能、将来のコードへの保証ではない。",
    "Storageへの直接プロパティ代入はフックしていない。固定ソースで該当経路がないことを別途確認したが、他のコードへ一般化できない。",
    "保存領域の前後一致だけでは、一時書込み後の削除を網羅できない。存在しないAPIと観測した0回を区別する。",
    "サーバー記録の対象はGET/POSTであり、全HTTPメソッドやブラウザー内部通信の記録ではない。",
    "静的コードの取得は発生する。対象APIの呼び出し0回を、ページの通信全体0回と言い換えない。",
    "契約確認、候補検出の精度、節約額、顧客実績、検索順位やAI引用を示す記録ではない。",
    "配布物は結果要約と説明だけで、実行用観測ハーネス・生のブラウザー記録を含まない。読者による同じ通信・保存観測の再現を、この配布物だけで実行できるとは主張しない。"
  ],
  "relatedPublishedRecord": {
    "url": "https://radar.signalandship.com/evidence/reader-example-replay-2026-09-22.json",
    "relationship": "別のローカルJavaScript環境・模擬DOM/Workerで行った以前の読込結果確認。実ブラウザーの本記録と混同しない。"
  },
  "explanationUrl": "https://radar.signalandship.com/csv-check/#reader-observation"
}
