loki-mode 10.8.0 → 10.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +2 -2
  2. package/SKILL.md +2 -2
  3. package/VERSION +1 -1
  4. package/autonomy/loki +16 -31
  5. package/autonomy/tui.sh +5 -1
  6. package/dashboard/__init__.py +1 -1
  7. package/dashboard/api_phases.py +1 -1
  8. package/dashboard/api_start.py +0 -1
  9. package/dashboard/server.py +22 -138
  10. package/docs/COCKPIT-SPEC.md +3 -1
  11. package/docs/DASHBOARD-9.12-EVIDENCE.md +1 -1
  12. package/docs/DASHBOARD-ARCHITECTURE.md +13 -11
  13. package/docs/DASHBOARD_V2_CHECKLIST.md +2 -0
  14. package/docs/INSTALLATION.md +12 -11
  15. package/docs/MERGE-DEDUP-MAP.md +1 -1
  16. package/docs/MERGE-ROUTE-MAP.md +1 -1
  17. package/docs/MERGE3-PLAN.md +2 -2
  18. package/docs/R3-COST-OBSERVABILITY-DESIGN.md +2 -2
  19. package/docs/R4-TRUST-TRAJECTORY-DESIGN.md +1 -1
  20. package/docs/R5-AUTO-WIKI-DESIGN.md +1 -1
  21. package/docs/R6-ROLLBACK-CHECKPOINT-PLAN.md +1 -1
  22. package/docs/RARV-C-100X-PLAN.md +3 -3
  23. package/docs/SONNET5-DEFAULT-PLAN.md +2 -2
  24. package/docs/SYNERGY-TASKS.md +1 -1
  25. package/docs/TOOL-INTEGRATION.md +1 -1
  26. package/docs/TOP-100-BACKLOG.md +1 -1
  27. package/docs/alternative-installations.md +1 -1
  28. package/docs/architecture/ADR-001-runtime-migration.md +1 -1
  29. package/docs/architecture/DASHBOARD_V2_ARCHITECTURE.md +2 -0
  30. package/docs/audit-logging.md +2 -0
  31. package/docs/authentication.md +2 -0
  32. package/docs/authorization.md +2 -0
  33. package/docs/certification/02-enterprise-features/lab.md +2 -0
  34. package/docs/certification/02-enterprise-features/lesson.md +2 -0
  35. package/docs/certification/04-production-deployment/lab.md +2 -0
  36. package/docs/certification/04-production-deployment/lesson.md +2 -0
  37. package/docs/control-plane-migration.md +97 -0
  38. package/docs/dashboard-guide.md +6 -7
  39. package/docs/dev/release-checklist.md +9 -11
  40. package/docs/enterprise/integration-cookbook.md +2 -0
  41. package/docs/enterprise/migration.md +1 -1
  42. package/docs/enterprise/performance.md +3 -1
  43. package/docs/enterprise/sdk-guide.md +2 -0
  44. package/docs/enterprise/security.md +2 -0
  45. package/docs/plans/FORGE-AUTONOMOUS-QUEUE.md +2 -2
  46. package/docs/research-2026-07/OBSERVABILITY-TOOL-SPEC.md +1 -1
  47. package/docs/retrospectives/v7.5.15-honesty-audit.md +2 -2
  48. package/docs/test-scenarios/enterprise-scenarios.md +2 -2
  49. package/docs/v10/ARCHITECT-CUTS.md +9 -9
  50. package/docs/v10/BACKLOG.md +7 -7
  51. package/docs/v10/BOARD.md +25 -25
  52. package/docs/v10/CONTROL-PLANE.md +4 -4
  53. package/docs/v10/CP-ENTERPRISE-UI.md +66 -66
  54. package/docs/v10/D51-PHASE-B.md +1 -1
  55. package/docs/v10/DECISIONS.md +3 -3
  56. package/docs/v10/DEPS.md +10 -10
  57. package/docs/v10/FAILURE-CLASSES.md +45 -1
  58. package/docs/v10/LEGACY-REMOVAL.md +2 -2
  59. package/docs/v10/SWARM.md +2 -2
  60. package/loki-ts/dist/cockpit.js +11 -11
  61. package/loki-ts/dist/loki.js +596 -579
  62. package/magic/core/design_tokens.py +1 -2
  63. package/magic/core/generator.py +2 -2
  64. package/magic/tokens/README.md +1 -3
  65. package/mcp/__init__.py +1 -1
  66. package/package.json +2 -7
  67. package/packages/control-plane/dist/server.js +1683 -843
  68. package/packages/control-plane/src/server/legacy/routes-audit.ts +50 -0
  69. package/packages/control-plane/src/server/legacy/routes-control.ts +26 -0
  70. package/packages/control-plane/src/server/legacy/routes-memory.ts +30 -0
  71. package/packages/control-plane/src/server/legacy/routes.ts +58 -58
  72. package/packages/control-plane/src/server/legacy/shim.ts +10 -4
  73. package/packages/control-plane/src/server/routes/checkpoints.ts +171 -0
  74. package/packages/control-plane/src/server/routes/index.ts +4 -1
  75. package/packages/control-plane/src/server/routes/memory.ts +219 -0
  76. package/packages/control-plane/src/server/routes/session_control.ts +155 -0
  77. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  78. package/references/magic-modules-patterns.md +2 -2
  79. package/skills/factory-operations.md +3 -3
  80. package/skills/magic-modules.md +1 -1
  81. package/skills/release-cadence.md +1 -1
  82. package/tools/audit-docs.py +1 -1
  83. package/tools/index-codebase.py +1 -1
  84. package/web-app/dist/assets/{AdminPage-DDDvUz0N.js → AdminPage-DqMnfZrH.js} +1 -1
  85. package/web-app/dist/assets/{Avatar-Dcdz46i6.js → Avatar-BEof29du.js} +1 -1
  86. package/web-app/dist/assets/{Badge-BB24cCpK.js → Badge-WD53OL5m.js} +1 -1
  87. package/web-app/dist/assets/{Button-D0-DmPZL.js → Button-Rzk5flhU.js} +1 -1
  88. package/web-app/dist/assets/{CockpitPage-CdjpU2JW.js → CockpitPage-Bqz3PCMh.js} +1 -1
  89. package/web-app/dist/assets/{ComparePage-DT5U0y0d.js → ComparePage-Byo2NzAZ.js} +1 -1
  90. package/web-app/dist/assets/{ErrorBoundary-lEHcl0EO.js → ErrorBoundary-BuE0kH3W.js} +1 -1
  91. package/web-app/dist/assets/{EvidenceReceiptPanel-GpnWvdCr.js → EvidenceReceiptPanel-CKFHOPBx.js} +1 -1
  92. package/web-app/dist/assets/{GitHubIssuesPanel-C7VOh1B7.js → GitHubIssuesPanel-Df_kTMqI.js} +1 -1
  93. package/web-app/dist/assets/{GitHubPRsPanel-G_kOuINv.js → GitHubPRsPanel-CouvcKrZ.js} +1 -1
  94. package/web-app/dist/assets/{HomePage-PqRisOny.js → HomePage-dEpLzj0x.js} +2 -2
  95. package/web-app/dist/assets/{LoginPage-DU7pFAkf.js → LoginPage-6DVjUND5.js} +1 -1
  96. package/web-app/dist/assets/{MagicPage-C5JWIWMk.js → MagicPage-BDQ9MOfY.js} +1 -1
  97. package/web-app/dist/assets/{MetricsPage-CbIGS_qo.js → MetricsPage-CXiJ04G_.js} +1 -1
  98. package/web-app/dist/assets/{NotFoundPage-vU1pvdSt.js → NotFoundPage-BaXhZvyj.js} +1 -1
  99. package/web-app/dist/assets/{ProjectPage-SsixIPPv.js → ProjectPage-BzE4V7Ti.js} +3 -3
  100. package/web-app/dist/assets/{ProjectsPage-BfQKSR9k.js → ProjectsPage-ipf6TLMX.js} +1 -1
  101. package/web-app/dist/assets/{SettingsPage-B8YfXAom.js → SettingsPage-BDxkUKN6.js} +1 -1
  102. package/web-app/dist/assets/{ShowcasePage-Ba407f2-.js → ShowcasePage-YQXD72SM.js} +1 -1
  103. package/web-app/dist/assets/{SystemSettingsPage-DzNQhhBS.js → SystemSettingsPage-Dou7zHS0.js} +1 -1
  104. package/web-app/dist/assets/{TeamsPage-tqUnpZ15.js → TeamsPage-CQarfcYr.js} +1 -1
  105. package/web-app/dist/assets/{TemplatesPage-ClB5EpI3.js → TemplatesPage-CPi1R8Xj.js} +1 -1
  106. package/web-app/dist/assets/{TerminalOutput-CBvpYfEu.js → TerminalOutput-WiGhWdYD.js} +1 -1
  107. package/web-app/dist/assets/{activity-C1s0L_X9.js → activity-DOa7ejQA.js} +1 -1
  108. package/web-app/dist/assets/{bell-DMEiXr73.js → bell-CX-VAlYN.js} +1 -1
  109. package/web-app/dist/assets/{bot-BF_xIOxu.js → bot-EDXaZmHc.js} +1 -1
  110. package/web-app/dist/assets/{check-Dv1Ynvrs.js → check-CnBdKk3L.js} +1 -1
  111. package/web-app/dist/assets/{chevron-left-Ddhsod7S.js → chevron-left-BJ_ydRQW.js} +1 -1
  112. package/web-app/dist/assets/{circle-alert-OATHUkBZ.js → circle-alert-tz8ufhc_.js} +1 -1
  113. package/web-app/dist/assets/{clock-C1Ltva07.js → clock-DFBZPSsH.js} +1 -1
  114. package/web-app/dist/assets/{cloud-B-S4oOy9.js → cloud-uy3p_5Q7.js} +1 -1
  115. package/web-app/dist/assets/{code-xml-D3Femn_F.js → code-xml-3CbYD9YL.js} +1 -1
  116. package/web-app/dist/assets/{database-DBSeFgO3.js → database-YiNBXc9c.js} +1 -1
  117. package/web-app/dist/assets/{dollar-sign-sgDgNuGE.js → dollar-sign-D0wBa4Cv.js} +1 -1
  118. package/web-app/dist/assets/{file-code-corner-C-MbdZEc.js → file-code-corner-DDdZVZ5v.js} +1 -1
  119. package/web-app/dist/assets/{file-plus-CCB6yqXv.js → file-plus-D09LTBqt.js} +1 -1
  120. package/web-app/dist/assets/{globe-DlbrNAj1.js → globe-BirTPwff.js} +1 -1
  121. package/web-app/dist/assets/{hammer-B-DWm695.js → hammer-DaE5qgnd.js} +1 -1
  122. package/web-app/dist/assets/{index-Dvny-1SU.js → index-D8t7KnQf.js} +3 -3
  123. package/web-app/dist/assets/{layers-99qsKpOT.js → layers-DVVrckRY.js} +1 -1
  124. package/web-app/dist/assets/{loader-circle-ZvZyZl3J.js → loader-circle-2-nMGmcb.js} +1 -1
  125. package/web-app/dist/assets/{lock-DosGjcxP.js → lock-D0Xj43pC.js} +1 -1
  126. package/web-app/dist/assets/{package-C-PumesN.js → package-BB7S3egm.js} +1 -1
  127. package/web-app/dist/assets/{plus-CTYYskTB.js → plus-BLhoMrn3.js} +1 -1
  128. package/web-app/dist/assets/{refresh-cw-qW2ztTFS.js → refresh-cw-DMc2uPLw.js} +1 -1
  129. package/web-app/dist/assets/{rotate-ccw-ZIKrf-vO.js → rotate-ccw-DM3IP9x7.js} +1 -1
  130. package/web-app/dist/assets/{scroll-text-BamlXjAT.js → scroll-text-lH2uW7rB.js} +1 -1
  131. package/web-app/dist/assets/{server-BljXb79I.js → server-BkerZcdR.js} +1 -1
  132. package/web-app/dist/assets/{shield-alert-Dr6eT9c_.js → shield-alert-B8ohcUfu.js} +1 -1
  133. package/web-app/dist/assets/{thumbs-up-v3oBXZgU.js → thumbs-up-CTIxLzPD.js} +1 -1
  134. package/web-app/dist/assets/{trash-2-BOuIrCpi.js → trash-2-C3zIpsH5.js} +1 -1
  135. package/web-app/dist/assets/{trending-down-Dp7jMCgH.js → trending-down-BTT7wV4Y.js} +1 -1
  136. package/web-app/dist/assets/{trending-up-CDiur-nP.js → trending-up-BzHdCDvF.js} +1 -1
  137. package/web-app/dist/assets/{upload-DxIHXhNE.js → upload-HxR34-A8.js} +1 -1
  138. package/web-app/dist/assets/{usePolling-D2Uu-YZb.js → usePolling-DDj6Fupy.js} +1 -1
  139. package/web-app/dist/assets/{user-BVWCUAfF.js → user-qH5y9yNy.js} +1 -1
  140. package/web-app/dist/index.html +1 -1
  141. package/dashboard/static/assets/mermaid.min.js +0 -2030
  142. package/dashboard/static/cost.html +0 -344
  143. package/dashboard/static/favicon.svg +0 -5
  144. package/dashboard/static/index.html +0 -15577
  145. package/dashboard/static/proofs.html +0 -194
  146. package/dashboard/static/start.html +0 -131
  147. package/dashboard/static/trust.html +0 -325
@@ -68,7 +68,7 @@ Change the `open` URL from `http://127.0.0.1:${PURPLE_LAB_DEFAULT_PORT}/` to `ht
68
68
  ## Release Pipeline Wiring
69
69
 
70
70
  ### 7. Root `package.json` `prepublishOnly` (line ~106)
71
- Append `&& cd ../web-app && npm ci && npm run build && test -f dist/index.html` after the existing dashboard-ui build.
71
+ Append `&& cd ../web-app && npm ci && npm run build && test -f dist/index.html` after the existing legacy-ui build.
72
72
 
73
73
  ### 8. `Dockerfile`
74
74
  Add `COPY` for web-app build artifacts + server files. Mirror the `dashboard/` COPY pattern. (Merge-4 owns the actual import; Merge-3 ensures files are in the image.)
@@ -109,7 +109,7 @@ run_check "web-app build produces /lab/-prefixed assets" \
109
109
  ## NOT Done In This Phase
110
110
 
111
111
  - Auto-spawn web-app subprocess from `loki dashboard` (Merge-4).
112
- - Sidebar entry in `dashboard/static/index.html` (Merge-6).
112
+ - Sidebar entry in `legacy-ui-static/index.html` (Merge-6).
113
113
  - Deep state dedup (Merge-5).
114
114
  - Deprecation of `loki web` (Merge-7).
115
115
  - `vite-plugin-html` dev `/` -> `/lab/` redirect (nice-to-have, not blocking).
@@ -90,7 +90,7 @@ Read-only. Returns two honest series plus a budget block:
90
90
  `/api/cost` and `/api/budget` are left UNCHANGED (existing frontend + tests
91
91
  depend on them). The new endpoint is additive.
92
92
 
93
- ### 2. Dashboard panel: `dashboard/static/cost.html`
93
+ ### 2. Dashboard panel: `legacy-ui-static/cost.html`
94
94
 
95
95
  Self-contained, zero-build, all CSS+JS inlined (mirrors `proofs.html`). Fetches
96
96
  `/api/cost/timeline`. Shows: project total, budget gauge with a colored
@@ -144,7 +144,7 @@ Add a non-pausing warn when crossing 80%, keep the 100% pause:
144
144
  ## Files (for the integrator to cherry-pick)
145
145
 
146
146
  - `dashboard/server.py` (add `/api/cost/timeline`)
147
- - `dashboard/static/cost.html` (new)
147
+ - `legacy-ui-static/cost.html` (new)
148
148
  - `autonomy/loki` (add `cmd_cost` + dispatch + help)
149
149
  - `autonomy/run.sh` (warn-at-80% in `check_budget_limit`)
150
150
  - `loki-ts/src/runner/budget.ts` (warn flag)
@@ -94,7 +94,7 @@ is always recomputable from `.loki/proofs/`. Deleting it loses nothing.
94
94
  `/api/cost/timeline`). Reads `.loki/proofs/*/proof.json`, returns the
95
95
  per-run series + per-axis direction + insufficient flag.
96
96
 
97
- 3. Dashboard panel: standalone `dashboard/static/trust.html` + `/trust` route
97
+ 3. Dashboard panel: standalone `legacy-ui-static/trust.html` + `/trust` route
98
98
  (mirrors `cost.html` + `/cost`), plus a nav entry and SPA section in
99
99
  `build-standalone.js` (mirrors the cost panel wiring exactly).
100
100
 
@@ -21,7 +21,7 @@ the codebase has not changed (reuses the R1 codebase-signature idea).
21
21
  | Org knowledge graph | `memory/knowledge_graph.py` (`OrganizationKnowledgeGraph`) | Token-overlap scoring idea reused (`_tokenize` / `query_patterns`). NOT a codebase index -- it aggregates `.loki/memory/semantic/*.json` patterns across projects, keyed on `~/.loki/knowledge`. See "Honest reuse" below. |
22
22
  | Memory retrieval | `memory/retrieval.py` (`MemoryRetrieval`) | Inspected. It retrieves memory entries (episodic/semantic/procedural), NOT source code. Not a code indexer. Not reused for code retrieval. |
23
23
  | Dashboard read-API + traversal-safety | `dashboard/server.py:7191` (`_safe_proof_run_dir`) | Pattern reused for the wiki section/path param (`_safe_wiki_section`). |
24
- | Dashboard web components | `dashboard-ui/components/*.js` (Web Components) | New `loki-wiki-browser.js` follows the same `LokiElement` convention; registered in `index.js`. |
24
+ | Dashboard web components | `legacy-ui/components/*.js` (Web Components) | New `loki-wiki-browser.js` follows the same `LokiElement` convention; registered in `index.js`. |
25
25
 
26
26
  ### Honest reuse statement
27
27
 
@@ -33,7 +33,7 @@ dashboard `GET /api/checkpoints` normalizes them).
33
33
 
34
34
  ### Dashboard
35
35
  - `GET /api/checkpoints`, `GET /api/checkpoints/{id}`, `POST /api/checkpoints` exist.
36
- - The UI component `dashboard-ui/components/loki-checkpoint-viewer.js` (601 lines) ALREADY
36
+ - The UI component `legacy-ui/components/loki-checkpoint-viewer.js` (601 lines) ALREADY
37
37
  renders list + create + rollback-with-two-step-confirm and POSTs to
38
38
  `POST /api/checkpoints/{id}/rollback` -- but that endpoint **did not exist**. The
39
39
  dashboard rollback button was DEAD.
@@ -211,9 +211,9 @@ Every commit proven on BOTH routes (`bin/loki` + `LOKI_LEGACY_BASH=1 bin/loki`).
211
211
  - **FIX in v8 - release-notes bug** (`release.yml:179/231`): awk expects bracketed `## [VERSION]` but
212
212
  CHANGELOG uses unbracketed `## vVERSION`, so release notes have silently been generic. Fix the awk or
213
213
  the header format (one PR, verify the extracted body is non-empty).
214
- - **Dashboard frontend rebuilt** (`cd dashboard-ui && npm ci && npm run build:all`) - writes both
215
- `dashboard-ui/dist/` and `dashboard/static/`.
216
- - **Pre-publish validation** (CLAUDE.md 3a): `npm pack --dry-run` contains web-app/dist + dashboard/static;
214
+ - **Dashboard frontend rebuilt** (`cd legacy-ui && npm ci && npm run build:all`) - writes both
215
+ `legacy-ui/dist/` and `legacy-ui-static/`.
216
+ - **Pre-publish validation** (CLAUDE.md 3a): `npm pack --dry-run` contains web-app/dist + legacy-ui-static;
217
217
  fresh global install serves web app + API.
218
218
  - **Per-job release verification**: `gh run view <id> --json jobs` per channel (npm/Docker/Homebrew/Release),
219
219
  not just "workflow green".
@@ -100,10 +100,10 @@ opt-in advisor path.
100
100
  with allowlist haiku|sonnet|opus|fable (already does). Add start-time selection: `start_build`
101
101
  (server.py:3234) accepts an optional `model` that writes the override file BEFORE launch (so iteration
102
102
  1 picks it up). Validate against the same allowlist + clamp.
103
- - Frontend (dashboard-ui/src): add an accessible model selector (haiku/sonnet/opus) on the start/new-run
103
+ - Frontend (legacy-ui/src): add an accessible model selector (haiku/sonnet/opus) on the start/new-run
104
104
  surface AND a mid-run switcher that calls POST /api/session/model. Real design-system tokens, keyboard
105
105
  accessible, no AI-aesthetic. Show current effective model + that switch applies at next iteration.
106
- Rebuild dashboard/static per CLAUDE.md release step 2.
106
+ Rebuild legacy-ui-static per CLAUDE.md release step 2.
107
107
 
108
108
  ### Lane E - Catalog IDs, pricing note, parity tests [engineer 5]
109
109
  - model_catalog.json: opus-4-7 -> claude-opus-4-8 (3 occurrences), sonnet-4-6 -> claude-sonnet-5
@@ -60,7 +60,7 @@ This document tracks all implementation tasks to achieve tool synergy and compet
60
60
 
61
61
  | Task ID | Task | Status | Priority | Notes |
62
62
  |---------|------|--------|----------|-------|
63
- | SYN-025 | Extract dashboard as reusable web components | Done | High | dashboard-ui/ - ARIA, keyboard nav, focus mgmt - peer reviewed |
63
+ | SYN-025 | Extract dashboard as reusable web components | Done | High | legacy-ui/ - ARIA, keyboard nav, focus mgmt - peer reviewed |
64
64
  | SYN-026 | Create VS Code webview integration | Pending | High | Embed dashboard in VS Code |
65
65
  | SYN-027 | Unify styling and behavior | Pending | Medium | Consistent UX |
66
66
  | SYN-028 | Add dashboard feature parity check | Pending | Low | Ensure all features available |
@@ -75,7 +75,7 @@ loki memory retrieve "authentication"
75
75
  loki api start --port 57374
76
76
  loki api start
77
77
 
78
- # View dashboard (web UI)
78
+ # View the Control Plane UI
79
79
  loki dashboard open
80
80
  ```
81
81
 
@@ -87,7 +87,7 @@ Generated 2026-07-01 by the top100-backlog-enumeration ultracode workflow (7 age
87
87
  | 65 | medium | M | founder-gated | adoption | MCP registry submission + Glama claim + awesome-list PRs |
88
88
  | 66 | medium | M | autonomous | saas | autonomi-saas UI/UX pass: build-watching pane + finished cues from trust verdict |
89
89
  | 67 | medium | XL | autonomous | dashboard | Server.py route modularization (~10K-line monolith, no domain separation) |
90
- | 68 | medium | L | autonomous | dashboard | Large dashboard-ui components modularization (5 files 1K-1.9K lines) |
90
+ | 68 | medium | L | autonomous | dashboard | Large legacy-ui components modularization (5 files 1K-1.9K lines) |
91
91
  | 69 | medium | L | founder-gated | engine | Wave-13 deferred trust fixes + PRD-reuse spurious-update design fix |
92
92
  | 70 | medium | M | community | dashboard | Dashboard dark-toggle iframe theme not following SPA (harness/product parity) |
93
93
  | 71 | medium | M | community | ci | Sonnet-5 calibration follow-ups: test-verify --hosted + gate missing-tool handling |
@@ -121,7 +121,7 @@ mv loki-mode-8.0.0 ~/.claude/skills/loki-mode
121
121
 
122
122
  > **DEPRECATED as of v7.2.0.** The Loki Mode VS Code extension is no longer
123
123
  > maintained and is no longer published to the VS Code Marketplace. Use the
124
- > dashboard instead (`loki dashboard start`, then open http://localhost:57374).
124
+ > Control Plane instead (`loki dashboard`).
125
125
  > The `vscode-extension/` source remains in the repository for contributors who
126
126
  > want to build it locally. See
127
127
  > [INSTALLATION.md](INSTALLATION.md#vs-code-extension-deprecated) for details.
@@ -168,7 +168,7 @@ Reasons:
168
168
 
169
169
  ### Phase 3: Build/release tooling
170
170
  - Replace npm publish with `bun publish` in CI
171
- - Replace dashboard-ui esbuild with `bun build` (already 4-5x faster)
171
+ - Replace legacy-ui esbuild with `bun build` (already 4-5x faster)
172
172
  - Replace pytest where possible with `bun test` for non-Python tests
173
173
  - Measure: full CI wall time, npm install time
174
174
 
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Dashboard V2 Architecture
2
2
 
3
+ > **Historical:** this describes the classic dashboard, removed in Loki Mode 10.8. The Control Plane is the only UI; see [control-plane-migration.md](../control-plane-migration.md).
4
+
3
5
  **Status:** Design Phase
4
6
  **Version:** 0.1.0 (Draft)
5
7
  **Date:** 2026-02-01
@@ -1,5 +1,7 @@
1
1
  # Audit Logging
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Audit trails for Loki Mode operations.
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Authentication Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Authentication and access control for Loki Mode dashboard and API.
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Authorization Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Role-based access control (RBAC) for Loki Mode (v5.37.0).
4
6
 
5
7
  ## Overview
@@ -1,5 +1,7 @@
1
1
  # Module 2 Lab: Configure Enterprise Features
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Objective
4
6
 
5
7
  Enable and verify enterprise features: audit logging, OTEL observability, token authentication, and dashboard TLS.
@@ -1,5 +1,7 @@
1
1
  # Module 2: Enterprise Features
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode includes enterprise features for audit logging, observability, authentication, and SIEM integration. These features are controlled via environment variables and can be enabled incrementally.
@@ -1,5 +1,7 @@
1
1
  # Module 4 Lab: Deploy with Docker Compose
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Objective
4
6
 
5
7
  Deploy Loki Mode using Docker Compose, verify the dashboard is accessible, and configure resource limits.
@@ -1,5 +1,7 @@
1
1
  # Module 4: Production Deployment
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode can be deployed using Docker, Docker Compose, or direct installation via npm/Homebrew. This module covers deployment options, security hardening, resource management, and production configuration.
@@ -0,0 +1,97 @@
1
+ # Migrating from the classic dashboard to the Control Plane
2
+
3
+ Loki Mode 10.8 removes the classic dashboard UI (`dashboard-ui/`, `dashboard/static/`, and the UI served on port 57374). The Control Plane (`packages/control-plane`, UI in `packages/control-plane/ui`) is the only UI. Deploy files (Helm, compose, ECS) and the clients (SDKs, VS Code, `run.sh`) already point at it.
4
+
5
+ ## What changed
6
+
7
+ | Before | Now |
8
+ | --- | --- |
9
+ | UI and API on port 57374 (FastAPI, `dashboard/server.py`) | Control Plane on port 47821 by default (`loki control serve`) |
10
+ | `loki dashboard start` serves the classic UI | `loki dashboard`, `loki dashboard start` and `loki dashboard open` open the Control Plane |
11
+ | `dashboard-ui` build (`npm run build:all`) | `cd packages/control-plane && bun run build:all` (UI plus bundled server) |
12
+ | REST under `/api/*` | REST under `/v1/*`, plus `/health` and `/ready` |
13
+ | Token management through the dashboard | One bearer token, `LOKI_CONTROL_TOKEN`, on `/v1/*` |
14
+
15
+ ## Start the Control Plane
16
+
17
+ ```bash
18
+ loki control serve # 127.0.0.1:47821, database ~/.loki/control/control.db
19
+ loki control serve --port 0 # any free port; the printed URL is the real one
20
+ loki control status # reachable? how many runs held?
21
+ loki dashboard # reuse a running Control Plane, or start one, and open it
22
+ ```
23
+
24
+ Notes:
25
+
26
+ - Bun is required (https://bun.sh). Without it `loki dashboard` says so and does not start a server.
27
+ - The default port falls back to any free port when 47821 is taken. An explicit `--port` or `LOKI_CONTROL_PORT` never falls back.
28
+ - While `loki control serve` runs, runs on this machine ship to it automatically through `~/.loki/control/instance.json`. A run never starts the server.
29
+ - Import runs that finished before the server existed: `loki control backfill [DIR]`.
30
+ - Remove runs: `loki control prune --repo OWNER/NAME` or `--before ISO_DATE`, with `--dry-run` to preview.
31
+ - `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` print the URL instead of opening a browser.
32
+ - `LOKI_CONTROL=0` turns the Control Plane off. `LOKI_CONTROL_DEFAULT=0` makes the bare `loki dashboard` skip it.
33
+
34
+ Environment variables:
35
+
36
+ | Variable | Meaning |
37
+ | --- | --- |
38
+ | `LOKI_CONTROL_PORT` | listen port for `loki control serve`, and the port clients assume (default 47821) |
39
+ | `LOKI_CONTROL_URL` | where clients and the shipper send runs (overrides discovery) |
40
+ | `LOKI_CONTROL_DB` | SQLite path (default `~/.loki/control/control.db`) |
41
+ | `LOKI_CONTROL_HOST` | bind address (default 127.0.0.1) |
42
+ | `LOKI_CONTROL_TOKEN` | bearer token for `/v1/*`; required for any non-loopback bind, otherwise the server exits 2 |
43
+ | `LOKI_CONTROL_ALLOW_INSECURE_BIND` | `1` accepts a tokenless non-loopback bind (not recommended) |
44
+ | `LOKI_CONTROL_ANSWER_DIR` | where BLOCKED-run answers are written |
45
+
46
+ With a token set, send `Authorization: Bearer <token>` on every `/v1/*` call. Actions that touch the machine (start, stop, import, delete, config) exist only on a loopback-bound server and need a JSON content type.
47
+
48
+ ## Route mapping
49
+
50
+ Legacy routes come from `dashboard/server.py`. Rows marked "no direct legacy route" are Control Plane routes that did not exist in the classic server.
51
+
52
+ | Legacy | Control Plane |
53
+ | --- | --- |
54
+ | `GET /api/status` | `GET /v1/runs` (list, filters `verdict`, `repo`, `since`, `until`, `group_id`, `limit`, `cursor`), `GET /v1/runs/<source>/<run>` (detail), `GET /v1/stats` |
55
+ | `GET /api/cost` | `GET /v1/stats/cost` |
56
+ | `POST /api/control/start` | `POST /v1/start` (alias `POST /v1/runs`) |
57
+ | `POST /api/control/stop` | `POST /v1/runs/<source>/<run>/stop` |
58
+ | `POST /api/control/resume` | `POST /v1/runs/<source>/<run>/resume` |
59
+ | (none) | `POST /v1/runs/<source>/<run>/retry`, `POST /v1/runs/<source>/<run>/verify`, `POST /v1/runs/<source>/<run>/answer` |
60
+ | log streaming | `GET /v1/runs/<source>/<run>/events`, `GET /v1/runs/<source>/<run>/stream`, `GET /v1/stream`, `GET /v1/runs/<source>/<run>/artifact/<path>` |
61
+ | `GET /api/audit` | `GET /v1/audit` |
62
+ | `GET /api/health` family | `GET /health` (liveness), `GET /ready` (database check) |
63
+ | (no direct legacy route) | `GET /v1/config`, `PUT /v1/config` |
64
+ | (no direct legacy route) | `GET /v1/providers`, `GET /v1/integrations` |
65
+ | (no direct legacy route) | `GET /v1/notifications` |
66
+ | (no direct legacy route) | `GET /v1/merge/queue`, `POST /v1/merge/queue`, `POST /v1/merge/run`, `GET /v1/review/risk` |
67
+ | (no direct legacy route) | `GET /v1/keys` (public key only, loopback only) |
68
+ | (no direct legacy route) | `GET /v1/repos` (names only, loopback only) |
69
+ | (no direct legacy route) | `POST /v1/ingest`, `POST /v1/import`, `DELETE /v1/runs/<source>/<run>` |
70
+
71
+ ## Not yet available in the Control Plane
72
+
73
+ These legacy features have no Control Plane route today:
74
+
75
+ - `POST /api/control/pause`, `/api/control/app-restart` and `/api/control/app-stop`.
76
+ - `GET /api/audit/summary` and `GET /api/audit/verify` (the Control Plane has `GET /v1/audit` only).
77
+ - `GET /api/cost/timeline` and `GET /api/health/processes`.
78
+ - API key creation, rotation and revocation (`/api/keys` POST routes, `loki dashboard token`), RBAC and OIDC login. The Control Plane uses the single `LOKI_CONTROL_TOKEN`.
79
+ - The `/lab/` web app and the memory browser.
80
+ - Classic-server options: `loki dashboard --host`, `--tls-cert`, `--tls-key`, `LOKI_DASHBOARD_CORS`, `LOKI_DASHBOARD_PORT` for the UI.
81
+
82
+ ## Deploy
83
+
84
+ - Container, Helm and ECS overview: [control-plane-container.md](control-plane-container.md).
85
+ - Docker Compose: `deploy/docker-compose/README.md`. The UI is on host port 57374 by default (`LOKI_DASHBOARD_PORT`), mapped to the Control Plane on container port 47821. `LOKI_CONTROL_TOKEN` is required in `.env`; open the UI with `#token=<token>` appended.
86
+ - Helm: `deploy/helm/README.md` (chart at `deploy/helm/autonomi`, Control Plane deployment in `templates/deployment-controlplane.yaml`).
87
+ - ECS: `deploy/ecs/README.md` and `deploy/ecs/control-plane-task.json` (run exactly one task, the database is single-writer).
88
+
89
+ ## Clients
90
+
91
+ SDKs, the VS Code extension and `run.sh` talk to the Control Plane. Set `LOKI_CONTROL_URL` (and `LOKI_CONTROL_TOKEN` when the server has one) to point them at a remote instance.
92
+
93
+ ## Building from source
94
+
95
+ ```bash
96
+ cd packages/control-plane && bun run build:all # UI plus dist/server.js
97
+ ```
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Dashboard v5.40.0
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and its port 57374 are removed in Loki Mode 10.8. The Control Plane (`loki control serve`, default port 47821) is the only UI. See [control-plane-migration.md](control-plane-migration.md) for startup, the `/api/*` to `/v1/*` route mapping and what is not yet available.
4
+
3
5
  A production-ready realtime dashboard for monitoring and managing Loki Mode autonomous operations. Features a dark Vercel/Linear-inspired theme with purple accents, sidebar navigation, and overview cards.
4
6
 
5
7
  ## Overview
@@ -15,16 +17,13 @@ The Loki Mode Dashboard provides a visual interface to:
15
17
  ## Quick Start
16
18
 
17
19
  ```bash
18
- # Start the dashboard (default port: 57374)
19
- loki dashboard start
20
-
21
- # Open in browser
22
- open http://localhost:57374
20
+ # Open the Control Plane (starts `loki control serve` on 127.0.0.1:47821 if none is running)
21
+ loki dashboard
23
22
  ```
24
23
 
25
24
  The dashboard automatically syncs with Loki Mode when it's running, polling `dashboard-state.json` every 2 seconds.
26
25
 
27
- **Ports:** The dashboard and API run on unified port **57374** (FastAPI serves both). See [INSTALLATION.md](INSTALLATION.md#ports) for details.
26
+ **Ports:** the Control Plane serves the UI and `/v1/*` API on port **47821** by default. See [INSTALLATION.md](INSTALLATION.md#ports) for details.
28
27
 
29
28
  **Bound port:** if 57374 is held by something that is not this install's dashboard (another project, an older version, a foreign process), Loki walks to the next free port and never reuses or opens the foreign one. `loki start` and `loki dashboard` open and print the URL of the port actually bound; `loki start` publishes it to `.loki/dashboard/url`. A running dashboard is reused only when its `/health` reports the same version and install path.
30
29
 
@@ -485,4 +484,4 @@ Useful for:
485
484
 
486
485
  ## Control Plane by default
487
486
 
488
- Bare `loki` and `loki dashboard` (also `start` or `open` with no other flags) open the Control Plane. If `~/.loki/control/instance.json` names a live loopback server whose `/health` reports `service=loki-control`, that URL is reused; otherwise `loki control serve` is started detached and its PID is recorded in `~/.loki/control/serve.pid`. With `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` the URL is printed and no browser is opened. Without bun, Loki prints one line naming bun and uses the classic dashboard. Set `LOKI_CONTROL_DEFAULT=0` to always use the classic dashboard. Multi-repo `loki workspace` is on by default; `LOKI_WORKSPACES=0` disables it.
487
+ Bare `loki` and `loki dashboard` (also `start` or `open` with no other flags) open the Control Plane. If `~/.loki/control/instance.json` names a live loopback server whose `/health` reports `service=loki-control`, that URL is reused; otherwise `loki control serve` is started detached and its PID is recorded in `~/.loki/control/serve.pid`. With `LOKI_HEADLESS=1`, `LOKI_NO_BROWSER=1` or `--no-open` the URL is printed and no browser is opened. Without bun, Loki prints one line naming bun and does not start a server (the classic dashboard is removed in 10.8). Multi-repo `loki workspace` is on by default; `LOKI_WORKSPACES=0` disables it.
@@ -82,13 +82,13 @@ context (the v9.22.13 bug: its body says "v9.24.0 is the next version on
82
82
  npm") or over-carry on a stale npm read, so auto-detect was removed
83
83
  entirely rather than patched again.
84
84
 
85
- ### 2. Build Dashboard Frontend
85
+ ### 2. Build Web App
86
86
 
87
87
  ```bash
88
- cd dashboard-ui && npm ci && npm run build:all && cd ..
89
- ls -la dashboard/static/index.html # verify >100KB
88
+ cd web-app && npm ci && npm run build && cd ..
89
+ ls -la web-app/dist/index.html
90
90
  ```
91
- `npm publish`'s `prepublishOnly` also triggers this build automatically.
91
+ `npm publish`'s `prepublishOnly` also triggers this build automatically. The legacy dashboard UI was removed; the browser UI is the Control Plane (`packages/control-plane`).
92
92
 
93
93
  ### 3. Run Tests
94
94
 
@@ -97,15 +97,13 @@ bash -n autonomy/run.sh
97
97
  bash -n autonomy/loki
98
98
  python3 -c "import ast, os; [ast.parse(open(f'dashboard/{f}').read()) for f in os.listdir('dashboard') if f.endswith('.py')]"
99
99
  python3 -c "import json; json.load(open('package.json')); print('JSON OK')"
100
- cd dashboard-ui && npx playwright test && cd .. # requires dashboard on 57374
101
100
  ```
102
101
 
103
102
  ### 3a. Pre-Publish Validation (MANDATORY)
104
103
 
105
104
  ```bash
106
- npm pack --dry-run 2>&1 | grep -E "web-app/dist|dashboard/static" || echo "FAIL: expected files missing"
105
+ npm pack --dry-run 2>&1 | grep -E "web-app/dist" || echo "FAIL: expected files missing"
107
106
  git ls-files web-app/dist/index.html | grep -q . || echo "FAIL: web-app/dist/ not tracked"
108
- git ls-files dashboard/static/index.html | grep -q . || echo "FAIL: dashboard/static/ not tracked"
109
107
  npm pack && npm install -g ./loki-mode-*.tgz
110
108
  loki --version
111
109
  loki web --no-open &
@@ -135,7 +133,7 @@ Before pushing the release commit, run `bash scripts/release.sh --check-clean` (
135
133
  ```bash
136
134
  gh run list --limit 1 && gh run watch <run-id>
137
135
  npm view loki-mode version
138
- npm pack loki-mode --dry-run 2>&1 | grep dashboard/static
136
+ npm pack loki-mode --dry-run 2>&1 | grep web-app/dist
139
137
  docker pull asklokesh/loki-mode:X.Y.Z && docker run --rm asklokesh/loki-mode:X.Y.Z loki version
140
138
  brew update && brew info loki-mode
141
139
  gh release view vX.Y.Z
@@ -148,10 +146,10 @@ Operator action: wait for the Release workflow publish to land and for the D49 a
148
146
 
149
147
  ### Distribution Channel Checklist
150
148
 
151
- | Channel | Dashboard API | Dashboard Frontend | Memory System | Skills/References |
149
+ | Channel | Dashboard API | Web App | Memory System | Skills/References |
152
150
  |---------|--------------------------|------------------------------|---------------|-------------------|
153
- | npm | `dashboard/*.py` | `dashboard/static/index.html`| `memory/` | `skills/`, `references/` |
154
- | Docker | `COPY dashboard/` | Built in Dockerfile or committed | `memory/` | `skills/`, `references/` |
151
+ | npm | `dashboard/*.py` | `web-app/dist/index.html` | `memory/` | `skills/`, `references/` |
152
+ | Docker | `COPY dashboard/` | Built in Dockerfile | `memory/` | `skills/`, `references/` |
155
153
  | Homebrew| Full tarball | Full tarball | Full tarball | Full tarball |
156
154
  | VSCode | DEPRECATED v7.2.0 -- no longer published | -- | -- | -- |
157
155
  | Release | Skill-only zip | N/A | N/A | `references/` |
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Integration Cookbook
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Step-by-step guides for connecting Loki Mode to external services. Each integration is opt-in and configured via environment variables.
4
6
 
5
7
  ---
@@ -226,7 +226,7 @@ npm install loki-mode-sdk
226
226
  #### 5. Test Enterprise Features
227
227
 
228
228
  ```bash
229
- # Start dashboard
229
+ # Open the Control Plane (the classic /api/* routes are replaced by /v1/*, see docs/control-plane-migration.md)
230
230
  loki dashboard
231
231
 
232
232
  # Test API
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Enterprise Performance Tuning
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Enterprise features are designed for minimal overhead. When disabled (no env vars set), every enterprise subsystem returns no-op responses with zero I/O. This guide covers tuning for production environments where enterprise features are actively used.
@@ -238,7 +240,7 @@ Rate limits are built into the API layer (10 requests/min on control endpoints,
238
240
 
239
241
  ### Static Asset Caching
240
242
 
241
- The dashboard frontend (`dashboard/static/index.html`) is a single-page application built as an IIFE bundle. Configure your reverse proxy to cache static assets:
243
+ The dashboard frontend (`legacy-ui-static/index.html`) is a single-page application built as an IIFE bundle. Configure your reverse proxy to cache static assets:
242
244
 
243
245
  ```nginx
244
246
  location /static/ {
@@ -1,5 +1,7 @@
1
1
  # Loki Mode SDK Guide
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  Official Python and TypeScript SDKs for the Autonomi Control Plane API. Both SDKs have zero external dependencies -- they use only standard library features.
4
6
 
5
7
  ---
@@ -1,5 +1,7 @@
1
1
  # Loki Mode Enterprise Security
2
2
 
3
+ > **Control Plane migration:** the classic dashboard UI and port 57374 are removed in Loki Mode 10.8; the UI is the Control Plane (`loki dashboard`, default port 47821). Examples below that use port 57374 or `/api/*` describe the legacy API server. See [control-plane-migration.md](../control-plane-migration.md) for the `/v1/*` mapping and what is not yet available.
4
+
3
5
  ## Overview
4
6
 
5
7
  Loki Mode's security model follows a defense-in-depth approach. All security features are opt-in via environment variables, with sensible defaults that prioritize safety. When enterprise auth is not configured, the system operates in local-only mode with no network exposure.
@@ -43,7 +43,7 @@ Last updated: 2026-05-18
43
43
  - [x] F-2.25 Semantic layer: buckets, functions, gateway routes surfaced
44
44
  - [x] F-2.26 Council review hook (migrate_apply emits review records to .loki/quality/forge-migrations/; council read-side consumes from that path)
45
45
  - [x] F-2.27 Dashboard router /api/forge/* (state, db, storage, functions, gateway)
46
- - [~] F-2.28 Dashboard UI: deferred to dedicated dashboard-ui work (router is in place; UI panes are CSS/TSX work that will land in a separate PR)
46
+ - [~] F-2.28 Dashboard UI: deferred to dedicated legacy-ui work (router is in place; UI panes are CSS/TSX work that will land in a separate PR)
47
47
  - [x] F-2.29 CHANGELOG entry for F-2
48
48
  - [x] F-2.30 Commit + push F-2
49
49
 
@@ -196,7 +196,7 @@ Last updated: 2026-05-18
196
196
  ## Status
197
197
 
198
198
  Phase F-1..F-5 + X-11..X-26 + X-28..X-34 complete on
199
- claude/compare-litellm-loki-Y8Ke1. Remaining: X-27 (dashboard-ui).
199
+ claude/compare-litellm-loki-Y8Ke1. Remaining: X-27 (legacy-ui).
200
200
 
201
201
  ## More tasks discovered (next wave)
202
202
 
@@ -56,7 +56,7 @@ Dockerizable and offline-safe. A daily/refresh fetch keeps the numbers current.
56
56
 
57
57
  ## Design language (Autonomi)
58
58
  Match the shipped Autonomi look. Reference files: `artifacts/whitepaper/Autonomi-Whitepaper.html`
59
- and `dashboard/static/trust.html`. Palette: dark bg (#0F0B1A / #0d1117), Autonomi purple accent
59
+ and `legacy-ui-static/trust.html`. Palette: dark bg (#0F0B1A / #0d1117), Autonomi purple accent
60
60
  (#553DE9 / #7B6BF0), verified teal (#2ED8B6 / #1AAF95), dim ink (#B8B0C8 / #8A857C), warning amber
61
61
  (#C4922E), reject red (#C04848). Semantic status colors: verified=teal, reported/pending=amber,
62
62
  mistake/reverted=red, roadmap=purple. Clean, calm, founder-readable; big numbers, short labels,
@@ -24,7 +24,7 @@ self-report taken as evidence.
24
24
  | Doctor `--json` sentrux entry, parity bash + Bun | `autonomy/loki cmd_doctor_json` python emit (Dev4 `f7e95625` brought 15 lines) + `loki-ts/src/commands/doctor.ts:44 SentruxCheck`, `:54 sentrux: SentruxCheck` in DoctorJson, `:310 checkSentrux()` | VERIFIED |
25
25
  | Byte-identical bash vs Bun parity | `tests/test-doctor-json-sentrux.sh` test 13 explicitly runs both routes through `jq -S` then `diff -q`. Test passed. local-ci bun-parity matrix also passed (21/21). | VERIFIED |
26
26
  | `tests/test-doctor-json-sentrux.sh` 13/13 PASS | Reviewer + DA re-run: 13/13 | VERIFIED |
27
- | Dashboard nav UAT -- Escalations sidebar component | `dashboard-ui/components/loki-escalations.js` (NEW, 280 lines), exported in `dashboard-ui/index.js:99`, mounted in `dashboard-ui/scripts/build-standalone.js:798` | VERIFIED |
27
+ | Dashboard nav UAT -- Escalations sidebar component | `legacy-ui/components/loki-escalations.js` (NEW, 280 lines), exported in `legacy-ui/index.js:99`, mounted in `legacy-ui/scripts/build-standalone.js:798` | VERIFIED |
28
28
  | Web vs dashboard help clarification | `autonomy/loki cmd_dashboard_help` and `cmd_web_help` -- confirmed both contain "Note:" blocks cross-referencing the other command. R3 re-ran: 2 matches each. | VERIFIED |
29
29
  | `tests/test-dashboard-nav-uat.sh` 13/13 PASS | DA re-run: 13/13 | VERIFIED |
30
30
  | Pytest gate timeout via `_loki_run_pytest_with_timeout` helper | `autonomy/run.sh:5928` defines helper, called from `:6065` inside `enforce_test_coverage` | VERIFIED |
@@ -49,7 +49,7 @@ Note: The CHANGELOG body in v7.5.15 reads "20/20 PASS" for local-ci. That count
49
49
 
50
50
  Scope gap -- `scripts/local-ci.sh` (4 lines, modified in v7.5.15): this script was changed but is not represented by a row in the table above. The change added one check (the dist rebuild probe). The diff is trivial but the omission is noted here for completeness.
51
51
 
52
- Scope gap -- `dashboard/static/index.html` (318 lines, build artifact): the table confirms the Escalations component was mounted in the build script. It does not confirm that the built artifact is internally consistent beyond that. A full artifact diff was not performed.
52
+ Scope gap -- `legacy-ui-static/index.html` (318 lines, build artifact): the table confirms the Escalations component was mounted in the build script. It does not confirm that the built artifact is internally consistent beyond that. A full artifact diff was not performed.
53
53
 
54
54
  ## 2. Per-agent claim audit
55
55
 
@@ -343,7 +343,7 @@ GIVEN the release workflow's publish-docker job runs
343
343
  AND DOCKERHUB_USERNAME and DOCKERHUB_TOKEN secrets are configured
344
344
  WHEN the job builds the Docker image
345
345
  THEN dashboard frontend is rebuilt first (npm ci && npm run build:all)
346
- AND dashboard/static/index.html existence is verified
346
+ AND legacy-ui-static/index.html existence is verified
347
347
  AND the image is pushed with three tags:
348
348
  - asklokesh/loki-mode:v<VERSION>
349
349
  - asklokesh/loki-mode:<VERSION>
@@ -410,7 +410,7 @@ Source: `deploy/helm/autonomi/templates/secret.yaml:1` (conditional on existingS
410
410
  GIVEN the test.yml workflow has dashboard-build job
411
411
  AND it uses actions/setup-node with cache: npm
412
412
  WHEN the job runs
413
- THEN npm dependencies are cached via cache-dependency-path: dashboard-ui/package-lock.json
413
+ THEN npm dependencies are cached via cache-dependency-path: legacy-ui/package-lock.json
414
414
  AND subsequent runs skip "npm ci" download phase
415
415
  AND build verification checks output size > 100KB
416
416
  ```