loki-mode 9.77.0 → 9.78.0

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 (73) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/lib/engine10-push.sh +84 -0
  4. package/autonomy/run.sh +2 -2
  5. package/bin/loki +21 -0
  6. package/dashboard/__init__.py +1 -1
  7. package/docs/INSTALLATION.md +1 -1
  8. package/docs/v10/BOARD.md +66 -35
  9. package/docs/v10/DECISIONS.md +10 -0
  10. package/docs/v10/ENGINE-MEASURE.md +69 -0
  11. package/docs/v10/ENGINE.md +740 -0
  12. package/docs/v10/PROGRESS.md +17 -0
  13. package/loki-ts/dist/loki.js +257 -248
  14. package/mcp/__init__.py +1 -1
  15. package/package.json +1 -1
  16. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  17. package/web-app/dist/assets/{AdminPage-_YAgQxgp.js → AdminPage-CSy7GfXm.js} +1 -1
  18. package/web-app/dist/assets/{Avatar-Bxbdwgz5.js → Avatar-FuCbZv5L.js} +1 -1
  19. package/web-app/dist/assets/{Badge-DFOiCwzh.js → Badge-Do6fV7hN.js} +1 -1
  20. package/web-app/dist/assets/{Button-84KGqMJR.js → Button-B9NZXMf8.js} +1 -1
  21. package/web-app/dist/assets/{CockpitPage-Ck8i3mNd.js → CockpitPage-VXxvKnKW.js} +1 -1
  22. package/web-app/dist/assets/{ComparePage-BpIdW5x8.js → ComparePage-OmqxCaK7.js} +1 -1
  23. package/web-app/dist/assets/{ErrorBoundary-Dcwg_4nU.js → ErrorBoundary-BYCkDeu8.js} +1 -1
  24. package/web-app/dist/assets/{EvidenceReceiptPanel-6II8hA4-.js → EvidenceReceiptPanel-KesRGf-7.js} +1 -1
  25. package/web-app/dist/assets/{GitHubIssuesPanel-CCpJxUo5.js → GitHubIssuesPanel-fEnpFg8B.js} +1 -1
  26. package/web-app/dist/assets/{GitHubPRsPanel-BN7KtPRB.js → GitHubPRsPanel-DGGod_Y0.js} +1 -1
  27. package/web-app/dist/assets/{HomePage-Dmh8Ompu.js → HomePage-EeWPhwob.js} +2 -2
  28. package/web-app/dist/assets/{LoginPage-e_wvWykS.js → LoginPage-BPHKgT1f.js} +1 -1
  29. package/web-app/dist/assets/{MagicPage-SkEbXneS.js → MagicPage-CO0MTvpr.js} +1 -1
  30. package/web-app/dist/assets/{MetricsPage-Jr2E8O4h.js → MetricsPage-eYpHWxnI.js} +1 -1
  31. package/web-app/dist/assets/{NotFoundPage-Bo-xIGHn.js → NotFoundPage-Cd409HEe.js} +1 -1
  32. package/web-app/dist/assets/{ProjectPage--lRlzM8G.js → ProjectPage-hcAZ_hrX.js} +3 -3
  33. package/web-app/dist/assets/{ProjectsPage-CG_L0UkM.js → ProjectsPage-DH04B2fr.js} +1 -1
  34. package/web-app/dist/assets/{SettingsPage-DdZ4UAJM.js → SettingsPage-Csur-yom.js} +1 -1
  35. package/web-app/dist/assets/{ShowcasePage-CnV468WN.js → ShowcasePage-B5AIrDXd.js} +1 -1
  36. package/web-app/dist/assets/{SystemSettingsPage-CyvaTJ_t.js → SystemSettingsPage-DA6Bn7er.js} +1 -1
  37. package/web-app/dist/assets/{TeamsPage-g5hHDx0X.js → TeamsPage-KcBbM7_z.js} +1 -1
  38. package/web-app/dist/assets/{TemplatesPage-CRcRm9ED.js → TemplatesPage-BgLOizbo.js} +1 -1
  39. package/web-app/dist/assets/{TerminalOutput-BDBfTY9s.js → TerminalOutput-CX-gh76o.js} +1 -1
  40. package/web-app/dist/assets/{activity-CpH9qoQP.js → activity-6UlD-ytF.js} +1 -1
  41. package/web-app/dist/assets/{bell-BtlnNdD8.js → bell-CFARmHF4.js} +1 -1
  42. package/web-app/dist/assets/{bot-BAH-qJ4B.js → bot-M-HZlOa2.js} +1 -1
  43. package/web-app/dist/assets/{check-D7ydqeHo.js → check-9GtMUwM3.js} +1 -1
  44. package/web-app/dist/assets/{chevron-left-CJ48kXi_.js → chevron-left-CPV_nwtP.js} +1 -1
  45. package/web-app/dist/assets/{circle-alert-C3m8Jdum.js → circle-alert-UahP_eMY.js} +1 -1
  46. package/web-app/dist/assets/{clock-CpVxJ_xL.js → clock-CcCc97td.js} +1 -1
  47. package/web-app/dist/assets/{cloud-C5RpwJJ2.js → cloud-CviPksVP.js} +1 -1
  48. package/web-app/dist/assets/{code-xml-D8Ch_l6l.js → code-xml-gGDp7nvj.js} +1 -1
  49. package/web-app/dist/assets/{database-Dc-r_JaX.js → database-BlHnMksz.js} +1 -1
  50. package/web-app/dist/assets/{dollar-sign-CXOSNCEc.js → dollar-sign-CqZfNw7q.js} +1 -1
  51. package/web-app/dist/assets/{file-code-corner-il9KkndN.js → file-code-corner-ChtMYoeA.js} +1 -1
  52. package/web-app/dist/assets/{file-plus-CduheFSQ.js → file-plus-C3l1fGp_.js} +1 -1
  53. package/web-app/dist/assets/{globe-C_H2CJ0N.js → globe-BM4RYvi9.js} +1 -1
  54. package/web-app/dist/assets/{hammer-Dd0DZNve.js → hammer-C8xvsZCy.js} +1 -1
  55. package/web-app/dist/assets/{index-CnURGAFT.js → index-BsB5DTpP.js} +2 -2
  56. package/web-app/dist/assets/{layers-CofXpCI5.js → layers-WUsuQnfe.js} +1 -1
  57. package/web-app/dist/assets/{loader-circle-Z2PHP1vi.js → loader-circle-CWZhBNSa.js} +1 -1
  58. package/web-app/dist/assets/{lock-BKZcBfqE.js → lock-bbfx9k11.js} +1 -1
  59. package/web-app/dist/assets/{package-VeINyJLx.js → package-CDfsTKO6.js} +1 -1
  60. package/web-app/dist/assets/{plus-BdRdn_Ne.js → plus-DEm39Klm.js} +1 -1
  61. package/web-app/dist/assets/{refresh-cw-SQlfufGR.js → refresh-cw-DJZcHBKa.js} +1 -1
  62. package/web-app/dist/assets/{rotate-ccw-z7xY1hor.js → rotate-ccw-BcngFsiU.js} +1 -1
  63. package/web-app/dist/assets/{scroll-text-D9DLjkO9.js → scroll-text-CYSjVzWv.js} +1 -1
  64. package/web-app/dist/assets/{server-VlEVEIp_.js → server-CkMcbRF7.js} +1 -1
  65. package/web-app/dist/assets/{shield-alert-D0ulDTaf.js → shield-alert-D6ZsDRLA.js} +1 -1
  66. package/web-app/dist/assets/{thumbs-up-7_JKRnvS.js → thumbs-up-Ce0QhF9c.js} +1 -1
  67. package/web-app/dist/assets/{trash-2-DmRmNre3.js → trash-2-OojrLB2z.js} +1 -1
  68. package/web-app/dist/assets/{trending-down-DZwkFd-S.js → trending-down-3Bu2DcUr.js} +1 -1
  69. package/web-app/dist/assets/{trending-up-4ql9Pr4t.js → trending-up-BUkmDOK8.js} +1 -1
  70. package/web-app/dist/assets/{upload-D2KPx9Uo.js → upload-BgR13l74.js} +1 -1
  71. package/web-app/dist/assets/{usePolling-D6alWGU5.js → usePolling-DwQTkEQG.js} +1 -1
  72. package/web-app/dist/assets/{user-Bo3EjryF.js → user-DZcP5JBh.js} +1 -1
  73. package/web-app/dist/index.html +1 -1
package/SKILL.md CHANGED
@@ -3,7 +3,7 @@ name: loki-mode
3
3
  description: Autonomous spec-driven build system with a built-in trust layer. It does not call work done until it is verified (RARV-C closure loop, 8 quality gates, completion council, verified-completion evidence gate). Triggers on "Loki Mode". Takes a spec (PRD, GitHub issue, OpenAPI doc, etc.) to deployed product with minimal human intervention. Provider-agnostic. Requires --dangerously-skip-permissions flag.
4
4
  ---
5
5
 
6
- # Loki Mode v9.77.0
6
+ # Loki Mode v9.78.0
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -470,4 +470,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
470
470
 
471
471
  ---
472
472
 
473
- **v9.77.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
473
+ **v9.78.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 9.77.0
1
+ 9.78.0
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env bash
2
+ # Loki 10 engine P4 push child (ENGINE.md sections 6 and 7).
3
+ #
4
+ # engine10-push.sh push-pr <repo-dir> <branch> <title> <body-file> [--draft]
5
+ # engine10-push.sh comment <pr-number> <body-file>
6
+ # engine10-push.sh status <sha> <pending|success|failure|error> <description>
7
+ #
8
+ # Holds GitHub credentials, runs no LLM, reads no untrusted text. Inputs come
9
+ # only from argv and the origin pinned by P0 before any provider ran
10
+ # (_LOKI_ORIGIN_PINNED=1 _LOKI_PINNED_ORIGIN=<url>). The target repository is
11
+ # always derived from that pin, never from the agent-writable tree.
12
+ #
13
+ # The push and gh helpers are not copied: this sources exactly the run.sh
14
+ # region tests/test-trusted-push-agent-config.sh extracts, by the same awk
15
+ # anchors, and fails closed when an anchor is missing.
16
+ set -o pipefail
17
+
18
+ log_warn() { printf 'WARN: %s\n' "$*" >&2; }
19
+ log_info() { printf 'INFO: %s\n' "$*" >&2; }
20
+ die() { printf 'engine10-push: %s\n' "$*" >&2; exit "${2:-2}"; }
21
+
22
+ # Capture the pin before sourcing: the region resets both variables to "".
23
+ _e10_pinned="${_LOKI_ORIGIN_PINNED:-}"
24
+ _e10_origin="${_LOKI_PINNED_ORIGIN:-}"
25
+
26
+ _e10_run_sh="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." 2>/dev/null && pwd -P)/run.sh"
27
+ [ -f "$_e10_run_sh" ] || die "run.sh not found at $_e10_run_sh" 3
28
+ _e10_region="$(awk '
29
+ /^_LOKI_WITHHELD_TOKENS=""$/ { on = 1 }
30
+ on { print }
31
+ on && /^_loki_withhold_github_tokens\(\) \{$/ { last = 1 }
32
+ last && /^}$/ { done = 1; exit }
33
+ END { if (!done) exit 3 }
34
+ ' "$_e10_run_sh")" || die "run.sh trusted-push anchors not found; refusing to push" 3
35
+ for _e10_fn in _loki_trusted_push _loki_with_github_tokens _loki_run_neutral _loki_github_repo_from_url; do
36
+ printf '%s\n' "$_e10_region" | grep -q "^${_e10_fn}() {\$" \
37
+ || die "run.sh region lacks ${_e10_fn}; refusing to push" 3
38
+ done
39
+ eval "$_e10_region" || die "run.sh region failed to load" 3
40
+ _LOKI_ORIGIN_PINNED="$_e10_pinned"
41
+ _LOKI_PINNED_ORIGIN="$_e10_origin"
42
+
43
+ [ "$_LOKI_ORIGIN_PINNED" = "1" ] || die "origin not pinned (_LOKI_ORIGIN_PINNED=1 required)"
44
+ _e10_repo="$(_loki_github_repo_from_url "$_LOKI_PINNED_ORIGIN")" \
45
+ || die "pinned origin refused: $(_loki_origin_refusal "$_LOKI_PINNED_ORIGIN")"
46
+
47
+ _e10_gh() { _loki_with_github_tokens _loki_run_neutral "$_e10_repo" command gh "$@"; }
48
+
49
+ mode="${1:-}"
50
+ shift || true
51
+ case "$mode" in
52
+ push-pr)
53
+ [ "$#" -ge 4 ] && [ "$#" -le 5 ] || die "usage: push-pr <repo-dir> <branch> <title> <body-file> [--draft]"
54
+ dir="$1" branch="$2" title="$3" body="$4" draft=()
55
+ if [ "$#" -eq 5 ]; then
56
+ [ "$5" = "--draft" ] || die "unknown flag: $5"
57
+ draft=(--draft)
58
+ fi
59
+ [ -f "$body" ] || die "body file not found: $body"
60
+ _loki_trusted_push _loki_with_github_tokens "$dir" "$branch" || die "push refused or failed (rc=$?)"
61
+ url="$(_e10_gh pr list --repo "$_e10_repo" --head "$branch" --state open --json url --jq '.[0].url')" \
62
+ || die "gh pr list failed"
63
+ if [ -z "$url" ] || [ "$url" = "null" ]; then
64
+ url="$(_e10_gh pr create --repo "$_e10_repo" --head "$branch" --title "$title" --body-file "$body" "${draft[@]}")" \
65
+ || die "gh pr create failed"
66
+ url="$(printf '%s\n' "$url" | tail -n 1)"
67
+ fi
68
+ printf '%s\n' "$url"
69
+ ;;
70
+ comment)
71
+ [ "$#" -eq 2 ] || die "usage: comment <pr-number> <body-file>"
72
+ case "$1" in '' | *[!0-9]*) die "pr number must be digits" ;; esac
73
+ [ -f "$2" ] || die "body file not found: $2"
74
+ _e10_gh pr comment "$1" --repo "$_e10_repo" --body-file "$2" || die "gh pr comment failed"
75
+ ;;
76
+ status)
77
+ [ "$#" -eq 3 ] || die "usage: status <sha> <state> <description>"
78
+ [[ "$1" =~ ^[0-9a-f]{40}$ ]] || die "sha must be 40 lowercase hex characters"
79
+ case "$2" in pending | success | failure | error) ;; *) die "bad state: $2" ;; esac
80
+ _e10_gh api "repos/$_e10_repo/statuses/$1" -f "state=$2" -f context=loki/deep-verify \
81
+ -f "description=$3" >/dev/null || die "gh api status failed"
82
+ ;;
83
+ *) die "usage: engine10-push.sh push-pr|comment|status ..." ;;
84
+ esac
package/autonomy/run.sh CHANGED
@@ -15033,7 +15033,7 @@ run_magic_debate_gate() {
15033
15033
  log_info "Magic Modules: running debate on '$latest_name'"
15034
15034
  local debate_out debate_rc
15035
15035
  debate_out=$(cd "$TARGET_DIR" && PYTHONPATH="$PROJECT_DIR" LOKI_PROVIDER="${PROVIDER_NAME:-claude}" \
15036
- timeout 300 "$PROJECT_DIR/autonomy/loki" magic debate "$latest_name" --rounds 2 2>&1) \
15036
+ timeout -k 10 300 "$PROJECT_DIR/autonomy/loki" magic debate "$latest_name" --rounds 2 2>&1) \
15037
15037
  && debate_rc=0 || debate_rc=$?
15038
15038
 
15039
15039
  # A debate that could not RUN is not a debate that found nothing. The old
@@ -24120,7 +24120,7 @@ show_run_start_estimate() {
24120
24120
  [ -x "$loki_bin" ] || { command -v loki >/dev/null 2>&1 && loki_bin="loki" || return 0; }
24121
24121
 
24122
24122
  local plan_json=""
24123
- plan_json=$(timeout 30 "$loki_bin" plan "$prd_path" --json 2>/dev/null) || plan_json=""
24123
+ plan_json=$(timeout -k 10 30 "$loki_bin" plan "$prd_path" --json 2>/dev/null) || plan_json=""
24124
24124
  [ -n "$plan_json" ] || { log_info "Estimate: unavailable (estimator did not return a result); the run continues."; return 0; }
24125
24125
 
24126
24126
  # Parse REAL numbers only. argv keeps the JSON out of the script body so
package/bin/loki CHANGED
@@ -243,6 +243,27 @@ if [ "${LOKI_LEGACY_BASH:-0}" = "1" ] || [ "${LOKI_LEGACY_BASH:-}" = "true" ]; t
243
243
  exec "$BASH_CLI" "$@"
244
244
  fi
245
245
 
246
+ # Loki 10 engine (D29): additive; skipped entirely unless LOKI_ENGINE=v10.
247
+ if [ "${LOKI_ENGINE:-}" = "v10" ]; then
248
+ _e10=0
249
+ case "${1:-}" in
250
+ status|verify|dashboard) _e10=1 ;;
251
+ ""|-*) _e10=0 ;;
252
+ # http*://*/issues/* also covers GitLab's /-/issues/ URLs.
253
+ */*\#[0-9]*|http*://*/issues/*|http*://*/browse/*) _e10=1 ;;
254
+ *" "*) _e10=1 ;;
255
+ # ponytail: a one-word argument stays on the legacy CLI. The telemetry
256
+ # allowlist is not a command registry (estimate, intent, outcomes are
257
+ # missing from it), so it cannot decide routing. Multi-word tasks and
258
+ # issue refs reach v10.
259
+ *) _e10=0 ;;
260
+ esac
261
+ if [ "$_e10" = "1" ]; then
262
+ command -v bun >/dev/null 2>&1 || { echo "Error: LOKI_ENGINE=v10 needs bun. Unset LOKI_ENGINE to use the current engine." >&2; exit 1; }
263
+ exec bun "$BUN_CLI" engine10 "$@"
264
+ fi
265
+ fi
266
+
246
267
  # Bun must be installed for the new path; if it isn't, fall through to bash
247
268
  # silently rather than fail. This keeps users on systems without Bun working.
248
269
  if ! command -v bun &>/dev/null; then
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "9.77.0"
10
+ __version__ = "9.78.0"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -2,7 +2,7 @@
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:** v9.77.0
5
+ **Version:** v9.78.0
6
6
 
7
7
  ---
8
8
 
package/docs/v10/BOARD.md CHANGED
@@ -250,49 +250,80 @@ set is declared to avoid overlap with those and with each other.
250
250
  | S-188 | BACKLOG 123: overview proof card wording has no test of its own | dashboard-ui/tests/loki-overview-proof-card.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/loki-overview-proof-card.node.test.mjs passes: no proof reads Not evaluated, a headline carries the recorded-copy prefix, gaps null reads uncertainty not measured; deleting the prefix in a scratch copy fails it | released@2026-09-27T20:54Z | Source: 19:57Z cut. Batch 7 (wf_a3ea2c8c-560), build then review. Review APPROVE on 6d965cca; in train 13, main 28e62e44 pushed 20:35:00 (`git ls-remote origin refs/heads/main` = 28e62e44). Published in v9.74.0 (`npm view loki-mode version` = 9.74.0; npm time 2026-09-27T20:54Z). |
251
251
  | S-189 | BACKLOG 114: learning dashboard renders failed metrics and trends reads as no data | dashboard-ui/components/loki-learning-dashboard.js (metrics and trends load plus their two empty branches only), dashboard-ui/tests/loki-learning-dashboard-fetch-error.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/loki-learning-dashboard-fetch-error.node.test.mjs passes: rejected metrics and trends render Could not load; an empty trends response still renders No trend data available | released@2026-09-27T20:54Z | Source: 19:57Z cut. Batch 7 (wf_a3ea2c8c-560), build then review. Review APPROVE on a746655f; in train 13, main 28e62e44 pushed 20:35:00 (`git ls-remote origin refs/heads/main` = 28e62e44). Published in v9.74.0 (`npm view loki-mode version` = 9.74.0; npm time 2026-09-27T20:54Z). |
252
252
  | S-190 | BACKLOG 112: R3 design doc describes project_total_usd as a plain sum | docs/R3-COST-OBSERVABILITY-DESIGN.md | LOW | grep -n 'sum of per-run proof costs' docs/R3-COST-OBSERVABILITY-DESIGN.md exits 1; grep -n project_total_partial docs/R3-COST-OBSERVABILITY-DESIGN.md prints at least one line | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 1d6786bf; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
253
- | S-191 | Velocity: test-review-assurance-tail.sh (116s) under 60s by running independent cases concurrently, budgets unchanged | tests/test-review-assurance-tail.sh | MEDIUM | time LOKI_TEST_SHARD=0/8 bash tests/test-review-assurance-tail.sh exits 0 with real under 60s and the same pass-count line as the pre-change capture; both timings reported | building@2026-09-27T20:36Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. |
253
+ | S-191 | Velocity: test-review-assurance-tail.sh (116s) under 60s by running independent cases concurrently, budgets unchanged | tests/test-review-assurance-tail.sh | MEDIUM | time LOKI_TEST_SHARD=0/8 bash tests/test-review-assurance-tail.sh exits 0 with real under 60s and the same pass-count line as the pre-change capture; both timings reported | parked@2026-09-27T21:43Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 63396544 kept on branch worktree-wf_ff8d537c-40e-4. |
254
254
  | S-192 | BACKLOG 112: no test drives the web-app WebSocket status push payload for unmeasured cost | web-app/tests/test_status_push_unmeasured.py (new), web-app/server.py (lift the nested status reader only if needed) | MEDIUM | python3 -m pytest -q web-app/tests/test_status_push_unmeasured.py passes: no tokens gives cost null and max_iterations null, priced tokens give a number; forcing 0.0 in a scratch copy fails case 1 | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 0b6deb16; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
255
255
  | S-193 | Velocity: v10-ops worktree-budget prints how many worktrees a batch may open before dispatch | scripts/v10-ops.sh (new worktree-budget subcommand), tests/test-v10-ops.sh | LOW | bash tests/test-v10-ops.sh exits 0; scripts/v10-ops.sh worktree-budget 15 prints 15 minus the .claude/worktrees entries in git worktree list --porcelain, and at or over the cap prints 0 and exits 1 | released@2026-09-27T21:15Z | Source: 19:57Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on a0d7a34d; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
256
- | S-194 | BACKLOG 108: LOKI_AUTO_PR pushes a branch whose history still holds user files | autonomy/run.sh (create_session_pr only; does not overlap S-175 or S-195), tests/test-auto-pr-agent-committed-refuse.sh (new) | HIGH | bash tests/test-auto-pr-agent-committed-refuse.sh exits 0: auto path with a record makes no push, returns 1 and prints git reset --soft; advisory path prints the cleanup before git push -u; empty record pushes; removing the record read in a scratch copy fails leg 1; bash tests/test-trusted-push-agent-config.sh exits 0 | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 7a4b59d7 review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 52a0ac1e (HIGH re-review APPROVE); in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
256
+ | S-194 | BACKLOG 108: LOKI_AUTO_PR pushes a branch whose history still holds user files | autonomy/run.sh (create_session_pr only; does not overlap S-175 or S-195), tests/test-auto-pr-agent-committed-refuse.sh (new) | HIGH | bash tests/test-auto-pr-agent-committed-refuse.sh exits 0: auto path with a record makes no push, returns 1 and prints git reset --soft; advisory path prints the cleanup before git push -u; empty record pushes; removing the record read in a scratch copy fails leg 1; bash tests/test-trusted-push-agent-config.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 7a4b59d7 review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 52a0ac1e (HIGH re-review APPROVE); in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
257
257
  | S-195 | BACKLOG 17: /api/focus POST fires with the dashboard disabled | autonomy/run.sh (dashboard focus notify block only; does not overlap S-175 or S-194), tests/test-focus-post-dashboard-off.sh (new) | MEDIUM | bash tests/test-focus-post-dashboard-off.sh exits 0: ENABLE_DASHBOARD=false leaves the curl shim log empty, true records one POST; removing the guard in a scratch copy fails the false leg | merged@2026-09-27T21:40Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Re-dispatched review APPROVE on 5c86639e (`bash tests/test-focus-post-dashboard-off.sh` 3/3, red 2/3 on parent); cherry-picked onto main 21:40Z. |
258
- | S-196 | council_managed_should_stop diffs Loki's install tree and runs -E readers | autonomy/completion-council.sh (council_managed_should_stop only), tests/moat/p2-honest-verdict.sh (case_council_readers_no_user_site_pth plus the ~858 comment), tests/test-council-managed-diff-target.sh (new) | HIGH | bash tests/moat/p2-honest-verdict.sh prints CASE P2.council-readers-no-user-site-pth PASS and CASE P2.council-readers-not-shadowed PASS; bash tests/test-council-managed-diff-target.sh exits 0 with the target-only file in _CC_DIFF; reverting the readers to -E makes the pth case FAIL; bash tests/moat/run.sh reports no rule failed | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. a7bc805a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 6cb0cfec (HIGH re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
259
- | S-197 | BACKLOG 51: NOT CHECKED text should name PYTHONPATH and PYTHONUSERBASE | autonomy/loki (loki_remote_verify_receipt attestation NOT CHECKED branch and cmd_proof --jwks NOT CHECKED echo only; does not overlap S-179), tests/test-proof-verify-jwks.sh (case 4 only) | LOW | bash tests/test-proof-verify-jwks.sh exits 0 with case 4 asserting PYTHONUSERBASE in the NOT CHECKED output; grep -c PYTHONUSERBASE autonomy/loki prints 2 or more; bash tests/test-remote-attestation-verdict.sh exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 04310c0a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on d5afb96b (re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
260
- | S-198 | BACKLOG 145: P7 Array.from arm loses an outer generator's index when generators nest | tests/moat/p7-no-fabricated-data.sh (Array.from generator arm ~1934-1994 and one fixture beside the B-8 fixture ~3301 only; does not overlap S-180) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the nested fixture; removing the outer substitution lets it through; tests/moat/cases.txt unchanged | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78a35aa5; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
258
+ | S-196 | council_managed_should_stop diffs Loki's install tree and runs -E readers | autonomy/completion-council.sh (council_managed_should_stop only), tests/moat/p2-honest-verdict.sh (case_council_readers_no_user_site_pth plus the ~858 comment), tests/test-council-managed-diff-target.sh (new) | HIGH | bash tests/moat/p2-honest-verdict.sh prints CASE P2.council-readers-no-user-site-pth PASS and CASE P2.council-readers-not-shadowed PASS; bash tests/test-council-managed-diff-target.sh exits 0 with the target-only file in _CC_DIFF; reverting the readers to -E makes the pth case FAIL; bash tests/moat/run.sh reports no rule failed | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. a7bc805a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on 6cb0cfec (HIGH re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
259
+ | S-197 | BACKLOG 51: NOT CHECKED text should name PYTHONPATH and PYTHONUSERBASE | autonomy/loki (loki_remote_verify_receipt attestation NOT CHECKED branch and cmd_proof --jwks NOT CHECKED echo only; does not overlap S-179), tests/test-proof-verify-jwks.sh (case 4 only) | LOW | bash tests/test-proof-verify-jwks.sh exits 0 with case 4 asserting PYTHONUSERBASE in the NOT CHECKED output; grep -c PYTHONUSERBASE autonomy/loki prints 2 or more; bash tests/test-remote-attestation-verdict.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. 04310c0a review CONCERN; rework in batch 9 (wf_4da25841-89e). Review APPROVE on d5afb96b (re-review APPROVE); in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
260
+ | S-198 | BACKLOG 145: P7 Array.from arm loses an outer generator's index when generators nest | tests/moat/p7-no-fabricated-data.sh (Array.from generator arm ~1934-1994 and one fixture beside the B-8 fixture ~3301 only; does not overlap S-180) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the nested fixture; removing the outer substitution lets it through; tests/moat/cases.txt unchanged | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78a35aa5; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
261
261
  | S-199 | py-tool identity test covers every guarded _loki_snapshot_py_tool copy under autonomy/ | tests/test-council-py-tool-identity.sh | LOW | bash tests/test-council-py-tool-identity.sh exits 0 and prints the number of copies compared (at least 1 besides run.sh); a one-byte change to completion-council.sh's copy in a scratch tree exits 1 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 41c07bd1; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
262
262
  | S-200 | BACKLOG 54: done-recognition readers load user-site .pth (-E only) | autonomy/lib/done-recognition.sh (python3 sites plus guarded helper copy), tests/test-done-recognition-no-user-site-pth.sh (new) | HIGH | bash tests/test-done-recognition-no-user-site-pth.sh exits 0 and reverting one site to -E in a scratch copy fails it; bash tests/test-done-recognition-tests-axis.sh and bash tests/test-reuse-done-recognition.sh exit 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 6a55b22f; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
263
263
  | S-201 | BACKLOG 54: council-v2 readers load .pth; a crashed sycophancy check skips the devil's advocate | autonomy/council-v2.sh (python3 sites, Step 4 and 5 fallbacks, guarded helper copy), tests/test-council-v2-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-council-v2-no-user-site-pth.sh exits 0 (pth leg and detector-failure leg run the devil's advocate on a unanimous approve); reverting either change fails its leg; bash tests/test-council-v2-quorum.sh exits 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on 72851565; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
264
- | S-202 | BACKLOG 54: voter-agents readers load user-site .pth (-E only) | autonomy/lib/voter-agents.sh (3 python3 sites plus guarded helper copy), tests/test-voter-agents-no-user-site-pth.sh (new) | HIGH | bash tests/test-voter-agents-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-voter-agents-json.sh and bash tests/test-sdk-voter-agents.sh exit 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on ccb1f0fa; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
265
- | S-203 | BACKLOG 54: proof-check readers load user-site .pth (-E only) | autonomy/lib/proof-check.sh (3 heredoc readers plus guarded helper copy), tests/test-proof-check-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-proof-check-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-proven-pr-check.sh exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b4bfe05d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
266
- | S-204 | BACKLOG 53: checklist verification loads user-site .pth (-E only) | autonomy/prd-checklist.sh (python3 sites incl. checklist-verify.py call and oracle heredoc, plus guarded helper copy), tests/test-prd-checklist-no-user-site-pth.sh (new) | HIGH | bash tests/test-prd-checklist-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/moat/p2-honest-verdict.sh prints CASE P2.checklist-verify-not-shadowed PASS; bash tests/test-prd-checklist-interval-w4.sh exits 0 | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 80c0a3f7; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
267
- | S-205 | Bun loki proof verify runs a PATH python3 -E (user-site .pth reaches the verdict) | loki-ts/src/commands/proof.ts (verifier spawn only), loki-ts/src/util/python.ts (extend existing helper only if used), loki-ts/tests/commands/proof_verify_interpreter.test.ts (new) | HIGH | cd loki-ts && bun test tests/commands/proof_verify_interpreter.test.ts tests/commands/proof_verify_parity.test.ts exits 0; reverting to python3 -E fails the new test; no resolvable interpreter exits 2 | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 75c6b9e9; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
264
+ | S-202 | BACKLOG 54: voter-agents readers load user-site .pth (-E only) | autonomy/lib/voter-agents.sh (3 python3 sites plus guarded helper copy), tests/test-voter-agents-no-user-site-pth.sh (new) | HIGH | bash tests/test-voter-agents-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-voter-agents-json.sh and bash tests/test-sdk-voter-agents.sh exit 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on ccb1f0fa; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
265
+ | S-203 | BACKLOG 54: proof-check readers load user-site .pth (-E only) | autonomy/lib/proof-check.sh (3 heredoc readers plus guarded helper copy), tests/test-proof-check-no-user-site-pth.sh (new) | MEDIUM | bash tests/test-proof-check-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/test-proven-pr-check.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b4bfe05d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
266
+ | S-204 | BACKLOG 53: checklist verification loads user-site .pth (-E only) | autonomy/prd-checklist.sh (python3 sites incl. checklist-verify.py call and oracle heredoc, plus guarded helper copy), tests/test-prd-checklist-no-user-site-pth.sh (new) | HIGH | bash tests/test-prd-checklist-no-user-site-pth.sh exits 0 and reverting fails it; bash tests/moat/p2-honest-verdict.sh prints CASE P2.checklist-verify-not-shadowed PASS; bash tests/test-prd-checklist-interval-w4.sh exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 80c0a3f7; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
267
+ | S-205 | Bun loki proof verify runs a PATH python3 -E (user-site .pth reaches the verdict) | loki-ts/src/commands/proof.ts (verifier spawn only), loki-ts/src/util/python.ts (extend existing helper only if used), loki-ts/tests/commands/proof_verify_interpreter.test.ts (new) | HIGH | cd loki-ts && bun test tests/commands/proof_verify_interpreter.test.ts tests/commands/proof_verify_parity.test.ts exits 0; reverting to python3 -E fails the new test; no resolvable interpreter exits 2 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 75c6b9e9; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
268
268
  | S-206 | BACKLOG 114: cockpit actions say working tree is clean and no run in progress after a failed fetch | web-app/src/cockpit/FinalActions.tsx (disabled reasons only), web-app/src/cockpit/FinalActions.reasons.test.mjs (new) | LOW | node --test web-app/src/cockpit/FinalActions.reasons.test.mjs passes: git null lacks The working tree is clean and Nothing to push, status null lacks No run in progress, real data keeps both; cd web-app && npx tsc -b exits 0 | released@2026-09-27T21:15Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Review APPROVE on ff852f0c; in train 14, main 04af133a pushed 20:58:10 (`git ls-remote origin refs/heads/main` = 04af133a). Published in v9.75.0 (`npm view loki-mode version` = 9.75.0; npm time 2026-09-27T21:15Z). |
269
- | S-207 | BACKLOG 114: cockpit evidence says No gate results recorded when the checklist request failed | web-app/src/cockpit/useCockpitState.ts (getChecklist via settle only), web-app/src/cockpit/EvidencePanel.tsx (empty branch only), web-app/src/cockpit/ExecutionCockpit.tsx (EvidencePanel props only), web-app/src/cockpit/EvidencePanel.state.test.mjs (new) | LOW | node --test web-app/src/cockpit/EvidencePanel.state.test.mjs passes: an error renders Could not load gate results, items [] keeps No gate results recorded; node web-app/src/cockpit/run-derive-view-test.mjs exits 0; cd web-app && npx tsc -b exits 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b969a3cb; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
269
+ | S-207 | BACKLOG 114: cockpit evidence says No gate results recorded when the checklist request failed | web-app/src/cockpit/useCockpitState.ts (getChecklist via settle only), web-app/src/cockpit/EvidencePanel.tsx (empty branch only), web-app/src/cockpit/ExecutionCockpit.tsx (EvidencePanel props only), web-app/src/cockpit/EvidencePanel.state.test.mjs (new) | LOW | node --test web-app/src/cockpit/EvidencePanel.state.test.mjs passes: an error renders Could not load gate results, items [] keeps No gate results recorded; node web-app/src/cockpit/run-derive-view-test.mjs exits 0; cd web-app && npx tsc -b exits 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on b969a3cb; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
270
270
  | S-208 | BACKLOG 118: trust trajectory reads any non-pass council verdict as a failure | autonomy/lib/trust_trajectory.py (_verdict_is_pass only), tests/test_trust_trajectory_unknown_verdict.py (new) | MEDIUM | python3 -m pytest -q tests/test_trust_trajectory_unknown_verdict.py tests/test_trust_trajectory.py tests/dashboard/test_trust_trajectory_endpoint.py passes: an unknown verdict adds no data point, REJECTED stays 0.0; reverting fails case 1 | rejected@2026-09-27T20:58Z | Source: 20:12Z cut. Batch 8 (wf_ff8d537c-40e), build then review. Closed without code: the gate did not reproduce (no writer emits a verdict that is neither pass nor fail; reviewer APPROVE of the close, proof-generator.py:104-148 is the only final_verdict writer). |
271
- | S-209 | BACKLOG 99 (Bun): codex, cline and aider get the prompt without the commit-hygiene line | loki-ts/src/runner/providers.ts (codex, cline, aider invokers only), loki-ts/tests/runner/provider_commit_hygiene.test.ts (new), loki-ts/tests/runner/providers.test.ts (argv asserts only if moved) | MEDIUM | cd loki-ts && bun test tests/runner/provider_commit_hygiene.test.ts tests/runner/providers.test.ts exits 0: all three argvs carry the providers/codex.sh literal, claude not double-prefixed; removing the prefix fails the three legs | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78f2f65d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
272
- | S-210 | Velocity: help-discoverability (29s) and completion-coverage (30s) probe loops under 10s each | tests/test-help-discoverability.sh, tests/test-completion-coverage.sh (probe loops only) | LOW | time bash tests/test-help-discoverability.sh and time bash tests/test-completion-coverage.sh each exit 0 with real under 10s; real_count and pass counts match the pre-change capture; both timings reported | merged@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on d4fb8ad2; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). |
273
- | S-211 | BACKLOG 75: register the four suites no runner executes (Captain, after S-174 merges) | tests/run-all-tests.sh (four run_test lines only, after S-174 merges), tests/shard-durations.tsv (four lines) | LOW | grep -c -e test_managed_completion_flag -e test_managed_review_flag -e test-evidence-gate-no-tests -e test-voter-agents-json tests/run-all-tests.sh prints 8; bash tests/test-shard-coverage.sh exits 0; each suite ran 3 of 3 from a scratch cwd with no .loki/state/provider left | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on a04bbb7a; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
274
- | S-212 | GUARDS 5, 12 and 13 still read PENDING after S-138, S-139 and S-154 landed (after S-181 merges) | docs/v10/GUARDS.md (sections 5, 12, 13 only; does not overlap S-181 section 11) | LOW | awk '/^## 12\./,0' docs/v10/GUARDS.md piped to grep -c 'PENDING, no slice cut' prints 0; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-v10-pulse.sh exit 0 | merged@2026-09-27T21:22Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on bd135cb8; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). |
275
- | S-213 | BACKLOG 123: cost.html and proofs.html council-vote labels have no test of their own | dashboard-ui/tests/static-council-vote-label.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/static-council-vote-label.node.test.mjs passes (proofs.html council prefix and title, cost.html Council vote header); renaming the header or dropping the title in a scratch copy fails it | building@2026-09-27T21:26Z | Source: 20:12Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
276
- | S-214 | BACKLOG 147: P7 useMemo arm misses a factory that calls a registered fabricator | tests/moat/p7-no-fabricated-data.sh (HELPER_LOCAL_DECL_TMPL ~1182 and its use ~2186, ceiling comment ~978-986, one fixture beside the DECL_USEMEMO fixture ~3138-3160 only; does not overlap S-198) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the composed useMemo fixture; removing the useMemo prefix in a scratch copy lets it through; git diff --stat tests/moat/cases.txt is empty | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
277
- | S-215 | PR receipt renderer in proof-pr.sh imports json from the target repo (cwd shadow) | autonomy/lib/proof-pr.sh (render_evidence_receipt_md heredoc reader plus guarded _loki_snapshot_py_tool copy), tests/test-proof-pr-no-cwd-shadow.sh (new) | HIGH | bash tests/test-proof-pr-no-cwd-shadow.sh exits 0 (a planted json.py cannot forge the headline) and reverting to bare python3 - in a scratch copy fails it; bash tests/test-proven-pr-receipt.sh exits 0; bash tests/test-council-py-tool-identity.sh exits 0 and counts one more copy | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
278
- | S-216 | loki verify inline readers import from the tree under review (cwd shadow) | autonomy/verify.sh (reader sites ~190, 591, 1269, 1271, 1295, 1337, 1339, 1441 plus guarded helper copy; not the unittest or py_compile runs), tests/test-verify-no-cwd-shadow.sh (new) | HIGH | bash tests/test-verify-no-cwd-shadow.sh exits 0 and reverting one site in a scratch copy fails it; bash tests/test-verify.sh exits 0; bash tests/moat/run.sh reports no rule failed; bash tests/test-council-py-tool-identity.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
279
- | S-217 | BACKLOG 81: enforce_test_coverage package.json readers load user-site .pth | autonomy/run.sh (enforce_test_coverage _declared_test_script and _ws_script readers only; anchor on names), tests/test-enforce-test-coverage-pkg-readers-pth.sh (new) | HIGH | bash tests/test-enforce-test-coverage-pkg-readers-pth.sh exits 0 (a .pth no longer changes the recorded test gate outcome) and reverting one reader to -E in a scratch copy fails it; no .loki/state/provider left in the repo; bash tests/test-honest-gate-status.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
280
- | S-218 | BACKLOG 131c: snapshot git status runs an agent-chosen core.fsmonitor command | autonomy/run.sh (_loki_untracked_status only), tests/test-untracked-status-fsmonitor.sh (new) | HIGH | bash tests/test-untracked-status-fsmonitor.sh exits 0 (no fsmonitor marker, real untracked file still listed) and removing the two -c flags in a scratch copy fails it; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-branch-lifecycle.sh exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
281
- | S-219 | BACKLOG 83: a failed git add -A makes the session commit silently commit nothing | autonomy/run.sh (commit_session_changes git add -A block only), tests/test-session-commit-add-failure.sh (new) | MEDIUM | bash tests/test-session-commit-add-failure.sh exits 0: an empty embedded repo prints Left uncommitted naming the add failure, a normal repo still commits; removing the rc check in a scratch copy fails leg 1; bash tests/test-branch-lifecycle.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
282
- | S-220 | BACKLOG 109: untrack step's global reset drops force-staged agent files from the session commit | autonomy/run.sh (_loki_untrack_agent_committed_user_files only), tests/test-untrack-keeps-force-staged.sh (new) | MEDIUM | bash tests/test-untrack-keeps-force-staged.sh exits 0: git add -f dist/bundle.js lands in the session commit while the pre-existing user file stays untracked on disk; restoring git reset -q in a scratch copy fails it; bash tests/test-branch-lifecycle.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
283
- | S-221 | BACKLOG 123: audit.py verify exits 0 when it checked nothing | dashboard/audit.py (_unified_cli verify branch and docstring only; tip and prefix untouched), tests/dashboard/test_audit_verify_cli_nothing_checked.py (new) | MEDIUM | python3 -m pytest -q tests/dashboard/test_audit_verify_cli_nothing_checked.py: empty dir exits 2, valid chain 0, tampered 1, tip on an empty dir still 0; bash tests/test-audit-chain-honesty.sh and bash tests/test-audit-js-suites.sh exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
284
- | S-222 | BACKLOG 118: skill-session WebSocket status push hardcodes running_agents 0 | dashboard/server.py (skill-session broadcast payload ~1030-1047 only), tests/dashboard/test_skill_session_ws_running_agents.py (new) | LOW | python3 -m pytest -q tests/dashboard/test_skill_session_ws_running_agents.py shows running_agents None on the skill-session push; restoring 0 fails it | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
285
- | S-223 | BACKLOG 114/118: notification triggers read No triggers configured after a failed read | dashboard/server.py (get_notification_triggers only), dashboard-ui/components/loki-notification-center.js (_loadTriggers and triggers empty branch only), tests/dashboard/test_notification_triggers_unreadable.py (new), dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (new) | LOW | python3 -m pytest -q tests/dashboard/test_notification_triggers_unreadable.py shows triggers null with error on a corrupt file and [] on a missing one; node --test dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs shows an error lacks No triggers configured and an empty list keeps it | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
286
- | S-224 | BACKLOG 118: web-app receipt and cost trend show a partly priced run as a complete cost | web-app/src/components/EvidenceReceiptPanel.tsx (Cost field only), web-app/src/api/client.ts (ProofDetail cost type and cost/timeline runs type only), web-app/src/pages/MetricsPage.tsx (costTrend only), web-app/src/components/EvidenceReceiptPanel.cost.test.mjs (new) | MEDIUM | node --test web-app/src/components/EvidenceReceiptPanel.cost.test.mjs: cost_partial true renders at least $1.20, absent keeps $1.20, a partial run's trend label carries (partial); cd web-app && npx tsc -b exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
287
- | S-225 | BACKLOG 118: standalone receipts list shows a partly priced run as a complete cost | dashboard-ui/scripts/build-standalone.js (loadReceipts cost cell only), tests/test-receipts-panel.sh (one new leg) | LOW | bash tests/test-receipts-panel.sh exits 0 with the new leg asserting at least $X.XX only when cost_partial is true; bash tests/test-budget-banner-dedup.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
288
- | S-226 | BACKLOG 106 class: loki stats reads unmeasured cost as $0.00 on both routes | autonomy/loki (cmd_stats only), loki-ts/src/commands/stats.ts, loki-ts/tests/commands/stats_unmeasured.test.ts (new), tests/test-stats-unmeasured-cost.sh (new) | MEDIUM | bash tests/test-stats-unmeasured-cost.sh exits 0 (all-zero records give cost_usd null and not recorded, same on both routes); cd loki-ts && bun test tests/commands/stats.test.ts tests/commands/stats_unmeasured.test.ts exits 0; bash tests/test-bash-bun-parity.sh exits 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
289
- | S-227 | BACKLOG 106 class: loki status prints Budget $0 for a run it never measured, on both routes | autonomy/loki (cmd_status budget block only), loki-ts/src/commands/status.ts (readBudgetField and its budget caller only), loki-ts/tests/commands/status.test.ts (budget legs only), tests/test-status-budget-unmeasured.sh (new) | MEDIUM | bash tests/test-status-budget-unmeasured.sh exits 0 (budget_used 0, null or absent prints not recorded on both routes, a positive value prints as today); cd loki-ts && bun test tests/commands/status.test.ts exits 0; bash tests/test-status-cli-provider-parity.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
290
- | S-228 | BACKLOG 121: DeployConnections pushes default not-connected states upward after its own fetch failed | web-app/src/components/DeployConnections.tsx (connect and disconnect handlers only), web-app/src/components/DeployConnections.propagate.test.mjs (new) | LOW | node --test web-app/src/components/DeployConnections.propagate.test.mjs shows no synthesized statuses reach onStatusChange after a failed fetch; node --test web-app/src/components/DeployConnections.state.test.mjs and cd web-app && npx tsc -b exit 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
291
- | S-229 | BACKLOG 114: preview header says Detecting project type forever after a failed preview-info fetch | web-app/src/components/ProjectWorkspace.tsx (getPreviewInfo call ~839 and Detecting project type branch ~1877 only), web-app/src/components/ProjectWorkspace.preview.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.preview.test.mjs shows a rejected fetch renders Could not detect project type and lacks Detecting project type; node --test web-app/src/components/ProjectWorkspace.panels.test.mjs and cd web-app && npx tsc -b exit 0 | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
292
- | S-230 | BACKLOG 115/118: ProjectWorkspace labels unknown phases building and Replay Build can never appear | web-app/src/components/ProjectWorkspace.tsx (buildPhase memo ~1401-1410 and Replay Build condition ~1488 only; does not overlap S-229), web-app/src/components/ProjectWorkspace.phase.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.phase.test.mjs shows an unrecognized phase is not building and a completed idle session shows Replay Build; cd web-app && npx tsc -b exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
293
- | S-231 | BACKLOG 52: the Moat suite CI check reads as moat proven at 0 of 9 | .github/workflows/test.yml (moat-suite job name only) | LOW | gh api required_status_checks for main does not list Moat suite (else report-only); git grep -n "name: Moat suite" -- .github prints nothing; git grep -n "Moat suite" -- tests scripts .github lists only the step-summary heading; the next push shows the renamed check | building@2026-09-27T21:26Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. |
294
- | S-232 | autonomy/loki is linted only inside the sentrux test; the lint suite schedules big files last | tests/run-shellcheck.sh, tests/test-sentrux-init-rules.sh (T6 only) | LOW | LOKI_SHELLCHECK_JOBS=4 bash tests/run-shellcheck.sh exits 0, prints Checked ./autonomy/loki, counts match the pre-change capture plus loki; time bash tests/test-sentrux-init-rules.sh exits 0 with 8 passed under 10s; grep -c shellcheck tests/test-sentrux-init-rules.sh prints 0; both timings reported | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
295
- | S-233 | BACKLOG 72 remainder: refused resume does not name the blocking file or where the earlier commits are | autonomy/run.sh (setup_agent_branch resume block around the no-overwrite-ignore checkout only), tests/test-refused-resume-warning.sh (new) | LOW | bash tests/test-refused-resume-warning.sh exits 0 with the warning naming the conflicting ignored file and the recorded branch; bash tests/test-branch-lifecycle.sh exits 0 | ready@2026-09-27T20:59Z | Source: 20:59Z cut. |
271
+ | S-209 | BACKLOG 99 (Bun): codex, cline and aider get the prompt without the commit-hygiene line | loki-ts/src/runner/providers.ts (codex, cline, aider invokers only), loki-ts/tests/runner/provider_commit_hygiene.test.ts (new), loki-ts/tests/runner/providers.test.ts (argv asserts only if moved) | MEDIUM | cd loki-ts && bun test tests/runner/provider_commit_hygiene.test.ts tests/runner/providers.test.ts exits 0: all three argvs carry the providers/codex.sh literal, claude not double-prefixed; removing the prefix fails the three legs | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on 78f2f65d; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
272
+ | S-210 | Velocity: help-discoverability (29s) and completion-coverage (30s) probe loops under 10s each | tests/test-help-discoverability.sh, tests/test-completion-coverage.sh (probe loops only) | LOW | time bash tests/test-help-discoverability.sh and time bash tests/test-completion-coverage.sh each exit 0 with real under 10s; real_count and pass counts match the pre-change capture; both timings reported | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on d4fb8ad2; in train 16, main 800ac46e pushed 21:25:40 (`git ls-remote origin refs/heads/main` = 800ac46e). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
273
+ | S-211 | BACKLOG 75: register the four suites no runner executes (Captain, after S-174 merges) | tests/run-all-tests.sh (four run_test lines only, after S-174 merges), tests/shard-durations.tsv (four lines) | LOW | grep -c -e test_managed_completion_flag -e test_managed_review_flag -e test-evidence-gate-no-tests -e test-voter-agents-json tests/run-all-tests.sh prints 8; bash tests/test-shard-coverage.sh exits 0; each suite ran 3 of 3 from a scratch cwd with no .loki/state/provider left | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on a04bbb7a; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
274
+ | S-212 | GUARDS 5, 12 and 13 still read PENDING after S-138, S-139 and S-154 landed (after S-181 merges) | docs/v10/GUARDS.md (sections 5, 12, 13 only; does not overlap S-181 section 11) | LOW | awk '/^## 12\./,0' docs/v10/GUARDS.md piped to grep -c 'PENDING, no slice cut' prints 0; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-v10-pulse.sh exit 0 | released@2026-09-27T21:45Z | Source: 20:12Z cut. Batch 9 (wf_4da25841-89e), build then review. Review APPROVE on bd135cb8; in train 15, main e72bcd66 pushed 21:22:34 (`git ls-remote origin refs/heads/main` = e72bcd66). Published in v9.76.0 (`npm view loki-mode version` = 9.76.0; npm time 2026-09-27T21:45Z). |
275
+ | S-213 | BACKLOG 123: cost.html and proofs.html council-vote labels have no test of their own | dashboard-ui/tests/static-council-vote-label.node.test.mjs (new) | LOW | node --test dashboard-ui/tests/static-council-vote-label.node.test.mjs passes (proofs.html council prefix and title, cost.html Council vote header); renaming the header or dropping the title in a scratch copy fails it | parked@2026-09-27T21:43Z | Source: 20:12Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit ce106a03 kept on branch worktree-wf_6fed529f-a3d-1. |
276
+ | S-214 | BACKLOG 147: P7 useMemo arm misses a factory that calls a registered fabricator | tests/moat/p7-no-fabricated-data.sh (HELPER_LOCAL_DECL_TMPL ~1182 and its use ~2186, ceiling comment ~978-986, one fixture beside the DECL_USEMEMO fixture ~3138-3160 only; does not overlap S-198) | HIGH | bash tests/moat/p7-no-fabricated-data.sh prints PASS for every P7 case and flags the composed useMemo fixture; removing the useMemo prefix in a scratch copy lets it through; git diff --stat tests/moat/cases.txt is empty | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 657597c1 kept on branch worktree-wf_6fed529f-a3d-2. |
277
+ | S-215 | PR receipt renderer in proof-pr.sh imports json from the target repo (cwd shadow) | autonomy/lib/proof-pr.sh (render_evidence_receipt_md heredoc reader plus guarded _loki_snapshot_py_tool copy), tests/test-proof-pr-no-cwd-shadow.sh (new) | HIGH | bash tests/test-proof-pr-no-cwd-shadow.sh exits 0 (a planted json.py cannot forge the headline) and reverting to bare python3 - in a scratch copy fails it; bash tests/test-proven-pr-receipt.sh exits 0; bash tests/test-council-py-tool-identity.sh exits 0 and counts one more copy | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 56a41332 kept on branch worktree-wf_6fed529f-a3d-3. |
278
+ | S-216 | loki verify inline readers import from the tree under review (cwd shadow) | autonomy/verify.sh (reader sites ~190, 591, 1269, 1271, 1295, 1337, 1339, 1441 plus guarded helper copy; not the unittest or py_compile runs), tests/test-verify-no-cwd-shadow.sh (new) | HIGH | bash tests/test-verify-no-cwd-shadow.sh exits 0 and reverting one site in a scratch copy fails it; bash tests/test-verify.sh exits 0; bash tests/moat/run.sh reports no rule failed; bash tests/test-council-py-tool-identity.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 29eb5d3b kept on branch worktree-wf_6fed529f-a3d-4. |
279
+ | S-217 | BACKLOG 81: enforce_test_coverage package.json readers load user-site .pth | autonomy/run.sh (enforce_test_coverage _declared_test_script and _ws_script readers only; anchor on names), tests/test-enforce-test-coverage-pkg-readers-pth.sh (new) | HIGH | bash tests/test-enforce-test-coverage-pkg-readers-pth.sh exits 0 (a .pth no longer changes the recorded test gate outcome) and reverting one reader to -E in a scratch copy fails it; no .loki/state/provider left in the repo; bash tests/test-honest-gate-status.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 67589d2d kept on branch worktree-wf_6fed529f-a3d-5. |
280
+ | S-218 | BACKLOG 131c: snapshot git status runs an agent-chosen core.fsmonitor command | autonomy/run.sh (_loki_untracked_status only), tests/test-untracked-status-fsmonitor.sh (new) | HIGH | bash tests/test-untracked-status-fsmonitor.sh exits 0 (no fsmonitor marker, real untracked file still listed) and removing the two -c flags in a scratch copy fails it; bash tests/test-no-ambient-gitconfig-writes.sh and bash tests/test-branch-lifecycle.sh exit 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 8e9bb0ae kept on branch worktree-wf_6fed529f-a3d-6. |
281
+ | S-219 | BACKLOG 83: a failed git add -A makes the session commit silently commit nothing | autonomy/run.sh (commit_session_changes git add -A block only), tests/test-session-commit-add-failure.sh (new) | MEDIUM | bash tests/test-session-commit-add-failure.sh exits 0: an empty embedded repo prints Left uncommitted naming the add failure, a normal repo still commits; removing the rc check in a scratch copy fails leg 1; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
282
+ | S-220 | BACKLOG 109: untrack step's global reset drops force-staged agent files from the session commit | autonomy/run.sh (_loki_untrack_agent_committed_user_files only), tests/test-untrack-keeps-force-staged.sh (new) | MEDIUM | bash tests/test-untrack-keeps-force-staged.sh exits 0: git add -f dist/bundle.js lands in the session commit while the pre-existing user file stays untracked on disk; restoring git reset -q in a scratch copy fails it; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
283
+ | S-221 | BACKLOG 123: audit.py verify exits 0 when it checked nothing | dashboard/audit.py (_unified_cli verify branch and docstring only; tip and prefix untouched), tests/dashboard/test_audit_verify_cli_nothing_checked.py (new) | MEDIUM | python3 -m pytest -q tests/dashboard/test_audit_verify_cli_nothing_checked.py: empty dir exits 2, valid chain 0, tampered 1, tip on an empty dir still 0; bash tests/test-audit-chain-honesty.sh and bash tests/test-audit-js-suites.sh exit 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 725adbf1 kept on branch worktree-wf_6fed529f-a3d-7. |
284
+ | S-222 | BACKLOG 118: skill-session WebSocket status push hardcodes running_agents 0 | dashboard/server.py (skill-session broadcast payload ~1030-1047 only), tests/dashboard/test_skill_session_ws_running_agents.py (new) | LOW | python3 -m pytest -q tests/dashboard/test_skill_session_ws_running_agents.py shows running_agents None on the skill-session push; restoring 0 fails it | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit e41553cd kept on branch worktree-wf_6fed529f-a3d-8. |
285
+ | S-223 | BACKLOG 114/118: notification triggers read No triggers configured after a failed read | dashboard/server.py (get_notification_triggers only), dashboard-ui/components/loki-notification-center.js (_loadTriggers and triggers empty branch only), tests/dashboard/test_notification_triggers_unreadable.py (new), dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs (new) | LOW | python3 -m pytest -q tests/dashboard/test_notification_triggers_unreadable.py shows triggers null with error on a corrupt file and [] on a missing one; node --test dashboard-ui/tests/loki-notification-triggers-error.node.test.mjs shows an error lacks No triggers configured and an empty list keeps it | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
286
+ | S-224 | BACKLOG 118: web-app receipt and cost trend show a partly priced run as a complete cost | web-app/src/components/EvidenceReceiptPanel.tsx (Cost field only), web-app/src/api/client.ts (ProofDetail cost type and cost/timeline runs type only), web-app/src/pages/MetricsPage.tsx (costTrend only), web-app/src/components/EvidenceReceiptPanel.cost.test.mjs (new) | MEDIUM | node --test web-app/src/components/EvidenceReceiptPanel.cost.test.mjs: cost_partial true renders at least $1.20, absent keeps $1.20, a partial run's trend label carries (partial); cd web-app && npx tsc -b exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 3d463e79 kept on branch worktree-wf_6fed529f-a3d-9. |
287
+ | S-225 | BACKLOG 118: standalone receipts list shows a partly priced run as a complete cost | dashboard-ui/scripts/build-standalone.js (loadReceipts cost cell only), tests/test-receipts-panel.sh (one new leg) | LOW | bash tests/test-receipts-panel.sh exits 0 with the new leg asserting at least $X.XX only when cost_partial is true; bash tests/test-budget-banner-dedup.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit c9cd69c4 kept on branch worktree-wf_6fed529f-a3d-10. |
288
+ | S-226 | BACKLOG 106 class: loki stats reads unmeasured cost as $0.00 on both routes | autonomy/loki (cmd_stats only), loki-ts/src/commands/stats.ts, loki-ts/tests/commands/stats_unmeasured.test.ts (new), tests/test-stats-unmeasured-cost.sh (new) | MEDIUM | bash tests/test-stats-unmeasured-cost.sh exits 0 (all-zero records give cost_usd null and not recorded, same on both routes); cd loki-ts && bun test tests/commands/stats.test.ts tests/commands/stats_unmeasured.test.ts exits 0; bash tests/test-bash-bun-parity.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit ea739eed kept on branch s-226-stats-unmeasured-cost. |
289
+ | S-227 | BACKLOG 106 class: loki status prints Budget $0 for a run it never measured, on both routes | autonomy/loki (cmd_status budget block only), loki-ts/src/commands/status.ts (readBudgetField and its budget caller only), loki-ts/tests/commands/status.test.ts (budget legs only), tests/test-status-budget-unmeasured.sh (new) | MEDIUM | bash tests/test-status-budget-unmeasured.sh exits 0 (budget_used 0, null or absent prints not recorded on both routes, a positive value prints as today); cd loki-ts && bun test tests/commands/status.test.ts exits 0; bash tests/test-status-cli-provider-parity.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
290
+ | S-228 | BACKLOG 121: DeployConnections pushes default not-connected states upward after its own fetch failed | web-app/src/components/DeployConnections.tsx (connect and disconnect handlers only), web-app/src/components/DeployConnections.propagate.test.mjs (new) | LOW | node --test web-app/src/components/DeployConnections.propagate.test.mjs shows no synthesized statuses reach onStatusChange after a failed fetch; node --test web-app/src/components/DeployConnections.state.test.mjs and cd web-app && npx tsc -b exit 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
291
+ | S-229 | BACKLOG 114: preview header says Detecting project type forever after a failed preview-info fetch | web-app/src/components/ProjectWorkspace.tsx (getPreviewInfo call ~839 and Detecting project type branch ~1877 only), web-app/src/components/ProjectWorkspace.preview.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.preview.test.mjs shows a rejected fetch renders Could not detect project type and lacks Detecting project type; node --test web-app/src/components/ProjectWorkspace.panels.test.mjs and cd web-app && npx tsc -b exit 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit af232770 kept on branch worktree-wf_6fed529f-a3d-12. |
292
+ | S-230 | BACKLOG 115/118: ProjectWorkspace labels unknown phases building and Replay Build can never appear | web-app/src/components/ProjectWorkspace.tsx (buildPhase memo ~1401-1410 and Replay Build condition ~1488 only; does not overlap S-229), web-app/src/components/ProjectWorkspace.phase.test.mjs (new) | LOW | node --test web-app/src/components/ProjectWorkspace.phase.test.mjs shows an unrecognized phase is not building and a completed idle session shows Replay Build; cd web-app && npx tsc -b exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
293
+ | S-231 | BACKLOG 52: the Moat suite CI check reads as moat proven at 0 of 9 | .github/workflows/test.yml (moat-suite job name only) | LOW | gh api required_status_checks for main does not list Moat suite (else report-only); git grep -n "name: Moat suite" -- .github prints nothing; git grep -n "Moat suite" -- tests scripts .github lists only the step-summary heading; the next push shows the renamed check | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Batch 10 (wf_6fed529f-a3d), build then review. Paused by CEO P0 (Loki 10 engine) before review; built commit 8dddd2d3 kept on branch worktree-wf_6fed529f-a3d-13. |
294
+ | S-232 | autonomy/loki is linted only inside the sentrux test; the lint suite schedules big files last | tests/run-shellcheck.sh, tests/test-sentrux-init-rules.sh (T6 only) | LOW | LOKI_SHELLCHECK_JOBS=4 bash tests/run-shellcheck.sh exits 0, prints Checked ./autonomy/loki, counts match the pre-change capture plus loki; time bash tests/test-sentrux-init-rules.sh exits 0 with 8 passed under 10s; grep -c shellcheck tests/test-sentrux-init-rules.sh prints 0; both timings reported | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
295
+ | S-233 | BACKLOG 72 remainder: refused resume does not name the blocking file or where the earlier commits are | autonomy/run.sh (setup_agent_branch resume block around the no-overwrite-ignore checkout only), tests/test-refused-resume-warning.sh (new) | LOW | bash tests/test-refused-resume-warning.sh exits 0 with the warning naming the conflicting ignored file and the recorded branch; bash tests/test-branch-lifecycle.sh exits 0 | parked@2026-09-27T21:43Z | Source: 20:59Z cut. Paused by CEO P0 (Loki 10 engine). |
296
+ | E-00 | ORPHAN guard: pulse flags long-running worktree run.sh and /tmp/loki-run-*.sh processes; timeout -k 10 on run.sh/loki launches | scripts/v10-pulse.sh, tests/test-v10-pulse.sh, tests/test-timeout-escalates.sh, about 50 test launch sites | MEDIUM | bash tests/test-v10-pulse.sh and bash tests/test-timeout-escalates.sh | merged@2026-09-27T22:24Z | D29 incident guard. Review CONCERN (guard matched only literal paths); rework b26c102a catches $LOKI and TBIN-style launches (reviewer mutation on test-why-honest-report.sh goes red: `bash tests/test-timeout-escalates.sh` 0 passed, 1 failed). Main a5f049d2 pushed 22:24:22 (`git ls-remote origin refs/heads/main` = a5f049d2); pulse 90 passed, 0 failed. |
297
+ | E-01 | Event log, schema and shared types | loki-ts/src/engine10/events.ts, loki-ts/src/engine10/types.ts, loki-ts/tests/engine10/events.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/events.test.ts | merged@2026-09-27T22:11Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review CONCERN on e825568c (stale deep limits and push mode vs revised ENGINE.md), fixed in 4138471f; main 4138471f pushed 22:10:59 (`git ls-remote origin refs/heads/main` = 4138471f; tests/engine10 25 pass, 0 fail). |
298
+ | E-02 | State machine skeleton, resume, cap, optional loader | loki-ts/src/engine10/machine.ts, loki-ts/tests/engine10/machine.test.ts, loki-ts/tests/engine10/budget.test.ts | HIGH | cd loki-ts && bun test tests/engine10/machine.test.ts tests/engine10/budget.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Phase B (engine10-phaseB), build then review. |
299
+ | E-03 | Supervisor/worker split, Rule of Two, engine.json marker | loki-ts/src/engine10/supervisor.ts, loki-ts/src/engine10/worker.ts, loki-ts/tests/engine10/rule_of_two.test.ts | HIGH | cd loki-ts && bun test tests/engine10/rule_of_two.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-02 Phase B (engine10-phaseB), build then review. |
300
+ | E-04 | Intake (no PRD, already-done detection) | loki-ts/src/engine10/stages/intake.ts, loki-ts/src/engine10/fetch_issue.ts, loki-ts/src/engine10/repomap.ts, loki-ts/tests/engine10/intake.test.ts, loki-ts/tests/engine10/fixtures/intake/ | MEDIUM | cd loki-ts && bun test tests/engine10/intake.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-03 Phase B (engine10-phaseB), build then review. |
301
+ | E-05 | Test map and real runner detection | loki-ts/src/engine10/testmap.ts, loki-ts/tests/engine10/testmap.test.ts, loki-ts/tests/engine10/fixtures/testmap/ | MEDIUM | cd loki-ts && bun test tests/engine10/testmap.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review CONCERN (fixture path, evidence, commands, bunfig, reference grep); rework in phase B. |
302
+ | E-06 | Cost capture into cost-summary.py records | loki-ts/src/engine10/cost.ts, loki-ts/tests/engine10/cost.test.ts, loki-ts/tests/engine10/fixtures/cost/ | MEDIUM | cd loki-ts && bun test tests/engine10/cost.test.ts | merged@2026-09-27T22:11Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on none Phase A (wf_f5dde039-0c5), build then review. Review APPROVE on c5a7d395 (cherry-picked 33327ca1); main 4138471f. Follow-up: write .loki/metrics/efficiency/iteration-N.json per ENGINE.md section 10. |
303
+ | E-07 | Session wrapper (process group, heartbeat, model override) | loki-ts/src/engine10/session.ts, loki-ts/tests/engine10/session.test.ts, loki-ts/tests/engine10/fixtures/session/ | MEDIUM | cd loki-ts && bun test tests/engine10/session.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-06 Phase B (engine10-phaseB), build then review. |
304
+ | E-08 | Implement stage and brief | loki-ts/src/engine10/stages/implement.ts, loki-ts/tests/engine10/implement.test.ts, loki-ts/tests/engine10/fixtures/implement/ | MEDIUM | cd loki-ts && bun test tests/engine10/implement.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-05, E-07 Phase B (engine10-phaseB), build then review. |
305
+ | E-09 | Fast verify | loki-ts/src/engine10/stages/verify.ts, loki-ts/tests/engine10/verify.test.ts, loki-ts/tests/engine10/fixtures/verify/ | MEDIUM | cd loki-ts && bun test tests/engine10/verify.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-05 Phase B (engine10-phaseB), build then review. |
306
+ | E-10 | Seal (signed receipt, NOT PROVEN) | loki-ts/src/engine10/stages/seal.ts, loki-ts/tests/engine10/seal.test.ts | HIGH | cd loki-ts && bun test tests/engine10/seal.test.ts | building@2026-09-27T22:12Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-09 Phase B (engine10-phaseB), build then review. |
307
+ | E-11 | Trusted push and PR | autonomy/lib/engine10-push.sh, loki-ts/src/engine10/stages/pr.ts, tests/test-engine10-push.sh, loki-ts/tests/engine10/pr.test.ts | HIGH | bash tests/test-engine10-push.sh | building@2026-09-27T22:07Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-03, E-10 Shell half (engine10-push.sh) building early (wf_f70c455a-69e); stages/pr.ts after E-01. Shell half (engine10-push.sh) review APPROVE on 1a6bc2c4, merged in main 6f2dfd9c (`bash tests/test-engine10-push.sh` 15 passed, 0 failed); stages/pr.ts still to build. |
308
+ | E-12 | CLI entry behind LOKI_ENGINE=v10 | loki-ts/src/engine10/cli.ts, loki-ts/src/cli.ts (case engine10 before default at line 303), bin/loki (block between lines 244 and 246), tests/test-engine10-dispatch.sh, loki-ts/tests/engine10/cli.test.ts | MEDIUM | bash tests/test-engine10-dispatch.sh | merged@2026-09-27T22:18Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-03 Building early (wf_f70c455a-69e), build then review. Review CONCERN (one-word v10 routing trusted the telemetry allowlist, missing estimate/intent/outcomes); fixed in 6f2dfd9c (one-word args stay legacy; `bash tests/test-engine10-dispatch.sh` 33 passed, 0 failed); main 6f2dfd9c pushed 22:17:49. |
309
+ | E-13 | Live output and 5-line summary | loki-ts/src/engine10/output.ts, loki-ts/tests/engine10/output.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/output.test.ts | building@2026-09-27T22:18Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Wave 1b (wf_60ffc02a-bf8). |
310
+ | E-14 | Thin-path end to end | loki-ts/tests/engine10/e2e.test.ts, loki-ts/tests/engine10/fixtures/e2e/ | MEDIUM | cd loki-ts && bun test tests/engine10/e2e.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 through E-13 |
311
+ | E-15 | Wall author (blind, hashed) | loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/wall.test.ts, loki-ts/tests/engine10/fixtures/wall/ | MEDIUM | cd loki-ts && bun test tests/engine10/wall.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 |
312
+ | E-16 | Plan (10 lines or fewer) | loki-ts/src/engine10/stages/plan.ts, loki-ts/tests/engine10/plan.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/plan.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 |
313
+ | E-17 | Fix rounds and failure grouping | loki-ts/src/engine10/stages/fix.ts, loki-ts/src/engine10/failures.ts, loki-ts/tests/engine10/fix.test.ts, loki-ts/tests/engine10/failures.test.ts, loki-ts/tests/engine10/fixtures/failures/ | MEDIUM | cd loki-ts && bun test tests/engine10/fix.test.ts tests/engine10/failures.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-07, E-09 |
314
+ | E-18 | Per-repo cache by tree hash | loki-ts/src/engine10/cache.ts, loki-ts/tests/engine10/cache.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/cache.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-04, E-05 |
315
+ | E-19 | Hard cap and DRAFT PR body | loki-ts/src/engine10/pr_body.ts, loki-ts/tests/engine10/cap.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/cap.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-07, E-11 |
316
+ | E-20 | ETA | loki-ts/src/engine10/eta.ts, loki-ts/tests/engine10/eta.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/eta.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-13, E-18 |
317
+ | E-21 | loki status | loki-ts/src/engine10/status.ts, loki-ts/tests/engine10/status.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/status.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-01, E-12 |
318
+ | E-22 | loki verify | loki-ts/src/engine10/verify_cmd.ts, loki-ts/tests/engine10/verify_cmd.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/verify_cmd.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-10 |
319
+ | E-23 | Deep verify (async, token-less worker) | loki-ts/src/engine10/stages/deep.ts, loki-ts/tests/engine10/deep.test.ts, loki-ts/tests/engine10/fixtures/deep/ | MEDIUM | cd loki-ts && bun test tests/engine10/deep.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-03, E-10, E-11 |
320
+ | E-24 | Dashboard over SSE | loki-ts/src/engine10/dashboard/server.ts, loki-ts/src/engine10/dashboard/page.ts, loki-ts/tests/engine10/dashboard.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/dashboard.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-01, E-12 |
321
+ | E-25 | Adapter interface and GitHub adapter | loki-ts/src/engine10/adapters/types.ts, loki-ts/src/engine10/adapters/index.ts, loki-ts/src/engine10/adapters/github.ts, loki-ts/tests/engine10/adapters_github.test.ts, loki-ts/tests/engine10/fixtures/adapters-github/ | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_github.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-04, E-11 |
322
+ | E-26 | GitLab adapter (issue in, MR out) | loki-ts/src/engine10/adapters/gitlab.ts, autonomy/lib/engine10-push-gitlab.sh, loki-ts/tests/engine10/adapters_gitlab.test.ts, tests/test-engine10-push-gitlab.sh, loki-ts/tests/engine10/fixtures/adapters-gitlab/ | HIGH | bash tests/test-engine10-push-gitlab.sh | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 |
323
+ | E-27 | Jira read adapter | loki-ts/src/engine10/adapters/jira.ts, loki-ts/tests/engine10/adapters_jira.test.ts, loki-ts/tests/engine10/fixtures/adapters-jira/ | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_jira.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 |
324
+ | E-28 | Slack notify adapter | loki-ts/src/engine10/adapters/slack.ts, loki-ts/tests/engine10/adapters_slack.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/adapters_slack.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-13, E-25 |
325
+ | E-29 | Escalation (--deep, logged auto) | loki-ts/src/engine10/escalate.ts, loki-ts/tests/engine10/escalate.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/escalate.test.ts | ready@2026-09-27T21:50Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-02, E-16 |
326
+ | E-30 | Legacy alias contract (golden routes) | tests/test-engine10-legacy-contract.sh, tests/fixtures/engine10-legacy-routes.txt | MEDIUM | bash tests/test-engine10-legacy-contract.sh | building@2026-09-27T22:18Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-12 Building early (wf_f70c455a-69e), build then review. Review CONCERN (no Bun row with extra args); rework in wf_60ffc02a-bf8. |
296
327
 
297
328
  Every slice above: implement with red-then-green tests, run diff-scoped tests
298
329
  plus `bash tests/moat/run.sh` in your own worktree, never touch `main`,
@@ -228,3 +228,13 @@ One entry per decision: context, choice, why, how to reverse. Newest last.
228
228
  4. Release the first green tree, then continue the 20-minute trains.
229
229
  - Found while acting: train 5 (S-18) introduced a P9 moat regression on Linux: the opt-out positive control, "the hosts.yml probe is blind under the opt-out" (moat job 108658485224). It fails closed (no leak) but blocks every tree from 1cde81a7 onward. P0 S-107 is fixing it forward in a capped Linux container.
230
230
  - Version accounting: tags v9.57.0 through v9.62.0 were pushed at 16:25Z and 16:29Z to work around the release job's tag-permission failure (S-105), before this rule. v9.60.0 is already tagged at 1cde81a7 (red: P9 and the Python race), so the "first green tree" cannot reuse 9.60.0 without moving a published tag. Train 4 (08d64f4e, v9.59.0) went green on Tests after reruns and contains no S-18, so its full Release rerun is the first verified-tree release. The next release after S-107 takes the next unused version.
231
+
232
+ ## D29. 2026-09-27: Loki P0 directive -- rebuild as the Loki 10 engine, task completion is the first release gate
233
+
234
+ - Problem as stated: users report Loki Mode does not complete tasks; augmentiq #52 ("add a search bar") ran 40+ minutes with 0 tasks done. Claude Code, Devin and Factory droids finish comparable issues in about 5 minutes.
235
+ - Mandate: a new TypeScript/Bun engine in loki-ts (under 5K lines, one state machine: Intake 15s, Plan + Wall 45s, Implement 3 min as ONE provider-CLI session, Fast verify 60s with at most 2 fix rounds, Seal + PR 15s, async Deep verify, hard cap 15 minutes then a DRAFT PR). One append-only JSONL event log per run. Per-repo cache keyed by tree hash. Rule of Two kept. New CLI and one-screen SSE dashboard. One integration adapter interface.
236
+ - Everything ships behind LOKI_ENGINE=v10 on the trains, additive only; the old engine stays reachable as legacy until the new one beats it on the eval.
237
+ - Release gate (published in full, misses included): on at least 25 tasks with hidden tests, v10 completion at or above raw `claude -p` at the same model and budget, p50 time to PR 5 minutes or less, p90 10 minutes or less, cost per completed task at or below raw Claude Code.
238
+ - Deadline: if the gate is not met by 23:00 ET (03:00 UTC), release v10.0.0 with the default still legacy, v10 opt-in, and the measured gap stated plainly.
239
+ - All non-P0 backlog paused at 21:43Z: batch 10 stopped with every builder's commit kept on its branch (list in ~/loki-ci-logs/paused-branches.txt and the BOARD rows); ready rows parked.
240
+ - Orphan: `timeout 240 bash .../worktrees/agent-afe77b46fbe4962fa/autonomy/run.sh` (PID 22960, child 22986, running 1 day 00:17) ignored SIGTERM and was stopped with SIGKILL by PID at 21:42Z (`ps -o pid= -p 22960` and `-p 22986` both empty afterwards). ORPHAN guard slice E-00 in flight.
@@ -0,0 +1,69 @@
1
+ # Loki 10 engine: measured stage times (2026-09-27)
2
+
3
+ Source: read-only measurement of four real runs from their own logs. Every
4
+ duration comes from a logged timestamp; rows marked (inferred) come from gaps
5
+ between logged events.
6
+
7
+ ## Runs
8
+
9
+ | Run | Log directory | Wall time | Tasks completed |
10
+ |---|---|---|---|
11
+ | R1 augmentiq #52 "add a search bar" | /Users/lokesh/git/augmentiq/.loki/ | 73.7+ min, still running at 21:46:12Z | 0 (`orchestrator.json` tasksCompleted 0) |
12
+ | R2 anonima | /Users/lokesh/git/anonima/.loki/ (2026-09-12 14:15Z) | 20.5 min | 1 (reached COMPLETED although code review returned fail) |
13
+ | R3 lokimode-anthropic, empty PRD | /Users/lokesh/git/lokimode-anthropic/.loki/ (2026-09-12 01:16Z) | 6.0+ min, log stops mid provider call | 0 |
14
+ | R4 fizzbuzz toy | /Users/lokesh/loki-council-1789161950/.loki/ (2026-09-11 21:25Z) | 3.8 min | 1 |
15
+
16
+ ## Where the minutes go (minutes, logged durations only)
17
+
18
+ | Stage | R1 augmentiq #52 | R2 anonima | R3 lokimode | R4 fizzbuzz |
19
+ |---|---|---|---|---|
20
+ | Boot, intake, spec interrogation, PRD parsing | 1.3 | 0.5 | 0.6 | 0.3 |
21
+ | Agent provider calls | 3.9 (iterations 1-2) + 57.7+ (iteration 3, still running) | 3.9 | 5.4+ (cut off) | 0.6 |
22
+ | Of which: agent running the full E2E suite inside iteration 3 | about 41 (17:05-17:46 EDT, inferred from log file times) | not measured | not measured | not measured |
23
+ | App runner / docker | 1.8 | 0 | 0 | 0 |
24
+ | Gates (static through LSP) plus unlabelled gaps | 2.7 | 0.1 | 0 | 0 |
25
+ | Code review | 0.6 | 4.4 | 0 | 0.8 |
26
+ | Doc generation | 5.0 (timed out at 300s) | 4.3 | 0 | 0 |
27
+ | Checklist, evidence gate, council | 0.6 (council never voted) | 7.2 | 0 | 1.8 |
28
+ | Total wall time | 73.7+ | 20.5 | 6.0+ | 3.8 |
29
+
30
+ Agent share of wall time where the run finished: R2 19% (234s of 1231s), R4
31
+ 15% (35s of 228s). The rest is harness stages around the agent.
32
+
33
+ ## R1 detail (augmentiq #52)
34
+
35
+ | Stage | Start (Z) | End (Z) | Duration | Evidence |
36
+ |---|---|---|---|---|
37
+ | Issue fetch + boot | 20:32:30 | 20:32:43 | 13s | issue-context.json captured_at 20:32:30 |
38
+ | Spec interrogation | 20:32:44 | 20:33:09 | 24s | 20 assumptions recorded |
39
+ | PRD to tasks, LLM enrichment, complexity | 20:33:09 | 20:33:48 | 39s (inferred) | "Enriched 3 PRD task(s) via LLM"; complexity "complex" (9584 files) |
40
+ | Iteration 1 provider call | 20:33:48 | 20:36:34 | 166s | agent found search already built; COMPLETION_REQUESTED |
41
+ | App runner + checkpoint | 20:36:34 | 20:37:48 | 74s | "docker: unknown command: docker compose" |
42
+ | Gates | 20:37:48 | 20:38:01 | 13s | test_suite not_run |
43
+ | LSP, semantic, invariant gates, review diff | 20:38:01 | 20:39:10 | 69s (inferred) | |
44
+ | Code review (6 reviewers) | 20:39:10 | 20:39:43 | 33s | 5 pass, 1 fail (non-blocking) |
45
+ | Auto-documentation | 20:39:43 | 20:44:43 | 300s | "Auto-documentation: timed out after 300s" |
46
+ | Wiki + evidence gate | 20:44:43 | 20:45:19 | 36s | evidence gate BLOCKED |
47
+ | Iteration 2 provider call | 20:45:22 | 20:46:31 | 69s | claimed done again |
48
+ | App runner restart | 20:46:31 | 20:47:07 | 36s | "crash limit reached (5)" |
49
+ | Gates + diff | 20:47:07 | 20:48:26 | 79s | |
50
+ | Code review | 20:48:26 | 20:48:26 | 0s | refused: context 431361 bytes over 400000 limit |
51
+ | Iteration 3 provider call | 20:48:29 | running at 21:46:12 | 57m43s+ | 340+ tool calls; full vitest, pytest (2847 passed), Playwright 639 tests (88 failures in unrelated specs) |
52
+
53
+ ## Five proven causes of non-completion (R1)
54
+
55
+ 1. The app runner's docker invocation fails ("docker: unknown command: docker compose", then "unknown shorthand flag: 'd' in -d") while the containers report healthy, so the evidence gate records app_boot_failed (metrics/trust-events.jsonl 20:45:21Z; app-runner/state.json crash_count 5).
56
+ 2. A secret-leak match in the changed file SETUP.md blocks completion ("Evidence gate BLOCKED: a secret/credential was detected in the changed files").
57
+ 3. The test gate finds no test runner ("no test runner detected, recording inconclusive"; tests_ok=inconclusive runner=none) while the agent's own runs show pytest 2847 passed and vitest 1552 passed.
58
+ 4. Code review refuses a 431361-byte context (committed USAGE.md, TESTING.md, SETUP.md), and completion is then rejected "because code review is BLOCKED (Critical/High findings)" although no review ran.
59
+ 5. Iteration 3 is one provider call with no time limit and no progress events: the last events.jsonl entry is 20:48:28Z iteration_start 3, and dashboard-state.json still shows iteration 0 and council total_votes 0 at 21:45:53Z. Inside it the agent drifted into the unrelated full E2E suite at 94-100% CPU and killed processes with pkill -f and kill -9.
60
+
61
+ Also: the feature already existed before the run (iteration 1: "The search feature already appears fully built across many prior commits"), and both iteration 1 and 2 completion claims were rejected by the gates.
62
+
63
+ ## Design consequences for ENGINE.md
64
+
65
+ - No PRD generation, spec interrogation, doc generation or council on the fast path (R1: 7+ min before and around the agent; R2: 16 of 20.5 min).
66
+ - The implement session needs a wall cap and progress events; the run state must come from one event log, never a separate dashboard-state file that goes stale.
67
+ - Verification runs impacted tests only on the fast path; full suites, app boot and council move to async deep verify after the PR.
68
+ - Test runner detection must read the repo's real runners (pytest, vitest, npm scripts), or the gate says inconclusive while the suites pass.
69
+ - Review context must exclude generated docs, and a refused review must never be reported as a blocking finding.