{"schemaVersion":"validation-sprint-v1","editionDate":"2026-08-02","cadence":"Monthly","sprints":[{"schemaVersion":"validation-sprint-v1","sprintKey":"publication-integrity","editionDate":"2026-08-02","title":"Publication Integrity Validation Sprint","objective":"Reproduce the public publication-contract checks, separate ledger projection gaps from genuinely unavailable releases, and verify whether non-contract release evidence is connected.","status":"hold","scope":["The complete public data-status and data-trust projections for 32 registered products.","Field-level review of grid-source-registry, grid-edge-conditions, constraint-consequence-ledger, export-flexibility-dividend, rooftop-forecast-record and der-adoption-ledger.","Reachability and declared content type for the 19 exports named by those six product contracts.","Non-contract release verification receipts and consistency between public product outputs and the shared release ledger."],"checks":[{"checkKey":"publication-contract-field-reproduction","label":"Mandatory publication fields","status":"warning","method":"Applied the same presence rule used by the trust register: sourceLabel, currentVersion, coverage, cadence, dataConfidence, knownLimit and at least one of observationPeriodEnd, latestObservationDate or latestReleaseDate must be non-empty.","evidence":[{"label":"Live data-status register","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02"},{"label":"Live data-trust register","reference":"https://solaranalytica.com/data-trust/data.json","asOf":"2026-08-02"},{"label":"Trust completeness implementation","reference":"lib/data-trust.ts","asOf":"2026-08-02"}],"observedResult":"Across 32 products, 26 were contract-complete and the same six reported warnings were reproduced with zero false positives and zero false negatives. grid-source-registry and grid-edge-conditions lack observationDate; constraint-consequence-ledger, rooftop-forecast-record and der-adoption-ledger each lack currentVersion and observationDate; export-flexibility-dividend lacks currentVersion.","boundary":"This check assesses shared publication metadata only. A schemaVersion or methodVersion on a route is not treated as a released data edition, and metadata completeness does not prove source accuracy."},{"checkKey":"declared-export-reachability","label":"Declared public exports","status":"pass","method":"Issued read-only HTTP GET requests to every JSON, CSV, schema and health export declared for the six products and compared response content types with the declared format.","evidence":[{"label":"Product export declarations","reference":"content/data-product-contracts.json","asOf":"2026-08-02"},{"label":"Grid source registry export","reference":"https://solaranalytica.com/data/grid-sources/data.json","asOf":"2026-08-02"},{"label":"Export flexibility export","reference":"https://solaranalytica.com/export-flexibility-dividend/data.json","asOf":"2026-08-02"}],"observedResult":"All 19 declared exports returned HTTP 200; JSON and schema routes returned application/json and CSV routes returned text/csv.","boundary":"HTTP 200 proves route reachability only. Three JSON routes deliberately return status=unavailable, so this result is not evidence that their source datasets have been released."},{"checkKey":"non-contract-release-receipts","label":"Release verification evidence","status":"fail","method":"Counted public data-trust releaseReceipts after excluding the contract-completeness receipt across all 32 products, then isolated the six warning products.","evidence":[{"label":"Live data-trust release receipts","reference":"https://solaranalytica.com/data-trust/data.json","asOf":"2026-08-02"}],"observedResult":"Twenty-seven of 32 products expose no public non-contract release receipt. Four products have pass-only receipt sets, solar-capacity-pipeline has one warning receipt, and all six target products have zero receipts. Route-level source receipts, where present, have not been promoted into the shared trust register.","boundary":"Absence from the shared trust register does not prove that no internal validation occurred; it means the public release cannot currently recover an inspectable verification receipt from that register."},{"checkKey":"live-vintage-projection","label":"Live vintage projection","status":"warning","method":"Compared the edition and vintage fields in each product's public JSON with currentVersion and observation-date fields in data-status and data-trust.","evidence":[{"label":"Grid source registry","reference":"https://solaranalytica.com/data/grid-sources/data.json","asOf":"2026-08-02"},{"label":"Grid edge conditions","reference":"https://solaranalytica.com/grid-edge-conditions/data.json","asOf":"2026-08-02"},{"label":"Shared status projection","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02"}],"observedResult":"grid-source-registry publishes sourceVintage 2026-08-02T00:00:00.000Z but no shared observation date. grid-edge-conditions publishes editionVersion grid-edge-2026-07, periodEnd 2026-07-31 and releaseStatus published, while its shared record has no observation or release date.","boundary":"The route fields are inspectable evidence of a vintage or edition, but the audit does not choose which shared date column is semantically correct; that mapping must be explicit in the parent-owned release pipeline."},{"checkKey":"export-flexibility-publication-state","label":"Export model publication state","status":"pass","method":"Inspected the local v2 result contract, JSON Schema, CSV projection and interface copy, then ran the focused model and public-contract tests to verify that every calculated result carries the same mandatory publication boundary.","evidence":[{"label":"Local v2 result contract","reference":"lib/export-flexibility-dividend-core.mjs","asOf":"2026-08-02"},{"label":"Required JSON Schema boundary","reference":"app/export-flexibility-dividend/schema.json/route.ts","asOf":"2026-08-02"},{"label":"Publication boundary tests","reference":"tests/export-flexibility-dividend.test.mjs","asOf":"2026-08-02"}],"observedResult":"The local public schema is export-flexibility-dividend-public-v2. Every result requires publication.state=interactive_model_only, canonicalBenchmarkPublished=false, durableReleaseStatus=provisional, computationalVerification.status=passed with checkedOn=2026-08-02, and empiricalValidation.status=pending with no cohort edition and an explicit limitation. The former ambiguity between calculated output and canonical publication is resolved.","boundary":"This pass verifies truthful publication semantics and computational checks only. It does not fill the shared currentVersion field, create a public non-contract release receipt, publish a canonical benchmark or establish empirical accuracy and transferability."},{"checkKey":"unavailable-release-boundaries","label":"Unavailable products remain explicit","status":"pass","method":"Inspected status, reason, editionVersion, sourceUpdatedAt and sourceReceipts on the three source-dependent public JSON responses.","evidence":[{"label":"Constraint ledger response","reference":"https://solaranalytica.com/constraint-consequence-ledger/data.json","asOf":"2026-08-02"},{"label":"Rooftop forecast response","reference":"https://solaranalytica.com/rooftop-forecast-record/data.json","asOf":"2026-08-02"},{"label":"DER adoption response","reference":"https://solaranalytica.com/der-adoption-ledger/data.json","asOf":"2026-08-02"}],"observedResult":"constraint-consequence-ledger, rooftop-forecast-record and der-adoption-ledger each return status=unavailable, a specific source-integration reason and an empty sourceReceipts array; none substitutes example or zero-filled observations.","boundary":"The method and response contracts are publishable, but the three data products remain recovering and unresearched until receipt-pinned source editions are integrated."}],"findings":[{"findingKey":"export-publication-state-conflict","severity":"critical","status":"resolved","productKeys":["export-flexibility-dividend"],"summary":"The former ambiguity between interactive calculated outputs and an unpublished canonical benchmark is resolved by the mandatory v2 publication object.","evidence":"The local v2 contract requires state=interactive_model_only, canonicalBenchmarkPublished=false and durableReleaseStatus=provisional; computational verification passed on 2026-08-02 while empirical validation remains pending with no cohort edition. JSON Schema, CSV, page, workbench, methodology, machine-readable guidance and focused tests expose the same boundary.","action":"Preserve the publication object as a required cross-surface contract. Do not set canonicalBenchmarkPublished=true or empirical validation to passed until a durable canonical release and qualifying measured cohort carry their own receipts. Shared product-version and release-receipt remediation remains separate."},{"findingKey":"shared-release-receipt-gap","severity":"high","status":"open","productKeys":["grid-source-registry","grid-edge-conditions","constraint-consequence-ledger","export-flexibility-dividend","rooftop-forecast-record","der-adoption-ledger"],"summary":"None of the six products has a public non-contract release verification receipt in the shared trust register.","evidence":"Every target data-trust record had releaseReceipts.length=0 on 2026-08-02, including products whose route payloads carry source metadata.","action":"Write public data_verification_receipts only after the named check has run. Current products need source-total, schema or recalculation receipts with observed results; unavailable products must remain without pass receipts until real source editions exist."},{"findingKey":"grid-edition-vintage-not-projected","severity":"high","status":"open","productKeys":["grid-source-registry","grid-edge-conditions"],"summary":"Two current grid products expose inspectable route vintages that are absent from their shared publication records.","evidence":"The registry exposes sourceVintage 2026-08-02 and Grid Edge exposes published edition grid-edge-2026-07 ending 2026-07-31; both shared product records lack every accepted observation-date field.","action":"Project the registry source vintage and Grid Edge period end into explicitly chosen data_products date fields, create matching data_product_releases where an immutable edition exists, and attach verification receipts. Do not infer a release date from request generatedAt."},{"findingKey":"source-editions-not-integrated","severity":"medium","status":"accepted_limit","productKeys":["constraint-consequence-ledger","rooftop-forecast-record","der-adoption-ledger"],"summary":"The three source-dependent contracts are public, but their source data editions are intentionally unavailable.","evidence":"Each endpoint states status=unavailable with no source update and no source receipt, matching currentVersion=null, no observation date, recovering status and Unresearched confidence in the shared register.","action":"Keep the products held until receipt-pinned source editions pass reuse, schema and source-total checks. Do not promote schemaVersion, methodVersion, unpublished or source-not-integrated sentinels into currentVersion."},{"findingKey":"warning-classification-correct","severity":"low","status":"resolved","productKeys":["grid-source-registry","grid-edge-conditions","constraint-consequence-ledger","export-flexibility-dividend","rooftop-forecast-record","der-adoption-ledger"],"summary":"The six warning labels are not false positives under the current shared publication-contract rule.","evidence":"The executable audit reproduced every warning from field presence and detected zero warning-on-complete-record cases.","action":"Retain warning status until the missing shared fields are durably connected; improve the public observedResult later so it names exact fields instead of the generic one-or-more-fields message."}],"corrections":[{"correctionKey":"publication-integrity-executable-audit","status":"implemented","summary":"Added a pure audit that reports exact missing field groups, trust-status disagreement, release-receipt state and data-status/data-trust projection mismatches.","files":["lib/validation-sprints/publication-integrity.mjs","tests/validation-publication-integrity.test.mjs"]},{"correctionKey":"publication-integrity-fixed-edition","status":"verified","summary":"Recorded the 2026-08-02 field-level evidence, route checks, release gaps and explicit boundaries without promoting unavailable source editions.","files":["content/validation-sprints/publication-integrity.json"]},{"correctionKey":"publication-ledger-remediation","status":"deferred","summary":"Live data_products, data_product_releases and data_verification_receipts changes are parent-owned and must follow validation rather than this audit manufacturing release state.","files":["parent-owned Supabase migration","parent-owned release pipelines"]},{"correctionKey":"export-interactive-model-publication-boundary","status":"verified","summary":"Verified the parent-owned v2 boundary that distinguishes interactive calculations from a canonical durable release and keeps empirical validation pending.","files":["lib/export-flexibility-dividend-core.mjs","app/export-flexibility-dividend/schema.json/route.ts","app/export-flexibility-dividend/data.csv/route.ts","components/export-flexibility-dividend-workbench.tsx","docs/export-flexibility-dividend-product-contract.md"]}],"releaseDecision":{"state":"hold","reason":"The export model's publication semantics are now explicit and internally consistent, but Publication Integrity remains held until the two grid vintages are projected into the shared ledger and real non-contract release receipts are available. The three source-integration products correctly remain unavailable, and Export Flexibility still lacks a shared currentVersion and receipt."},"nextReview":{"cadence":"Monthly","dueOn":"2026-09-02","trigger":"Review earlier if the export model's canonical or empirical state changes, a target source edition is integrated, a target data_products row changes, or a public verification receipt is added."}},{"schemaVersion":"validation-sprint-v1","sprintKey":"decision-readiness","editionDate":"2026-08-02","title":"Decision Readiness Validation","objective":"Audit every current decision profile, preserve the required-versus-optional evidence rule, and separate source or operational blockers from registration and release-receipt gaps.","status":"passed_with_actions","scope":["Nine decision profiles returned by the live data-status endpoint","Thirty-four required and optional profile-input instances","Product version, confidence, operational status, freshness-basis dates and release receipts","Migration-declared dependencies for products used by decision profiles"],"checks":[{"checkKey":"all-current-profiles-reproduced","label":"All current profile states reproduced","status":"pass","method":"Ran the executable decision-readiness diagnostic over every profile, product and release receipt returned by the live data-status endpoint, retaining assessDecisionReadiness as the state authority.","evidence":[{"label":"Live data-status contract","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02T03:17:50.952Z"},{"label":"Executable diagnostic","reference":"lib/validation-sprints/decision-readiness.mjs","asOf":"2026-08-02"}],"observedResult":"All nine profiles were audited: one Ready, four Caution and four Hold, with no profile promoted by the validation layer.","boundary":"The fixed result describes the named endpoint snapshot. A later source-health transition can change readiness and requires a new dated run."},{"checkKey":"required-blocker-precedence","label":"Required blockers dominate readiness","status":"pass","method":"Executed fixture tests with a required recovering product and separately inspected every live required input marked Hold.","evidence":[{"label":"Decision readiness sprint tests","reference":"tests/validation-decision-readiness-sprint.test.mjs","asOf":"2026-08-02"},{"label":"Existing readiness method","reference":"lib/decision-readiness.mjs","asOf":"2026-08-02"}],"observedResult":"A required recovering input produces Hold. The four live Holds each resolve to a required operations blocker, not an optional-context or bookkeeping issue.","boundary":"The diagnostic explains the existing method result; it does not alter the profile registry or override product health."},{"checkKey":"optional-context-ceiling","label":"Optional degradation caps at Caution","status":"pass","method":"Executed fixture tests with all required inputs Ready and one optional recovering input, then compared the result with live Caution profiles.","evidence":[{"label":"Decision readiness sprint tests","reference":"tests/validation-decision-readiness-sprint.test.mjs","asOf":"2026-08-02"},{"label":"Live data-status contract","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02T03:17:50.952Z"}],"observedResult":"Optional degradation produced Caution, never Hold. Six optional-context blocker instances were classified with their operations or confidence root cause retained.","boundary":"An optional input can explain caution only while every required input remains usable under the existing readiness method."},{"checkKey":"release-receipt-resolution","label":"Current versions resolve to release receipts","status":"warning","method":"Matched each profile input's productKey and currentVersion against the release ledger, preserving missing and version-mismatch outcomes as metadata findings.","evidence":[{"label":"Live product and release ledger","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02T03:17:50.952Z"}],"observedResult":"Thirty of 34 profile-input instances matched an exact receipt. Product-Market Evidence, SWIS DER Adoption, Export Constraint Regime Register and Australia Grid Edge Conditions had a missing or mismatched direct receipt trace.","boundary":"A missing direct receipt is a registration gap unless separate evidence proves the underlying source absent or invalid; it is not automatically an evidence failure."},{"checkKey":"freshness-basis-date-completeness","label":"Freshness dates follow the product basis","status":"warning","method":"Evaluated one accepted date alternative per product freshnessBasis: sourceCheckedAt or latestRetrievedAt for source_check, sourceReleaseDate or latestReleaseDate for source_release, observationPeriodEnd or latestObservationDate for observation_period, and lastMaterialReleaseAt, latestReleaseDate or latestRetrievedAt for editorial_review.","evidence":[{"label":"Live product status ledger","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02T03:17:50.952Z"},{"label":"Freshness basis product contract","reference":"supabase/migrations/20260722150000_add_data_truth_release_factory.sql","asOf":"2026-08-02"},{"label":"Basis-aware regression tests","reference":"tests/validation-decision-readiness-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Thirty-three of 34 profile-input instances satisfy their registered date basis. Australia Grid Edge Conditions is the only unresolved instance because its source_check basis has neither sourceCheckedAt nor latestRetrievedAt.","boundary":"Dates belonging to another freshness basis are non-applicable and are neither required nor reported missing. An unknown basis remains not tested rather than borrowing alternatives."},{"checkKey":"dependency-trace","label":"Declared product dependencies traced","status":"warning","method":"Joined the eight migration-declared dependency edges relevant to current profile products to the live product status snapshot and inspected required dependency state.","evidence":[{"label":"Data product dependency migration","reference":"supabase/migrations/20260722150000_add_data_truth_release_factory.sql","asOf":"2026-08-02"},{"label":"Temporal value dependency migration","reference":"supabase/migrations/20260727213000_add_temporal_value_ledger.sql","asOf":"2026-08-02"},{"label":"Live product status","reference":"https://solaranalytica.com/data-status/data.json","asOf":"2026-08-02T03:17:50.952Z"}],"observedResult":"All supplied required dependency rows resolved to registered products in the snapshot, but the public data-status contract does not expose the raw dependency rows used by the server-side health fold.","boundary":"Dependency completeness was checked against repository-declared rows, not a read of the owner-only production dependency table."},{"checkKey":"bookkeeping-evidence-separation","label":"Bookkeeping is not treated as evidence loss","status":"pass","method":"Executed fixtures separating an absent release receipt from evidence loss and proving that only the alternatives declared by freshnessBasis participate in date completeness.","evidence":[{"label":"Decision readiness sprint tests","reference":"tests/validation-decision-readiness-sprint.test.mjs","asOf":"2026-08-02"},{"label":"Executable diagnostic","reference":"lib/validation-sprints/decision-readiness.mjs","asOf":"2026-08-02"}],"observedResult":"The rerun reports five bookkeeping findings: four unresolved direct receipt traces and one basis-aware source-check date gap. Six universal-field false positives were removed without changing readiness.","boundary":"This separation does not excuse missing receipts. It prevents an unknown registration state from being overstated as proof that the source evidence failed."}],"findings":[{"findingKey":"revenue-shape-required-recovery","severity":"high","status":"open","productKeys":["revenue-shape-monitor"],"summary":"Revenue Shape Monitor is recovering and creates required operations Holds for Storage market structure and NEM market structure.","evidence":"The live product is High confidence and versioned with a matching receipt, so this is an operations blocker rather than a missing-registration blocker.","action":"Restore a successful source-health and derived-view run, issue the resulting release receipt, and rerun readiness before either profile can leave Hold."},{"findingKey":"solar-pipeline-recovery","severity":"high","status":"open","productKeys":["solar-capacity-pipeline"],"summary":"Solar Capacity Pipeline is recovering, holding two profiles and capping three further profiles at Caution where it is optional context.","evidence":"The current product is High confidence and versioned, with a matching release receipt; its recovering operational status is the root issue in the snapshot.","action":"Resolve the Global Energy Monitor pipeline health state and verify a new successful receipt before rerunning all five affected profiles."},{"findingKey":"direct-receipt-registration-gaps","severity":"medium","status":"open","productKeys":["product-market-evidence","swis-der","export-constraint-regimes","grid-edge-conditions"],"summary":"Four profile-input instances do not resolve productKey plus currentVersion to an exact direct release receipt.","evidence":"Product-Market Evidence, Export Constraint Regime Register and Australia Grid Edge Conditions have no direct matching receipt; SWIS DER Adoption has hashed receipt versions that do not equal its registered currentVersion.","action":"Register a direct canonical receipt or align currentVersion to the exact immutable receipt version without changing the underlying evidence state."},{"findingKey":"freshness-basis-date-gap","severity":"medium","status":"open","productKeys":["grid-edge-conditions"],"summary":"Australia Grid Edge Conditions does not resolve either accepted timestamp for its source_check freshness basis.","evidence":"The live product has neither sourceCheckedAt nor latestRetrievedAt. Grid Mix and Export Constraint Regime Register satisfy their own source_release and source_check bases respectively and are no longer findings.","action":"Register sourceCheckedAt or latestRetrievedAt from an inspectable source-check receipt; do not backfill non-applicable release, observation or editorial dates."},{"findingKey":"aggregate-grid-operations-version","severity":"medium","status":"open","productKeys":["grid-operations"],"summary":"The shared Grid Operations product exposes one aggregate currentVersion even when a decision profile targets NEM, SWIS, GB, US or EU evidence.","evidence":"The snapshot registers operations-eu-2026-07-31 as currentVersion while separate same-cycle NEM, SWIS, GB and US receipts also exist.","action":"Resolve the selected market to its matching regional receipt in future readiness exports while retaining the aggregate product registration."},{"findingKey":"dependency-ledger-not-publicly-traceable","severity":"low","status":"open","productKeys":[],"summary":"The public readiness payload includes dependency-adjusted operational status but not the dependency edges that produced it.","evidence":"Repository migrations declare product dependencies, while the live data-status JSON returns products, releases and profiles only.","action":"Expose a sanitized dependency trace or include dependency cause codes in the future validation endpoint."}],"corrections":[{"correctionKey":"decision-readiness-diagnostic","status":"implemented","summary":"Added a pure executable diagnostic that wraps the existing readiness result, classifies blocker causes and evaluates date completeness against the product's registered freshness basis.","files":["lib/validation-sprints/decision-readiness.mjs"]},{"correctionKey":"basis-aware-date-alternatives","status":"implemented","summary":"Replaced the universal six-field date requirement with explicit alternatives for source checks, source releases, observation periods and editorial reviews.","files":["lib/validation-sprints/decision-readiness.mjs","content/validation-sprints/decision-readiness.json","tests/validation-decision-readiness-sprint.test.mjs"]},{"correctionKey":"fixed-decision-readiness-audit","status":"verified","summary":"Recorded the dated nine-profile audit with release-receipt coverage, evidence boundaries and remediation for every Hold and Caution profile.","files":["content/validation-sprints/decision-readiness.json"]},{"correctionKey":"decision-readiness-regression-tests","status":"implemented","summary":"Added regression coverage for blocker precedence, optional-context capping, bookkeeping separation, all four freshness bases and fixed artifact completeness.","files":["tests/validation-decision-readiness-sprint.test.mjs"]}],"releaseDecision":{"state":"release_with_caution","reason":"The validation artifact and diagnostic are releasable because they reproduce all current states without upgrading any profile. Open operational Holds and receipt-trace warnings remain visible and must be reviewed on the next run."},"nextReview":{"cadence":"Monthly","dueOn":"2026-09-02","trigger":"Run earlier if Revenue Shape Monitor or Solar Capacity Pipeline leaves recovery, a currentVersion changes, a profile input changes, or a new product release receipt is registered."}},{"schemaVersion":"validation-sprint-v1","sprintKey":"grid-reconciliation","editionDate":"2026-08-02","title":"Grid Reconciliation Validation Sprint","objective":"Prove deterministic daily-aggregate comparison behaviour across the five current grid source families while preserving measurement and serving boundaries.","status":"hold","scope":["AEMO NEM legacy daily operations against canonical shadow observations","AEMO WEM and SWIS legacy operations against canonical shadow observations","EIA-930 legacy daily operations against canonical shadow observations","ENTSO-E legacy daily operations against canonical shadow observations","Elexon legacy daily operations against canonical shadow observations","Synthetic validation only; no production reconciliation rows or serving modes changed"],"checks":[{"checkKey":"five-source-family-contracts","label":"Five source-family measurement contracts","status":"pass","method":"Inspected the five canonical ingest adapters and recorded each legacy dataset, canonical dataset, timezone basis, interval basis and source unit basis in a provider-neutral source-family register.","evidence":[{"label":"Source-family register","reference":"lib/validation-sprints/grid-reconciliation.mjs","asOf":"2026-08-02"},{"label":"Canonical ingest adapters","reference":"lib/nem-ingest.ts; lib/swis-ingest.ts; lib/eia-ingest.ts; lib/entsoe-ingest.ts; lib/gb-ingest.ts","asOf":"2026-08-02"}],"observedResult":"All five current source families have an explicit source-specific time, interval and unit basis; no cross-provider averaging or implicit unit conversion is introduced.","boundary":"The register describes the repository implementation and does not independently certify publisher completeness or licensing terms."},{"checkKey":"deterministic-fixture-comparator","label":"Deterministic fixture comparator","status":"pass","method":"Executed the fixture suite with node:test and compared repeated receipts for exact deep equality across pass, warning, numeric failure, timezone mismatch and missing-versus-zero cases.","evidence":[{"label":"Comparator implementation","reference":"pipelines/grid-reconciliation/reconcile.mjs","asOf":"2026-08-02"},{"label":"Fixture tests","reference":"tests/validation-grid-reconciliation-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Five synthetic source-family fixtures produced the declared statuses and classifications deterministically: one pass, one warning and three failures.","boundary":"Synthetic fixtures validate code paths only and contribute zero days to the production comparison gate."},{"checkKey":"basis-missingness-and-coverage-guards","label":"Measurement-basis, missingness and coverage guards","status":"pass","method":"Exercised explicit compatibility checks for identity, source unit, timezone, UTC day window, interval duration, expected interval count, minimum coverage and value state before numeric tolerance evaluation.","evidence":[{"label":"Synthetic edge-case fixtures","reference":"pipelines/grid-reconciliation/fixtures","asOf":"2026-08-02"},{"label":"Validation coverage","reference":"tests/validation-grid-reconciliation-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Timezone and interval incompatibilities fail before value comparison, incomplete coverage remains unavailable, and a missing aggregate is not treated as a measured zero.","boundary":"Per-metric tolerances must be supplied explicitly; fixture tolerances are test inputs and are not production calibration values."},{"checkKey":"serving-mode-boundary","label":"Serving-mode boundary","status":"pass","method":"Asserted that every fixture begins with legacy-primary and canonical-shadow roles, leaves legacy-primary unchanged and disables automatic promotion regardless of fixture outcome.","evidence":[{"label":"Shadow-record implementation","reference":"pipelines/grid-reconciliation/reconcile.mjs","asOf":"2026-08-02"},{"label":"Serving-boundary tests","reference":"tests/validation-grid-reconciliation-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Fixture receipts are excluded from rollout counts; even a passed comparison cannot alter serving mode, and a completed 30-day production gate would still require manual review.","boundary":"The validation harness does not write rollout state, production receipts or database rows."},{"checkKey":"production-thirty-day-shadow-record","label":"Production 30-day shadow record","status":"not_tested","method":"Queried the public grid-source health endpoint read-only and inspected reconciliation and rollout fields for all five source families.","evidence":[{"label":"Public grid source health receipt","reference":"https://solaranalytica.com/data/grid-sources/health.json","asOf":"2026-08-02T03:08:58.709Z"}],"observedResult":"The endpoint reports five current sources, zero compared metrics, zero compared days, zero passing days, zero promoted sources and legacy-primary serving for every source.","boundary":"No production comparison history exists, so the 30-day reconciliation gate cannot be evaluated or claimed."}],"findings":[{"findingKey":"production-shadow-history-empty","severity":"high","status":"open","productKeys":["grid-source-registry"],"summary":"All five grid source families remain at zero of thirty required passing production comparison days.","evidence":"The public health receipt generated at 2026-08-02T03:08:58.709Z reports comparedMetrics 0 and comparedDays 0 for AEMO NEM, AEMO WEM, EIA-930, ENTSO-E and Elexon.","action":"Wire the validated comparison contract into an observed production shadow run, retain daily receipts and review failures without changing legacy-primary serving."},{"findingKey":"comparison-semantics-explicit","severity":"medium","status":"resolved","productKeys":["grid-source-registry"],"summary":"The sprint comparator now prevents value-only reconciliation across incompatible units, timezones, day windows, intervals, coverage states and missingness states.","evidence":"The deterministic fixture suite returns dedicated timezone_mismatch, missing_vs_zero, coverage_below_minimum, interval_mismatch and unit_mismatch classifications before tolerance evaluation.","action":"Keep these fields mandatory when the comparator is integrated with production reconciliation rows."},{"findingKey":"cross-provider-comparison-out-of-scope","severity":"medium","status":"accepted_limit","productKeys":["grid-source-registry"],"summary":"The five providers publish different products and temporal bases, so this sprint reconciles each canonical shadow against its own legacy product rather than comparing provider values as interchangeable market facts.","evidence":"The source-family register preserves five-minute NEM and WEM operations, daily EIA observations, source-dependent ENTSO-E intervals and half-hourly Elexon settlement periods.","action":"Introduce any future cross-provider comparison only with a separately versioned common measurement contract."}],"corrections":[{"correctionKey":"provider-neutral-daily-comparator","status":"implemented","summary":"Added a pure comparator with explicit tolerance, coverage, missingness, measurement-basis and serving-mode receipts.","files":["pipelines/grid-reconciliation/reconcile.mjs"]},{"correctionKey":"five-family-fixture-suite","status":"verified","summary":"Added realistic synthetic cases covering all five current source families and the required pass, warning, failure, timezone and missing-versus-zero behaviours.","files":["pipelines/grid-reconciliation/fixtures","tests/validation-grid-reconciliation-sprint.test.mjs"]},{"correctionKey":"production-shadow-run","status":"deferred","summary":"Production reconciliation writes and the real 30-day shadow record remain deferred; no existing grid source code or serving state was changed in this sprint.","files":["lib/grid-source-reconciliation.ts"]}],"releaseDecision":{"state":"hold","reason":"The comparator and fixture suite are code-validated, but canonical grid feeds must remain shadowed until real production receipts establish thirty complete passing dates and a manual promotion review is completed."},"nextReview":{"cadence":"Monthly","dueOn":"2026-09-02","trigger":"Review sooner if production reconciliation begins, a source changes timezone or interval semantics, or any canonical source is proposed for serving promotion."}},{"schemaVersion":"validation-sprint-v1","sprintKey":"model-validation","editionDate":"2026-08-02","title":"Model Validation Sprint","objective":"Verify the local deterministic, interval-energy and discounted-cashflow behaviour of Value Under Constraint and Export Flexibility Dividend while retaining the schema-v2 interactive-only publication boundary and keeping synthetic checks separate from measured external validation.","status":"passed_with_actions","scope":["Value Under Constraint method temporal-value-wa-v1","Export Flexibility Dividend public schema export-flexibility-dividend-public-v2 and calculation method export-flexibility-dividend-wa-v1","Perth NASA POWER solar-shape edition 2021-2025","WA tariff and fixed export-envelope application","Observed-cohort publication boundary"],"checks":[{"checkKey":"local-contract-reproduction","label":"Local calculation contracts reproduce","status":"pass","method":"Executed both repository calculation cores with fixed local inputs, method versions and source editions after the schema-v2 contract correction.","evidence":[{"label":"Value Under Constraint calculation core","reference":"lib/temporal-value-core.mjs","asOf":"2026-08-02"},{"label":"Export Flexibility Dividend schema-v2 calculation core","reference":"lib/export-flexibility-dividend-core.mjs","asOf":"2026-08-02"}],"observedResult":"The local Value Under Constraint default returned temporal-value-wa-v1, 11,822.58 kWh annual generation and AUD 962.09726143799 annual value. The corrected local Export Flexibility Dividend returned public schema v2, calculation method export-flexibility-dividend-wa-v1, three interactive scenarios and AUD 127.03/year modelled flexibility headroom.","boundary":"Deployment status was not assessed after the schema-v2 correction. These are local computational reproductions, not a canonical benchmark or empirical site-performance test."},{"checkKey":"publication-boundary-retained","label":"Schema-v2 publication boundary is fail-closed","status":"pass","method":"Validated the required publication object on the local result and mutation-tested six unsupported promotions: schema v1, canonical state, canonical benchmark published, durable release published, changed computational check date and empirical validation passed.","evidence":[{"label":"Schema-v2 publication invariant","reference":"lib/validation-sprints/model-validation.mjs","asOf":"2026-08-02"},{"label":"Publication-boundary mutation tests","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Local contract export-flexibility-dividend-public-v2 retained state=interactive_model_only, canonicalBenchmarkPublished=false, durableReleaseStatus=provisional, computational verification passed on 2026-08-02 and empirical validation pending; all six unsupported promotions failed validation.","boundary":"A passing computational model does not publish a canonical benchmark, complete a durable release or establish empirical accuracy."},{"checkKey":"deterministic-reproduction","label":"Deterministic inputs reproduce deterministic results","status":"pass","method":"Ran each fixed-input calculation twice, canonicalized object keys, excluded only the declared volatile generatedAt timestamp and compared SHA-256 hashes and deep results.","evidence":[{"label":"Reusable deterministic hash check","reference":"lib/validation-sprints/model-validation.mjs","asOf":"2026-08-02"},{"label":"Model validation tests","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"The Value Under Constraint default reproduced stable SHA-256 1a6c085fcea51327d42ed2d6037eaacd967fc33057f54035d20d42eea8b51ff6; repeated Export Flexibility Dividend calculations with a fixed source receipt and generatedAt value were identical.","boundary":"The result is deterministic only while inputs, calculation methods, public schema and source editions remain fixed; generatedAt is presentation metadata and is excluded from the canonical hash."},{"checkKey":"generation-energy-accounting","label":"Generation is fully accounted for","status":"pass","method":"Recomputed every hourly and annual balance as generation minus direct self-consumption, storage charging, export and curtailment. For no-storage cases, also enforced generation = self-consumption + export + curtailment.","evidence":[{"label":"Invariant implementation","reference":"lib/validation-sprints/model-validation.mjs","asOf":"2026-08-02"},{"label":"Golden and matrix execution","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"Three retained lifetime golden cases and 90 year-model combinations passed. The local no-storage default had annual balance residual 5.820766091346741e-11 kWh and maximum hourly residual 0 kWh against a 0.000001 kWh tolerance.","boundary":"When storage is present, charging is a separate generation destination; collapsing it into direct self-consumption would misstate the engine's published fields."},{"checkKey":"export-cap-compliance","label":"Fixed export envelopes bind at every interval","status":"pass","method":"Exercised zero, 1.5 kW, 3 kW, 5 kW and unconstrained envelopes across three tariffs, three load shapes and zero or 10 kWh storage, checking every hourly export value against the selected fixed cap.","evidence":[{"label":"Export-cap matrix test","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"},{"label":"Published export-envelope register","reference":"lib/temporal-value-core.mjs","asOf":"2026-08-02"}],"observedResult":"All 90 deterministic year cases passed; maximum hourly export above a declared fixed cap was 0 kWh. The unconstrained case was treated as a counterfactual with no cap-compliance claim.","boundary":"A modelled fixed cap is not a connection approval and does not represent a connection-specific dynamic operating envelope."},{"checkKey":"pv-load-tariff-alignment","label":"PV shape, load shape and tariff periods remain aligned","status":"pass","method":"Verified 8,760 calendar-hour rows per case, reconciled hourly generation and load sums to annual declarations, resolved each import and export rate from its tariff period, and rebuilt avoided-import, storage and export value from interval flows.","evidence":[{"label":"Perth solar-shape receipt","reference":"content/data/perth-solar-shape-2021-2025.json","asOf":"2026-08-02"},{"label":"Alignment and tariff invariant tests","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"}],"observedResult":"The default 8,760 rows summed to 11,822.580000000113 kWh generation and 5,999.999999999818 kWh load; all interval tariff rates matched and rebuilt AUD 962.09726143799 annual value.","boundary":"The NASA POWER profile supplies a representative Perth solar shape and the load profiles are synthetic normalized shapes; neither is a measured customer interval trace."},{"checkKey":"discounted-cashflow-accounting","label":"Lifetime values and discounting reconcile","status":"pass","method":"Recomputed each annual discounted cashflow, cumulative discounted balance, total capital, present value, net present value and first non-negative payback year from the declared settings.","evidence":[{"label":"Lifetime invariant implementation","reference":"lib/validation-sprints/model-validation.mjs","asOf":"2026-08-02"},{"label":"Retained golden cases","reference":"tests/fixtures/temporal-value-golden.json","asOf":"2026-08-02"}],"observedResult":"All three 25-year golden cases passed at 0.000001 tolerance. The local default recomputed to AUD 13,439.655099719674 present value, AUD 5,439.655099719674 net present value and discounted payback in year 12.","boundary":"The arithmetic follows the declared model convention: year-one cashflow is discounted once, while tariff escalation, operating cost, finance, tax and storage replacement capital are not modelled."},{"checkKey":"scenario-monotonicity","label":"Export flexibility scenarios preserve expected ordering","status":"pass","method":"Ran three deterministic household and storage cases on one comparison-basis key and checked that broader export access could not reduce export or annual value, increase curtailment, or create negative comparison deltas.","evidence":[{"label":"Scenario invariant tests","reference":"tests/validation-model-sprint.test.mjs","asOf":"2026-08-02"},{"label":"Dividend comparison engine","reference":"lib/export-flexibility-dividend-core.mjs","asOf":"2026-08-02"}],"observedResult":"All three comparison cases ordered fallback <= published ceiling <= unconstrained for annual value and export, and fallback >= published ceiling >= unconstrained for curtailment. A fourth high-capital case confirmed negative net present value remains valid while negative physical flow fails; local interactive comparison arithmetic reconciled within the 0.02 rounded-output tolerance.","boundary":"Monotonicity is a computational property of otherwise identical fixed-envelope scenarios; it does not quantify how often a dynamic envelope will make additional export available."},{"checkKey":"observed-cohort-validation","label":"Measured cohort validation","status":"not_tested","method":"Inspected the observed-cohort eligibility and publication contracts, but no qualifying measured cohort receipt or public cohort output was available inside this sprint scope for comparison with representative model results.","evidence":[{"label":"Observed cohort eligibility contract","reference":"lib/export-flexibility-cohorts.ts","asOf":"2026-08-02"},{"label":"Observed cohort schema migration","reference":"supabase/migrations/20260801201500_add_export_flexibility_observed_cohorts.sql","asOf":"2026-08-02"}],"observedResult":"No empirical pass is recorded. Computational verification is complete for the tested editions; measured-to-representative error remains blank until an eligible cohort is inspected.","boundary":"Golden cases, NASA-derived representative shapes and deterministic invariants are not measured external validation."}],"findings":[{"findingKey":"computational-contract-verified","severity":"low","status":"resolved","productKeys":["temporal-value","export-flexibility-dividend"],"summary":"The tested interval, tariff, export-cap, lifetime and scenario arithmetic reproduces deterministically under local schema v2 and the current calculation editions.","evidence":"The sprint test exercises three retained golden cases, 90 cross-product year cases, three Export Flexibility Dividend ordering cases and a signed-net-present-value boundary case through reusable invariants.","action":"Keep the invariant suite mandatory whenever either model method, tariff edition, export-envelope edition or Perth solar-shape edition changes."},{"findingKey":"interactive-model-publication-boundary","severity":"high","status":"accepted_limit","productKeys":["export-flexibility-dividend"],"summary":"The schema-v2 result is an interactive model only; no canonical benchmark is published and the durable release remains provisional.","evidence":"The required publication object carries interactive_model_only, canonicalBenchmarkPublished=false, durableReleaseStatus=provisional, computational verification passed and empirical validation pending.","action":"Keep every JSON, CSV and visual interpretation subordinate to this publication object until a separately gated canonical benchmark and qualifying empirical cohort exist."},{"findingKey":"observed-cohort-evidence-pending","severity":"high","status":"open","productKeys":["temporal-value","export-flexibility-dividend"],"summary":"No qualifying observed cohort was inspected, so measured error, bias and transferability remain unverified.","evidence":"The repository contains eligibility, consent and minimum-contributor contracts, but this sprint has no inspectable published cohort receipt or measured comparison result.","action":"Publish a cohort comparison only after the existing eligibility gate is met, then report sample band, coverage, flow basis, tariff and envelope editions, median variance and exclusions."},{"findingKey":"representative-profile-boundary","severity":"medium","status":"accepted_limit","productKeys":["temporal-value","export-flexibility-dividend"],"summary":"The current PV and load alignment is computationally verified but representative rather than site-measured.","evidence":"The solar shape is a NASA POWER Perth month-hour profile scaled to a specific-yield baseline; household load shapes are normalized model assumptions.","action":"Retain the representative and counterfactual labels on every surface and do not infer site approval, roof geometry or customer-specific performance."},{"findingKey":"discounting-scope-boundary","severity":"medium","status":"accepted_limit","productKeys":["temporal-value","export-flexibility-dividend"],"summary":"Discounted values reconcile to the implemented convention, which omits several real project cashflow categories.","evidence":"The current engine includes installed and selected storage capital, degradation and discounting, but omits tariff escalation, operating cost, finance, tax and battery replacement.","action":"Keep these omissions visible and version the method before adding any omitted cashflow category."}],"corrections":[{"correctionKey":"reusable-model-invariant-harness","status":"implemented","summary":"Added reusable interval, lifetime, scenario, deterministic-hash and schema-v2 publication-boundary validation functions without changing production model calculations.","files":["lib/validation-sprints/model-validation.mjs"]},{"correctionKey":"model-validation-receipt","status":"verified","summary":"Added fixture-backed tests and a contract-valid sprint artifact that preserve the computational-versus-empirical boundary.","files":["tests/validation-model-sprint.test.mjs","content/validation-sprints/model-validation.json"]},{"correctionKey":"measured-cohort-comparison","status":"deferred","summary":"Measured error and transferability remain deferred until an eligible observed cohort can be inspected.","files":[]}],"releaseDecision":{"state":"release_with_caution","reason":"The local schema-v2 interactive model passes computational verification, but canonicalBenchmarkPublished remains false, the durable release remains provisional and empirical validation remains pending."},"nextReview":{"cadence":"Monthly","dueOn":"2026-09-02","trigger":"Review earlier if a tariff, export-envelope, solar-shape or model method edition changes, a qualifying observed cohort becomes publishable, or any invariant test fails."}},{"schemaVersion":"validation-sprint-v1","sprintKey":"cross-surface-coherence","editionDate":"2026-08-02","title":"Cross-Surface Coherence Validation","objective":"Trace selected public metrics from source or durable contract through page, chart or table, JSON, CSV and methodology without changing geography, unit, basis, vintage, confidence, missingness or publication-state meaning.","status":"passed","scope":["Grid Edge Conditions July 2026 NSW price-spread trace","Export Flexibility Dividend Western Power fallback and default model-output traces","Two-Way Network Performance headline and Ausgrid missing-duration traces","Exact and rounded numeric presentation","Null-versus-zero and provenance-field preservation"],"checks":[{"checkKey":"reusable-coherence-checker","label":"Seven-dimension manifest checker","status":"pass","method":"Executed fixture-based checks for exact matching, unit mismatch, null-versus-zero, and declared display rounding through checkMetricCoherence and checkCoherenceManifest.","evidence":[{"label":"Checker implementation","reference":"lib/validation-sprints/cross-surface-coherence.mjs","asOf":"2026-08-02"},{"label":"Fixture tests","reference":"tests/validation-cross-surface-coherence.test.mjs","asOf":"2026-08-02"}],"observedResult":"Matching fixtures passed; changed units failed; null and zero produced both value and missingness mismatches; a 28.36662032232715 raw value matched an explicitly declared 28.4 one-decimal display.","boundary":"The checker compares declared normalized meanings. It does not infer semantic equivalence between undocumented prose variants."},{"checkKey":"grid-edge-price-spread-trace","label":"Grid Edge Conditions price-spread trace","status":"pass","method":"Compared the July 2026 NSW1 price-spread value and provenance across the grid kernel mapping, production JSON, production CSV, page table formatting and reading rules.","evidence":[{"label":"Production JSON metric","reference":"https://solaranalytica.com/grid-edge-conditions/data.json#NSW1-price-spread","asOf":"2026-08-02"},{"label":"Production CSV metric","reference":"https://solaranalytica.com/grid-edge-conditions/data.csv#NSW1-price-spread","asOf":"2026-08-02"},{"label":"Human table","reference":"app/grid-edge-conditions/page.tsx#MetricTable","asOf":"2026-08-02"}],"observedResult":"The raw 154.347 AUD/MWh value, NSW1/NEM geography, five-minute daily max-minus-min basis, AEMO-NEM-2026-07-31 vintage, Medium confidence and reported state matched; the visible 154 AUD/MWh value passed the declared zero-decimal display rule.","boundary":"This is one retained metric in one fixed monthly edition, not a claim that every Grid Edge row has been traced."},{"checkKey":"export-flexibility-source-limit-trace","label":"Export Flexibility source-limit trace","status":"pass","method":"Compared the Western Power 1.5 kW site fallback across the source register, public page and source receipt, JSON, CSV and public methodology.","evidence":[{"label":"Source register row","reference":"content/export-constraint-regimes.ts#au-wa-western-power-basic-eg-large-network-single-phase","asOf":"2026-08-02"},{"label":"Production model JSON","reference":"https://solaranalytica.com/export-flexibility-dividend/data.json#scenarios[fallback]","asOf":"2026-08-02"},{"label":"Public methodology","reference":"content/pages/methodology.ts#export-flexibility-dividend","asOf":"2026-08-02"}],"observedResult":"All five occurrences retained 1.5 kW as a site limit for Western Power single-phase basic EG on the large network without retailer off-take, with export-constraint-register-2026-08-01 and High source confidence where provenance is represented.","boundary":"The 5 kW ceiling remains a technical comparison bound, not a connection offer or interval-availability guarantee."},{"checkKey":"export-flexibility-canonical-output-trace","label":"Export Flexibility canonical-output trace","status":"pass","method":"Compared the local schema-v2 interactive result and its publication object across the model core, JSON contract, CSV contract, JSON Schema, page and workbench copy, durable provisional release record and product contract.","evidence":[{"label":"Schema-v2 model publication state","reference":"lib/export-flexibility-dividend-core.mjs#EXPORT_FLEXIBILITY_PUBLICATION_STATE","asOf":"2026-08-02"},{"label":"CSV publication fields","reference":"app/export-flexibility-dividend/data.csv/route.ts#publication-fields","asOf":"2026-08-02"},{"label":"Closed JSON publication schema","reference":"app/export-flexibility-dividend/schema.json/route.ts#$defs.publication","asOf":"2026-08-02"},{"label":"Visible publication boundary","reference":"components/export-flexibility-dividend-workbench.tsx#SourceReceipt","asOf":"2026-08-02"}],"observedResult":"All traced local surfaces now identify the 127.03 AUD default result as interactive_model_only, canonicalBenchmarkPublished false and durableReleaseStatus provisional. Computational verification is passed on 2026-08-02 while empirical validation is pending with no cohort edition. The rounded 127 AUD card remains a reported interactive result, not a canonical benchmark.","boundary":"This pass verifies publication-state coherence and computational labeling. It does not publish a canonical benchmark or supply the pending measured cohort."},{"checkKey":"two-way-network-value-and-missingness-trace","label":"Two-Way Network Performance value and missingness trace","status":"pass","method":"Rebuilt the fixed AER record, compared the all-DNSPs customer-share value across source-derived record, JSON, CSV, page and product method, and traced Ausgrid's unavailable duration through null, empty CSV and Not reported presentation.","evidence":[{"label":"Fixed record builder","reference":"lib/two-way-network-performance-core.mjs","asOf":"2026-08-02"},{"label":"Production JSON","reference":"https://solaranalytica.com/two-way-network-performance/data.json","asOf":"2026-08-02"},{"label":"Product methodology","reference":"docs/two-way-network-performance-product-contract.md","asOf":"2026-08-02"}],"observedResult":"The 28.36662032232715% headline matched raw exports and the documented method, and the page's 28.4% display matched its one-decimal rule. Ausgrid remained null/not-reported in JSON, blank/not-reported in CSV and Not reported on the page; no zero was imputed.","boundary":"The source-defined full-access headline remains an unweighted mean across positive reported values and is not customer weighted."},{"checkKey":"public-provenance-completeness","label":"Public confidence and methodology completeness","status":"pass","method":"Compared explicit output and source-fidelity confidence levels, their limitations, public methodology anchors and direct page links across the current local contracts.","evidence":[{"label":"Two-way public record contract","reference":"lib/two-way-network-performance-core.mjs","asOf":"2026-08-02"},{"label":"Export Flexibility source receipt","reference":"components/export-flexibility-dividend-workbench.tsx#SourceReceipt","asOf":"2026-08-02"},{"label":"Public methodology content","reference":"content/pages/methodology.ts","asOf":"2026-08-02"}],"observedResult":"Export Flexibility now declares Medium output confidence with High regime and Medium solar confidence retained separately and a written transferability basis. Two-Way Network Performance v2 declares High source-fidelity confidence while explicitly excluding completeness of network reporting. Grid Edge and Two-Way Network Performance both have dedicated public methodology anchors and direct page links.","boundary":"These confidence labels describe the named evidence boundary. They do not convert computational checks into empirical validation or complete missing source reporting."}],"findings":[{"findingKey":"export-flexibility-public-output-release-state-conflict","severity":"high","status":"resolved","productKeys":["export-flexibility-dividend"],"summary":"Schema v2 now separates the reported interactive model result from the unpublished canonical benchmark and provisional durable release.","evidence":"The core publication object, CSV, page/workbench, closed JSON Schema and product contract consistently declare interactive_model_only, canonicalBenchmarkPublished false, durableReleaseStatus provisional, computational verification passed and empirical validation pending.","action":"Preserve the required publication object and regression coverage on every future schema or edition. Publishing a canonical benchmark still requires a calculated, validated, content-hashed durable case and must not be inferred from interactive output."},{"findingKey":"model-confidence-does-not-collapse-to-source-confidence","severity":"medium","status":"resolved","productKeys":["export-flexibility-dividend"],"summary":"Export Flexibility now distinguishes Medium model-output confidence from High regime confidence and Medium solar-shape confidence.","evidence":"The v2 publication object requires outputDataConfidence and confidenceBasis; CSV and schema preserve both, while the visible receipt separately labels regime, solar and output confidence.","action":"Preserve the separate dependency and output confidence fields on future editions, and keep empirical validation pending until a qualifying measured cohort is published."},{"findingKey":"two-way-confidence-field-absent","severity":"medium","status":"resolved","productKeys":["two-way-network-performance"],"summary":"Two-Way Network Performance v2 now carries High source-fidelity confidence with an explicit incomplete-reporting limitation.","evidence":"The fixed edition input, record, validator, page, JSON, CSV, schema, product contract and public methodology all carry the High source-fidelity confidence boundary.","action":"Keep the confidence basis attached to future AER editions and fail publication if the source receipt, arithmetic reconciliation or incomplete-reporting limitation is absent."},{"findingKey":"public-methodology-anchors-incomplete","severity":"low","status":"resolved","productKeys":["grid-edge-conditions","two-way-network-performance"],"summary":"Grid Edge and Two-Way Network Performance now have dedicated public methodology sections linked directly from their product pages.","evidence":"content/pages/methodology.ts defines #grid-edge-conditions and #two-way-network-performance; each corresponding page links to its exact anchor.","action":"Retain anchor and route checks so later methodology restructuring cannot leave product links pointing to a generic or missing section."}],"corrections":[{"correctionKey":"coherence-manifest-checker","status":"implemented","summary":"Added a reusable seven-dimension checker with explicit publication-field, rounded-display and missingness semantics plus a dated 27-occurrence manifest across three products.","files":["lib/validation-sprints/cross-surface-coherence.mjs"]},{"correctionKey":"export-flexibility-publication-boundary-v2","status":"verified","summary":"Verified the parent-owned schema-v2 publication boundary across core, interfaces, page, workbench, JSON, CSV, schema and product documentation.","files":["lib/export-flexibility-dividend-core.mjs","lib/export-flexibility-dividend.ts","app/export-flexibility-dividend/page.tsx","components/export-flexibility-dividend-workbench.tsx","app/export-flexibility-dividend/data.json/route.ts","app/export-flexibility-dividend/data.csv/route.ts","app/export-flexibility-dividend/schema.json/route.ts","docs/export-flexibility-dividend-product-contract.md"]},{"correctionKey":"confidence-and-methodology-contracts","status":"verified","summary":"Verified parent-owned confidence fields, source-fidelity limitations, public methodology anchors and direct product-page links.","files":["lib/export-flexibility-dividend-core.mjs","components/export-flexibility-dividend-workbench.tsx","app/export-flexibility-dividend/data.csv/route.ts","app/export-flexibility-dividend/schema.json/route.ts","lib/two-way-network-performance-edition.mjs","lib/two-way-network-performance-core.mjs","components/two-way-network-performance.tsx","content/pages/methodology.ts","app/grid-edge-conditions/page.tsx","app/two-way-network-performance/page.tsx"]},{"correctionKey":"coherence-regression-tests","status":"implemented","summary":"Added fixtures for matching, mismatching, null-versus-zero and rounded displays, plus bindings to the fixed AER record and current repository surfaces.","files":["tests/validation-cross-surface-coherence.test.mjs"]},{"correctionKey":"coherence-sprint-receipt","status":"verified","summary":"Recorded the completed reassessment with all five traced metrics passing and no unresolved coherence warning.","files":["content/validation-sprints/cross-surface-coherence.json"]}],"releaseDecision":{"state":"release","reason":"All traced values, units, bases, vintages, confidence meanings, missingness states, publication fields and methodology links are coherent in the current local workspace."},"nextReview":{"cadence":"Monthly","dueOn":"2026-09-02","trigger":"Re-run after any product edition, public export, publication object, methodology, confidence rule or durable release-state change."}}],"summary":{"sprintCount":5,"passed":1,"passedWithActions":2,"held":2,"checksPassed":25,"checksWarning":5,"checksFailed":1,"checksNotTested":2,"openFindings":10},"methodology":"https://solaranalytica.com/methodology#validation-sprints","links":{"register":"https://solaranalytica.com/data-trust/validation","trust":"https://solaranalytica.com/data-trust","operations":"https://solaranalytica.com/data-status"}}