Repository navigation
feat(OMN-19981): add local Overview and Runs dashboards - #344
Conversation
Add local Overview and Runs dashboards backed by served projections, validate page configs with the core model, and keep empty and unresolved states explicit.
* evidence(OMN-19981): author OCC companion for OmniNode-ai/omnidash#344 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head b7088e769d60e4acd434702048924b5e3739db40. * evidence(OMN-19981): self-bind OCC#12070 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
|
Close-out for omnidash#344 (OMN-19981). Merged 2026-10-01T05:54:41Z, merge commit 2da199e. It landed the local Overview and Runs dashboard pages (page YAML, loader, route, typed empty states, vitest and Playwright 1440x900 tests). Verified: 37 check-runs succeeded; three were cancelled copies, and verify / verify (run 36820899798) and the eligibility job (run 36820900453) re-ran green. Typecheck & Tests run 36820638784 passed. Read live 2026-10-04T15:48Z; no review comments, and the only comments are bot notices. Unblocks: Nothing is claimed as unblocked beyond omnidash#349, which changes these pages. Left on OMN-19981: In Review; Jonah was asked at 2026-10-04T09:33Z to review and move it to Done. The Workflow, Usage, Credentials and API Keys pages and AC3 (deleting the sqlite reader) are scoped to the 10/5 sprint by the ticket description. Thank you! |
Summary
Adds the local Overview and Runs dashboard pages for the 2026-09-28 sprint cut of OMN-19981. Each page is a YAML instance of omnibase_core's
ModelDashboardConfig, validated by the real core model in a test, loaded over HTTP from served projection exposures, with typed empty states instead of zeros.What changed
src/pages/local/overview.page.yaml,src/pages/local/runs.page.yaml: page configs, with the dashboard fields at the document root, whichModelDashboardConfig(extra="forbid") requires.overview.contracts.yamlandruns.contracts.yamlhold the component and data-binding contracts.src/pages/local/model-dashboard-config.schema.json: the JSON schema ofModelDashboardConfigat core47187e6a, for the TypeScript-side checks.src/layout/local-page-loader.ts,src/pages/LocalDashboardPage.tsx,src/App.tsx,src/components/frame/Sidebar.tsx,src/store/types.ts,src/styles/local-dashboard.css: an HTTP-only page loader, the route, the navigation entry, and typedNO_RUNS_YET/BASELINE_UNRESOLVEDrender states.src/pages/local/pages.test.ts(vitest);tests/contracts/test_local_dashboard_config_core.py: runsModelDashboardConfig.model_validate(yaml.safe_load(page))with the real Python model;tests/e2e/local-dashboard-contracts.spec.ts(Playwright 1440x900), with its screenshot fixture.server/sqlite-projection-reader.tsis unchanged; its deletion is AC3, at the demo gate.ModelDashboardConfigis not added to omnibase_core's generated TypeScript types; that is a follow-up for core.How it was verified
The work was done in the Codex lane. The commit
b7088e7was made by the Claude lane after re-running the checks below. It is signed, and its tree46120cf4is exactly the tree Codex handed over. Baseorigin/devab24d57, 2026-10-01 ~05:35Z.Check 1 (own tests RED then GREEN): the real-model test on the branch passes 3 of 3 (Overview and Runs validate, and the control case raises). Codex recorded RED before the page fix: the nested-wrapper page shape failed validation on
page.name.Check 2 (they can fail):
runs.page.yamlmakes the real-model test fail (1 failed, 2 passed); restored, it passes 3 of 3;componentsinjected at the root) raisesExtra inputs are not permitted.Check 3 (related suites, dev vs branch): the whole omnidash suite,
npx vitest run:ab24d57: 194 files, 1798 passed, 0 failed, 15 skipped;The difference is
pages.test.ts.npm run check: exit 0.The core model's own suite (
tests/unit/models/dashboard/test_model_dashboard_config.pyat core47187e6a) and Playwrightlocal-dashboard-contracts(1 passed, with the 1440x900 screenshot) were run by Codex. I have not re-run them.Failure paths
n/a: this change writes no receipt, verdict or report. A page with no served data renders a typed empty state (
NO_RUNS_YET,BASELINE_UNRESOLVED), never0.pages.test.tscovers this.Open defects
none known. These are UNVERIFIED rather than defects:
dashboard_idformat. The real-model test does not check the format ofdashboard_id. A non-UUID value still validates, so the format is only as strict as the core model makes it.Local gates
--no-verify, noSKIP=, no--no-gpg-sign, nocore.hooksPathoverride. Every pre-commit and pre-push hook ran.OMNI_HOMEset to the workspace clone root, which the lane-identity hook needs.Not in this change
server/sqlite-projection-reader.ts(AC3).ModelDashboardConfigto core's generated TypeScript types.Overlap-Reviewed: #337 — Jonah's parked OMN-19730 spike adds a
?view=execution-graphbranch toApp.tsx; this PR adds two page cases (local-overview,local-runs) to the page switch. Different code paths; both are needed.Evidence-Ticket: OMN-19981
Evidence-Source: OCC#12070