/home/yeff/public_html/devon/panel/assets/js/panel.js:18: observable_evidence: 'Filesystem and runtime observable evidence', /home/yeff/public_html/devon/panel/assets/js/panel.js:26: sel: { phaseId: null, catId: null, bucket: null } /home/yeff/public_html/devon/panel/assets/js/panel.js:31: const [hub, host, docker, runtime, progress] = await Promise.all([ /home/yeff/public_html/devon/panel/assets/js/panel.js:33: fetch('data/host_runtime.json').then(r => r.json()).catch(() => null), /home/yeff/public_html/devon/panel/assets/js/panel.js:34: fetch('data/docker_runtime.json').then(r => r.json()).catch(() => null), /home/yeff/public_html/devon/panel/assets/js/panel.js:35: fetch('data/runtime_status.json').then(r => r.json()).catch(() => null), /home/yeff/public_html/devon/panel/assets/js/panel.js:36: fetch('data/project_progress.json').then(r => r.json()).catch(() => null) /home/yeff/public_html/devon/panel/assets/js/panel.js:40: G.data = { host, docker, runtime, progress }; /home/yeff/public_html/devon/panel/assets/js/panel.js:41: renderTree(); /home/yeff/public_html/devon/panel/assets/js/panel.js:42: renderDetail(); /home/yeff/public_html/devon/panel/assets/js/panel.js:43: renderFooter(); /home/yeff/public_html/devon/panel/assets/js/panel.js:62:function renderTree() { /home/yeff/public_html/devon/panel/assets/js/panel.js:85: const bkActive = G.sel.catId === cat.id && G.sel.bucket === bk ? ' bk-active' : ''; /home/yeff/public_html/devon/panel/assets/js/panel.js:102: if (G.openPhases.has(id)) { G.openPhases.delete(id); G.openCats.clear(); G.sel.catId = null; G.sel.bucket = null; } /home/yeff/public_html/devon/panel/assets/js/panel.js:105: renderTree(); renderDetail(); /home/yeff/public_html/devon/panel/assets/js/panel.js:112: if (G.openCats.has(id)) { G.openCats.delete(id); G.sel.bucket = null; } /home/yeff/public_html/devon/panel/assets/js/panel.js:116: G.sel.bucket = null; /home/yeff/public_html/devon/panel/assets/js/panel.js:117: renderTree(); renderDetail(); /home/yeff/public_html/devon/panel/assets/js/panel.js:125: G.sel.bucket = el.dataset.bk; /home/yeff/public_html/devon/panel/assets/js/panel.js:126: renderTree(); renderDetail(); /home/yeff/public_html/devon/panel/assets/js/panel.js:133:function renderDetail() { /home/yeff/public_html/devon/panel/assets/js/panel.js:135: if (!G.sel.phaseId) { el.innerHTML = renderSummary(); return; } /home/yeff/public_html/devon/panel/assets/js/panel.js:137: if (!G.sel.catId) { el.innerHTML = renderPhaseOverview(ph); return; } /home/yeff/public_html/devon/panel/assets/js/panel.js:139: if (!G.sel.bucket) { el.innerHTML = renderCatOverview(ph, cat); return; } /home/yeff/public_html/devon/panel/assets/js/panel.js:140: el.innerHTML = renderBucketDetail(ph, cat, G.sel.bucket); /home/yeff/public_html/devon/panel/assets/js/panel.js:143:function renderSummary() { /home/yeff/public_html/devon/panel/assets/js/panel.js:144: const pp = G.data.progress; /home/yeff/public_html/devon/panel/assets/js/panel.js:145: const pct = Math.round(pp?.progress_pct ?? pp?.global_pct ?? 0); /home/yeff/public_html/devon/panel/assets/js/panel.js:152:
Status is MISSING.
Kind: ' + titleize(item.row_kind || "runtime_row") + '
', /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:284: '' + valueOrDash(item.progress_pct, "%") + '', /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:291: function renderSelectedPipeline(stageKey, rollup) { /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:294: const contract = pipelines[stageKey] || {}; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:317: function selectStage(stageKey) { /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:318: state.selectedStage = normStageKey(stageKey); /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:321: return normStageKey(item.stage_key) === state.selectedStage; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:323: const rollup = stageRollup(state.selectedStage); /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:324: const pct = rollup && typeof rollup.progress_pct === "number" ? Math.round(rollup.progress_pct) : 0; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:329: els.heroSubtitle.textContent = "Runtime-backed stage view. Contract and runtime data are rendered from panel exports only."; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:331: if (els.stageOrderBadge) { /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:332: els.stageOrderBadge.textContent = navItem ? ("ORDER " + navItem.deployment_order) : "—"; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:338: els.selectedStageDesc.textContent = "Stage completion is read from runtime_status stage_rollup.progress_pct."; /home/yeff/public_html/devon/panel/assets/js/panel.runtime.fix.20260408_1.js:343: : 'MISSING stage rollup