{
  "schema_version": "1.1",
  "experiment_id": "AIEL-2026-0012",
  "title": {
    "en": "Open-Meteo hourly solar-radiation timestamps: verifying preceding-hour semantics for PV time-series alignment",
    "ja": "Open-Meteoの1時間日射量はどの時間を表すか：直前1時間平均と太陽光発電時系列の整合"
  },
  "status": "COMPLETED",
  "timestamps": {
    "created_at": "2026-09-27T19:47:00+09:00",
    "started_at": "2026-09-20",
    "observed_at": "2026-09-20",
    "completed_at": "2026-09-27",
    "published_at": "2026-09-27T11:19:28+00:00",
    "last_verified": "2026-09-27",
    "updated_at": "2026-09-27T11:19:28+00:00"
  },
  "objective": {
    "summary_en": "Correct a design-time omission in reviewing Open-Meteo solar-radiation timestamp semantics by establishing the documented time meaning of the relevant hourly variables, checking consistency against retained PV data, and defining a recurrence-prevention rule for future collectors.",
    "summary_ja": "Open-Meteo日射量のタイムスタンプが表す時間的意味を収集コード設計時に十分確認していなかった点を是正するため、対象となる1時間値の公式仕様を確認し、保存済みPVデータとの整合を再計算し、今後の収集設計に用いる再発防止ルールを定める。",
    "success_criteria": [
      {
        "id": "SC-001",
        "description_en": "Confirm from Open-Meteo documentation the time meaning of the examined one-hour mean radiation variables and their corresponding _instant variables.",
        "description_ja": "対象となる1時間平均日射量と対応する _instant 変数の時間的な意味をOpen-Meteo公式資料から確認する。"
      },
      {
        "id": "SC-002",
        "description_en": "Recalculate a bounded ±2-hour comparison using retained private PV data to check consistency with the documented interpretation.",
        "description_ja": "保存済みの非公開PVデータで±2時間の限定比較を再計算し、公式仕様に基づく解釈と矛盾しないか確認する。"
      },
      {
        "id": "SC-003",
        "description_en": "Document a collector-design rule that temporal semantics must be verified per variable before implementation and that no blanket one-hour shift is applied.",
        "description_ja": "実装前に変数ごとの時間的意味を確認し、レスポンス全体へ一律1時間shiftを適用しないという収集設計ルールを明文化する。"
      }
    ]
  },
  "scope": {
    "included": [
      "Open-Meteo first-party documentation",
      "hourly shortwave_radiation/global_tilted_irradiance and instant variants",
      "sanitized aggregate comparison with private PV generation"
    ],
    "excluded": [
      "private location or coordinates",
      "raw household PV series",
      "claiming an Open-Meteo timestamp bug"
    ],
    "limitations": [
      "The private PV comparison is one field series and does not independently establish provider semantics.",
      "PV output depends on factors beyond modeled GTI."
    ]
  },
  "procedures": [
    {
      "id": "P-001",
      "sequence": 1,
      "description_en": "Review current Open-Meteo documentation for the time meaning of the examined radiation variables and compare it with the retained collector interpretation.",
      "description_ja": "対象となる日射量変数の時間的な意味を現行Open-Meteo公式資料で確認し、保持されている収集側の解釈と照合する。",
      "status": "EXECUTED"
    },
    {
      "id": "P-002",
      "sequence": 2,
      "description_en": "Compare GTI(T) with PV one-hour generation intervals ending at T+s for s=-2,-1,0,+1,+2, using GTI>=20 W/m².",
      "description_ja": "GTI(T)とT+sで終了するPV 1時間発電量をs=-2,-1,0,+1,+2で比較し、GTI>=20 W/m²を対象とする。",
      "status": "EXECUTED"
    }
  ],
  "observations": [
    {
      "id": "O-001",
      "timestamp": "2026-09-27",
      "description_en": "Open-Meteo documents the examined hourly shortwave_radiation and global_tilted_irradiance values as means over the preceding hour ending at the timestamp.",
      "description_ja": "Open-Meteoは、今回確認した hourly shortwave_radiation と global_tilted_irradiance の値を、タイムスタンプで終わる直前1時間の平均と定義している。",
      "observation_type": "source_document_verification",
      "source_type": "first_party_documentation",
      "artifact_refs": [
        "S-001"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-002",
      "timestamp": "2026-09-27",
      "description_en": "Open-Meteo separately provides instant radiation variables for the indicated timestamp.",
      "description_ja": "Open-Meteoは表示時刻のinstant日射量を別変数として提供する。",
      "observation_type": "source_document_verification",
      "source_type": "first_party_documentation",
      "artifact_refs": [
        "S-001"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-003",
      "timestamp": "2026-09-27",
      "description_en": "The private retained log stores averaged GHI/GTI and instant GHI/GTI separately and records 'Open-Meteo time T = preceding-hour mean'.",
      "description_ja": "非公開保持logは平均GHI/GTIと瞬時GHI/GTIを別保存し、『Open-Meteo 時刻T = 直前1時間平均』と記録している。",
      "observation_type": "retained_system_state",
      "source_type": "private_spreadsheet",
      "artifact_refs": [
        "AR-001"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-004",
      "timestamp": "2026-09-27",
      "description_en": "Across 104 daylight hourly comparisons, correlations for PV intervals ending at T-2h,T-1h,T,T+1h,T+2h were 0.417,0.627,0.769,0.764,0.635.",
      "description_ja": "昼間104時間でPV区間終端T-2h,T-1h,T,T+1h,T+2hの相関は0.417,0.627,0.769,0.764,0.635だった。",
      "observation_type": "sanitized_time_alignment_analysis",
      "source_type": "private_measurement_store",
      "artifact_refs": [
        "AR-002"
      ],
      "quality": "VALID"
    },
    {
      "id": "O-005",
      "timestamp": "2026-09-27",
      "description_en": "During article review, the human project governor clarified that the collector had been implemented without sufficiently reviewing the temporal meaning of Open-Meteo solar-radiation timestamps, and that the later PV alignment question prompted the specification review.",
      "description_ja": "記事見直し時に、収集コード設計時にはOpen-Meteo日射量のタイムスタンプが表す時間的な意味を十分確認しておらず、後からPVとの時間対応への疑問が生じたことをきっかけに仕様確認を行った、という当時の経緯がプロジェクト統治者から確認された。",
      "observation_type": "human_reported_project_history",
      "source_type": "human_governance_review",
      "artifact_refs": [],
      "quality": "VALID"
    }
  ],
  "claims": [
    {
      "id": "C-001",
      "statement_en": "For the current hourly shortwave_radiation and global_tilted_irradiance values examined here, timestamp T denotes the mean over the preceding hour ending at T.",
      "statement_ja": "今回確認した現行 hourly shortwave_radiation と global_tilted_irradiance では、timestamp TはTで終わる直前1時間の平均を表す。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-001"
      ],
      "source_refs": [
        "S-001"
      ]
    },
    {
      "id": "C-002",
      "statement_en": "The corresponding variables whose names end in _instant represent the indicated time itself.",
      "statement_ja": "対応する _instant 変数は、表示された時刻そのものの値を表す。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-002"
      ],
      "source_refs": [
        "S-001"
      ]
    },
    {
      "id": "C-003",
      "statement_en": "Treating T as the following-hour start can create an apparent PV time offset.",
      "statement_ja": "Tを次の1時間の開始として扱うとPV比較で見かけの時間ずれを生じさせ得る。",
      "evidence_state": "INFERRED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-001",
        "O-004"
      ],
      "source_refs": [
        "S-001"
      ]
    },
    {
      "id": "C-004",
      "statement_en": "The local PV comparison is consistent with the documented alignment but is not independently decisive.",
      "statement_ja": "ローカルPV比較は公式整合と矛盾しないが独立には決定的でない。",
      "evidence_state": "INFERRED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-004"
      ],
      "source_refs": []
    },
    {
      "id": "C-005",
      "statement_en": "Hourly fields should be aligned by each variable's documented valid time rather than one blanket shift.",
      "statement_ja": "hourly fieldは一律shiftではなく各変数のdocumented valid timeで整合すべきである。",
      "evidence_state": "VERIFIED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-001",
        "O-002"
      ],
      "source_refs": [
        "S-001"
      ]
    },
    {
      "id": "C-006",
      "statement_en": "This investigation was corrective work after a design-time specification-review omission, not evidence that an undocumented Open-Meteo timing defect had first been discovered.",
      "statement_ja": "今回の調査は、Open-Meteoの未知の時間ずれを発見したことを起点とするものではなく、設計時の仕様確認不足を後から是正するための調査である。",
      "evidence_state": "INFERRED",
      "confidence": "HIGH",
      "evidence_refs": [
        "O-005",
        "O-001"
      ],
      "source_refs": [
        "S-001"
      ]
    }
  ],
  "results": {
    "status": "COMPLETED",
    "success_level": "SUCCESS",
    "summary_en": "Open-Meteo documentation confirms that the examined hourly shortwave_radiation/GTI values are means over the preceding hour ending at the timestamp, while _instant variants represent the indicated time. A 104-hour private PV comparison is consistent with that interpretation but is not treated as independent proof. The investigation is recorded as corrective work after a design-time specification-review omission.",
    "summary_ja": "Open-Meteo公式資料から、今回確認した hourly shortwave_radiation/GTI はタイムスタンプで終わる直前1時間平均で、_instant 版は表示時刻そのものの値と確認した。104時間の非公開PV比較もこの解釈と矛盾しないが、独立した証明とは扱わない。また、本調査は設計時の仕様確認不足を後から是正した記録として位置付ける。",
    "metrics": [
      {
        "name": "alignment_sample_count",
        "value": 104,
        "unit": "hourly comparisons",
        "quality": "VALID"
      },
      {
        "name": "correlation_shift_minus_2h",
        "value": 0.4165536408,
        "unit": "Pearson r",
        "quality": "VALID"
      },
      {
        "name": "correlation_shift_minus_1h",
        "value": 0.6266803195,
        "unit": "Pearson r",
        "quality": "VALID"
      },
      {
        "name": "correlation_shift_0_documented",
        "value": 0.7694650702,
        "unit": "Pearson r",
        "quality": "VALID"
      },
      {
        "name": "correlation_shift_plus_1h",
        "value": 0.7644722852,
        "unit": "Pearson r",
        "quality": "VALID"
      },
      {
        "name": "correlation_shift_plus_2h",
        "value": 0.6353293571,
        "unit": "Pearson r",
        "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": "For the examined Open-Meteo hourly shortwave_radiation and global_tilted_irradiance values, timestamp T is the end of a preceding-hour mean: 14:00 maps to 13:00–14:00. The corresponding _instant variables represent the indicated time itself. This is established from Open-Meteo documentation; the retained PV comparison is supporting evidence only. The investigation was required because these temporal semantics had not been reviewed sufficiently during collector design, so it is recorded as corrective work after a preventable specification-review omission rather than as discovery of an undocumented provider defect.",
    "ja": "今回確認したOpen-Meteoの hourly shortwave_radiation と global_tilted_irradiance では、timestamp Tは直前1時間平均の終了時刻であり、14:00は13:00〜14:00に対応する。対応する _instant 変数は表示時刻そのものの値を表す。この時間的な意味はOpen-Meteo公式資料から確認し、保存済みPV比較は補助Evidenceに限定する。今回の調査が必要になったのは、収集コード設計時にこれらの時間的な仕様を十分確認していなかったためであり、未知の提供元不具合の発見ではなく、事前に確認可能だった仕様確認不足を後から是正した記録として扱う。",
    "evidence_basis_refs": [
      "C-001",
      "C-002",
      "C-003",
      "C-004",
      "C-005",
      "C-006"
    ],
    "remaining_uncertainties": [
      "The field comparison does not evaluate Open-Meteo radiation accuracy or bias."
    ],
    "recommended_next_actions": [
      "Before implementing external time-series collectors, record for each variable whether it is instantaneous, averaged, or accumulated; its interval boundaries and duration; timestamp meaning; timezone; and unit.",
      "Preserve interval semantics explicitly downstream instead of inferring them later from timestamps alone.",
      "Recheck provider documentation when changing endpoint, model, variable, or temporal resolution."
    ]
  },
  "data_artifacts": [
    {
      "id": "AR-001",
      "name": "Private hourly weather and PV monitoring state",
      "type": "private_dataset",
      "retention": "RETAINED",
      "public": false
    },
    {
      "id": "AR-002",
      "name": "Sanitized time-alignment summary",
      "type": "json",
      "retention": "RETAINED",
      "public": true,
      "path": "website/static/data/experiments/AIEL-2026-0012/time-alignment-summary.json"
    }
  ],
  "artifact_availability": {
    "private_history": {
      "retention": "RETAINED",
      "public": false
    },
    "sanitized_summary": {
      "retention": "RETAINED",
      "public": true
    },
    "source_code": {
      "retention": "NOT_APPLICABLE",
      "public": false
    }
  },
  "sources": [
    {
      "id": "S-001",
      "type": "first_party_documentation",
      "title": "Open-Meteo Weather Forecast API documentation",
      "url": "https://open-meteo.com/en/docs",
      "accessed_at": "2026-09-27"
    }
  ],
  "provenance": {
    "generated_by": "AI-assisted source verification, private time-series analysis, and documentation",
    "ai_systems": [
      {
        "system": "ChatGPT",
        "model": "GPT-5.6 Sol",
        "roles": [
          "documentation_review",
          "time_alignment_analysis",
          "evidence_classification",
          "authoring"
        ]
      }
    ],
    "human_roles": [
      {
        "role": "project governor/operator",
        "activities": [
          "identified the alignment question",
          "requested specification verification and recalculation",
          "approved article development"
        ]
      }
    ]
  },
  "publication": {
    "public": true,
    "public_candidate": true,
    "draft_only": false,
    "languages": {
      "en": {
        "published": true,
        "url": "https://ai-experiment-log.pages.dev/en/experiments/open-meteo-hourly-radiation-preceding-hour-pv-alignment/",
        "canonical": false
      },
      "ja": {
        "published": true,
        "url": "https://ai-experiment-log.pages.dev/ja/experiments/open-meteo-hourly-radiation-preceding-hour-pv-alignment/",
        "canonical": false
      }
    },
    "machine_readable_url": "https://ai-experiment-log.pages.dev/data/experiments/AIEL-2026-0012/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-27T22:54:53+09:00",
    "reader_value_statement": "This Experiment helps developers and analysts using time-series APIs avoid timestamp-alignment errors and avoid repeating the same corrective investigation by establishing both the Open-Meteo interval semantics and the specification checks that should be completed before collector implementation.",
    "review_artifact": "operations/publication-reviews/AIEL-2026-0012.md",
    "revision_review_artifact": "operations/publication-reviews/AIEL-2026-0012-revision-2026-09-27.md"
  },
  "relationships": [
    {
      "type": "RELATED_TO",
      "experiment_id": "OPENMETEO-MSM-001",
      "notes_en": "Legacy record concerns collection reliability; this Experiment concerns valid-time semantics.",
      "notes_ja": "legacy recordは収集信頼性、本Experimentはvalid-time semanticsを扱う。"
    }
  ],
  "revisions": [
    {
      "revision": 1,
      "timestamp": "2026-09-27T19:47:00+09:00",
      "type": "INITIAL",
      "summary": "Created from retained Open-Meteo/PV alignment activity and current first-party documentation."
    },
    {
      "revision": 2,
      "timestamp": "2026-09-27",
      "type": "PUBLICATION_REVIEW",
      "summary": "Completed v1.9 review; corrected draft framing to avoid calling documented semantics an API bug or treating local correlation as independent proof."
    },
    {
      "revision": 3,
      "timestamp": "2026-09-27T11:19:28+00:00",
      "type": "METADATA_UPDATE",
      "summary": "Gitleaks 8.24.3 full-history scan completed without detected leaks in GitHub Actions workflow run 36315339837 immediately before publication finalization; secret_scan_performed set to true."
    },
    {
      "revision": 4,
      "timestamp": "2026-09-27T11:19:28+00:00",
      "type": "PUBLICATION_UPDATE",
      "summary": "After human-approved merge to main, GitHub Actions workflow run 36315339837 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-0012, and matched the repository public copy byte-for-byte. Publication metadata was finalized from that observed state."
    },
    {
      "revision": 5,
      "timestamp": "2026-09-27",
      "type": "CORRECTION",
      "summary": "Reframed the Experiment origin after human governance review: recorded the design-time specification-review omission, removed undefined reader-facing shorthand, added explicit terminology definitions and recurrence-prevention lessons, and preserved the verified Open-Meteo semantics and PV statistics."
    },
    {
      "revision": 6,
      "timestamp": "2026-09-27",
      "type": "PUBLICATION_REVIEW",
      "summary": "Human cold-read findings reopened the prior PASS. The revised EN/JA pages and Canonical Record completed two new clean four-pass semantic review cycles under pre-publication-content-review-v1.6, including whole-article cold reading, terminology/context review, explicit failure-origin classification, and Reader Value review. Publication authorization remains false pending mechanical preflight, PR CI, and Human merge approval."
    },
    {
      "revision": 7,
      "timestamp": "2026-09-27T22:54:53+09:00",
      "type": "PUBLICATION_AUTHORIZATION",
      "summary": "Human project governor explicitly authorized merging PR #89 and proceeding with the AIEL-2026-0012 public correction after semantic review, preflight, and PR CI preparation."
    }
  ],
  "security": {
    "contains_sensitive_data": true,
    "redactions_applied": true,
    "redaction_categories": [
      "private_location",
      "private_coordinates",
      "raw_household_pv_telemetry",
      "spreadsheet_identifier"
    ],
    "secret_scan_performed": true,
    "publication_reviewed": true
  },
  "extensions": {
    "experiment_origin": {
      "classification": "FAILURE_RECOVERY",
      "failure_classification": "PREVENTABLE_SPECIFICATION_REVIEW_OMISSION",
      "classification_scope": "This classifies why the investigation became necessary; it does not change the formal Experiment Status, which remains COMPLETED because the corrective investigation met its objective.",
      "prior_expectation_en": "No sufficiently explicit design-time interpretation of the radiation timestamp semantics had been established before collection was implemented.",
      "prior_expectation_ja": "収集実装前に、日射量タイムスタンプの時間的な意味について十分に明示した設計上の解釈を確立していなかった。",
      "trigger_en": "A later question about the time alignment between retained hourly Open-Meteo radiation and measured PV generation.",
      "trigger_ja": "保存済みのOpen-Meteo 1時間日射量と実測PV発電量の時間対応への後発的な疑問。",
      "foreseeability": "FORESEEABLE_WITH_REASONABLE_SPECIFICATION_REVIEW",
      "failure_en": "The collector was implemented without sufficiently checking the temporal semantics of the relevant radiation variables in the provider documentation.",
      "failure_ja": "提供元公式資料で対象日射量変数の時間的な意味を十分確認しないまま収集コードを実装した。",
      "recovery_en": "Reviewed Open-Meteo documentation, recalculated retained PV alignment, corrected the downstream interpretation, and documented a collector-design checklist.",
      "recovery_ja": "Open-Meteo公式資料を確認し、保存済みPVとの時間対応を再計算し、下流の解釈を是正し、収集設計時の確認項目を明文化した。",
      "lesson_en": "Successful data acquisition is not sufficient; data semantics must be reviewed before collector implementation.",
      "lesson_ja": "APIから値を取得できることだけでは不十分であり、収集コード実装前にデータの意味を仕様で確認する必要がある。",
      "basis_refs": [
        "O-005",
        "S-001"
      ],
      "classification_definition_en": "FAILURE_RECOVERY means the investigation became necessary because an earlier avoidable design, implementation, or review failure had to be corrected.",
      "classification_definition_ja": "FAILURE_RECOVERYは、事前に回避可能だった設計・実装・確認上の失敗を後から是正するために調査が必要になったことを表す。",
      "failure_classification_definition_en": "PREVENTABLE_SPECIFICATION_REVIEW_OMISSION means a specification that could reasonably have been checked before implementation was not reviewed sufficiently, creating later corrective work.",
      "failure_classification_definition_ja": "PREVENTABLE_SPECIFICATION_REVIEW_OMISSIONは、実装前に合理的に確認できた仕様を十分確認しなかったため、後から是正作業が必要になったことを表す。",
      "foreseeability_definition_en": "FORESEEABLE_WITH_REASONABLE_SPECIFICATION_REVIEW means the issue could reasonably have been anticipated or avoided by reviewing the available provider specification before implementation.",
      "foreseeability_definition_ja": "FORESEEABLE_WITH_REASONABLE_SPECIFICATION_REVIEWは、実装前に提供元仕様を合理的に確認していれば、その問題を事前に想定または回避できたと判断したことを表す。"
    }
  }
}
