loki-mode 10.6.0 → 10.6.7

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 (107) hide show
  1. package/.github/actions/issue-to-pr/action.yml +25 -11
  2. package/.github/workflows/loki-issue-to-pr.yml +21 -10
  3. package/README.md +113 -356
  4. package/SKILL.md +11 -8
  5. package/VERSION +1 -1
  6. package/autonomy/loki +77 -6
  7. package/autonomy/run.sh +26 -1
  8. package/autonomy/telemetry.sh +1 -1
  9. package/bin/loki +9 -1
  10. package/completions/_loki +1 -0
  11. package/completions/loki.bash +2 -2
  12. package/dashboard/__init__.py +1 -1
  13. package/docs/AUDIT-CHAIN-THREAT-MODEL.md +1 -1
  14. package/docs/DEMOS.md +11 -26
  15. package/docs/EVALUATING.md +2 -3
  16. package/docs/INSTALLATION.md +6 -5
  17. package/docs/TOOLS.md +1 -1
  18. package/docs/air-gapped.md +1 -1
  19. package/docs/dashboard-guide.md +2 -0
  20. package/docs/dev/project-structure.md +1 -1
  21. package/docs/dev/release-checklist.md +1 -2
  22. package/docs/enterprise/architecture.md +1 -1
  23. package/docs/siem-integration.md +2 -2
  24. package/docs/v10/CONTROL-PLANE.md +1 -1
  25. package/docs/v10/D61-SPEED.md +78 -0
  26. package/docs/v10/DECISIONS.md +12 -0
  27. package/docs/v10/DEPS.md +16 -0
  28. package/docs/v10/GUIDE.md +63 -1
  29. package/docs/v10/HANDOFF-NEXT-WEEK.md +34 -0
  30. package/loki-ts/dist/loki.js +571 -563
  31. package/mcp/__init__.py +1 -1
  32. package/package.json +7 -2
  33. package/packages/control-plane/dist/server.js +5919 -0
  34. package/packages/control-plane/drizzle/0000_new_maelstrom.sql +49 -0
  35. package/packages/control-plane/drizzle/meta/0000_snapshot.json +343 -0
  36. package/packages/control-plane/drizzle/meta/_journal.json +13 -0
  37. package/packages/control-plane/package.json +20 -0
  38. package/packages/control-plane/src/db/migrate.ts +20 -0
  39. package/packages/control-plane/src/db/schema.ts +54 -0
  40. package/packages/control-plane/src/server/app.ts +63 -0
  41. package/packages/control-plane/src/server/ingest.ts +52 -0
  42. package/packages/control-plane/src/server/runs.ts +116 -0
  43. package/packages/control-plane/src/server/serve.ts +15 -0
  44. package/packages/control-plane/src/shipper/backfill.ts +40 -0
  45. package/packages/control-plane/src/shipper/ship.ts +95 -0
  46. package/packages/control-plane/ui/dist/assets/index-B6EiyukW.js +114 -0
  47. package/packages/control-plane/ui/dist/assets/index-BH3LtKcG.css +1 -0
  48. package/packages/control-plane/ui/dist/index.html +13 -0
  49. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  50. package/web-app/dist/assets/{AdminPage-B8LTaWIa.js → AdminPage-DyjnUcaP.js} +1 -1
  51. package/web-app/dist/assets/{Avatar-BbxCTNns.js → Avatar-CY0sQNao.js} +1 -1
  52. package/web-app/dist/assets/{Badge-DIjrBQFC.js → Badge-BmwTRu72.js} +1 -1
  53. package/web-app/dist/assets/{Button-LgRYqCHv.js → Button-BRf5aTlb.js} +1 -1
  54. package/web-app/dist/assets/{CockpitPage-BgEdvdXX.js → CockpitPage-RR94HuxS.js} +1 -1
  55. package/web-app/dist/assets/{ComparePage-BPttVkSu.js → ComparePage-CFWAuPRO.js} +1 -1
  56. package/web-app/dist/assets/{ErrorBoundary-DCPrb7ec.js → ErrorBoundary-4cDADrG-.js} +1 -1
  57. package/web-app/dist/assets/{EvidenceReceiptPanel-BLqfCaoK.js → EvidenceReceiptPanel-ChPFx2eM.js} +1 -1
  58. package/web-app/dist/assets/{GitHubIssuesPanel-Ch61Yw6v.js → GitHubIssuesPanel-B0TAjyeW.js} +1 -1
  59. package/web-app/dist/assets/{GitHubPRsPanel-Cju9OEP1.js → GitHubPRsPanel-BbszEwW9.js} +1 -1
  60. package/web-app/dist/assets/{HomePage-BSt5tg3Z.js → HomePage-DrBgzs1d.js} +2 -2
  61. package/web-app/dist/assets/{LoginPage-Cj9xl0pH.js → LoginPage-Bu7b2DGz.js} +1 -1
  62. package/web-app/dist/assets/{MagicPage-CyfrX553.js → MagicPage-BFEYp631.js} +1 -1
  63. package/web-app/dist/assets/{MetricsPage-Ck6jFgAN.js → MetricsPage-eIe2naVR.js} +1 -1
  64. package/web-app/dist/assets/{NotFoundPage-CA_HlCgz.js → NotFoundPage-BVWYkNt9.js} +1 -1
  65. package/web-app/dist/assets/{ProjectPage-BkpztOmm.js → ProjectPage-zmxyu732.js} +3 -3
  66. package/web-app/dist/assets/{ProjectsPage-urTkLe8m.js → ProjectsPage-Dq5NdCak.js} +1 -1
  67. package/web-app/dist/assets/{SettingsPage-COvHhevh.js → SettingsPage-CCrJOMe0.js} +1 -1
  68. package/web-app/dist/assets/{ShowcasePage-BNIiqhqk.js → ShowcasePage-n-Ipzp01.js} +1 -1
  69. package/web-app/dist/assets/{SystemSettingsPage-CBPa5u-v.js → SystemSettingsPage-CP_rjYXK.js} +1 -1
  70. package/web-app/dist/assets/{TeamsPage-DuuHXfkP.js → TeamsPage-B_P9DepW.js} +1 -1
  71. package/web-app/dist/assets/{TemplatesPage-C8tRhU8-.js → TemplatesPage-h-3A6PQT.js} +1 -1
  72. package/web-app/dist/assets/{TerminalOutput-BOL99fiQ.js → TerminalOutput-pD0nJ1BU.js} +1 -1
  73. package/web-app/dist/assets/{activity-92O1sR3_.js → activity-ChFwzT-d.js} +1 -1
  74. package/web-app/dist/assets/{bell-CeWSKe4w.js → bell-BX-eK8Gu.js} +1 -1
  75. package/web-app/dist/assets/{bot-n8nzxbS2.js → bot-fj5PkPtR.js} +1 -1
  76. package/web-app/dist/assets/{check-C-8ho0t2.js → check-BGAbHlvD.js} +1 -1
  77. package/web-app/dist/assets/{chevron-left-D4UQrt8-.js → chevron-left-BzFUxHgb.js} +1 -1
  78. package/web-app/dist/assets/{circle-alert-BnxgnWHv.js → circle-alert-BQrg5DWl.js} +1 -1
  79. package/web-app/dist/assets/{clock-DgbJFbcN.js → clock-CTu9lkVo.js} +1 -1
  80. package/web-app/dist/assets/{cloud-BSEYN8y8.js → cloud-DrIENRiE.js} +1 -1
  81. package/web-app/dist/assets/{code-xml-CFYOlC1u.js → code-xml-PaoVpfur.js} +1 -1
  82. package/web-app/dist/assets/{database-DNJ4cz62.js → database-DMmkAotn.js} +1 -1
  83. package/web-app/dist/assets/{dollar-sign-DZ1zEfep.js → dollar-sign-B2LQdBoX.js} +1 -1
  84. package/web-app/dist/assets/{file-code-corner-D9vIN2Ru.js → file-code-corner-Dfv1XXeR.js} +1 -1
  85. package/web-app/dist/assets/{file-plus-B4TugJYw.js → file-plus-D2Wzf2wd.js} +1 -1
  86. package/web-app/dist/assets/{globe-BPNU50l7.js → globe-DxotVWt8.js} +1 -1
  87. package/web-app/dist/assets/{hammer-CwVF_APh.js → hammer-Brfy5ZrJ.js} +1 -1
  88. package/web-app/dist/assets/{index-DnAhEaY4.js → index-BfhHMwi8.js} +3 -3
  89. package/web-app/dist/assets/{layers-DNBXP7Gs.js → layers-DfxSWDvp.js} +1 -1
  90. package/web-app/dist/assets/{loader-circle-bh-SWjhS.js → loader-circle-CxIrzNwx.js} +1 -1
  91. package/web-app/dist/assets/{lock-CpbXWrBs.js → lock-m6nzhtpU.js} +1 -1
  92. package/web-app/dist/assets/{package-3NG8Vkod.js → package-ri9oE9Jc.js} +1 -1
  93. package/web-app/dist/assets/{plus-C1DPukhG.js → plus-DWeTAMVV.js} +1 -1
  94. package/web-app/dist/assets/{refresh-cw-Cgl65iQ2.js → refresh-cw-BGMSpaMh.js} +1 -1
  95. package/web-app/dist/assets/{rotate-ccw-BS5sMMYV.js → rotate-ccw-DD1xBD_b.js} +1 -1
  96. package/web-app/dist/assets/{scroll-text-BpvzZAZR.js → scroll-text-BCCR_AN9.js} +1 -1
  97. package/web-app/dist/assets/{server-DSLFedy_.js → server-CmMWPIjS.js} +1 -1
  98. package/web-app/dist/assets/{shield-alert-BlG8AkvF.js → shield-alert-BZZmBVEJ.js} +1 -1
  99. package/web-app/dist/assets/{thumbs-up-BJcYgjRU.js → thumbs-up-OaxbNRXu.js} +1 -1
  100. package/web-app/dist/assets/{trash-2-CScLwgFk.js → trash-2-DmcSzTfr.js} +1 -1
  101. package/web-app/dist/assets/{trending-down-BPRGGG_g.js → trending-down-BmfXLykz.js} +1 -1
  102. package/web-app/dist/assets/{trending-up-BpLBFaZo.js → trending-up-Djec3jIq.js} +1 -1
  103. package/web-app/dist/assets/{upload-LgGE0PEa.js → upload-BN8dXIlF.js} +1 -1
  104. package/web-app/dist/assets/{usePolling-0W4sMm7u.js → usePolling-Cu4yi04I.js} +1 -1
  105. package/web-app/dist/assets/{user-D4KBUK1Z.js → user-IBI-k10o.js} +1 -1
  106. package/web-app/dist/index.html +1 -1
  107. package/docs/walkthrough/README.md +0 -44
package/SKILL.md CHANGED
@@ -3,7 +3,9 @@ name: loki-mode
3
3
  description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
4
4
  ---
5
5
 
6
- # Loki Mode v10.6.0
6
+ # Loki Mode v10.6.7
7
+
8
+ **Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the legacy engine, which still ships and is being removed (`loki start owner/repo#N` still routes to it; prefer `loki owner/repo#N`).
7
9
 
8
10
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
11
 
@@ -11,7 +13,7 @@ description: An autonomous software factory that knows what it is supposed to de
11
13
 
12
14
  **Evidence Receipt (verify it yourself).** Every run writes a receipt to `.loki/proofs/<run_id>/` (opt out with `LOKI_PROOF=0`) that separates deterministic FACTS (git diff with base/head SHAs and a `diff_sha256`, the test command + exit code, the build command + exit code, each gate verdict) from AI ASSESSMENTS (the council verdict, labeled judgment not proof). The headline is computed only from the facts: VERIFIED (tests ran a real command and exited 0, diff non-empty, nothing skipped), VERIFIED WITH GAPS (each gap listed by name), or NOT VERIFIED (a check ran and failed). Inspect and re-check with `loki proof list|show <id>|verify <id>` (aliased `loki receipt`); `loki proof verify` re-hashes the receipt (tamper) and re-derives the diff from the recorded base SHA against the live repo (drift), exiting 0 clean / 1 tamper-or-drift / 2 could not check (64 usage, 66 unknown id; see `docs/exit-codes.md`). This is honesty-of-done, not a claim that the code is bug-free.
13
15
 
14
- **Provider-agnostic (stable since v5.0.0):** runs on Claude/Codex/Cline/Aider with abstract model tiers and degraded mode for non-Claude providers; no vendor lock-in. Gemini deprecated v7.5.18. See `skills/providers.md`. **Current track (v8.0.0):** the Anthropic Agent SDK route (see below), spec-mode expansion for OpenAPI/GraphQL/Postman contracts, the runtime-boot and secret-leak evidence axes, and `loki steer` / `loki why` for mid-run control. Earlier tracks: LSP grounding as a first-class agent tool (v7.7.x) and Phase 1 RARV-C closure (real provider judges, gate-failure flock, synthetic PRD e2e, status `--json`).
16
+ **Provider-agnostic (stable since v5.0.0):** runs on Claude/Codex/Cline/Aider with abstract model tiers and degraded mode for non-Claude providers; no vendor lock-in. Gemini deprecated v7.5.18. See `skills/providers.md`. **Legacy track (v8.0.0):** the Anthropic Agent SDK route (see below), spec-mode expansion for OpenAPI/GraphQL/Postman contracts, the runtime-boot and secret-leak evidence axes, and `loki steer` / `loki why` for mid-run control. Earlier tracks: LSP grounding as a first-class agent tool (v7.7.x) and Phase 1 RARV-C closure (real provider judges, gate-failure flock, synthetic PRD e2e, status `--json`).
15
17
 
16
18
  **Runtime migration:** Bash-to-Bun migration. Read-only commands (`version`, `status`, `stats`, `doctor`, `provider show/list`, `memory list/index`) flow through Bun runtime via `bin/loki` since v7.3.0. Every other command remains on the Bash runtime (`autonomy/loki`). Rollback: `LOKI_LEGACY_BASH=1`. See `UPGRADING.md` and `docs/architecture/ADR-001-runtime-migration.md`.
17
19
 
@@ -105,13 +107,13 @@ These rules guide autonomous operation. Test results and code quality always tak
105
107
  | Integration tests, E2E, deployment | **development** | opus | sonnet | effort=high |
106
108
  | Unit tests, linting, docs, simple fixes | **fast** | sonnet | haiku | effort=low |
107
109
 
108
- **Parallelization rule (Claude only):** Launch up to 10 agents simultaneously for independent tasks.
110
+ **Parallelization rule (Claude only):** Launch independent tasks in parallel.
109
111
 
110
112
  **Degraded mode (Codex/Cline/Aider):** No parallel agents or Task tool. Codex has MCP support. Runs RARV cycle sequentially. See `skills/model-selection.md`.
111
113
 
112
114
  **Git worktree parallelism:** For true parallel feature development, use `--parallel` flag with run.sh. See `skills/parallel-workflows.md`.
113
115
 
114
- **Scale patterns (50+ agents, Claude only):** Use judge agents, recursive sub-planners, optimistic concurrency. See `references/cursor-learnings.md`.
116
+ **Scale patterns (Claude only):** Use judge agents, recursive sub-planners, optimistic concurrency. See `references/cursor-learnings.md`.
115
117
 
116
118
  ---
117
119
 
@@ -195,7 +197,7 @@ This protocol governs **skill module** loading -- task-scoped instruction files
195
197
 
196
198
  ## Invocation
197
199
 
198
- **Unified entry point (v6.84.0):** `loki start [SPEC|ISSUE-REF]` auto-detects whether the input is a PRD file, an issue URL, an issue number, or another spec format (e.g. OpenAPI). No need to pick between `loki start` and `loki run` -- the single command handles all cases.
200
+ **Legacy entry point (v6.84.0, being removed; for Loki 10 use `loki "<task>"` or `loki owner/repo#N`):** `loki start [SPEC|ISSUE-REF]` auto-detects whether the input is a PRD file, an issue URL, an issue number, or another spec format (e.g. OpenAPI). No need to pick between `loki start` and `loki run` -- the single command handles all cases.
199
201
 
200
202
  ```bash
201
203
  # Standard mode (Claude - full features)
@@ -459,15 +461,16 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
459
461
  | Bun runtime (Phase 2+) | TBD | Migrate write-path commands; tracked on `feat/bun-migration` |
460
462
  | Managed Agents multiagent path | TBD | `LOKI_EXPERIMENTAL_MANAGED_*` flags -- RESEARCH PREVIEW, not on live API |
461
463
  | Benchmarks | TBD | Runner scripts and datasets exist in `benchmarks/`; no published results |
462
- | `loki run` removal | next major | Currently a deprecated alias for `loki start` |
464
+ | `loki run` removal | with legacy removal | Currently a deprecated alias for `loki start` |
463
465
 
464
466
  ## Deprecated
465
467
 
466
468
  | Item | Deprecated In | Notes |
467
469
  |------|---------------|-------|
468
- | `loki run <issue>` | v6.84.0 | Alias for `loki start`. Will be removed in next major. |
470
+ | `loki run <issue>` | v6.84.0 | Alias for `loki start`. Removal is part of the planned legacy removal. |
471
+ | `loki start`, RARV skill loop | v10.6.6 | Legacy engine, planned for removal; use `loki "<task>"` / `loki owner/repo#N`. |
469
472
  | VSCode extension (`vscode-extension/`) | v7.2.0 | No longer actively maintained; dashboard web UI is the supported front-end. |
470
473
 
471
474
  ---
472
475
 
473
- **v10.6.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
476
+ **v10.6.7 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 10.6.0
1
+ 10.6.7
package/autonomy/loki CHANGED
@@ -1782,6 +1782,7 @@ show_help() {
1782
1782
  echo " syslog telemetry template test tour trigger trust trust-metrics"
1783
1783
  echo " ultracode update verify version voice watch watchdog web welcome why"
1784
1784
  echo " wiki worktree (wt)"
1785
+ echo " control (preview, needs LOKI_CONTROL=1)"
1785
1786
  echo ""
1786
1787
  echo "Any command: loki <command> --help"
1787
1788
  echo ""
@@ -1871,12 +1872,39 @@ for p in range(int(sys.argv[1]), int(sys.argv[1]) + 100):
1871
1872
  PY
1872
1873
  }
1873
1874
 
1875
+ # Fail-closed reuse check for a dashboard found via the ~/.loki/dashboard
1876
+ # registry or a busy port: reusable only if /health reports THIS package's
1877
+ # version AND realpath, and GET / is 200 text/html. Any missing field, curl
1878
+ # error or mismatch means "not ours". Mirrors _loki_dashboard_reusable in run.sh.
1879
+ _loki_dashboard_port_is_ours() {
1880
+ local port="$1" want want_pkg health probe
1881
+ case "$port" in ''|*[!0-9]*) return 1 ;; esac
1882
+ want="$(tr -d '[:space:]' <"$SKILL_DIR/VERSION" 2>/dev/null)" || return 1
1883
+ [ -n "$want" ] || return 1
1884
+ want_pkg="$(cd "$SKILL_DIR" 2>/dev/null && pwd -P)" || return 1
1885
+ health="$(curl -s --max-time 2 "http://127.0.0.1:${port}/health" 2>/dev/null)" || return 1
1886
+ case "$health" in
1887
+ *"\"version\":\"${want}\""* | *"\"version\": \"${want}\""*) ;;
1888
+ *) return 1 ;;
1889
+ esac
1890
+ case "$health" in
1891
+ *"\"package\":\"${want_pkg}\""* | *"\"package\": \"${want_pkg}\""*) ;;
1892
+ *) return 1 ;;
1893
+ esac
1894
+ probe="$(curl -s -o /dev/null -w '%{http_code} %{content_type}' --max-time 2 "http://127.0.0.1:${port}/" 2>/dev/null)" || return 1
1895
+ case "$probe" in "200 text/html"*) return 0 ;; esac
1896
+ return 1
1897
+ }
1898
+
1874
1899
  cmd_ui() {
1875
1900
  local port="" pid=""
1876
1901
  if [ -f "$DASHBOARD_PID_FILE" ]; then
1877
1902
  pid=$(cat "$DASHBOARD_PID_FILE" 2>/dev/null)
1878
1903
  if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
1879
1904
  port=$(cat "${DASHBOARD_PID_DIR}/port" 2>/dev/null)
1905
+ # A registry entry whose live server is not this package's dashboard
1906
+ # (stale, foreign worktree, other version) is never reused.
1907
+ _loki_dashboard_port_is_ours "$port" || port=""
1880
1908
  fi
1881
1909
  fi
1882
1910
  if [ -z "$port" ]; then
@@ -3758,9 +3786,18 @@ cmd_start() {
3758
3786
  # + cockpit, honoring the card's "open dashboard" promise. The
3759
3787
  # cockpit hint is printed by _loki_start_handoff for the Both path.
3760
3788
  args+=("--bg")
3761
- local _du="http://127.0.0.1:${LOKI_DASHBOARD_PORT:-57374}"
3762
- # stdout must stay unredirected: loki_open_url checks the TTY.
3763
- loki_open_url "$_du" 2>/dev/null &
3789
+ # Open the URL the runner PUBLISHES for the port it actually bound
3790
+ # or reused (it walks past refused ports); never guess the default
3791
+ # 57374, which may be a foreign or stale dashboard. stdout must
3792
+ # stay unredirected: loki_open_url checks the TTY.
3793
+ local _dfile="${PWD}/.loki/dashboard/url"
3794
+ rm -f "$_dfile" 2>/dev/null
3795
+ (
3796
+ for _ in $(seq 1 120); do
3797
+ if [ -s "$_dfile" ]; then loki_open_url "$(head -1 "$_dfile")" 2>/dev/null; exit 0; fi
3798
+ sleep 0.5
3799
+ done
3800
+ ) &
3764
3801
  ;;
3765
3802
  launch-bg-watch)
3766
3803
  # Watch (cockpit only) detaches without opening the browser.
@@ -7481,13 +7518,15 @@ cmd_dashboard_start() {
7481
7518
  if [ -f "$DASHBOARD_PID_FILE" ]; then
7482
7519
  local existing_pid
7483
7520
  existing_pid=$(cat "$DASHBOARD_PID_FILE" 2>/dev/null)
7484
- if [ -n "$existing_pid" ] && kill -0 "$existing_pid" 2>/dev/null; then
7521
+ if [ -n "$existing_pid" ] && kill -0 "$existing_pid" 2>/dev/null \
7522
+ && _loki_dashboard_port_is_ours "$(cat "${DASHBOARD_PID_DIR}/port" 2>/dev/null)"; then
7485
7523
  echo -e "${YELLOW}Dashboard server already running (PID: $existing_pid)${NC}"
7486
7524
  echo ""
7487
7525
  cmd_dashboard_status
7488
7526
  exit 0
7489
7527
  fi
7490
- # Stale PID file, remove it
7528
+ # Stale PID file, or a live server that is not this package's dashboard
7529
+ # (never killed here, just not reused): remove the registry entry.
7491
7530
  rm -f "$DASHBOARD_PID_FILE"
7492
7531
  fi
7493
7532
 
@@ -21581,7 +21620,7 @@ status stop pause resume monitor watch watchdog dashboard web open preview share
21581
21620
  memory context ctx checkpoint state report kpis cost metrics stats logs otel \
21582
21621
  syslog telemetry crash config provider doctor setup-skill onboard quickstart \
21583
21622
  welcome update self-update rollback failover cluster enterprise remote deploy docker \
21584
- sandbox api mcp magic compound assets export wiki docs explain why audit compliance \
21623
+ sandbox api mcp magic compound assets export wiki control docs explain why audit compliance \
21585
21624
  secrets analyze optimize bench ci reset cleanup notify trigger voice sentrux \
21586
21625
  worktree wt projects cp rc trust-metrics serve agent code self_update test help version"
21587
21626
  local best
@@ -22072,6 +22111,9 @@ main() {
22072
22111
  wiki)
22073
22112
  cmd_wiki "$@"
22074
22113
  ;;
22114
+ control)
22115
+ cmd_control "$@"
22116
+ ;;
22075
22117
  magic)
22076
22118
  cmd_magic "$@"
22077
22119
  ;;
@@ -33803,6 +33845,35 @@ cmd_outcomes() {
33803
33845
  LOKI_DIR="${LOKI_DIR:-.loki}" python3 "$lib" "$@"
33804
33846
  }
33805
33847
 
33848
+ # loki control -- D56 control plane (preview). The live route is the Bun CLI
33849
+ # (loki-ts/src/commands/control.ts); this is the LOKI_LEGACY_BASH / no-shim
33850
+ # fallback. It keeps the gate and help in bash and hands the work to Bun.
33851
+ cmd_control() {
33852
+ local sub="${1:-}"
33853
+ case "$sub" in
33854
+ ""|-h|--help|help)
33855
+ echo "Usage: loki control <command> [options] (preview, requires LOKI_CONTROL=1)"
33856
+ echo ""
33857
+ echo "Commands:"
33858
+ echo " serve [--port N] [--db PATH] Run the control plane + UI on 127.0.0.1"
33859
+ echo " backfill [DIR] Ship DIR/.loki/runs to the control plane"
33860
+ echo " status Show whether the control plane is reachable"
33861
+ return 0
33862
+ ;;
33863
+ esac
33864
+ if [ "${LOKI_CONTROL:-}" != "1" ]; then
33865
+ echo "loki control is in preview. Enable it with: export LOKI_CONTROL=1"
33866
+ return 0
33867
+ fi
33868
+ local cli="$SKILL_DIR/loki-ts/dist/loki.js"
33869
+ if ! command -v bun >/dev/null 2>&1; then
33870
+ echo "loki control requires bun (https://bun.sh)" >&2
33871
+ return 1
33872
+ fi
33873
+ [ -f "$cli" ] || cli="$SKILL_DIR/loki-ts/src/cli.ts"
33874
+ exec bun "$cli" control "$@"
33875
+ }
33876
+
33806
33877
  cmd_wiki() {
33807
33878
  local subcmd="${1:-}"
33808
33879
  shift 2>/dev/null || true
package/autonomy/run.sh CHANGED
@@ -19183,6 +19183,14 @@ _loki_dashboard_reusable() {
19183
19183
  return 1
19184
19184
  }
19185
19185
 
19186
+ # Publish the URL of the port actually bound or reused, so the launcher (bg
19187
+ # banner, browser opener) never guesses the default 57374 after start_dashboard
19188
+ # walked past a refused port.
19189
+ _loki_publish_dashboard_url() {
19190
+ mkdir -p .loki/dashboard 2>/dev/null || return 0
19191
+ printf '%s\n' "$1" > .loki/dashboard/url.tmp 2>/dev/null && mv -f .loki/dashboard/url.tmp .loki/dashboard/url 2>/dev/null || true
19192
+ }
19193
+
19186
19194
  start_dashboard() {
19187
19195
  loki_background_services_enabled || return 0
19188
19196
  log_header "Starting Loki Dashboard"
@@ -19262,6 +19270,7 @@ start_dashboard() {
19262
19270
  if [ "${DASHBOARD_REUSED:-0}" = "1" ]; then
19263
19271
  export LOKI_DASHBOARD_PORT="$DASHBOARD_PORT"
19264
19272
  log_info "Dashboard already live on port $DASHBOARD_PORT; reusing it."
19273
+ _loki_publish_dashboard_url "http://127.0.0.1:${DASHBOARD_PORT}/"
19265
19274
  return 0
19266
19275
  fi
19267
19276
 
@@ -19419,6 +19428,7 @@ start_dashboard() {
19419
19428
  DASHBOARD_LAST_ALIVE=$(date +%s)
19420
19429
  log_info "Dashboard started (PID: $DASHBOARD_PID)"
19421
19430
  log_info "Dashboard: ${CYAN}${url_scheme}://127.0.0.1:$DASHBOARD_PORT/${NC}"
19431
+ _loki_publish_dashboard_url "${url_scheme}://127.0.0.1:${DASHBOARD_PORT}/"
19422
19432
 
19423
19433
  # Auto-open the dashboard in the browser, but ONLY for an interactive
19424
19434
  # foreground session. loki_open_url (lib/browser-open.sh) refuses on
@@ -28816,6 +28826,8 @@ main() {
28816
28826
  fi
28817
28827
  # Initialize .loki directory first
28818
28828
  mkdir -p .loki/logs
28829
+ # A url left by an earlier run must never be mistaken for this child's.
28830
+ rm -f .loki/dashboard/url
28819
28831
 
28820
28832
  local log_file=".loki/logs/background-$(date +%Y%m%d-%H%M%S).log"
28821
28833
  local pid_file
@@ -28869,6 +28881,19 @@ main() {
28869
28881
  echo "$bg_pid" > "$pid_file"
28870
28882
  register_pid "$bg_pid" "background-session" "log=$log_file"
28871
28883
 
28884
+ # The child picks the dashboard port (it walks past refused ports), so
28885
+ # print the URL it publishes, never the requested default.
28886
+ local _bg_dash_line="disabled (LOKI_DASHBOARD=false)"
28887
+ if [ "$ENABLE_DASHBOARD" = "true" ] && loki_background_services_enabled; then
28888
+ _bg_dash_line="starting (run: loki dashboard url, or see $log_file)"
28889
+ local _bg_i
28890
+ for _bg_i in $(seq 1 60); do
28891
+ if [ -s .loki/dashboard/url ]; then _bg_dash_line="$(head -1 .loki/dashboard/url)"; break; fi
28892
+ kill -0 "$bg_pid" 2>/dev/null || break
28893
+ sleep 0.5
28894
+ done
28895
+ fi
28896
+
28872
28897
  echo ""
28873
28898
  echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
28874
28899
  echo -e "${GREEN} Loki Mode Running in Background${NC}"
@@ -28878,7 +28903,7 @@ main() {
28878
28903
  echo -e " ${CYAN}Path:${NC} $project_path"
28879
28904
  echo -e " ${CYAN}PID:${NC} $bg_pid"
28880
28905
  echo -e " ${CYAN}Log:${NC} $log_file"
28881
- echo -e " ${CYAN}Dashboard:${NC} http://127.0.0.1:${DASHBOARD_PORT}/"
28906
+ echo -e " ${CYAN}Dashboard:${NC} ${_bg_dash_line}"
28882
28907
  echo ""
28883
28908
  echo -e "${YELLOW}Control Commands:${NC}"
28884
28909
  echo -e " ${DIM}Pause:${NC} touch .loki/PAUSE"
@@ -168,7 +168,7 @@ _loki_known_command() {
168
168
  case "${1:-}" in
169
169
  --help|--version|-h|-v|agent|analyze|api|assets\
170
170
  |audit|bench|checkpoint|ci|cleanup|cluster|cockpit|code\
171
- |completions|compliance|compound|config|context|cost|council|cp\
171
+ |completions|compliance|compound|config|context|control|cost|council|cp\
172
172
  |crash|ctx|dashboard|demo|deploy|docker|docs|doctor\
173
173
  |dogfood|enterprise|explain|export|failover|github|grill|handoff\
174
174
  |heal|help|import|init|internal|issue|kpis|logs\
package/bin/loki CHANGED
@@ -350,6 +350,14 @@ case "${LOKI_ENGINE:-$_loki_engine_default}" in
350
350
  *) _e10=1; _e10_args=(--no-pr "${@:2}") ;;
351
351
  esac
352
352
  ;;
353
+ # D58: `loki start <issue ref|issue URL|"multi-word task">` takes the same v10 path as
354
+ # `loki <ref>`; any other start call (PRD file, flags first, one word) stays legacy.
355
+ start)
356
+ case "${2:-}" in
357
+ */*\#[0-9]*|http*://*/issues/*|http*://*/browse/*|*" "*) _e10=1; _e10_args=("${@:2}") ;;
358
+ *) _e10=0 ;;
359
+ esac
360
+ ;;
353
361
  # http*://*/issues/* also covers GitLab's /-/issues/ URLs.
354
362
  */*\#[0-9]*|http*://*/issues/*|http*://*/browse/*) _e10=1 ;;
355
363
  *" "*) _e10=1 ;;
@@ -559,7 +567,7 @@ fi
559
567
  # Two-token routes (provider show/list, memory list/index) match on the first
560
568
  # token only; the Bun dispatcher handles subcommand routing internally.
561
569
  case "${1:-}" in
562
- version|--version|-v|status|stats|doctor|provider|memory|rollback|internal|kpis|trust|proof|receipt|wiki|crash)
570
+ version|--version|-v|status|stats|doctor|provider|memory|rollback|internal|kpis|trust|proof|receipt|wiki|crash|control)
563
571
  # v7.5.2: rollback added (wires loki-ts/src/commands/rollback.ts).
564
572
  # v7.5.3: internal added for autonomy/run.sh phase1-hooks calls.
565
573
  # v7.5.28: kpis added (Phase K MVP: read-only KPI snapshot).
package/completions/_loki CHANGED
@@ -206,6 +206,7 @@ function _loki_commands {
206
206
  'crash:Crash report management'
207
207
  'otel:OpenTelemetry management'
208
208
  'wiki:Wiki commands'
209
+ 'control:Control plane (preview, LOKI_CONTROL=1)'
209
210
  'backlog:Run every matching open issue, N in parallel'
210
211
  'explain:Explain Loki concepts'
211
212
  'optimize:Optimization commands'
@@ -5,8 +5,8 @@ _loki_completion() {
5
5
  _init_completion || return
6
6
 
7
7
  # Main subcommands (must match autonomy/loki main case statement)
8
- local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt outcomes explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
9
- local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue intent config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
8
+ local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt outcomes explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash control open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
9
+ local main_commands="start backlog quick monitor demo tour welcome init stop pause resume steer status next ship dashboard web serve api sandbox notify import github issue intent config provider reset memory compound checkpoint council dogfood projects enterprise secrets cockpit secure own handoff doctor watchdog audit metrics syslog onboard share proof receipt explain plan report cost estimate kpis stats test ci watch telemetry agent context ctx code run export review optimize heal modernize migrate cluster worktree wt trigger failover remote deploy docker mcp magic assets analyze compliance crash control open otel preview quickstart rc rollback self-update sentrux setup-skill spec state template trust trust-metrics ultracode update verify voice why wiki bench cleanup logs grill docs cp version completions help keys"
10
10
 
11
11
  # 1. If we are on the first argument (subcommand)
12
12
  if [[ $cword -eq 1 ]]; then
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "10.6.0"
10
+ __version__ = "10.6.7"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -32,7 +32,7 @@ The history was replaced wholesale and `verifyChain()` reported `valid: true`.
32
32
  `dashboard/audit.py` is a separate implementation with the same property:
33
33
  genesis is the constant `"0" * 64` (`:58`, `:115`), and `_compute_chain_hash`
34
34
  (`:194-200`) is an unkeyed `sha256(prev_hash + entry_json)`. Its own docstring
35
- at `:197` calls the result tamper-evident. Forged with the writer's exact recipe
35
+ at `:197` overstates what the chain proves. Forged with the writer's exact recipe
36
36
  (`json.dumps(entry, sort_keys=True, default=str)`, field `_integrity_hash`,
37
37
  `:369-371`), `verify_log_integrity` reports:
38
38
 
package/docs/DEMOS.md CHANGED
@@ -1,24 +1,12 @@
1
1
  # Loki Mode -- Interactive Content Index
2
2
 
3
- Complete listing of all interactive HTML experiences in the Loki Mode repository. 13 files total across three categories.
3
+ Complete listing of all interactive HTML experiences in the Loki Mode repository. 8 files total across three categories.
4
4
 
5
- ## Walkthroughs (6 HTML files)
5
+ ## Overview (1 HTML file)
6
6
 
7
- Located in `docs/walkthrough/`.
8
-
9
- | File | Title | Description |
10
- |------|-------|-------------|
11
- | `index.html` | Build Your First App | Step-by-step tutorial from PRD to deployment |
12
- | `architecture.html` | System Architecture | Interactive SVG diagram of the full system |
13
- | `comparison.html` | Feature Comparison | Loki Mode vs competitor feature matrix |
14
- | `gallery.html` | Project Gallery | Example projects across categories |
15
- | `video-placeholder.html` | Build Process Animation | CSS-animated build walkthrough |
16
- | `hub.html` | Walkthrough Hub | Links to all walkthroughs with categories and estimated durations |
17
-
18
- An earlier version of this page also listed `build-demo.html`, `ide-demo.html`,
19
- `enterprise-demo.html`, `provider-race-demo.html`, `memory-demo.html`, and
20
- `dashboard-demo.html`. None of those files exist in the repository; they have
21
- been removed from the list rather than left as broken references.
7
+ `docs/overview.html`: Loki Mode 10 explained in five views (Users, Engineers,
8
+ Architects, Executives, Pitch), with Mermaid flow diagrams. It replaces the six
9
+ legacy-era pages that used to live in `docs/walkthrough/`.
22
10
 
23
11
  ## Demo Apps (6 HTML files)
24
12
 
@@ -43,28 +31,25 @@ Located in `examples/`. Each was generated by Loki Mode from a single prompt.
43
31
 
44
32
  | Category | Count |
45
33
  |----------|-------|
46
- | Walkthroughs | 6 |
34
+ | Overview | 1 |
47
35
  | Demo Apps | 6 |
48
36
  | Product Website | 1 |
49
- | **Total** | **13** |
37
+ | **Total** | **8** |
50
38
 
51
39
  ## Viewing Locally
52
40
 
53
41
  All files are self-contained HTML. Open directly in any browser:
54
42
 
55
43
  ```bash
56
- # Open the demo hub (links to everything)
57
- open docs/walkthrough/hub.html
58
-
59
- # Open a specific walkthrough
60
- open docs/walkthrough/architecture.html
44
+ # Open the overview
45
+ open docs/overview.html
61
46
 
62
47
  # Open a demo app
63
48
  open examples/demo-saas-dashboard.html
64
49
 
65
50
  # Or serve the entire repo with a local server
66
51
  python3 -m http.server 8080
67
- # Then visit http://localhost:8080/docs/walkthrough/hub.html
52
+ # Then visit http://localhost:8080/docs/overview.html
68
53
  ```
69
54
 
70
55
  ## Design
@@ -75,4 +60,4 @@ All interactive content shares these characteristics:
75
60
  - **No build step** -- Open in any browser, works offline (except Google Fonts)
76
61
  - **Dark theme** -- Consistent dark design with purple accent (#553DE9)
77
62
  - **Responsive** -- Adapts to mobile, tablet, and desktop viewports
78
- - **No external dependencies** -- No npm packages, no CDN libraries, no frameworks
63
+ - **No build step dependencies** -- No npm packages; `docs/overview.html` loads Mermaid from a CDN to draw its diagrams
@@ -191,9 +191,8 @@ both of us if you find it here.
191
191
 
192
192
  - **No published enterprise case studies.** We have adoption signal (fork ratio
193
193
  well above the norm for a tool this size) but no named enterprise references.
194
- - **No independent third-party benchmark placement.** The SWE-bench Verified
195
- leaderboard is months stale and every entry on it is self-reported, ours would
196
- be too.
194
+ - **No independent third-party benchmark placement.** Public leaderboards are
195
+ self-reported, and ours would be too.
197
196
  - **Only the CLI surface is audited, not whole products.** Section 6 measures
198
197
  every named competitor that ships a local CLI (opencode, aider, codex, Claude
199
198
  Code, cursor-agent) and none exposes output verification. That is a real
@@ -2,7 +2,9 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v10.6.0
5
+ **Version:** v10.6.7
6
+
7
+ **Engine note:** `loki "<task>"`, `loki owner/repo#N` and `loki quick` run the Loki 10 engine. `loki start` still routes to the legacy engine, which is being removed (planned work resumes 2026-10-07); prefer `loki owner/repo#N`. See [docs/v10/GUIDE.md](v10/GUIDE.md).
6
8
 
7
9
  ---
8
10
 
@@ -149,10 +151,9 @@ Install Loki Mode without the bundled bun binary. This reduces the package size
149
151
  - OpenTelemetry instrumentation packages
150
152
 
151
153
  **What happens:**
152
- - The legacy bash engine runs when loki is invoked
153
- - Each `loki` command that would use the Loki 10 engine prints this as the first line on stderr: "loki: the Loki 10 engine cannot run on this machine: no working bun (none on PATH, and the bundled bun for darwin-aarch64 is missing). Running the legacy engine instead. To fix: install bun from https://bun.sh, or reinstall loki-mode without --omit=optional."
154
+ - Loki 10 requires Bun. Each `loki` command prints an error on stderr if Bun is not found: "loki: the Loki 10 engine cannot run on this machine: no working bun (none on PATH, and the bundled bun for darwin-aarch64 is missing). To fix: install bun from https://bun.sh, or reinstall loki-mode without --omit=optional."
154
155
 
155
- **To restore Loki 10 engine access:**
156
+ **To restore Loki access:**
156
157
  - Install bun: `curl -fsSL https://bun.sh/install | bash` or `brew install oven-sh/bun/bun`
157
158
  - Or reinstall loki-mode without the flag: `npm install -g loki-mode`
158
159
 
@@ -164,7 +165,7 @@ Install Loki Mode without the bundled bun binary. This reduces the package size
164
165
  brew tap asklokesh/tap && brew install loki-mode
165
166
  ```
166
167
 
167
- Installs the `loki` CLI. For the Loki 10 default engine the formula in `asklokesh/tap` needs bun; if bun is not installed, run `brew install oven-sh/bun/bun`. Without bun, each Loki 10 command prints the "no working bun" line and runs the legacy engine (see Slim install above).
168
+ Installs the `loki` CLI. Loki 10 requires Bun; if bun is not installed, run `brew install oven-sh/bun/bun`. Without bun, each command exits 1 with an error message.
168
169
 
169
170
  To also install the skill for interactive use with all providers:
170
171
 
package/docs/TOOLS.md CHANGED
@@ -607,7 +607,7 @@ Model cost advisor -- /tmp/ws
607
607
  Projected saving: UNKNOWN
608
608
  Records found: 0 measured: 0 priced: 0
609
609
 
610
- Cited external benchmark (SWE-bench verified) -- NOT a measurement of your workload:
610
+ Cited external benchmark -- NOT a measurement of your workload:
611
611
  MiniMax M2.5 (open weights) score 75.8 cost $36.64
612
612
  Claude Opus 4.6 score 75.6 cost $275.76
613
613
  the harness itself was worth about 3.4 points on an identical model
@@ -13,7 +13,7 @@ Verified from vendor documentation, 2026-07-31:
13
13
  | Cursor | No. Cloud service; embeddings are uploaded (obfuscated and encrypted). |
14
14
  | Claude Code | Partly. Runs against Bedrock / Vertex / Foundry in your own cloud, so data residency is yours -- but a model endpoint is still required. |
15
15
  | Lovable, Replit, Emergent | No. Browser products on their infrastructure. |
16
- | opencode | Structurally yes (MIT, self-hostable) -- but no SOC2, SSO, audit logs, or support. |
16
+ | opencode | Structurally yes (MIT, self-hostable) -- but no SSO, audit logs, or support. |
17
17
 
18
18
  Devin's is the strongest enterprise packaging in the category and it still
19
19
  cannot run disconnected. That is a structural property of a hosted control
@@ -26,6 +26,8 @@ The dashboard automatically syncs with Loki Mode when it's running, polling `das
26
26
 
27
27
  **Ports:** The dashboard and API run on unified port **57374** (FastAPI serves both). See [INSTALLATION.md](INSTALLATION.md#ports) for details.
28
28
 
29
+ **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
31
  ---
30
32
 
31
33
  ## UI Components
@@ -72,7 +72,7 @@ autonomy/ # Runtime and autonomous execution
72
72
  context-tracker.py # Context window usage tracking
73
73
  notification-checker.py # Notification trigger evaluation
74
74
  templates/ # 21 PRD templates (saas, cli, discord-bot, etc.)
75
- benchmarks/ # SWE-bench and HumanEval benchmarks
75
+ benchmarks/ # benchmark harnesses
76
76
  ```
77
77
 
78
78
  ## Codebase Knowledge Graph (Quick Reference)
@@ -157,6 +157,5 @@ gh release view vX.Y.Z
157
157
  ## Testing
158
158
 
159
159
  ```bash
160
- ./benchmarks/run-benchmarks.sh humaneval --execute --loki
161
- ./benchmarks/run-benchmarks.sh swebench --execute --loki
160
+ npm test
162
161
  ```
@@ -202,7 +202,7 @@ Key methods:
202
202
  - `AuditLog.verifyChain()` -- Verify hash chain integrity, returns `{ valid, entries, brokenAt, error }`
203
203
  - `AuditLog.readEntries(filter)` -- Query entries with `who`, `what`, `since`, `until` filters
204
204
 
205
- The public API at `src/audit/index.js` adds compliance reporting (`generateReport('soc2'|'iso27001'|'gdpr')`) and data residency checks (`checkProvider(provider, region)`).
205
+ The public API at `src/audit/index.js` adds audit report summaries and data residency checks (`checkProvider(provider, region)`).
206
206
 
207
207
  **Python Audit (Dashboard-Level):** `dashboard/audit.py`
208
208
 
@@ -474,8 +474,8 @@ enterprise:
474
474
  ## Compliance Reporting
475
475
 
476
476
  **Loki does not generate framework-specific compliance reports.** An earlier
477
- version of this page showed `loki enterprise audit export --format soc2|hipaa|pci`
478
- and `loki compliance report --framework <name>`. Neither exists:
477
+ version of this page showed framework-specific export and report commands.
478
+ They do not exist:
479
479
  `loki enterprise audit` has only `summary` and `tail`, and `loki compliance`
480
480
  has only `snapshot`.
481
481
 
@@ -73,7 +73,7 @@ Rules for every card: file sets do not overlap; only CP-02 touches supervisor.ts
73
73
  |---|---|---|---|---|
74
74
  | CP-00 | Corpus: events.jsonl and receipts written by the real supervisor under the engine10 e2e fake sessions (VERIFIED, PARTIAL, FAILED, BLOCKED, cap.hit, tampered, unpriced cost, resumed). `packages/control-plane/test/fixtures/runs/` + `EXPECTED.json` | EXPECTED.json counts equal a direct `fold()` over each file | LOW | none |
75
75
  | CP-01 | **Parallel A.** Service + DB: `src/server/{app,ingest,runs}.ts`, `src/db/{schema,migrate}.ts`, `drizzle/`, `package.json` | ingest corpus twice: run count, verdict counts, cost_usd (null where expected), duplicate=all on 2nd pass; changed line gives 409 | MEDIUM | CP-00 |
76
- | CP-02 | **Parallel B.** Shipper + backfill: `src/shipper/{ship,backfill}.ts`, hook `loki-ts/src/engine10/ship_hook.ts`, one line each in supervisor.ts and registry.ts | backfill corpus into a CP-01 stub server; kill mid-batch, rerun: every event exactly once; redacted token never appears in the posted body; ship.json advances | MEDIUM | CP-00 |
76
+ | CP-02 | **Parallel B.** Shipper + backfill: `src/shipper/{ship,backfill}.ts`, hook `loki-ts/src/e10ext/ship_hook.ts`, one line each in supervisor.ts and registry.ts | backfill corpus into a CP-01 stub server; kill mid-batch, rerun: every event exactly once; redacted token never appears in the posted body; ship.json advances | MEDIUM | CP-00 |
77
77
  | CP-03 | **Parallel C.** UI: `ui/` (Vite, React, Tailwind), Runs list with filters, run detail timeline, receipt and NOT PROVEN panel; empty states | build, render against section 4 JSON captured from the corpus: row count, verdict badges and NOT PROVEN items match EXPECTED.json; empty DB shows "no runs ingested" | MEDIUM | CP-00 |
78
78
  | CP-04 | Wire: service serves `ui/dist`; `loki control [serve,backfill,status]` in autonomy/loki + loki-ts cli; bundle into the npm package (`files[]`) | `npm pack` tarball contains server and UI; `loki control serve` + backfill corpus: /v1/runs count = corpus | MEDIUM | 01,02,03 |
79
79
  | CP-05 | Local lifecycle: `src/local/lifecycle.ts` (instance.json, reuse rule, restart, replay) | stale-version instance not reused; dead pid restarted and replayed; never touches unrecorded pid | MEDIUM | CP-04 |