{
  "schema_version": "1.1",
  "experiment_id": "AIEL-2026-0008",
  "source_type": "current_project_activity",
  "title": {
    "en": "When appliance stop and cloud cost settlement are asynchronous: field validation of delayed utility-cost reconciliation on a Rinnai RDT-93",
    "ja": "運転停止とクラウド料金確定が非同期になるとき：リンナイ乾太くんで検証した遅延料金の安全な確定ロジック"
  },
  "status": "COMPLETED",
  "timestamps": {
    "created_at": "2026-09-06T22:33:00+09:00",
    "started_at": "2026-08-29T00:00:00+09:00",
    "observed_at": "2026-09-09",
    "completed_at": "2026-09-27",
    "published_at": "2026-09-27T11:50:05+00:00",
    "last_verified": "2026-09-27",
    "updated_at": "2026-09-27T11:50:05+00:00"
  },
  "objective": {
    "summary_en": "Characterize delayed Rinnai Kantakun utility-cost API updates after an RDT-93 dryer stops, determine how an operation with temporarily unresolved cost can be corrected without misattributing later cost changes, and verify a collector state-machine change that finalizes the operation on the first attributable post-stop cost change while retaining bounded late reconciliation for unresolved cases.",
    "summary_ja": "RDT-93乾太くんの運転終了後にRinnai料金APIの反映が遅れる挙動を整理し、一時的に料金未確定となった運転を後続運転へ誤帰属させず安全に補正する方法を定める。さらに、運転終了後にその運転へ帰属可能な最初の料金変化を観測した時点で確定し、未解決時は限定的な後追い照合を継続するcollector状態機械の変更を検証する。",
    "success_criteria": [
      {
        "id": "SC-001",
        "description_en": "A retained operation demonstrates that dryer stop and utility-cost finalization are not necessarily simultaneous and that cost may remain unresolved after the stop event.",
        "description_ja": "運転停止時刻と料金確定時刻が必ずしも一致せず、停止後も料金が未確定のまま残る実運転例を保持証拠で確認する。"
      },
      {
        "id": "SC-002",
        "description_en": "The manual correction procedure for an unresolved operation is defined so that the corrected value is based on attributable observed API data rather than a fabricated estimate.",
        "description_ja": "未確定運転の手動補正手順を、推測値ではなく帰属可能な実観測API値に基づく形で定義する。"
      },
      {
        "id": "SC-003",
        "description_en": "The revised collector finalizes an operation on the first attributable post-stop utility-cost change and retains a bounded late-reconciliation path when no such change has yet appeared.",
        "description_ja": "修正版collectorが運転終了後の最初の帰属可能な料金変化で運転を確定し、その変化がまだ現れない場合は限定的な後追い照合経路を保持する。"
      },
      {
        "id": "SC-004",
        "description_en": "Post-fix operation logs contain real delayed-cost recurrences that the revised collector automatically finalizes on the first attributable post-stop cost change without manual repair; any unexercised competing-run boundary behavior is retained as an explicit limitation.",
        "description_ja": "修正後の実運転で料金反映遅延が再発し、修正版collectorが最初の帰属可能な停止後料金変化で手動補正なしに自動確定することを確認する。競合する次run境界で未検証の経路は明示的な制約として残す。"
      }
    ],
    "partial_success_criteria": [],
    "failure_criteria": [
      {
        "id": "FC-001",
        "description_en": "The revised first-change finalization logic assigns a later cost change to the wrong dryer operation, finalizes before an attributable change is observed, or loses an unresolved operation without bounded reconciliation.",
        "description_ja": "修正版の初回変化確定ロジックが後続の料金変化を別運転へ誤帰属する、帰属可能な変化観測前に確定する、または未確定運転を後追い照合せず消失させる。"
      }
    ]
  },
  "scope": {
    "included": [
      "Rinnai RDT-93 dryer operation start/stop state observed by the existing collector",
      "Rinnai Kantakun utility-cost API values observed around dryer stop",
      "Temporary unresolved-cost state after an operation ends",
      "Safe manual reconciliation of an unresolved operation using attributable later API observations",
      "Collector state-machine logic for post-stop cost finalization",
      "First attributable cost-change finalization",
      "Bounded late reconciliation for unresolved operations",
      "Diagnostic review of five-minute polling gaps relevant to whether a cost change could have been missed"
    ],
    "excluded": [
      "Rinnai authentication failures already covered by AIEL-2026-0005",
      "Publication of private operational or security data that is unnecessary for understanding or reproducing the state-machine result",
      "Treating estimated gas volume derived from tariff cost as a direct gas-meter measurement",
      "Claiming that every unresolved cost is caused by polling loss rather than delayed upstream API reporting"
    ],
    "limitations": [
      "The post-fix field validation covers four delayed-cost cases that settled before the next dryer run began; the separate new-run-boundary late-reconciliation branch is implemented but was not exercised by these four validation cases.",
      "The public record publishes only sanitized aggregate timing results; raw household operation logs and diagnostic telemetry remain private.",
      "The experiment establishes safe event reconciliation for the observed collector behavior and does not prove the upstream vendor-side cause of every delayed utility-cost update.",
      "Estimated gas volume derived from tariff cost remains an estimate and is not a direct gas-meter measurement."
    ]
  },
  "environment": {
    "hardware": [
      {
        "role": "experiment_target_dryer",
        "manufacturer": "Rinnai",
        "model": "RDT-93",
        "revision": null,
        "serial_number_public": false,
        "notes": "Individual-unit identifiers are excluded from publication."
      }
    ],
    "software": [
      {
        "name": "Google Apps Script",
        "version": null,
        "role": "scheduled dryer polling, state tracking, reconciliation, and Google Sheets persistence"
      },
      {
        "name": "Google Sheets",
        "version": null,
        "role": "private operation log, diagnostic log, and reconciliation evidence store"
      },
      {
        "name": "Rinnai API",
        "version": null,
        "role": "dryer state and utility-cost observation source"
      }
    ],
    "firmware": [],
    "network": {
      "type": "internet_cloud_api",
      "ip_addresses_redacted": true,
      "protocols_observed": [
        "HTTPS"
      ],
      "notes": "Credentials, installation identifiers, and private endpoint parameters are excluded from public artifacts."
    },
    "environmental_conditions": []
  },
  "hypotheses": [
    {
      "id": "H-001",
      "statement_en": "For at least some RDT-93 operations, the utility-cost API can update after the dryer has already transitioned to stopped, so stop detection and cost finalization must be separate state transitions.",
      "statement_ja": "少なくとも一部のRDT-93運転では、乾太くんが停止状態へ遷移した後に料金APIが更新されるため、停止検知と料金確定は別の状態遷移として扱う必要がある。",
      "status": "SUPPORTED",
      "created_at": "2026-08-29T00:00:00+09:00",
      "evidence_refs": [
        "O-001",
        "O-002"
      ]
    },
    {
      "id": "H-002",
      "statement_en": "Once a post-stop utility-cost value changes from the operation's pre-stop baseline and no competing operation has begun, the first attributable change is sufficient to finalize that operation; requiring repeated identical samples can add avoidable delay or leave an operation unresolved if a later poll is missed.",
      "statement_ja": "運転終了後、運転前baselineから料金値が変化し、その間に競合する次運転が始まっていない場合、最初の帰属可能な変化だけで当該運転を確定できる。複数回同値確認を必須にすると不要な遅延を生み、後続poll欠測時には未確定を残し得る。",
      "status": "SUPPORTED",
      "created_at": "2026-08-29T00:00:00+09:00",
      "evidence_refs": [
        "O-002",
        "O-003"
      ]
    },
    {
      "id": "H-003",
      "statement_en": "The revised first-attributable-change plus bounded late-reconciliation state machine will automatically recover future delayed-cost cases without manual correction or cross-operation misattribution.",
      "statement_ja": "最初の帰属可能な料金変化で即確定し、未解決時は限定的に後追い照合する状態機械により、今後の料金遅延ケースを手動補正や別運転への誤帰属なしで自動回収できる。",
      "status": "SUPPORTED",
      "created_at": "2026-09-06T00:00:00+09:00",
      "evidence_refs": [
        "O-004",
        "O-006",
        "O-007",
        "O-008"
      ]
    }
  ],
  "procedures": [
    {
      "id": "P-001",
      "sequence": 1,
      "description_en": "Review dryer operation and diagnostic logs around the operation whose utility cost remained unresolved after stop.",
      "description_ja": "運転終了後も料金未確定となった対象運転について、乾太くん運転ログと診断ログを照合する。",
      "status": "EXECUTED"
    },
    {
      "id": "P-002",
      "sequence": 2,
      "description_en": "Determine whether a later utility-cost API value can be safely attributed to that operation and, if so, repair the single unresolved record without fabricating a value.",
      "description_ja": "後続の料金API値を対象運転へ安全に帰属できるか判定し、可能な場合のみ推測値を作らず未確定1件を補正する。",
      "status": "EXECUTED"
    },
    {
      "id": "P-003",
      "sequence": 3,
      "description_en": "Revise the collector so that an attributable first post-stop cost change finalizes the operation immediately while unresolved cases remain eligible for bounded late reconciliation.",
      "description_ja": "運転終了後の最初の帰属可能な料金変化で即時確定し、未解決ケースは限定的な後追い照合対象として残すようcollectorを修正する。",
      "status": "EXECUTED"
    },
    {
      "id": "P-004",
      "sequence": 4,
      "description_en": "Review subsequent operation and diagnostic logs and enumerate recent five-minute polling gaps to determine whether missed polls are isolated or recurrent.",
      "description_ja": "修正後の運転ログ・診断ログを再確認し、直近の5分polling欠測を列挙して単発か再発傾向かを評価する。",
      "status": "EXECUTED"
    },
    {
      "id": "P-005",
      "sequence": 5,
      "description_en": "Review post-fix operation and diagnostic logs for real delayed-cost recurrences, verify automatic first-change settlement, and preserve any unexercised boundary condition as an explicit limitation.",
      "description_ja": "修正後の運転・診断ログから実料金遅延の再発を確認し、最初の料金変化による自動確定を検証する。未実行の境界条件は明示的な制約として保持する。",
      "status": "EXECUTED"
    }
  ],
  "actions": [
    {
      "id": "A-001",
      "type": "log_review",
      "description": {
        "en": "Reviewed the retained dryer operation and diagnostic logs after an operation was found with unresolved utility cost.",
        "ja": "料金未確定の運転が1件見つかった後、保持された乾太くん運転ログと診断ログを確認した。"
      },
      "actor": {
        "type": "AI",
        "system": "ChatGPT",
        "role": "analysis"
      },
      "state": "EXECUTED",
      "executed_at": null,
      "result_refs": [
        "O-001",
        "O-002"
      ]
    },
    {
      "id": "A-002",
      "type": "data_correction",
      "description": {
        "en": "A safe correction procedure was prepared for the unresolved operation using attributable observed utility-cost data rather than a fabricated estimate.",
        "ja": "未確定運転に対し、推測値ではなく帰属可能な実観測料金データを使う安全な補正手順を作成した。"
      },
      "actor": {
        "type": "AI",
        "system": "ChatGPT",
        "role": "analysis"
      },
      "state": "EXECUTED",
      "executed_at": null,
      "result_refs": [
        "O-002"
      ]
    },
    {
      "id": "A-003",
      "type": "code_change",
      "description": {
        "en": "The collector was revised so that the first attributable post-stop utility-cost change can finalize the operation immediately, while a bounded late-reconciliation path remains for unresolved cases.",
        "ja": "運転終了後の最初の帰属可能な料金変化で即時確定し、未解決ケースには限定的な後追い照合を残すようcollectorを修正した。"
      },
      "actor": {
        "type": "UNKNOWN",
        "role": "code edit/deployment actor not fully reconstructed in this public record"
      },
      "state": "EXECUTED",
      "executed_at": null,
      "result_refs": [
        "O-003",
        "O-004"
      ]
    },
    {
      "id": "A-004",
      "type": "diagnostic_review",
      "description": {
        "en": "The operator requested re-checking subsequent dryer and diagnostic logs and a 24-hour review of five-minute polling gaps to assess isolated versus recurrent missing polls.",
        "ja": "操作者の依頼に基づき、その後の運転・診断ログ再確認と直近24時間の5分polling欠測洗い出しを行い、単発か再発傾向かを評価対象とした。"
      },
      "actor": {
        "type": "AI",
        "system": "ChatGPT",
        "role": "analysis"
      },
      "state": "EXECUTED",
      "executed_at": null,
      "result_refs": [
        "O-005"
      ]
    },
    {
      "id": "A-005",
      "type": "post_fix_field_validation",
      "description": {
        "en": "Reviewed post-fix production operation and diagnostic logs through 2026-09-27. Four independent delayed-cost cases entered late reconciliation and all four were automatically finalized by the first attributable post-stop cost change without manual repair.",
        "ja": "2026-09-27までの修正後production運転ログ・診断ログを確認した。独立した料金遅延4ケースがlate reconciliationへ入り、4件すべてが最初の帰属可能な停止後料金変化により手動補正なしで自動確定した。"
      },
      "actor": {
        "type": "AI",
        "system": "ChatGPT",
        "role": "analysis"
      },
      "state": "EXECUTED",
      "executed_at": "2026-09-27",
      "result_refs": [
        "O-006",
        "O-008"
      ]
    },
    {
      "id": "A-006",
      "type": "source_review",
      "description": {
        "en": "Reviewed the current production collector source snapshot and verified one-minute state/cost polling, a 120-minute late marker, 24-hour bounded late reconciliation, first-change settlement, incomplete-payload protection, and conservative new-run-boundary handling.",
        "ja": "現行production collectorのsource snapshotを確認し、状態・料金の1分poll、120分のlate marker、24時間のbounded reconciliation、first-change settlement、不完全payload保護、保守的なnext-run boundary処理を確認した。"
      },
      "actor": {
        "type": "AI",
        "system": "ChatGPT",
        "role": "source_review"
      },
      "state": "EXECUTED",
      "executed_at": "2026-09-27",
      "result_refs": [
        "O-007",
        "O-009"
      ]
    }
  ],
  "observations": [
    {
      "id": "O-001",
      "timestamp": null,
      "description_en": "At least one completed dryer operation remained without finalized utility cost after the dryer had stopped.",
      "description_ja": "少なくとも1件の乾太くん運転で、運転停止後も料金が確定していない状態が残った。",
      "observation_type": "operation_log",
      "source_type": "private_collector_log",
      "artifact_refs": [],
      "quality": "VALID"
    },
    {
      "id": "O-002",
      "timestamp": null,
      "description_en": "A later observed utility-cost change could be examined for attribution to the unresolved operation, making a data-based correction possible when no competing dryer operation intervened.",
      "description_ja": "その後に観測された料金変化について、間に競合する別運転がなければ未確定運転へ帰属できるかを判定でき、実データに基づく補正が可能だった。",
      "observation_type": "api_and_operation_log",
      "source_type": "private_collector_log",
      "artifact_refs": [],
      "quality": "VALID"
    },
    {
      "id": "O-003",
      "timestamp": null,
      "description_en": "The earlier settlement design required a grace period and repeated stable post-change samples before finalization; this creates a dependency on subsequent polls after the first relevant cost change.",
      "description_ja": "旧settlement設計はgrace期間に加えて料金変化後の複数回安定sampleを確定条件としており、最初の有効な料金変化を観測した後も後続poll成功に依存する構造だった。",
      "observation_type": "source_review",
      "source_type": "retained_collector_logic",
      "artifact_refs": [],
      "quality": "VALID"
    },
    {
      "id": "O-004",
      "timestamp": null,
      "description_en": "The revised design uses the first attributable post-stop utility-cost change as the immediate finalization trigger and retains late reconciliation for cases in which no attributable change has yet appeared.",
      "description_ja": "修正版設計では、運転終了後の最初の帰属可能な料金変化を即時確定triggerとし、まだ帰属可能な変化が現れていないケースには後追い照合を残す。",
      "observation_type": "source_review",
      "source_type": "retained_project_code_change",
      "artifact_refs": [],
      "quality": "VALID"
    },
    {
      "id": "O-005",
      "timestamp": null,
      "description_en": "A later diagnostic review explicitly included recent five-minute polling gaps because a missed poll can affect when a delayed utility-cost change becomes observable to the collector; the retained record does not treat every gap as the cause of delayed upstream reporting.",
      "description_ja": "後続の診断では直近の5分polling欠測も明示的に確認対象となった。poll欠測は遅延料金変化をcollectorが観測する時刻へ影響し得るが、本記録ではすべての料金遅延原因をpoll欠測とは扱わない。",
      "observation_type": "diagnostic_review",
      "source_type": "private_execution_history",
      "artifact_refs": [],
      "quality": "VALID"
    },
    {
      "id": "O-006",
      "timestamp": "2026-09-27",
      "description_en": "In the post-fix review window, four independent operations entered the collector's late-cost path after more than two hours without an attributable post-stop cost change. All four were later finalized automatically by the first attributable cost change, with rounded stop-to-settlement delays of 159, 273, 343, and 540 minutes. No unresolved late-cost operation remained at the review snapshot.",
      "description_ja": "修正後review windowでは、停止後2時間を超えて帰属可能な料金変化が現れずlate-cost pathへ入った独立運転が4件あった。4件すべてがその後の最初の帰属可能な料金変化で自動確定し、停止から確定までの丸めた遅延は159、273、343、540分だった。review時点で未解決のlate-cost運転は残っていなかった。",
      "observation_type": "post_fix_operational_validation",
      "source_type": "private_operation_and_diagnostic_logs",
      "artifact_refs": [
        "AR-003"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-007",
      "timestamp": "2026-09-27",
      "description_en": "The current collector source polls both appliance state and utility cost every minute, records unchanged diagnostic heartbeat rows at five-minute intervals, marks unresolved post-stop cost after 120 minutes, and keeps late reconciliation open for a further 24 hours.",
      "description_ja": "現行collector sourceは状態APIと料金APIを毎分取得し、無変化の診断heartbeatのみ5分間隔へ間引く。停止後120分で未解決料金をlateとして明示し、その後さらに24時間late reconciliationを継続する。",
      "observation_type": "source_review",
      "source_type": "current_production_collector_source_snapshot",
      "artifact_refs": [
        "AR-002"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-008",
      "timestamp": "2026-09-27",
      "description_en": "Each of the four post-fix delayed-cost cases finalized before the next observed dryer run began. Therefore the ordinary late-settlement path is field validated, while the separate branch that attributes a cost change first seen exactly at a new-run boundary was not exercised by these four cases.",
      "description_ja": "修正後の遅延4ケースはいずれも次の乾太くんrun開始前に確定した。したがって通常のlate settlement pathはfield validation済みだが、次run開始境界で初めて料金変化を観測して旧runへ帰属する別branchはこの4件では実行されていない。",
      "observation_type": "validation_boundary",
      "source_type": "private_operation_and_diagnostic_logs",
      "artifact_refs": [
        "AR-003"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-009",
      "timestamp": "2026-09-27",
      "description_en": "The current source refuses to finalize from incomplete cost payloads and, when an unresolved old run overlaps a newly observed active run, confirms the old run only under explicit attribution conditions; otherwise it records the old run as unconfirmed instead of assigning a speculative cost.",
      "description_ja": "現行sourceは不完全な料金payloadでは確定せず、未解決の旧runを保持したまま新しいactive runを観測した場合も、明示的な帰属条件を満たすときだけ旧runを確定する。条件を満たさなければ推測料金を割り当てず未確定として記録する。",
      "observation_type": "source_review",
      "source_type": "current_production_collector_source_snapshot",
      "artifact_refs": [
        "AR-002"
      ],
      "quality": "VALID"
    }
  ],
  "claims": [
    {
      "id": "C-001",
      "statement_en": "Dryer stop and utility-cost finalization are separate observable events in this collector; at least one operation ended before its cost was finalized.",
      "statement_ja": "このcollectorでは乾太くん停止と料金確定は別の観測イベントであり、少なくとも1件は運転終了後も料金未確定だった。",
      "evidence_state": "OBSERVED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-001"
      ],
      "source_refs": []
    },
    {
      "id": "C-002",
      "statement_en": "A later utility-cost change can be used for correction only when it is attributable to the unresolved operation; otherwise the value must not be assigned speculatively.",
      "statement_ja": "後続の料金変化は未確定運転へ帰属可能な場合にのみ補正へ利用でき、帰属が確定できない値を推測で割り当ててはならない。",
      "evidence_state": "INFERRED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-002"
      ],
      "source_refs": []
    },
    {
      "id": "C-003",
      "statement_en": "Requiring repeated stable samples after the first relevant post-stop cost change introduces additional dependence on later polls and can therefore delay finalization or leave a case unresolved when later polling is interrupted.",
      "statement_ja": "最初の有効な停止後料金変化の後に複数回安定sampleを要求すると後続pollへの依存が増え、後続pollが途切れた場合に確定遅延または未確定残存を生じ得る。",
      "evidence_state": "INFERRED",
      "confidence": "MEDIUM",
      "evidence_refs": [
        "O-003",
        "O-005"
      ],
      "source_refs": []
    },
    {
      "id": "C-004",
      "statement_en": "The revised first-attributable-change rule is implemented in the current collector and was exercised end-to-end by four post-fix delayed-cost operations, each of which automatically finalized without manual repair.",
      "statement_ja": "最初の帰属可能な料金変化で確定するルールは現行collectorへ実装され、修正後の料金遅延4運転でend-to-endに実行され、4件すべてが手動補正なしで自動確定した。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-004",
        "O-006",
        "O-007"
      ],
      "source_refs": []
    },
    {
      "id": "C-005",
      "statement_en": "In the four retained post-fix delayed-cost cases, the revised collector resolved the correct operation automatically on the first attributable post-stop cost change; all four settled before the next run began, so the competing-run boundary branch remains a separate unexercised edge case.",
      "statement_ja": "保持された修正後料金遅延4ケースでは、修正版collectorが最初の帰属可能な停止後料金変化で対象runを自動確定した。4件とも次run開始前に確定しており、競合run境界branchは別の未実行edge caseとして残る。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-006",
        "O-008"
      ],
      "source_refs": []
    },
    {
      "id": "C-006",
      "statement_en": "A five-minute gap between unchanged diagnostic heartbeat rows is not equivalent to five-minute API polling in the current collector: state and cost APIs are polled every minute while unchanged diagnostic rows are intentionally thinned to five minutes.",
      "statement_ja": "現行collectorでは、無変化diagnostic heartbeat行の5分間隔を5分API pollingと同一視してはならない。状態API・料金APIは毎分取得し、無変化diagnostic rowだけ意図的に5分へ間引いている。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-007"
      ],
      "source_refs": []
    }
  ],
  "analysis": [
    {
      "id": "AN-001",
      "method": "event_reconciliation_and_state_machine_review",
      "summary_en": "The failure mode is modeled as asynchronous observation: the dryer stop event and the utility-cost update are distinct events. A safe state machine therefore preserves an unresolved operation after stop, accepts only an attributable later cost change, and avoids requiring unnecessary repeated identical observations once the first attributable change has appeared.",
      "summary_ja": "障害モードを非同期観測として扱う。乾太くん停止イベントと料金更新イベントは別であり、安全な状態機械は停止後も未確定運転を保持し、帰属可能な後続料金変化だけを受け入れ、最初の帰属可能な変化が現れた後に不要な同値反復観測を必須にしない。",
      "evidence_refs": [
        "O-001",
        "O-002",
        "O-003",
        "O-004",
        "O-005"
      ]
    },
    {
      "id": "AN-002",
      "method": "post_fix_field_validation",
      "summary_en": "The revised design was no longer only a code-level proposal: four independent production cases crossed the two-hour late threshold and then automatically settled on the first attributable cost change. Because every one of those cases settled before a subsequent run began, the evidence validates the ordinary delayed-settlement path but not the distinct new-run-boundary attribution branch.",
      "summary_ja": "修正版設計はcode-level proposalに留まらず、独立したproduction 4ケースが2時間late thresholdを超えた後、最初の帰属可能な料金変化で自動確定した。ただし4件とも後続run開始前に確定したため、Evidenceがfield validationするのは通常のdelayed-settlement pathであり、別のnew-run-boundary attribution branchまでは含まない。",
      "evidence_refs": [
        "O-006",
        "O-008"
      ]
    }
  ],
  "results": {
    "status": "COMPLETED",
    "success_level": "SUCCESS",
    "summary_en": "The asynchronous settlement problem was reproduced after the collector change and automatically recovered in four independent delayed-cost operations. Each case entered the late path after more than two hours without a cost change and later finalized on the first attributable post-stop cost change without manual repair. Rounded stop-to-settlement delays were 159–540 minutes, and no unresolved late case remained at the review snapshot. The competing-run boundary branch is implemented conservatively but was not exercised by these four cases.",
    "summary_ja": "collector修正後にも非同期settlement問題が再発し、独立した料金遅延4運転を自動回収できた。各ケースは停止後2時間超料金変化がないためlate pathへ入り、その後最初の帰属可能な停止後料金変化で手動補正なしに確定した。停止から確定までの丸めた遅延は159〜540分で、review時点に未解決late caseは残っていない。競合run境界branchは保守的に実装されているが、この4件では実行されなかった。",
    "metrics": [
      {
        "name": "post_fix_delayed_cost_cases",
        "value": 4,
        "unit": "cases",
        "quality": "VALID"
      },
      {
        "name": "post_fix_delayed_cases_auto_settled",
        "value": 4,
        "unit": "cases",
        "quality": "VALID"
      },
      {
        "name": "post_fix_delayed_cases_unresolved_at_review",
        "value": 0,
        "unit": "cases",
        "quality": "VALID"
      },
      {
        "name": "minimum_observed_stop_to_settlement_delay",
        "value": 159,
        "unit": "minutes_rounded",
        "quality": "VALID"
      },
      {
        "name": "maximum_observed_stop_to_settlement_delay",
        "value": 540,
        "unit": "minutes_rounded",
        "quality": "VALID"
      },
      {
        "name": "post_fix_new_run_boundary_late_cases_observed",
        "value": 0,
        "unit": "cases",
        "quality": "VALID"
      }
    ],
    "established_claim_refs": [
      "C-001",
      "C-002",
      "C-003",
      "C-004",
      "C-005",
      "C-006"
    ],
    "unresolved_claim_refs": [],
    "disproven_claim_refs": []
  },
  "conclusion": {
    "en": "A dryer stop and a cloud utility-cost update must be treated as separate observable events in this collector. The revised state machine preserves the stopped operation, waits for an attributable cost change, finalizes immediately on the first such change, and keeps a bounded late-reconciliation state when the cost remains unchanged. Four independent post-fix delayed-cost cases entered that late path and all four later finalized automatically without manual repair, with observed stop-to-settlement delays ranging from 159 to 540 minutes. This completes the main Experiment objective. The separate branch for a cost change first appearing at a competing new-run boundary remains code-verified but was not exercised by these four field cases, so that edge condition should remain explicit rather than being presented as field-validated.",
    "ja": "このcollectorでは、乾太くん停止とクラウド料金更新を別の観測イベントとして扱う必要がある。修正版状態機械は停止済みrunを保持し、帰属可能な料金変化を待ち、最初の変化で即時確定し、料金が変わらない場合はbounded late-reconciliation stateを維持する。修正後に独立した料金遅延4ケースがこのlate pathへ入り、4件すべてが手動補正なしで自動確定した。観測された停止から確定までの遅延は159〜540分だった。これにより本Experimentの主要Objectiveは完了した。競合する次run開始境界で初めて料金変化が現れる場合の別branchはcode上確認できるが、この4 field caseでは実行されていないため、field-validatedとは扱わず明示的edge conditionとして残す。",
    "evidence_basis_refs": [
      "C-001",
      "C-002",
      "C-003",
      "C-004",
      "C-005",
      "C-006"
    ],
    "remaining_uncertainties": [
      "The post-fix validation did not exercise a case in which a delayed old-run cost first appeared exactly when a competing new dryer run began.",
      "The experiment does not establish whether every delay originates upstream in the utility-cost API rather than from a mixture of upstream reporting and collector execution timing.",
      "The observed delay distribution is based on four delayed cases and is not a population estimate."
    ],
    "recommended_next_actions": [
      "Continue normal operation and retain any future new-run-boundary late-reconciliation case as a follow-up validation case.",
      "Do not reopen the completed result merely because the delay distribution gains more samples unless new evidence changes the settlement design or its limits.",
      "Treat any repeated ambiguous cross-run case as a candidate for a related follow-up Experiment."
    ]
  },
  "data_artifacts": [
    {
      "id": "AR-001",
      "type": "private_operation_logs",
      "description_en": "Private RDT-93 operation and diagnostic logs used to identify unresolved-cost behavior and validate reconciliation.",
      "description_ja": "料金未確定挙動の特定と補正確認に用いた非公開RDT-93運転・診断ログ。",
      "retention": "RETAINED",
      "public": false,
      "reason_not_public": "Contains household telemetry and installation-specific identifiers."
    },
    {
      "id": "AR-002",
      "type": "private_source_code",
      "description_en": "Current Apps Script collector implementation containing settlement and late-reconciliation logic.",
      "description_ja": "settlementおよび後追い照合ロジックを含む現行Apps Script collector実装。",
      "retention": "RETAINED",
      "public": false,
      "reason_not_public": "Production configuration may contain private identifiers; sanitized source has not yet been prepared."
    },
    {
      "id": "AR-003",
      "name": "Sanitized post-fix delayed-settlement validation summary",
      "type": "json",
      "retention": "RETAINED",
      "public": true,
      "path": "website/static/data/experiments/AIEL-2026-0008/post-fix-validation-summary.json",
      "notes": "Aggregate-only case counts and rounded delay range; no operation timestamps, costs, run IDs, location, or raw household telemetry."
    }
  ],
  "artifact_availability": {
    "raw_operation_and_diagnostic_logs": {
      "retention": "RETAINED",
      "public": false,
      "notes": "Private household telemetry retained for audit."
    },
    "production_source_code": {
      "retention": "RETAINED",
      "public": false,
      "notes": "Current collector source retained privately."
    },
    "sanitized_validation_summary": {
      "retention": "RETAINED",
      "public": true,
      "notes": "Aggregate validation metrics only."
    }
  },
  "sources": [],
  "provenance": {
    "record_created_by": "ChatGPT",
    "creation_method": "Reconstructed from retained AI Experiment Log project activity and existing canonical AIEL records without inventing missing execution evidence.",
    "human_governance": "Operator requested formal parallel registration of the Kantakun delayed utility-cost problem as a separate experiment.",
    "evidence_policy": "Observations, inferences, and unverified future behavior are explicitly separated. No unresolved value is treated as measured unless attributable observed API evidence exists."
  },
  "publication": {
    "public": true,
    "public_candidate": true,
    "draft_only": false,
    "languages": {
      "en": {
        "published": true,
        "url": "https://ai-experiment-log.pages.dev/en/experiments/rinnai-kantakun-delayed-utility-cost-reconciliation/",
        "canonical": false
      },
      "ja": {
        "published": true,
        "url": "https://ai-experiment-log.pages.dev/ja/experiments/rinnai-kantakun-delayed-utility-cost-reconciliation/",
        "canonical": false
      }
    },
    "machine_readable_url": "https://ai-experiment-log.pages.dev/data/experiments/AIEL-2026-0008/experiment.json",
    "primary_language": "en",
    "secondary_language": "ja",
    "publication_blockers": [],
    "content_review_protocol": "pre-publication-content-review-v1.6",
    "content_review_decision": "PASS",
    "reader_value_decision": "PASS",
    "publication_authorized": true,
    "publication_authorized_at": "2026-09-27"
  },
  "relationships": [
    {
      "type": "RELATED_TO",
      "experiment_id": "AIEL-2026-0005",
      "description_en": "Same Rinnai RDT-93 collection stack, but AIEL-2026-0005 concerns authentication failure; AIEL-2026-0008 concerns post-stop utility-cost timing and reconciliation.",
      "description_ja": "同じRinnai RDT-93収集系を対象とするが、AIEL-2026-0005は認証障害、AIEL-2026-0008は停止後料金反映時刻と補正・確定を扱う。"
    }
  ],
  "open_questions": [
    {
      "id": "Q-001",
      "question_en": "Will the next genuinely delayed post-stop utility-cost update be finalized automatically by the revised first-attributable-change rule?",
      "question_ja": "次に実際の停止後料金反映遅延が発生した際、修正版の最初の帰属可能変化ルールで自動確定できるか。",
      "basis_refs": [
        "C-005"
      ],
      "verification_needed_en": "Capture a new delayed-cost operation and preserve surrounding operation, cost, and polling evidence before manual intervention.",
      "verification_needed_ja": "新しい料金遅延運転を捕捉し、手動介入前の運転・料金・polling証拠を保持する。"
    },
    {
      "id": "Q-002",
      "question_en": "What is the empirical distribution of utility-cost reporting delay after dryer stop?",
      "question_ja": "乾太くん停止後から料金API反映までの遅延時間分布はどの程度か。",
      "basis_refs": [
        "O-001",
        "O-002"
      ],
      "verification_needed_en": "Measure stop-to-first-attributable-cost-change delay over multiple operations.",
      "verification_needed_ja": "複数運転で停止から最初の帰属可能料金変化までの時間を測定する。"
    }
  ],
  "revisions": [
    {
      "revision": 1,
      "timestamp": "2026-09-06T22:33:00+09:00",
      "type": "INITIAL_REGISTRATION",
      "summary_en": "Registered the delayed Kantakun utility-cost finalization problem as a separate in-progress experiment.",
      "summary_ja": "乾太くん料金反映遅延・確定問題を独立した進行中Experimentとして初回登録した。"
    },
    {
      "revision": 2,
      "timestamp": "2026-09-27",
      "type": "FIELD_VALIDATION_AND_COMPLETION",
      "summary_en": "Post-fix production review found four independent delayed-cost recurrences; all four auto-settled on the first attributable post-stop cost change. Experiment promoted from IN_PROGRESS to COMPLETED/SUCCESS with the unexercised new-run-boundary branch retained as an explicit limitation.",
      "summary_ja": "修正後production reviewで独立した料金遅延4件を確認し、4件すべてが最初の帰属可能な停止後料金変化で自動確定した。ExperimentをIN_PROGRESSからCOMPLETED/SUCCESSへ更新し、未実行のnew-run-boundary branchは明示的な制約として保持した。"
    },
    {
      "revision": 3,
      "timestamp": "2026-09-27",
      "type": "PUBLICATION_REVIEW",
      "summary_en": "Reconstructed the public article around the transferable asynchronous event-reconciliation pattern, corrected outdated five-minute-poll wording, bounded field validation to the exercised late-settlement path, and completed the v1.9 two-cycle review.",
      "summary_ja": "公開記事を再利用可能な非同期event-reconciliation pattern中心に再構成し、旧5分poll表現を修正し、field validationを実行済みlate-settlement pathへ限定したうえでv1.9の2-cycle reviewを完了した。"
    },
    {
      "revision": 4,
      "timestamp": "2026-09-27T11:50:05+00:00",
      "type": "METADATA_UPDATE",
      "summary": "Gitleaks 8.24.3 full-history scan completed without detected leaks in GitHub Actions workflow run 36316987338 immediately before publication finalization; secret_scan_performed set to true."
    },
    {
      "revision": 5,
      "timestamp": "2026-09-27T11:50:05+00:00",
      "type": "PUBLICATION_UPDATE",
      "summary": "After human-approved merge to main, GitHub Actions workflow run 36316987338 directly observed the English page, Japanese page, and machine-readable JSON on Cloudflare Pages production. The JSON returned HTTP 200, matched experiment_id=AIEL-2026-0008, and matched the repository public copy byte-for-byte. Publication metadata was finalized from that observed state."
    }
  ],
  "security": {
    "contains_sensitive_data": true,
    "redactions_applied": true,
    "redaction_categories": [
      "raw_household_operation_telemetry",
      "operation_timestamps",
      "run_identifiers",
      "utility_cost_values",
      "controller_identifier",
      "spreadsheet_identifier",
      "credentials"
    ],
    "secret_scan_performed": true,
    "publication_reviewed": true
  },
  "record_metadata": {
    "notes": {
      "en": [
        "The exact current production source should be sanitized and attached before final publication if code-level reproduction is desired.",
        "Do not merge this experiment's conclusion into AIEL-2026-0005 because authentication and cost reconciliation are distinct failure domains."
      ],
      "ja": [
        "コードレベル再現性を公開する場合は、最終公開前に現行production sourceをsanitized artifactとして保存する。",
        "認証障害と料金照合は別failure domainなので、本Experimentの結論をAIEL-2026-0005へ統合しない。"
      ]
    }
  }
}
