feat(workflow): publish verified forecast controls and consolidated docs
Tests / test (push) Successful in 1m1s

Approved by Daniel Haefliger for develop and beta. Author dh_Agent, authenticated account dh. Preserve published battery, charging and overall Energy Pie changes. No deployment or plant control authorization.
This commit is contained in:
dh
2026-10-08 10:02:58 +00:00
parent af69151165
commit 74a2d6c685
82 changed files with 5054 additions and 617 deletions
@@ -0,0 +1,61 @@
"""Cross-language contract for the ordinary Manager's generated measurement map."""
from hashlib import sha256
import json
from pathlib import Path
import shutil
import sqlite3
import subprocess
import unittest
from netplan_v4 import measurement_pipeline as pipeline
@unittest.skipUnless(shutil.which('php'), 'Native PHP CLI required for capture contract')
class NativeMeasurementSetupTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
fixture = Path(__file__).resolve().parents[3] / 'tests' / 'V4Setup' / 'checks.php'
result = subprocess.run(['php', str(fixture), '--fixture'], check=True, capture_output=True, text=True)
if result.stderr:
raise AssertionError(result.stderr)
cls.fixture = json.loads(result.stdout)
def test_dataset_matches_backend_and_exact_php_capture_hash(self):
setup = self.fixture['setup']
config = pipeline.validate_config(setup['dataset'])
self.assertEqual(config['mappingSha256'], sha256(self.fixture['captureJson'].encode()).hexdigest())
self.assertEqual(config['mappingSha256'], self.fixture['record']['mappingSha256'])
self.assertEqual(config['inventorySha256'], self.fixture['record']['reportedInventorySha256'])
self.assertEqual(config['datasetId'], setup['datasetId'])
self.assertEqual(len(config['sources']), 3)
def test_capture_ingests_without_virtual_double_count_or_permissions(self):
setup = self.fixture['setup']
record = self.fixture['record']
config = setup['dataset']
plant = record['installationId']
now = pipeline.epoch(record['capturedAt'])
con = sqlite3.connect(':memory:')
try:
pipeline.schema(con)
registered = pipeline.register_dataset(con, plant, config, now)
self.assertFalse(registered['controlEnabled'])
receipt = pipeline.ingest_batch(con, plant, {'version': 1, 'datasetId': setup['datasetId'], 'records': [record]}, now)
self.assertEqual(receipt['stored'], 1)
self.assertFalse(receipt['controlEnabled'])
values = {key: source['value'] for key, source in record['raw'].items()}
self.assertEqual(pipeline.physical_value(values, config), 4000)
self.assertFalse(record['trainingEligible'])
self.assertFalse(record['measurementBoundaryVerified'])
changed = json.loads(json.dumps(config))
changed['sources'][0]['factorToW'] *= -1
with self.assertRaises(ValueError):
pipeline.register_dataset(con, plant, changed, now)
with self.assertRaises(ValueError):
pipeline.ingest_batch(con, 'other-installation', {'version': 1, 'datasetId': setup['datasetId'], 'records': [record]}, now)
finally:
con.close()
if __name__ == '__main__':
unittest.main()