loki-mode 10.6.6 → 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 (86) 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 +103 -53
  4. package/SKILL.md +11 -8
  5. package/VERSION +1 -1
  6. package/autonomy/loki +43 -5
  7. package/autonomy/run.sh +26 -1
  8. package/bin/loki +8 -0
  9. package/dashboard/__init__.py +1 -1
  10. package/docs/AUDIT-CHAIN-THREAT-MODEL.md +1 -1
  11. package/docs/DEMOS.md +11 -26
  12. package/docs/EVALUATING.md +2 -3
  13. package/docs/INSTALLATION.md +2 -2
  14. package/docs/TOOLS.md +1 -1
  15. package/docs/air-gapped.md +1 -1
  16. package/docs/dashboard-guide.md +2 -0
  17. package/docs/dev/project-structure.md +1 -1
  18. package/docs/dev/release-checklist.md +1 -2
  19. package/docs/enterprise/architecture.md +1 -1
  20. package/docs/siem-integration.md +2 -2
  21. package/docs/v10/D61-SPEED.md +78 -0
  22. package/docs/v10/DECISIONS.md +9 -0
  23. package/docs/v10/GUIDE.md +63 -1
  24. package/docs/v10/HANDOFF-NEXT-WEEK.md +34 -0
  25. package/loki-ts/dist/loki.js +541 -554
  26. package/mcp/__init__.py +1 -1
  27. package/package.json +1 -1
  28. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  29. package/web-app/dist/assets/{AdminPage-CH-bmw4l.js → AdminPage-DyjnUcaP.js} +1 -1
  30. package/web-app/dist/assets/{Avatar-Bos-ky_x.js → Avatar-CY0sQNao.js} +1 -1
  31. package/web-app/dist/assets/{Badge-DNJyHg9Y.js → Badge-BmwTRu72.js} +1 -1
  32. package/web-app/dist/assets/{Button-KqD3Tt-I.js → Button-BRf5aTlb.js} +1 -1
  33. package/web-app/dist/assets/{CockpitPage-l6oTsRaL.js → CockpitPage-RR94HuxS.js} +1 -1
  34. package/web-app/dist/assets/{ComparePage-DN6uxXko.js → ComparePage-CFWAuPRO.js} +1 -1
  35. package/web-app/dist/assets/{ErrorBoundary-CKQhnvU9.js → ErrorBoundary-4cDADrG-.js} +1 -1
  36. package/web-app/dist/assets/{EvidenceReceiptPanel-CzSIqLmy.js → EvidenceReceiptPanel-ChPFx2eM.js} +1 -1
  37. package/web-app/dist/assets/{GitHubIssuesPanel-YJUcDezn.js → GitHubIssuesPanel-B0TAjyeW.js} +1 -1
  38. package/web-app/dist/assets/{GitHubPRsPanel-Bv7xFvJN.js → GitHubPRsPanel-BbszEwW9.js} +1 -1
  39. package/web-app/dist/assets/{HomePage-CJsxBbii.js → HomePage-DrBgzs1d.js} +2 -2
  40. package/web-app/dist/assets/{LoginPage-D1V2Ag0s.js → LoginPage-Bu7b2DGz.js} +1 -1
  41. package/web-app/dist/assets/{MagicPage-BBVNMEr5.js → MagicPage-BFEYp631.js} +1 -1
  42. package/web-app/dist/assets/{MetricsPage-CtHM-IlA.js → MetricsPage-eIe2naVR.js} +1 -1
  43. package/web-app/dist/assets/{NotFoundPage-BBEEJLj5.js → NotFoundPage-BVWYkNt9.js} +1 -1
  44. package/web-app/dist/assets/{ProjectPage-BVRJoEaQ.js → ProjectPage-zmxyu732.js} +3 -3
  45. package/web-app/dist/assets/{ProjectsPage-DqaA9rUa.js → ProjectsPage-Dq5NdCak.js} +1 -1
  46. package/web-app/dist/assets/{SettingsPage-B_RQV_vF.js → SettingsPage-CCrJOMe0.js} +1 -1
  47. package/web-app/dist/assets/{ShowcasePage-DqN-mrZ8.js → ShowcasePage-n-Ipzp01.js} +1 -1
  48. package/web-app/dist/assets/{SystemSettingsPage-D-CvuL-K.js → SystemSettingsPage-CP_rjYXK.js} +1 -1
  49. package/web-app/dist/assets/{TeamsPage-CzkkDcPj.js → TeamsPage-B_P9DepW.js} +1 -1
  50. package/web-app/dist/assets/{TemplatesPage-Bbchk7YQ.js → TemplatesPage-h-3A6PQT.js} +1 -1
  51. package/web-app/dist/assets/{TerminalOutput-B32BAX--.js → TerminalOutput-pD0nJ1BU.js} +1 -1
  52. package/web-app/dist/assets/{activity-C9vnEmhG.js → activity-ChFwzT-d.js} +1 -1
  53. package/web-app/dist/assets/{bell-XsIhkyjq.js → bell-BX-eK8Gu.js} +1 -1
  54. package/web-app/dist/assets/{bot-CvQhqBws.js → bot-fj5PkPtR.js} +1 -1
  55. package/web-app/dist/assets/{check-HmG8WcD-.js → check-BGAbHlvD.js} +1 -1
  56. package/web-app/dist/assets/{chevron-left-C1KNgnbD.js → chevron-left-BzFUxHgb.js} +1 -1
  57. package/web-app/dist/assets/{circle-alert-DSmCvZju.js → circle-alert-BQrg5DWl.js} +1 -1
  58. package/web-app/dist/assets/{clock-CPhE3RXd.js → clock-CTu9lkVo.js} +1 -1
  59. package/web-app/dist/assets/{cloud-29lwqocB.js → cloud-DrIENRiE.js} +1 -1
  60. package/web-app/dist/assets/{code-xml-4jZUzbPt.js → code-xml-PaoVpfur.js} +1 -1
  61. package/web-app/dist/assets/{database-H0Ct2r-8.js → database-DMmkAotn.js} +1 -1
  62. package/web-app/dist/assets/{dollar-sign-DsXkO0yT.js → dollar-sign-B2LQdBoX.js} +1 -1
  63. package/web-app/dist/assets/{file-code-corner-BM8w_nvX.js → file-code-corner-Dfv1XXeR.js} +1 -1
  64. package/web-app/dist/assets/{file-plus-BWkYTJ4D.js → file-plus-D2Wzf2wd.js} +1 -1
  65. package/web-app/dist/assets/{globe-FOFDl_8Z.js → globe-DxotVWt8.js} +1 -1
  66. package/web-app/dist/assets/{hammer-orm5gvky.js → hammer-Brfy5ZrJ.js} +1 -1
  67. package/web-app/dist/assets/{index-B6juCuPX.js → index-BfhHMwi8.js} +3 -3
  68. package/web-app/dist/assets/{layers-DUQPkPAl.js → layers-DfxSWDvp.js} +1 -1
  69. package/web-app/dist/assets/{loader-circle-Deq6bDar.js → loader-circle-CxIrzNwx.js} +1 -1
  70. package/web-app/dist/assets/{lock-CSzWTPRC.js → lock-m6nzhtpU.js} +1 -1
  71. package/web-app/dist/assets/{package-CmACgZuF.js → package-ri9oE9Jc.js} +1 -1
  72. package/web-app/dist/assets/{plus-BjPW5v3A.js → plus-DWeTAMVV.js} +1 -1
  73. package/web-app/dist/assets/{refresh-cw-DhI1sHaj.js → refresh-cw-BGMSpaMh.js} +1 -1
  74. package/web-app/dist/assets/{rotate-ccw-Byi2ouWB.js → rotate-ccw-DD1xBD_b.js} +1 -1
  75. package/web-app/dist/assets/{scroll-text-gq7bJ81H.js → scroll-text-BCCR_AN9.js} +1 -1
  76. package/web-app/dist/assets/{server-YbY5s1-X.js → server-CmMWPIjS.js} +1 -1
  77. package/web-app/dist/assets/{shield-alert-DhKjtwZt.js → shield-alert-BZZmBVEJ.js} +1 -1
  78. package/web-app/dist/assets/{thumbs-up-D2X5JR-5.js → thumbs-up-OaxbNRXu.js} +1 -1
  79. package/web-app/dist/assets/{trash-2-BHAmMxTq.js → trash-2-DmcSzTfr.js} +1 -1
  80. package/web-app/dist/assets/{trending-down-C41kQa-Q.js → trending-down-BmfXLykz.js} +1 -1
  81. package/web-app/dist/assets/{trending-up-M-OK_9DC.js → trending-up-Djec3jIq.js} +1 -1
  82. package/web-app/dist/assets/{upload-CarpPiGw.js → upload-BN8dXIlF.js} +1 -1
  83. package/web-app/dist/assets/{usePolling-rJ7rM7R0.js → usePolling-Cu4yi04I.js} +1 -1
  84. package/web-app/dist/assets/{user-cBhWpZen.js → user-IBI-k10o.js} +1 -1
  85. package/web-app/dist/index.html +1 -1
  86. package/docs/walkthrough/README.md +0 -44
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"
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 ;;
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "10.6.6"
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,9 +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.6
5
+ **Version:** v10.6.7
6
6
 
7
- **Migration Note:** Legacy engine removed in 10.6.0. Use `loki "<task>"`, `loki owner/repo#N`, or `loki backlog` instead.
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).
8
8
 
9
9
  ---
10
10
 
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
 
@@ -0,0 +1,78 @@
1
+ # D61: speed for users (design)
2
+
3
+ Architect design, 2026-10-02, base fbbd31299, v10.6.6. Design only; nothing below is built unless marked "exists". Build flag `LOKI_SPEED=1` while slices land; it flips to default-on (and the flag is deleted) when slice 17's targets pass. Users never set a flag or write config.
4
+
5
+ ## 1. What the user sees (from the terminal outward)
6
+ - First run in a repo: `loki "fix the off-by-one in pager.py"`. Loki prints one start line, then streams stage lines, then the PR:
7
+ `loki: small task, lean path, sonnet, 3 impacted tests, cap $0.50, warm in 0.4s (first run here: maps built in 2.1s)`
8
+ Second and later runs say `warm in 0.1s`. No daemon setup, no prompt, no config: the warm engine starts itself in the background after the first run and is used if alive, ignored if not.
9
+ - Big work: `loki ./spec.md` or `loki "add CSV export to api, web and cli"`. Loki prints its decision before spending a token on code:
10
+ `loki: 5 units, 3 in parallel (decomposable: disjoint write sets, 1 shared file serialized), est 6-9 min`
11
+ `loki: live at http://127.0.0.1:57375/g/<group>` (or the Control Plane URL when LOKI_CONTROL_URL is set)
12
+ then a compact unit table repainted every 2s on a TTY (one line per state change otherwise): unit, files, stage, elapsed, tokens.
13
+ - When the work does not split: `loki: sequential (reason: units share 4 of 6 files)`. It never forces parallel.
14
+ - The end: one PR with a unit table (goal, files, tests, tokens, model per unit), one combined receipt, and a final line `done in 7m12s, 412k tokens (5 units, 1 fix unit), PR <url>`.
15
+ - `loki backlog` keeps per-issue parallelism (exists) and shares one slot pool with any issue that decomposes.
16
+
17
+ ## 2. What exists (evidence) and the gap
18
+ | Piece | Where | Status |
19
+ |---|---|---|
20
+ | Lean path (skip Plan and Wall for small tasks with relevant tests) | engine10/sizing.ts:44-46, stages/plan.ts:74-77, stages/wall.ts:145 | exists; gap: only fires when the task names a file (sizing.ts:10 namedFiles) |
21
+ | Byte-stable prefix | e10ext/lean_prefix.ts (LOKI_E10_PREFIX=lean) | exists, opt-in; no guard that every stage prompt starts with identical bytes |
22
+ | Repo map and test map cached by HEAD^{tree} | engine10/cache.ts, repomap.ts, testmap.ts | exists on disk; rebuilt per process, no in-memory warm copy |
23
+ | Impacted tests only | testmap.ts:201 impactedRefs, stages/verify.ts:251 | exists |
24
+ | Repo context pack (20 files plus impacted tests) | e10ext/context.ts | exists |
25
+ | Scope control (out-of-scope edits reverted, listed NOT PROVEN) | e10ext/scope.ts, e10ext/commit_filter.ts | exists; reusable as a unit's write-set fence |
26
+ | Sonnet-then-escalate cascade | sizing.ts:54 cascadeEnabled | exists |
27
+ | Cheap-model already-done check on the critical path | already_done.ts:167-182 (wallModel) | exists; cost on the small path not yet measured |
28
+ | Per-session child process | session.ts:1-2 (self-respawn through cli.ts) | exists; cold bun start per session |
29
+ | Parallel worktree runner | autonomy/lib/backlog.py:180-257 (worktree add -B loki/backlog-N, concurrency, daily cap) | exists; issue refs only, no dependency prep, in-memory queue |
30
+ | Worktree dependency prep (`worktree_prep`) | none (grep finds nothing); D51-PHASE-B.md notes fresh worktrees lack node_modules/.venv | MISSING |
31
+ | Decomposer, integrator, group run | none | MISSING |
32
+ | Local dashboard (SSE, folds .loki/runs) | engine10/dashboard/server.ts (port 57375) | exists; one repo, no group view |
33
+ | Control Plane v0 and live shipping | loki-ts/src/commands/control.ts, packages/control-plane/, e10ext/ship_hook.ts | exists, preview (LOKI_CONTROL=1); no group_id column |
34
+ | Eval tiers and token capture | eval/loki10/harness.py:53 TIERS includes large, :1157 _v10_tokens; stage-profile.py | exists; 0 lg- tasks, no parallel or sequential arm split |
35
+
36
+ ## 3. Design
37
+ **A. Small path (seconds).** (1) Warm engine: the engine10 dashboard process (already a long-lived bun server on 127.0.0.1) also serves a Unix socket `~/.loki/run/engine.sock`; it holds repo map and test map in memory keyed by (repoKey, HEAD^{tree}, dirty-file hash) and runs intake and sizing in-process. The CLI tries the socket for 50ms, else runs cold exactly as today and spawns the daemon detached for next time (fail-safe: no daemon never changes a result). (2) Pre-model overhead budget 2s, measured per stage from argv to the first provider byte and printed as `warm in Xs`. (3) Lean prefix becomes the default with a byte-identity guard. (4) Wider lean eligibility: a task that names no file uses context.ts keyword selection over the cached map, still requiring impacted tests (fail-safe keeps Wall). (5) The already-done model check moves off the critical path: it runs only when deterministic hits exist, concurrently with implement, and cancels implement on a confirmed hit.
38
+
39
+ **B. Big work (minutes, in parallel).** Decomposer (engine10/decompose.ts, deterministic first): split the task or spec into requirement items (numbered or bulleted lines, headings, issue checklists); map each to a write set via context.ts selection plus module boundaries (top-level dirs, package workspaces, test map ownership); union units whose write sets overlap; mark shared files (lockfiles, package manifests, barrels, CHANGELOG) as serialized. A cheap model (wallModel) may only confirm or merge proposed units against a strict JSON schema; invalid output means the deterministic DAG stands. Decomposability check: parallel only if at least 2 units, write-set overlap ratio below 0.2, no unit reads a symbol another unit creates, and each unit sizes small or normal. Otherwise one sequential run, reason printed. Runner: backlog.py's launch loop generalised to units (same worktree layout, branches loki/unit-<group>-<n>), each unit a full v10 run with `--no-pr`, its write set enforced by scope.ts, its own context pack, cheapest capable model via the cascade (escalation only on a failed check, research section 3). Integrator (engine10/integrate.ts): merge unit branches in DAG order onto loki/group-<id>; conflicts become targeted fix units (conflict hunks only); run the full suite once; failures map back to units through the test map and become fix units (at most 2 rounds); Seal once on the combined diff; one PR. Stacked PRs are a later option, not v1.
40
+
41
+ **C. Tokens at or below one sequential session.** No transcript sharing between units; each unit gets only its context pack and the shared lean prefix (cache hits across units); per-unit token budget = sequential estimate / units x 1.1, enforced by the existing budget path; deterministic search and test selection, no model-driven exploration in the decomposer. Every run prints tokens; the eval compares against sequential and raw.
42
+
43
+ **D. Live view.** run.started gains `group_id`, `unit_id`, `deps`; a group event file records the DAG and integrator stages. The dashboard adds /g/<group> (unit grid); the Control Plane runs table gains group_id so the same grid works there.
44
+
45
+ ## 4. Slices (numbered; each ships with its METRICS row)
46
+ | # | Goal | File set | Wall check | Budget | Tier |
47
+ |---|---|---|---|---|---|
48
+ | 1 | Pre-model stage timer: argv to first provider byte, per stage, in run.completed data and the start line | engine10/supervisor.ts, engine10/output.ts, tests engine10/premodel_timing.test.ts | test asserts the timing fields exist and sum within 50ms of the span; stage-profile.py prints a pre_model column | 30m | MEDIUM |
49
+ | 2 | Lean prefix default plus byte-identity guard across implement, fix, wall, plan prompts | e10ext/lean_prefix.ts, engine10/stages/implement.ts, stages/fix.ts, tests e10ext/prefix_identity.test.ts | guard fails when any stage prompt's first 200 bytes differ; second run shows cache_read tokens over 0 in the cost event | 30m | MEDIUM |
50
+ | 3 | Lean eligibility without a named file (context.ts selection), fail-safe to Wall | engine10/sizing.ts, tests engine10/sizing_lean.test.ts | fixtures: unnamed-file small task goes lean only when impacted tests exist; no-runner repo stays wall | 30m | MEDIUM |
51
+ | 4 | Already-done check off the critical path (deterministic hits gate it, runs concurrent with implement) | engine10/already_done.ts, engine10/stages/intake.ts, tests already_done.test.ts | no-hit task makes zero cheap-model calls; augmentiq #52 fixture still ALREADY_SATISFIED | 30m | HIGH |
52
+ | 5 | Warm engine socket in the dashboard daemon: in-memory maps keyed by tree plus dirty hash | engine10/dashboard/server.ts, new engine10/warm.ts, tests engine10/warm.test.ts | warm intake under 300ms on the fixture repo; dirty edit invalidates; daemon killed mid-run gives the same verdict cold | 30m | MEDIUM |
53
+ | 6 | CLI client: 50ms socket try, cold fallback, detached daemon start after first run, `warm in Xs` text | engine10/cli.ts, new engine10/warm_client.ts, tests warm_client.test.ts | no daemon: identical events to today; LOKI_NO_BROWSER honoured; no test binds 57374-57399 | 30m | MEDIUM |
54
+ | 7 | Worktree dependency prep: APFS/reflink clone of node_modules, .venv reuse, else install | new autonomy/lib/worktree_prep.py, tests/test-worktree-prep.sh | fresh worktree runs the fixture's tests with no network; copy-on-write used on darwin | 30m | MEDIUM |
55
+ | 8 | Decomposer, deterministic DAG (items, write sets, union on overlap, shared files serialized) | new engine10/decompose.ts, tests engine10/decompose.test.ts | 6 fixture specs: expected unit count and write sets; same input gives byte-identical DAG | 30m | MEDIUM |
56
+ | 9 | Decomposability check plus optional cheap-model confirm under a strict schema | engine10/decompose.ts (check fn only after 8 merges), tests decompose_check.test.ts | sequential fixtures return sequential with reason; malformed model JSON keeps the deterministic DAG | 30m | MEDIUM |
57
+ | 10 | Unit runner: backlog.py launch loop accepts a DAG, branches loki/unit-<g>-<n>, deps respected, one slot pool shared with issues | autonomy/lib/backlog.py, tests/test-backlog-units.sh | LOKI_BACKLOG_LAUNCHER stub: max concurrency never exceeded, dependent unit starts only after its parent passes | 30m | MEDIUM |
58
+ | 11 | Unit run mode: write set as scope fence, per-unit context pack and token budget, no transcript in | e10ext/scope.ts, e10ext/context.ts, tests e10ext/unit_mode.test.ts | an edit outside the write set is reverted and listed NOT PROVEN; brief contains only pack files | 30m | HIGH |
59
+ | 12 | Integrator merge and fix units (conflict hunks, failing tests mapped to units, 2 rounds max) | new engine10/integrate.ts, tests engine10/integrate.test.ts | fixture with one planted conflict and one cross-unit failure ends VERIFIED with exactly 2 fix units | 30m | HIGH |
60
+ | 13 | One Seal and combined receipt (per-unit sub-receipts) plus PR body unit table | engine10/stages/seal.ts, engine10/types.ts, engine10/pr_body.ts, tests seal_group.test.ts | `loki verify` passes on the combined receipt; tampering one unit's events fails it | 30m (60m review) | HIGH |
61
+ | 14 | Group events and terminal unit table (TTY repaint 2s, plain lines otherwise) | engine10/events.ts, engine10/output.ts, tests output_group.test.ts | snapshot tests for TTY and non-TTY; validateEnvelope accepts group fields | 30m | MEDIUM |
62
+ | 15 | Live grid: dashboard /g/<group> and Control Plane group_id column | engine10/dashboard/page.ts, packages/control-plane/src/server/runs.ts, packages/control-plane/src/db/, tests | ingesting a 3-unit fixture shows 3 rows with stage and elapsed; missing data says "no data ingested" | 30m | MEDIUM |
63
+ | 16 | Route `loki "<task>"` and `loki <file>` through decomposer behind LOKI_SPEED | engine10/cli.ts (route only), engine10/supervisor.ts (group entry), tests route_group.test.ts | flag off: byte-identical behaviour; flag on: small task never decomposes | 30m | HIGH |
64
+ | 17 | Large eval tier: 8 lg- tasks (4 decomposable, 4 sequential by design), arms v10-parallel, v10-seq, raw-claude, tokens per completed for every arm | eval/loki10/tasks/lg-*, eval/loki10/harness.py, eval/loki10/summarize, eval/loki10/test-harness.sh | D38 provenance check passes; summarize prints wall, completion, tokens per arm; a capped arm is never completed | 30m x2 (tasks, harness) | MEDIUM |
65
+ | 18 | METRICS D61 section and the flag flip decision | docs/v10/METRICS.md | rows cite results.jsonl paths; losses shown; flip only if section 5 targets hold | 15m | LOW |
66
+
67
+ Order: 1, 2, 7, 8 start now (disjoint files); 3-6 and 9-11 next; 12-16 after 8-11; 17 in parallel from the start; 18 last. HIGH slices get opus reviewers (D12).
68
+
69
+ ## 5. Targets (measured on the eval, never claimed)
70
+ - A. Small tier (29 tasks): Loki p50 time to PR at or below raw `claude -p` (39s baseline, METRICS gate report) on the same model; tokens per completed at or below raw; pre-model overhead p50 under 2s warm. Losses published, including the D50 sonnet loss.
71
+ - B. Large tier: on decomposable tasks, parallel wall time at most 0.5x sequential with completion not lower; on sequential-by-design tasks the check must choose sequential (a parallel run there counts as a loss).
72
+ - C. Parallel total tokens at or below v10-seq on the same task; report tokens per completed task for all three arms.
73
+ - D. Every slice adds its METRICS row (what changed, command, result file, exit code). Nothing flips to default on a fixture result alone (feedback: fixture-green is not verification).
74
+
75
+ ## 6. Risks and non-goals
76
+ - Research section 4: parallel lost 39-70% on sequential work and multi-agent runs cost about 15x tokens. Defence: conservative check, no transcript sharing, single writer per file, one central integrator.
77
+ - Warm daemon must never be load-bearing: cold path stays the reference; slice 6 asserts identical events.
78
+ - Not in v1: stacked PRs, cross-repo groups (D51 Phase B), remote runners.
@@ -482,3 +482,12 @@ Loki's definition: "autonomous software factory that runs with the knowledge of
482
482
 
483
483
  ## D59: two-hour finish, then stop until next week (founder, 2026-10-01 18:10Z, override 18:14Z)
484
484
  Founder: "complete all loki mode work faster ... everything complete in two hours with least tokens used and highest code push and releases ... even if means no testing". Override given directly at 18:14Z: until 20:10Z, merge and release without waiting for Tests, Bun Parity, Coverage or Security Audit. Kept: rollback of `latest` by dist-tag if Post-Release Smoke shows `npm i -g loki-mode` or `loki --version` broken. Each release's CI result is recorded in docs/v10/HANDOFF-NEXT-WEEK.md. Order: 10.6.0, W1-ROUTE, D58-SCOPE, LEAK3, CP-RELAND, D57 W1 docs, one real-repo gate run against latest. Target 19:15Z, hard stop 20:10Z, then no agents, loops or crons until next week. Workflow-level gates (release.yml required-ci, pre-push secret scan) are not edited.
485
+
486
+ ## D60: one-hour user-impact sprint (founder via the autonomi-dev session, 2026-10-02 22:45Z)
487
+ Ends the D59 pause early for this sprint only. Five slices, released as soon as each is green: (1) `loki start` runs Loki 10, after porting moat P9 to the v10 issue path and re-landing b2e3afc43; (2) the dashboard opens the port it bound (LEAK3, with test-ui-bare-loki fixed); (3) an evidence-rich PR body (INTEL-3); (4) the shipped GitHub Action runs `loki owner/repo#N`, plus a documented nightly `loki backlog` cron; (5) a visible cost cap (INTEL-2) in the v10 start line. CI gates are unchanged: Tests, Bun Parity, Coverage and Security Audit must be green before a release, plus the two-leg promote. Anything red at about minute 50 is dropped. Report at minute 60, then stop per HANDOFF-NEXT-WEEK.md.
488
+
489
+ ## D61: speed for users (founder via the autonomi-dev session, 2026-10-02 22:50Z)
490
+ A product feature, not a build-process change: `loki "small task"` should finish in seconds, at or below raw Claude Code time and tokens. `loki "big task"` and `loki backlog` should decide by themselves whether the work splits, run the units in parallel worktrees on the user's machine, merge, test once and open one PR, using no more tokens than one sequential session, visible live and with no flags. Design only for now: docs/v10/D61-SPEED.md (an opus architect). Builders start after D60 and after the founder's go. Every target is measured on an eval arm and published in METRICS, losses included.
491
+
492
+ ## D60-5 default cost cap (2026-10-02 23:05Z)
493
+ A Loki 10 run caps priced spend at $20.00 by default. `--max-cost N` beats loki.yaml `budgets.per_run`, which beats the default. The start line prints the cap and its source. Hitting the cap ends the run as BUDGET_STOP with exit 3. Unpriced sessions (no cost event) never count toward the cap, so a subscription or local provider never stops on it.
package/docs/v10/GUIDE.md CHANGED
@@ -6,7 +6,8 @@ Loki 10 is the rewritten engine (docs/v10/ENGINE.md). Since the D48 flip it
6
6
  is the default for three entry points: `loki "<task>"`, `loki owner/repo#N`
7
7
  (issue mode) and `loki quick "<task>"`. Each prints one start line,
8
8
  `Loki 10 engine (set LOKI_ENGINE=legacy or run 'loki legacy' for the previous
9
- engine)`, then the summary below. Everything else (`loki start`, `loki
9
+ engine)`, then the summary below. `loki start <issue ref | issue URL | "multi-word task">` takes the same
10
+ v10 path as `loki <ref>`. Everything else (`loki start ./prd.md`, `loki
10
11
  status`, `loki dashboard` and the rest) is unchanged unless you set
11
12
  LOKI_ENGINE=v10 explicitly, which also routes status, verify and dashboard
12
13
  to the v10 commands. Bare `loki verify` (no LOKI_ENGINE) follows the newest
@@ -16,6 +17,12 @@ missing or LOKI_PROVIDER is unsupported, the default mode falls back to the
16
17
  legacy engine and prints one stderr line saying why. The previous engine stays one step away:
17
18
  `loki legacy <args>` and LOKI_ENGINE=legacy.
18
19
 
20
+ `loki start owner/repo#N`, `loki start <issue URL>` and `loki start "<multi-word
21
+ task>"` run Loki 10, the same as `loki owner/repo#N` and `loki "<task>"`. A PRD
22
+ file, a flag-first call (`loki start --simple prd.md`) and a one-word start stay
23
+ on the legacy engine. The legacy engine is being removed (planned work
24
+ resumes 2026-10-07, see docs/v10/LEGACY-REMOVAL.md).
25
+
19
26
  Some pieces named in this guide are still being built. Each one below says
20
27
  so plainly instead of describing a finished feature.
21
28
 
@@ -66,6 +73,14 @@ Flags, from the engine's own `--help`:
66
73
  from 480s to 1800s (`loki-ts/src/engine10/types.ts`).
67
74
  - `--provider <name>`: pick the coding provider for this run. See the
68
75
  provider table below.
76
+ - `--max-cost <usd>`: per-run cost cap in dollars. Without the flag the cap is
77
+ `budgets.per_run` in the repo's `loki.yaml` (for example
78
+ `budgets:` then ` per_run: 5`), else the default of $20.00. The flag wins over
79
+ the file. The start line shows the cap in force, for example
80
+ `... previous engine), cap $20.00 (default)`. Once priced cost reaches the cap
81
+ the running stage is stopped, no later stage starts, and the run ends
82
+ BUDGET_STOP with exit code 3. Sessions with no provider price never count
83
+ toward the cap.
69
84
 
70
85
  `--no-pr`, `--deep` and `--provider` are parsed by the supervisor
71
86
  (`loki-ts/src/engine10/supervisor.ts`) and take effect on a real run.
@@ -102,6 +117,36 @@ Time: 4m12s (intake 11s, plan 20s, implement 3m10s, verify 31s)
102
117
  - **PR**: the opened pull request URL, or `none` when the run used
103
118
  `--no-pr` or never got that far. A draft PR adds the draft reason in
104
119
  parentheses.
120
+
121
+ The PR body is reviewable in 60 seconds. It leads with what the issue asked,
122
+ then what changed and why, how it was tested, NOT PROVEN, and the receipt digest
123
+ with the `loki verify` command. A field the run did not record reads "not
124
+ recorded", never a number:
125
+
126
+ ```
127
+ ## What the issue asked
128
+ - handles empty input
129
+ - rejects bad tokens
130
+
131
+ ## What changed and why
132
+ - Why: Fix the parser
133
+ - src/parser.ts
134
+ - tests/parser.test.ts
135
+
136
+ ## How it was tested
137
+ - Verdict: VERIFIED
138
+ - Checks: 2 passed, 0 failed, 0 not run, 0 flaky (4 individual tests counted)
139
+ - Command: `bun test tests/parser.test.ts` -> pass
140
+ - Target tests (written before the fix): parser.test.ts
141
+ - Before the fix: 2 failing, 0 passing on base; after: pass
142
+
143
+ ## NOT PROVEN
144
+ - none
145
+
146
+ ## Receipt
147
+ - Digest: sha256:ab12... (signed)
148
+ - Verify: `loki verify run-1`
149
+ ```
105
150
  - **Verdict**: one of VERIFIED, PARTIAL, ALREADY_SATISFIED, SPEC_CONFLICT or
106
151
  FAILED.
107
152
  - **NOT PROVEN**: everything the run did not check, comma-joined. Never
@@ -124,6 +169,23 @@ called by the supervisor at the end of every run, so a real `loki "<task>"`
124
169
  or `loki <issue-ref>` run prints this block on completion. The block above
125
170
  is that function's real output, not a mockup.
126
171
 
172
+ ## Triggers without a cloud
173
+
174
+ Both run on your own GitHub Actions minutes; there is no hosted service.
175
+
176
+ - Issue to PR: copy `.github/workflows/loki-issue-to-pr.yml` into your repository. Label an issue `loki`, or comment `/loki` as an owner, member or collaborator, and it runs `loki owner/repo#N` (the Loki 10 engine) and opens a pull request with an evidence receipt. The agent job holds a read-only token; a separate publish job opens the PR. Set `ANTHROPIC_API_KEY` in repository secrets.
177
+ - Nightly backlog: copy `examples/loki-nightly-backlog.yml` into `.github/workflows/`. Its `schedule:` trigger runs `loki backlog owner/repo --label loki`, one Loki 10 run per labeled open issue:
178
+
179
+ ```yaml
180
+ on:
181
+ schedule:
182
+ - cron: '17 3 * * *' # nightly, 03:17 UTC
183
+ # ...
184
+ - run: loki backlog "${GITHUB_REPOSITORY}" --label loki --concurrency 2
185
+ ```
186
+
187
+ `loki backlog` also takes `--all`, `--issues 1,2,3` and `--dry-run`. The nightly job runs the agent and a write token together, so label only issues you trust.
188
+
127
189
  ## NOT PROVEN
128
190
 
129
191
  NOT PROVEN lists what a run did not verify, so a passing run is never read
@@ -0,0 +1,34 @@
1
+ # Handoff to next week (D59, written 2026-10-01; resume Wednesday 2026-10-07)
2
+
3
+ ## On npm now
4
+ - latest: 10.6.6 (moved by the D49 auto-promote after post-release smoke passed, seen 20:28Z; the D58 real-repo gate is not wired into promote yet).
5
+ - next: 10.6.6 (Release run succeeded 20:12Z; npm can lag about 30 minutes, check `npm view loki-mode dist-tags`).
6
+
7
+ ## Releases this window and their CI
8
+ - 10.6.0 (9f9569c35, tree d922ef170): Tests, Bun Parity, Coverage, Security Audit all green on train/72 and on main. Published.
9
+ - 10.6.1 (9bc3cfcc7): Tests red, shard 7, `test-engine10-docs.sh` (the D57 docs pass removed the README loki10-default marker). Not published.
10
+ - 10.6.2 (5c1e3324d): Tests red from W1-ROUTE (moat P5 egress-blocked-start-seal-verify, P5 local-provider-no-claude-sidecalls, P9 injection-cannot-reach-token; `loki run --help` flags; UI bare loki; progressive isolation help; platform-divergent construct; docs-drift `loki agent` in docs/R10-MARKETPLACE-PLAN.md). Not published; W1-ROUTE reverted (30096450f).
11
+ - 10.6.3 (f289f8bf2): Tests red, shard 7, `test-ui-bare-loki` (LEAK3 prints http://127.0.0.1:57374/start where the test expects otherwise). Not published; LEAK3 reverted (05410c554).
12
+ - 10.6.4 (3a4df211c): every Tests job failed installing deps (npm 404 on baseline-browser-mapping-2.11.27.tgz, a fresh publish not yet propagated; 200 a few minutes later). Not published; content carried into 10.6.5.
13
+ - 10.6.5 (0472f306a): Moat suite red, P9 injection-cannot-reach-token regressed by the minimal `loki start <ref>` route (b2e3afc43): the P9 probe drives `loki start <issue>` and expects a provider session; engine10 exited rc=2 first. Not published; start route reverted (621437c0a).
14
+ - 10.6.6 (456058bae): scope control, Control Plane v0, train-cycle fix, docs. Tests, Bun Parity, Coverage, Security Audit all green; Release succeeded. Published.
15
+
16
+ ## D58 basics
17
+ 1. `loki start` runs v10: FAIL. Both the minimal route (b2e3afc43, a 7-line bin/loki start arm) and the full re-route regress moat P9, because tests/moat P9 drives `loki start <issue>` through the legacy path; port that probe to the v10 issue path first, then re-land b2e3afc43. The full re-route W1-ROUTE is built (branch slice-D57-W1-ROUTE, commit a8ed5461a, which is based on the old main that still has the CP-00 JWT commits, so cherry-pick it, never merge it) but turned Tests red as listed above. Its docs follow-up is f001bc0f1.
18
+ 2. Dashboard: FAIL. LEAK3 (bound URL, scoped reuse, 57374-57399 guard; branch slice-P0-DASH-LEAK3, ceba8a6de) failed `test-ui-bare-loki` in CI and was reverted. The Control Plane v0 live view (CP-RELAND) ships in 10.6.6, off unless LOKI_CONTROL_URL is set.
19
+ 3. Scope control: SHIPPED in 10.6.6 (D58-SCOPE, reverts unrelated edits, lists them in NOT PROVEN). Unproven on a real repo.
20
+ 4. Clean install: PASS on 10.6.0 (per-platform @oven/bun-* deps; post-release smoke passed, which is what fired the promote).
21
+ 5. Real-repo gate before latest moves: FAIL. `scripts/real-repo-gate.sh` exists but promote does not call it, and it needs operator provider auth (ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN, plus GH_TOKEN) that this session does not have. Not run against latest.
22
+
23
+ ## NOT DONE and why
24
+ - W1-ROUTE and its docs cleanup: red CI (above); dropped per D46 rule 2.
25
+ - LEAK3 dashboard fix: red CI (`test-ui-bare-loki`); dropped. Its test expectation and the new bound-URL output disagree; decide which is right.
26
+ - Real-repo gate run: no provider auth in the session; never reads stored keys.
27
+ - Coverage W1-ROUTE removed and must be replaced when it re-lands: `why --json` schema test, eval harness cost checks (R2, S41-01), five trust-core probe cases (CTO sign-off).
28
+ - Wiring the real-repo gate into promote.yml (so latest cannot move without it).
29
+
30
+ ## Founder queue
31
+ - Re-land W1-ROUTE with the moat P5/P9 regressions fixed first (moat outranks everything).
32
+ - Decide whether promote must call the real-repo gate, and supply provider auth for it.
33
+ - The D59 override (release without waiting for CI) expired at 20:10Z; the Release workflow's required-ci still enforced green Tests throughout.
34
+ - Housekeeping: about 43 worktrees under .claude/worktrees (cap 15); backup branches backup/train-67..70 and backup/main-pre-rebuild hold the CP-00 JWT lineage, so never push them.