Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -273,3 +273,14 @@ The required Chromium navigation check (`python tests/browser_setup.py`, after
installing Playwright and Chromium) covers new-tab routing, mobile width,
unknown routes, history, editable clipboard payloads and the no-JavaScript
fallback alongside the full Python suite.

The results browser groups instrument-specific setup IDs beneath one likelihood
choice, matching Pulse's model list. Implementation is an independent view filter:
JAX and Numba records never share a result panel, and unrecognized backends remain
explicitly unspecified. Imaging Delaunay/Rectangular also expose empty Numba/JAX
filters when there are no measurements; these links claim neither runtime nor
implementation availability. Instrument selection updates the URL within the
opened tab and supports browser history. Existing setup links still resolve.
Routine capture/integrity metadata is in Evidence details; actual stale, failed,
cached and local-preview warnings remain visible. Campaign tables display only
name, recent progress and next steps; the complete ledger remains authoritative.
234 changes: 192 additions & 42 deletions dashboard.html

Large diffs are not rendered by default.

23 changes: 11 additions & 12 deletions dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,19 @@ Carry clearly authorized work through the appropriate procedure, retaining decis
After taking action, report what changed, what the evidence supports and what remains unresolved. Continue subsequent inference work in this chat and stop at the session deliverable without scheduling background follow-up.
```

Last check-in: not recorded yet. Ledger dates are review dates, not measurement freshness.

## Active campaigns

| Campaign | Status | Open tasks | Recent progress | Blockers | Job status | Next step | Reviewed |
|---|---|---:|---|---|---|---|---|
| [HST SLaM base backend parity](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/autolens_inference.md) | active | 1 | Project and Cortex ledgers retain the 24 September rerun submissions; published rows require coverage reconciliation. | Live RAL status and output/archive availability unverified. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Reconcile all seeds and stages with current project rows and Cortex before proposing another run. | 2026-10-04 |
| [HST SLaM Delaunay variant](https://github.com/PyAutoLabs/autolens_inference/blob/146a84346eaa51eda158634cae520d677f3e6213/wiki/project/state.md) | active | 0 | Delaunay is a separate target/recipe; pre-speedup runs are archived, reruns recorded on 24 September. | Do not merge the Delaunay target with rectangular comparisons; current job status unknown. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Retrieve or account for every rerun, failed seed and missing stage; preserve the archived comparison context. | 2026-10-04 |
| [Point-source sampler admission](https://github.com/PyAutoLabs/autolens_inference/blob/146a84346eaa51eda158634cae520d677f3e6213/wiki/project/state.md) | needs-decision | 1 | 2 October project record reports five Nautilus seeds; no gradient-sampler admission measurement. | Gradient cost share and sampler admission remain unmeasured; Pulse owns likelihood optimisation. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Assess a bounded gradient-sampler admission proposal with the human; no new job is authorized. | 2026-10-04 |
| [Graphical and EP inference coordination](https://github.com/PyAutoLabs/PyAutoMind/blob/8dd1edc7e04c960daae3663513c61395823eddb0/draft/research/graphical_ep/ep_campaign.md) | needs-slicing | 3 | Mind campaign map and two scoping contracts preserved verbatim; implementation work remains in Mind. | Old scoping contains completed phases and decision gates; not a bulk runnable queue. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Reconcile current Cortex observations and shipped fixes, then select one bounded phase. | 2026-10-04 |
| [Analytic Gaussian ensemble and control calibration](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/analytic_gaussian.md) | blocked | 0 | Cortex records accepted wave-1 baseline and 30 September independent-review caveats. | N=25 stays unsubmitted until control/threshold diagnostic is resolved. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Use Cortex planned diagnostic on passing, edge and worst seeds; retain the human conclusion there. | 2026-10-04 |
| [N=50 NUTS versus three EP repeats](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/ep_toy_gaussian.md) | needs-decision | 0 | Cortex records failed wave 1 (EMFILE/OOM), wave-2 preparation and no submission. | Explicit human go; sample entry/export and resource settings must be verified. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Present the existing wave-2 proposal with current dependency evidence for decision. | 2026-10-04 |
| [Hierarchical slope recovery at scale](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/slope_hierarchy_scale.md) | blocked | 0 | Cortex retains graphical baseline, post-processing OOM and stale EP hierarchical factor; Mind records later moments fix. | Summary/sample retrieval and release/RAL mirror reconciliation outstanding; no reclassification from stale prose. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Verify the moments fix release and project mirror; recover missing summaries from existing samples before a proposed rerun. | 2026-10-04 |
| [IC50 EP and graphical scale ladder](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/ic50_workspace.md) | blocked | 0 | Cortex records N=5/10/25 results, failed N=50 EP rung and width-interpretation caveat. | Projection fix and mean-field width reporting require reconciliation before scientific comparison. | unknown — live scheduler not queried; historical ledger states are not current job evidence | Check implementation close-outs, then propose a seeded ladder with appropriate output and mean-field diagnostics. | 2026-10-04 |
| Campaign | Recent progress | Next steps |
|---|---|---|
| [HST SLaM base backend parity](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/autolens_inference.md) | Project and Cortex ledgers retain the 24 September rerun submissions; published rows require coverage reconciliation. | Reconcile all seeds and stages with current project rows and Cortex before proposing another run. |
| [HST SLaM Delaunay variant](https://github.com/PyAutoLabs/autolens_inference/blob/146a84346eaa51eda158634cae520d677f3e6213/wiki/project/state.md) | Delaunay is a separate target/recipe; pre-speedup runs are archived, reruns recorded on 24 September. | Retrieve or account for every rerun, failed seed and missing stage; preserve the archived comparison context. |
| [Point-source sampler admission](https://github.com/PyAutoLabs/autolens_inference/blob/146a84346eaa51eda158634cae520d677f3e6213/wiki/project/state.md) | 2 October project record reports five Nautilus seeds; no gradient-sampler admission measurement. | Assess a bounded gradient-sampler admission proposal with the human; no new job is authorized. |
| [Graphical and EP inference coordination](https://github.com/PyAutoLabs/PyAutoMind/blob/8dd1edc7e04c960daae3663513c61395823eddb0/draft/research/graphical_ep/ep_campaign.md) | Mind campaign map and two scoping contracts preserved verbatim; implementation work remains in Mind. | Reconcile current Cortex observations and shipped fixes, then select one bounded phase. |
| [Analytic Gaussian ensemble and control calibration](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/analytic_gaussian.md) | Cortex records accepted wave-1 baseline and 30 September independent-review caveats. | Use Cortex planned diagnostic on passing, edge and worst seeds; retain the human conclusion there. |
| [N=50 NUTS versus three EP repeats](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/ep_toy_gaussian.md) | Cortex records failed wave 1 (EMFILE/OOM), wave-2 preparation and no submission. | Present the existing wave-2 proposal with current dependency evidence for decision. |
| [Hierarchical slope recovery at scale](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/slope_hierarchy_scale.md) | Cortex retains graphical baseline, post-processing OOM and stale EP hierarchical factor; Mind records later moments fix. | Verify the moments fix release and project mirror; recover missing summaries from existing samples before a proposed rerun. |
| [IC50 EP and graphical scale ladder](https://github.com/PyAutoLabs/PyAutoCortex/blob/d45f198804615c090e6b6694cf725ddb0be2354e/projects/ic50_workspace.md) | Cortex records N=5/10/25 results, failed N=50 EP rung and width-interpretation caveat. | Check implementation close-outs, then propose a seeded ladder with appropriate output and mean-field diagnostics. |

## Active tasks

Expand All @@ -60,7 +59,7 @@ Last check-in: not recorded yet. Ledger dates are review dates, not measurement

[Ledger](https://github.com/PyAutoLabs/PyAutoInsight/blob/main/campaigns.yaml)

## Inference evidence
## Inference Results


<!-- insight:instance name=lens receipt=de37acfe797465205128d45973af5e853c74a684 outcome=ok shown=de37acfe797465205128d45973af5e853c74a684 -->
Expand Down
28 changes: 18 additions & 10 deletions insight/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,23 @@ def _detail(s, now=None):
)
if d.get("version") == 2:
nav, _ = setup_browser.render(s, now)
return "".join(parts) + nav
warnings = []
if s.cached or s.errors:
warnings.append(
"Latest refresh failed; see Evidence details"
+ (". Showing cached evidence." if s.cached else ".")
)
if s.source == "local":
warnings.append("Local preview, not a published capture.")
if freshness(s, now).startswith("stale"):
warnings.append("Evidence is past its declared freshness deadline.")
alerts = "".join('<p class="warn">' + e(message) + "</p>" for message in warnings)
return (
marker(s)
+ alerts
+ nav
+ setup_browser.disclosure("Evidence details", "".join(parts[2:]))
)
if not d:
return "".join(parts)
parts += [
Expand Down Expand Up @@ -274,15 +290,8 @@ def render_html(views, now=None, campaign_data=None):
"Inference dashboard",
navigation=[
{"href": "#campaigns", "label": "Active campaigns"},
{"href": "#evidence", "label": "Inference evidence"},
{"href": "#evidence", "label": "Inference Results"},
{"href": "#sampler-candidates", "label": "Sampler candidates"},
*(
{
"href": "#" + v.instance.instance,
"label": v.instance.instance.title() + " project",
}
for v in views
),
],
)
+ '<main><p id="setup-route-status" role="status"></p><div id="inference-home">'
Expand All @@ -295,7 +304,6 @@ def render_html(views, now=None, campaign_data=None):
*({"label": v.instance.repo, "href": v.instance.github_url} for v in views),
],
)
+ "<p>Execution completion is separate from convergence and scientific acceptance. Cortex retains scientific conclusions. Evidence remains in project storage.</p>"
+ "".join(_detail(s, now) for s in views)
+ candidates.render(candidates.load())
+ '</div><div id="inference-pages">'
Expand Down
43 changes: 17 additions & 26 deletions insight/campaigns.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,21 +161,18 @@ def markdown(data: dict) -> str:
PROMPT,
"```",
"",
f"Last check-in: {data.get('last_checkin') or 'not recorded yet'}. Ledger dates are review dates, not measurement freshness.",
*([f"Last check-in: {data['last_checkin']}."] if data.get("last_checkin") else []),
"",
"## Active campaigns",
"",
"| Campaign | Status | Open tasks | Recent progress | Blockers | Job status | Next step | Reviewed |",
"|---|---|---:|---|---|---|---|---|",
"| Campaign | Recent progress | Next steps |",
"|---|---|---|",
]
for c in data["campaigns"]:
if c["status"] in CLOSED:
continue
n = sum(t["campaign"] == c["id"] and t["status"] not in CLOSED for t in data["tasks"])
title = f"[{_md(c['title'])}]({c['evidence']})" if c.get("evidence") else _md(c["title"])
rows.append(
f"| {title} | {c['status']} | {n} | {_md(c.get('recent_progress', 'unknown'))} | {_md(c.get('blockers', 'unknown'))} | {_md(c.get('job_status', 'unknown'))} | {_md(c['next'])} | {c['updated']} |"
)
rows.append(f"| {title} | {_md(c.get('recent_progress', 'unknown'))} | {_md(c['next'])} |")
rows += [
"",
"## Active tasks",
Expand All @@ -192,7 +189,7 @@ def markdown(data: dict) -> str:
"",
"[Ledger](" + URL + "campaigns.yaml)",
"",
"## Inference evidence",
"## Inference Results",
"",
]
return "\n".join(rows)
Expand All @@ -206,14 +203,13 @@ def e(value):
for c in data["campaigns"]:
if c["status"] in CLOSED:
continue
n = sum(t["campaign"] == c["id"] and t["status"] not in CLOSED for t in data["tasks"])
title = (
f'<a href="{e(c["evidence"])}">{e(c["title"])}</a>'
if c.get("evidence")
else e(c["title"])
)
campaigns.append(
f"<tr><td>{title}</td><td>{e(c['status'])}</td><td>{n}</td><td>{e(c.get('recent_progress', 'unknown'))}</td><td>{e(c.get('blockers', 'unknown'))}</td><td>{e(c.get('job_status', 'unknown'))}</td><td>{e(c['next'])}</td><td>{e(c['updated'])}</td></tr>"
f"<tr><td>{title}</td><td>{e(c.get('recent_progress', 'unknown'))}</td><td>{e(c['next'])}</td></tr>"
)
tasks = []
for t in data["tasks"]:
Expand All @@ -224,9 +220,9 @@ def e(value):
f'<tr><td><a href="{URL}{e(t["path"])}">{e(t["title"])}</a>{issue}</td><td>{e(t["campaign"])}</td><td>{e(t["status"])}</td><td>{e(t.get("priority", "normal"))}</td><td>{e(t["next"])}</td></tr>'
)

def table(headers, rows):
def table(headers, rows, kind="campaign-table"):
return (
'<div class="tablewrap"><table><thead><tr>'
f'<div class="tablewrap"><table class="{kind}"><thead><tr>'
+ "".join(f"<th>{h}</th>" for h in headers)
+ "</tr></thead><tbody>"
+ "".join(rows)
Expand All @@ -245,24 +241,19 @@ def table(headers, rows):
refreshed_at=refreshed_at,
refresh_url="https://github.com/PyAutoLabs/PyAutoInsight/actions/workflows/dashboard_refresh.yml",
)
+ f'<p class="muted">Last check-in: {e(data.get("last_checkin") or "not recorded yet")}.</p>'
'<h2 id="campaigns">Active campaigns</h2>'
+ (
f'<p class="muted">Last check-in: {e(data["last_checkin"])}.</p>'
if data.get("last_checkin")
else ""
)
+ '<h2 id="campaigns">Active campaigns</h2>'
+ table(
[
"Campaign",
"Status",
"Open tasks",
"Recent progress",
"Blockers",
"Job status",
"Next step",
"Reviewed",
],
["Campaign", "Recent progress", "Next steps"],
campaigns,
)
+ '<h2 id="tasks">Active tasks</h2>'
+ table(["Task", "Campaign", "Status", "Priority", "Next step"], tasks)
+ f'<p><a href="{URL}campaigns.yaml">Ledger</a></p><h2 id="evidence">Inference evidence</h2>'
+ table(["Task", "Campaign", "Status", "Priority", "Next steps"], tasks, "task-table")
+ f'<p><a href="{URL}campaigns.yaml">Ledger</a></p><h2 id="evidence">Inference Results</h2>'
)


Expand Down
20 changes: 17 additions & 3 deletions insight/setup_browser.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
.setup-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));gap:.75rem;margin:1rem 0}
.setup-choice{display:block;padding:1rem;border:1px solid var(--line);border-radius:.6rem;background:var(--card);text-decoration:none}
.setup-choice:hover,.setup-choice:focus-visible{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:2px}
.setup-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));gap:.75rem;margin:1rem 0}
.setup-metrics>div{padding:1rem;background:var(--card);border:1px solid var(--line);border-radius:.6rem;min-width:0}
.setup-metrics dt{font-size:.85rem;color:var(--muted)}.setup-metrics dd{margin:.35rem 0 0!important;font-size:1.15rem;font-weight:600;overflow-wrap:anywhere}
Expand All @@ -11,3 +8,20 @@
.setup-page details{padding:.75rem;border:1px solid var(--line);border-radius:.5rem}.setup-page summary{cursor:pointer}
.candidate-prompt{width:100%;box-sizing:border-box;min-height:8rem;font:inherit;padding:.75rem}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Match Pulse's likelihood list and selector presentation. */
.setup-navigation details{border:1px solid var(--line);border-radius:10px;padding:.6rem .85rem;margin:.5rem 0}
.setup-navigation details details{margin:.5rem 0 .3rem 1rem}
.setup-navigation summary{cursor:pointer;font-weight:650;padding:.35rem 0}
.model-choice{display:block;text-align:left;padding:.55rem .75rem;margin:.3rem 0;width:100%;font:inherit;cursor:pointer;border:1px solid var(--line);border-radius:7px;background:var(--bg);color:var(--fg);box-sizing:border-box;text-decoration:none}
.model-choice:hover,.model-choice:focus-visible{border-color:var(--accent)}
.selectors{display:grid;grid-template-columns:minmax(0,1fr);max-width:24rem;gap:.8rem;margin:1rem 0}
.selectors label{display:block;font-weight:600;font-size:.85rem;min-width:0}
.selectors select{display:block;width:100%;min-width:0;margin-top:.35rem;padding:.65rem;border:1px solid var(--line);border-radius:7px;background:var(--bg);color:var(--fg);font:inherit}
.setup-view header{display:none}
.campaign-table{min-width:36rem;table-layout:fixed}.campaign-table th:first-child{width:25%}
.campaign-table td,.task-table td{word-break:normal;overflow-wrap:normal;hyphens:none}
.task-table{min-width:44rem}.task-table td:nth-child(2){min-width:9rem}.task-table td:nth-child(3),.task-table td:nth-child(4){white-space:nowrap}
.task-table td:first-child{min-width:12rem}.task-table td:last-child{min-width:16rem}
@media(max-width:40rem){.setup-navigation details details{margin-left:.3rem}}
.task-table th{white-space:nowrap;word-break:normal;overflow-wrap:normal}
Loading
Loading