@prefix eidos: <https://eidos.software/ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix sosa: <http://www.w3.org/ns/sosa/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix schema: <https://schema.org/> .
@prefix vann: <http://purl.org/vocab/vann/> .

<https://eidos.software/ontology/forecast> a owl:Ontology ;
  owl:versionInfo "19.5.0" ;
  owl:versionIRI <https://eidos.software/ontology/forecast/19.5.0> ;
  owl:imports <https://eidos.software/ontology/governance> ;
  owl:imports <https://eidos.software/ontology/observation> ;
  owl:imports <https://eidos.software/ontology/evidence> ;
  dcterms:isPartOf <https://eidos.software/ontology> ;
  dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
  rdfs:label "Eidos forecast module" ;
  rdfs:comment "What Eidos predicts and how it is held to it: window forecasts, the policy versions that answer them, the harness that proposes policies, and calibration across decisions." ;
  rdfs:comment "One module of the Eidos ontology, release 19.5.0; the whole is at https://eidos.software/ontology, generated from the registries in src/ by npm run ontology. Edit the source, not this file." .

# ── forecast: classes ─────────────────────────────────────────────────

eidos:DecisionForecast a owl:Class ;
  rdfs:label "Decision forecast" ;
  rdfs:subClassOf prov:Entity ;
  rdfs:comment "A dated issued claim about which option a decision selects, or an explicitly withheld attempt. Its method, issuance and input cutoff are distinct from observations, replay cases and conditional token-value Impact." .

eidos:CategoricalDecisionForecast a owl:Class ;
  rdfs:label "Categorical decision forecast" ;
  rdfs:subClassOf eidos:DecisionForecast ;
  rdfs:comment "An issued complete probability distribution over a decision's declared mutually exclusive options." .

eidos:ForecastMethod a owl:Class ;
  rdfs:label "Forecast method" ;
  rdfs:subClassOf prov:Entity ;
  rdfs:comment "A content-addressed procedure used to generate a forecast; an artifact, not the responsible software agent." .

eidos:ForecastGeneration a owl:Class ;
  rdfs:label "Forecast generation" ;
  rdfs:subClassOf prov:Activity ;
  rdfs:comment "The activity that used a method artifact and observations to issue a dated decision forecast." .

eidos:WindowForecast a owl:Class ;
  rdfs:label "Window forecast" ;
  rdfs:subClassOf eidos:DecisionForecast ;
  rdfs:subClassOf prov:Entity ;
  owl:disjointWith eidos:PreWindowReview ;
  rdfs:comment "A binary Pass probability or withheld attempt for a decision window, with separate issuance and input-cutoff times. Resolutions remain separate from the original claim. Baselines are recorded, verified-reconstructed or unavailable; late and void attempts remain auditable but do not enter prospective evaluation." .

eidos:PolicyVersion a owl:Class ;
  rdfs:label "Policy version" ;
  rdfs:subClassOf prov:Entity ;
  rdfs:comment "One content-addressed version of a file the harness loop is allowed to edit: the window outlook policy and, when the task allows it, the improver's own instructions. Identified by the sha256 of the artifact files, never by the repository hash, so an unrelated commit does not make a new version. A kept version is a commit on main carrying a Worker trailer naming its Control run." .

eidos:RefusedPolicyVersion a owl:Class ;
  rdfs:label "Refused policy version" ;
  rdfs:subClassOf eidos:PolicyVersion ;
  rdfs:comment "A policy version the loop may never propose again, named with the measurement that closed it — the same shape as a disproven derivation, for the same reason: the refusal is the record. Empty until an operator closes one; a candidate the guard refused is only a ledger row, not a member." .

eidos:HarnessCandidate a owl:Class ;
  rdfs:label "Harness candidate" ;
  rdfs:subClassOf prov:Entity ;
  rdfs:comment "One proposal the loop scored: a policy version, its parent candidate, the frozen suite it was scored on (digest, data cutoff, tick-corpus cutoff), the evaluator's own hash, paired held-in and held-out Brier scores, the verdict and its reason, the worker's cost, and the Control run that produced it. Kept or refused, every candidate is a row; a refused candidate keeps its patch. Private: the ledger seals in the private-ledgers run and reaches no public surface." .

eidos:ControlRun a owl:Class ;
  rdfs:label "Control run" ;
  rdfs:subClassOf prov:Activity ;
  rdfs:comment "One bounded, headless worker run under Eidos Control: its task, worktree, base commit, worker, exit code, attempts, and the verification gates it passed or failed, with prompt, transcript and logs archived beside the record. A worker result is a claim; the run record is what the controller verified." .

eidos:Calibration a owl:Class ;
  rdfs:label "Calibration" ;
  rdfs:comment "How markets' forecasts compared with what followed, across decisions, by engine and mechanism family. A comparison across many decisions, so a part of the record and not of any one decision; named Learning, and a part of Decision, until 9.0.0. Not the Learning review, which files one finding per decision." .

# ── forecast: object and annotation properties ────────────────────────

eidos:forecastUsesMethod a owl:ObjectProperty ;
  rdfs:domain eidos:ForecastGeneration ;
  rdfs:range eidos:ForecastMethod ;
  rdfs:subPropertyOf prov:used ;
  rdfs:comment "The method artifact used by a forecast generation activity." .

eidos:forecastGeneratedBy a owl:ObjectProperty ;
  rdfs:domain eidos:DecisionForecast ;
  rdfs:range eidos:ForecastGeneration ;
  rdfs:subPropertyOf prov:wasGeneratedBy ;
  rdfs:comment "The activity that issued the claim." .

eidos:forecastsWindow a owl:ObjectProperty ;
  rdfs:domain eidos:WindowForecast ;
  rdfs:range eidos:RecordingWindow ;
  rdfs:comment "The open recording window a forecast was recorded against. One per forecast, a ledger rule rather than a functional axiom: windows are an open population no release can declare pairwise distinct." .

eidos:forecastByPolicy a owl:ObjectProperty ;
  rdfs:domain eidos:WindowForecast ;
  rdfs:range eidos:PolicyVersion ;
  rdfs:comment "The policy version that answered the forecast." .

eidos:candidateOfPolicy a owl:ObjectProperty ;
  rdfs:domain eidos:HarnessCandidate ;
  rdfs:range eidos:PolicyVersion ;
  rdfs:comment "The policy version a candidate proposes (artifact and artifact_sha256 on the candidate row)." .

eidos:candidateProducedBy a owl:ObjectProperty ;
  rdfs:domain eidos:HarnessCandidate ;
  rdfs:range eidos:ControlRun ;
  rdfs:subPropertyOf prov:wasGeneratedBy ;
  rdfs:comment "The Control run whose worker produced the candidate (run_id on the candidate row)." .

eidos:candidateParent a owl:ObjectProperty ;
  rdfs:domain eidos:HarnessCandidate ;
  rdfs:range eidos:HarnessCandidate ;
  rdfs:subPropertyOf prov:wasDerivedFrom ;
  rdfs:comment "The candidate this one was scored against (parent_id); absent for the first." .

eidos:calibratedOn a owl:ObjectProperty ;
  rdfs:domain eidos:Calibration ;
  rdfs:range eidos:Decision ;
  rdfs:comment "A decision a calibration draws on. A calibration spans many decisions — how an engine's markets forecast what followed — and one decision teaches nothing on its own." .

eidos:forecastOfDecision a owl:ObjectProperty ;
  rdfs:domain eidos:DecisionForecast ;
  rdfs:range eidos:Decision ;
  rdfs:comment "forecasts decision (one; asserted by private-ledger, immutable, as-of-known-time). The engine, chain and decision the issuance predicts." .

# ── forecast: datatype properties ─────────────────────────────────────

eidos:forecastInputCutoff a owl:DatatypeProperty ;
  rdfs:domain eidos:DecisionForecast ;
  rdfs:range xsd:string ;
  rdfs:comment "The latest input instant the issuance used. Bound to main.decision_forecasts.cutoff_at." .

eidos:forecastIssuedAt a owl:DatatypeProperty ;
  rdfs:domain eidos:DecisionForecast ;
  rdfs:range xsd:string ;
  rdfs:comment "The source's issuance timestamp; separate from the input cutoff. Bound to main.decision_forecasts.recorded_at." .

eidos:forecastMethodHash a owl:DatatypeProperty ;
  rdfs:domain eidos:DecisionForecast ;
  rdfs:range xsd:string ;
  rdfs:comment "The retained method content hash, unavailable for unidentified legacy methods. Bound to main.decision_forecasts.method_hash." .

# ── forecast: statements ──────────────────────────────────────────────


