Spaces:
Running
Running
deploy(hf): sync szl-holdings/a11oy@main derived COPY set
Browse filesReusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy main.
Files: 936 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).
Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- static/3d/surfaces/energy.js +23 -12
static/3d/surfaces/energy.js
CHANGED
|
@@ -24,10 +24,15 @@
|
|
| 24 |
// THE FUNNEL (founder's explicit ask — centerpiece): visualize OUR real harvested joules
|
| 25 |
// as a live-filling reservoir, fed from the MEASURED exporter (joules_evidence.
|
| 26 |
// joules_measured_total / power_w_sample), with negative-price windows soaking in real
|
| 27 |
-
// time. HONEST NOTE:
|
| 28 |
-
//
|
| 29 |
-
//
|
| 30 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
//
|
| 32 |
// LIVE ENDPOINTS:
|
| 33 |
// /api/a11oy/v1/energy/mesh — PER-NODE live NVML energy from the MERGED multi-meter
|
|
@@ -183,7 +188,11 @@ function _meshNodes(json) {
|
|
| 183 |
});
|
| 184 |
}
|
| 185 |
|
| 186 |
-
// joules evidence
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
function _getJoules(json) {
|
| 188 |
const ev = (json && json.joules_evidence) || {};
|
| 189 |
const total = _num(ev.joules_measured_total);
|
|
@@ -598,10 +607,10 @@ function buildHUD() {
|
|
| 598 |
_overlay.appendChild(_hud.nodeBox);
|
| 599 |
_hud.nodeRows = {};
|
| 600 |
|
| 601 |
-
// doctrine note (the
|
| 602 |
const note = document.createElement("div");
|
| 603 |
note.style.cssText = "color:#6d7d8a;font-size:10.5px;line-height:1.45;margin-top:4px;border-top:1px solid #15212c;padding-top:6px";
|
| 604 |
-
note.textContent = "Per-node joules/watts are MEASURED live from the merged NVML meters (tower meter.a-11-oy.com + laptop meter2.a-11-oy.com) via /energy/mesh; a node with no live meter shows OFFLINE — never a fabricated watt or joule. When /energy/mesh is missing the funnel falls back to
|
| 605 |
_overlay.appendChild(note);
|
| 606 |
|
| 607 |
_show.body.appendChild(_overlay);
|
|
@@ -826,12 +835,14 @@ function onPosture(json, meta) {
|
|
| 826 |
_anim.negCountT = nw.count;
|
| 827 |
} else { _setRow("neg", "NO-LIVE-DATA", "STRUCTURAL-ONLY"); _anim.negCountT = 0; }
|
| 828 |
|
| 829 |
-
// THE FUNNEL — joules. MEASURED
|
|
|
|
| 830 |
// IMPORTANT (Dev2, binding): when /energy/mesh has delivered a MEASURED aggregate this
|
| 831 |
// session (_meshMeasured), the LIVE merged-meter reading is the source of truth for the
|
| 832 |
// reservoir fill, the power gauge, the joules/power HUD rows, and the reservoir billboard.
|
| 833 |
-
// The
|
| 834 |
-
//
|
|
|
|
| 835 |
// We therefore GUARD every reservoir/gauge/joules write below behind !_meshMeasured.
|
| 836 |
const j = _getJoules(json);
|
| 837 |
const jlabel = j.label || (json.joules_label ? String(json.joules_label).toUpperCase() : "STRUCTURAL-ONLY");
|
|
@@ -853,9 +864,9 @@ function onPosture(json, meta) {
|
|
| 853 |
_setRow("joules", j.total.toFixed(0) + " J (" + (j.node || "exporter") + ")", "MEASURED");
|
| 854 |
_scene.RES.fluidMat.color.setHex(C.green); _scene.RES.fluidMat.emissive.setHex(C.green);
|
| 855 |
} else {
|
| 856 |
-
//
|
| 857 |
_anim.fillT = 0;
|
| 858 |
-
_setRow("joules", jlabel === "SAMPLE" ? "sample (no
|
| 859 |
_scene.RES.fluidMat.color.setHex(C.blue); _scene.RES.fluidMat.emissive.setHex(C.blue);
|
| 860 |
}
|
| 861 |
|
|
|
|
| 24 |
// THE FUNNEL (founder's explicit ask — centerpiece): visualize OUR real harvested joules
|
| 25 |
// as a live-filling reservoir, fed from the MEASURED exporter (joules_evidence.
|
| 26 |
// joules_measured_total / power_w_sample), with negative-price windows soaking in real
|
| 27 |
+
// time. HONEST NOTE: the joules reservoir fills from a MEASURED reading via TWO honest
|
| 28 |
+
// paths, and ONLY those: (1) the per-node /energy/mesh aggregate when a node's own NVML
|
| 29 |
+
// meter read live, and (2) /harvest/posture's joules channel, which now reads the LIVE
|
| 30 |
+
// remote NVML joule meter (engine 'omen') via A11OY_JOULE_METER_URLS this request and is
|
| 31 |
+
// gated by szl_joules_truth — so posture carries joules_label="measured" + joules_evidence
|
| 32 |
+
// ONLY when that meter responds live THIS request (with monotonic-reset detection). When
|
| 33 |
+
// NEITHER path has a live meter this request, posture honestly emits joules_label="sample"
|
| 34 |
+
// and joules_evidence={}: the reservoir shows its structure + the honest SAMPLE/
|
| 35 |
+
// STRUCTURAL-ONLY posture and does NOT invent a fill height. We NEVER fabricate a joule.
|
| 36 |
//
|
| 37 |
// LIVE ENDPOINTS:
|
| 38 |
// /api/a11oy/v1/energy/mesh — PER-NODE live NVML energy from the MERGED multi-meter
|
|
|
|
| 188 |
});
|
| 189 |
}
|
| 190 |
|
| 191 |
+
// joules evidence read STRAIGHT off the posture JSON. MEASURED when the posture joules
|
| 192 |
+
// channel got a LIVE meter reading this request (remote NVML via A11OY_JOULE_METER_URLS,
|
| 193 |
+
// gated by szl_joules_truth) -> joules_label="measured" + joules_evidence{joules_measured_total,
|
| 194 |
+
// exporter_node, power_w_sample}. Otherwise joules_label="sample" + joules_evidence={} and
|
| 195 |
+
// we render the honest empty posture — never a fabricated joule.
|
| 196 |
function _getJoules(json) {
|
| 197 |
const ev = (json && json.joules_evidence) || {};
|
| 198 |
const total = _num(ev.joules_measured_total);
|
|
|
|
| 607 |
_overlay.appendChild(_hud.nodeBox);
|
| 608 |
_hud.nodeRows = {};
|
| 609 |
|
| 610 |
+
// doctrine note (the joules honesty reality: measured only on a live meter read)
|
| 611 |
const note = document.createElement("div");
|
| 612 |
note.style.cssText = "color:#6d7d8a;font-size:10.5px;line-height:1.45;margin-top:4px;border-top:1px solid #15212c;padding-top:6px";
|
| 613 |
+
note.textContent = "Per-node joules/watts are MEASURED live from the merged NVML meters (tower meter.a-11-oy.com + laptop meter2.a-11-oy.com) via /energy/mesh; a node with no live meter shows OFFLINE — never a fabricated watt or joule. When /energy/mesh is missing, the funnel falls back to /harvest/posture's joules channel, which reads the LIVE remote NVML joule meter (engine 'omen') via A11OY_JOULE_METER_URLS this request (szl_joules_truth-gated, monotonic-reset checked): joules_label='measured' with provenance ONLY when the meter responds live this request, else honest STRUCTURAL-ONLY with no invented fill. Modeled on Electricity Maps + deck.gl; rendered in three.js (see manifest).";
|
| 614 |
_overlay.appendChild(note);
|
| 615 |
|
| 616 |
_show.body.appendChild(_overlay);
|
|
|
|
| 835 |
_anim.negCountT = nw.count;
|
| 836 |
} else { _setRow("neg", "NO-LIVE-DATA", "STRUCTURAL-ONLY"); _anim.negCountT = 0; }
|
| 837 |
|
| 838 |
+
// THE FUNNEL — joules. MEASURED when the posture joules channel got a LIVE remote NVML
|
| 839 |
+
// meter reading this request (szl_joules_truth-gated); else honest sample posture, no fill.
|
| 840 |
// IMPORTANT (Dev2, binding): when /energy/mesh has delivered a MEASURED aggregate this
|
| 841 |
// session (_meshMeasured), the LIVE merged-meter reading is the source of truth for the
|
| 842 |
// reservoir fill, the power gauge, the joules/power HUD rows, and the reservoir billboard.
|
| 843 |
+
// The posture joules channel is itself honest (MEASURED only on a live remote-meter read
|
| 844 |
+
// this request), but when the per-node mesh is already MEASURED it is the finer-grained
|
| 845 |
+
// source of truth, so we must NOT let posture overwrite the mesh-measured values.
|
| 846 |
// We therefore GUARD every reservoir/gauge/joules write below behind !_meshMeasured.
|
| 847 |
const j = _getJoules(json);
|
| 848 |
const jlabel = j.label || (json.joules_label ? String(json.joules_label).toUpperCase() : "STRUCTURAL-ONLY");
|
|
|
|
| 864 |
_setRow("joules", j.total.toFixed(0) + " J (" + (j.node || "exporter") + ")", "MEASURED");
|
| 865 |
_scene.RES.fluidMat.color.setHex(C.green); _scene.RES.fluidMat.emissive.setHex(C.green);
|
| 866 |
} else {
|
| 867 |
+
// no live meter reading this request: honest — reservoir stays empty, label sample/structural
|
| 868 |
_anim.fillT = 0;
|
| 869 |
+
_setRow("joules", jlabel === "SAMPLE" ? "sample (no live meter this request)" : "NO-LIVE-DATA", jlabel === "SAMPLE" ? "SAMPLE" : "STRUCTURAL-ONLY");
|
| 870 |
_scene.RES.fluidMat.color.setHex(C.blue); _scene.RES.fluidMat.emissive.setHex(C.blue);
|
| 871 |
}
|
| 872 |
|