loki-mode 9.78.0 → 9.80.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/lib/engine10-legacy-notice.txt +3 -0
  4. package/autonomy/lib/engine10-push-gitlab.sh +96 -0
  5. package/autonomy/lib/engine10-push.sh +67 -2
  6. package/dashboard/__init__.py +1 -1
  7. package/docs/INSTALLATION.md +1 -1
  8. package/docs/dev/tmp-cleanup.md +3 -3
  9. package/docs/v10/BOARD.md +67 -28
  10. package/docs/v10/ENGINE.md +267 -735
  11. package/docs/v10/METRICS.md +26 -0
  12. package/docs/v10/PROGRESS.md +28 -0
  13. package/loki-ts/dist/loki.js +556 -623
  14. package/loki-ts/package.json +1 -1
  15. package/mcp/__init__.py +1 -1
  16. package/package.json +1 -1
  17. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  18. package/web-app/dist/assets/{AdminPage-CSy7GfXm.js → AdminPage-Brg7_Lyr.js} +1 -1
  19. package/web-app/dist/assets/{Avatar-FuCbZv5L.js → Avatar-7nY6uJxD.js} +1 -1
  20. package/web-app/dist/assets/{Badge-Do6fV7hN.js → Badge-Cbf2CTvW.js} +1 -1
  21. package/web-app/dist/assets/{Button-B9NZXMf8.js → Button-CvKmf9hm.js} +1 -1
  22. package/web-app/dist/assets/{CockpitPage-VXxvKnKW.js → CockpitPage-wLAuI5UQ.js} +1 -1
  23. package/web-app/dist/assets/{ComparePage-OmqxCaK7.js → ComparePage-CMdzzTeh.js} +1 -1
  24. package/web-app/dist/assets/{ErrorBoundary-BYCkDeu8.js → ErrorBoundary-CAIYBXBt.js} +1 -1
  25. package/web-app/dist/assets/{EvidenceReceiptPanel-KesRGf-7.js → EvidenceReceiptPanel-BnrDrzRA.js} +1 -1
  26. package/web-app/dist/assets/{GitHubIssuesPanel-fEnpFg8B.js → GitHubIssuesPanel-CnWx9CiK.js} +1 -1
  27. package/web-app/dist/assets/{GitHubPRsPanel-DGGod_Y0.js → GitHubPRsPanel-y8gYUjnH.js} +1 -1
  28. package/web-app/dist/assets/{HomePage-EeWPhwob.js → HomePage-CqaADKqJ.js} +2 -2
  29. package/web-app/dist/assets/{LoginPage-BPHKgT1f.js → LoginPage-C4-UpzUT.js} +1 -1
  30. package/web-app/dist/assets/{MagicPage-CO0MTvpr.js → MagicPage-CQ7UMIwO.js} +1 -1
  31. package/web-app/dist/assets/{MetricsPage-eYpHWxnI.js → MetricsPage-nGehSAp4.js} +1 -1
  32. package/web-app/dist/assets/{NotFoundPage-Cd409HEe.js → NotFoundPage-EkC6K3N-.js} +1 -1
  33. package/web-app/dist/assets/{ProjectPage-hcAZ_hrX.js → ProjectPage-Cdjs0beW.js} +3 -3
  34. package/web-app/dist/assets/{ProjectsPage-DH04B2fr.js → ProjectsPage-CHcSeyxO.js} +1 -1
  35. package/web-app/dist/assets/{SettingsPage-Csur-yom.js → SettingsPage-DDhw0s6W.js} +1 -1
  36. package/web-app/dist/assets/{ShowcasePage-B5AIrDXd.js → ShowcasePage-BBxQDg5j.js} +1 -1
  37. package/web-app/dist/assets/{SystemSettingsPage-DA6Bn7er.js → SystemSettingsPage-Aj91V7Zy.js} +1 -1
  38. package/web-app/dist/assets/{TeamsPage-KcBbM7_z.js → TeamsPage-H10Qp1fu.js} +1 -1
  39. package/web-app/dist/assets/{TemplatesPage-BgLOizbo.js → TemplatesPage-AcxgsKwZ.js} +1 -1
  40. package/web-app/dist/assets/{TerminalOutput-CX-gh76o.js → TerminalOutput-O6dQA9Qa.js} +1 -1
  41. package/web-app/dist/assets/{activity-6UlD-ytF.js → activity-CMnBtTxM.js} +1 -1
  42. package/web-app/dist/assets/{bell-CFARmHF4.js → bell-Dseaifqw.js} +1 -1
  43. package/web-app/dist/assets/{bot-M-HZlOa2.js → bot-Bm_xcawB.js} +1 -1
  44. package/web-app/dist/assets/{check-9GtMUwM3.js → check-TXNSTOop.js} +1 -1
  45. package/web-app/dist/assets/{chevron-left-CPV_nwtP.js → chevron-left-D35Mb_-x.js} +1 -1
  46. package/web-app/dist/assets/{circle-alert-UahP_eMY.js → circle-alert-Rt6AMJ2V.js} +1 -1
  47. package/web-app/dist/assets/{clock-CcCc97td.js → clock-Dlc0SEVv.js} +1 -1
  48. package/web-app/dist/assets/{cloud-CviPksVP.js → cloud-DPd4GLS2.js} +1 -1
  49. package/web-app/dist/assets/{code-xml-gGDp7nvj.js → code-xml-B_scyMd5.js} +1 -1
  50. package/web-app/dist/assets/{database-BlHnMksz.js → database-DuPEBXUA.js} +1 -1
  51. package/web-app/dist/assets/{dollar-sign-CqZfNw7q.js → dollar-sign-C49nrBOI.js} +1 -1
  52. package/web-app/dist/assets/{file-code-corner-ChtMYoeA.js → file-code-corner-B3wt8I4V.js} +1 -1
  53. package/web-app/dist/assets/{file-plus-C3l1fGp_.js → file-plus-CuHHSDVU.js} +1 -1
  54. package/web-app/dist/assets/{globe-BM4RYvi9.js → globe-Kl77FTuJ.js} +1 -1
  55. package/web-app/dist/assets/{hammer-C8xvsZCy.js → hammer-D0LLVOf5.js} +1 -1
  56. package/web-app/dist/assets/{index-BsB5DTpP.js → index-ufh2YvPO.js} +2 -2
  57. package/web-app/dist/assets/{layers-WUsuQnfe.js → layers-C3vb5zor.js} +1 -1
  58. package/web-app/dist/assets/{loader-circle-CWZhBNSa.js → loader-circle-BfFuGacT.js} +1 -1
  59. package/web-app/dist/assets/{lock-bbfx9k11.js → lock-CicpAGtr.js} +1 -1
  60. package/web-app/dist/assets/{package-CDfsTKO6.js → package-Bw8snKHr.js} +1 -1
  61. package/web-app/dist/assets/{plus-DEm39Klm.js → plus-KXZkO61K.js} +1 -1
  62. package/web-app/dist/assets/{refresh-cw-DJZcHBKa.js → refresh-cw-CshUF54x.js} +1 -1
  63. package/web-app/dist/assets/{rotate-ccw-BcngFsiU.js → rotate-ccw-S9JJTBcV.js} +1 -1
  64. package/web-app/dist/assets/{scroll-text-CYSjVzWv.js → scroll-text-CLOq2Mvg.js} +1 -1
  65. package/web-app/dist/assets/{server-CkMcbRF7.js → server-ClM4a2Wx.js} +1 -1
  66. package/web-app/dist/assets/{shield-alert-D6ZsDRLA.js → shield-alert-DXhyR0S_.js} +1 -1
  67. package/web-app/dist/assets/{thumbs-up-Ce0QhF9c.js → thumbs-up-CYb6ycQ-.js} +1 -1
  68. package/web-app/dist/assets/{trash-2-OojrLB2z.js → trash-2-BcHIiT3v.js} +1 -1
  69. package/web-app/dist/assets/{trending-down-3Bu2DcUr.js → trending-down-C5eAxnkt.js} +1 -1
  70. package/web-app/dist/assets/{trending-up-BUkmDOK8.js → trending-up-m9XmNKav.js} +1 -1
  71. package/web-app/dist/assets/{upload-BgR13l74.js → upload-ZYJCPyYM.js} +1 -1
  72. package/web-app/dist/assets/{usePolling-DwQTkEQG.js → usePolling-uC-lirzx.js} +1 -1
  73. package/web-app/dist/assets/{user-DZcP5JBh.js → user-C1dyK-6p.js} +1 -1
  74. 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.78.0
6
+ # Loki Mode v9.80.1
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.78.0 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
473
+ **v9.80.1 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 9.78.0
1
+ 9.80.1
@@ -0,0 +1,3 @@
1
+ Legacy engine: deprecated in v10.0.0, still fully supported.
2
+ No removal this release. Set LOKI_ENGINE=legacy to pin it.
3
+ Guide: docs/v10/GUIDE.md
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env bash
2
+ # Loki 10 engine P4 push child for GitLab (ENGINE.md sections 6, 7 and 13).
3
+ #
4
+ # engine10-push-gitlab.sh push-mr <repo-dir> <branch> <title> <body-file> [--draft]
5
+ #
6
+ # Prints the merge request URL. Holds GitLab credentials, runs no LLM, reads
7
+ # no untrusted text beyond argv. The target project comes only from the origin
8
+ # P0 pinned before any provider ran (_LOKI_ORIGIN_PINNED=1
9
+ # _LOKI_PINNED_ORIGIN=<url>), and that origin must be a literal gitlab.com
10
+ # https or ssh URL. _loki_trusted_push refuses non-github.com origins, so this
11
+ # mirrors its shape: the branch is fetched into a fresh --template= repo and
12
+ # pushed from there, so no agent-repo hook or config runs in the credentialed
13
+ # process; glab runs from / with the host fixed to gitlab.com.
14
+ set -o pipefail
15
+
16
+ die() { printf 'engine10-push-gitlab: %s\n' "$*" >&2; exit "${2:-2}"; }
17
+
18
+ # <url> -> GROUP[/SUBGROUP...]/PROJECT on stdout, or rc 1. Literal gitlab.com
19
+ # only: no host alias, no port, no embedded credentials, no odd characters.
20
+ _e10_gitlab_project_from_url() {
21
+ local u="${1:-}" lc pre p
22
+ lc="$(printf '%s' "$u" | tr '[:upper:]' '[:lower:]')"
23
+ case "$lc" in
24
+ https://gitlab.com/*) pre="https://gitlab.com/" ;;
25
+ git@gitlab.com:*) pre="git@gitlab.com:" ;;
26
+ ssh://git@gitlab.com/*) pre="ssh://git@gitlab.com/" ;;
27
+ *) return 1 ;;
28
+ esac
29
+ p="${u:${#pre}}"
30
+ p="${p%/}"
31
+ p="${p%.git}"
32
+ case "$p" in
33
+ /* | */ | *//* | */.* | .* | *..* | */-/* | *[!A-Za-z0-9._/-]*) return 1 ;;
34
+ ?*/?*) printf '%s\n' "$p" ;;
35
+ *) return 1 ;;
36
+ esac
37
+ }
38
+
39
+ # Neutral glab: cwd /, no git dir, host pinned so an ambient GITLAB_HOST
40
+ # cannot send the token elsewhere.
41
+ _e10_glab() {
42
+ (
43
+ cd / || exit 1
44
+ unset GIT_DIR GIT_WORK_TREE GL_HOST GITLAB_API_HOST
45
+ export GITLAB_HOST=gitlab.com
46
+ command glab "$@"
47
+ )
48
+ }
49
+
50
+ [ "${_LOKI_ORIGIN_PINNED:-}" = "1" ] || die "origin not pinned (_LOKI_ORIGIN_PINNED=1 required)"
51
+ url="${_LOKI_PINNED_ORIGIN:-}"
52
+ proj="$(_e10_gitlab_project_from_url "$url")" \
53
+ || die "pinned origin refused: not a literal gitlab.com https or ssh GROUP/PROJECT URL"
54
+
55
+ mode="${1:-}"
56
+ shift || true
57
+ [ "$mode" = "push-mr" ] || die "usage: engine10-push-gitlab.sh push-mr <repo-dir> <branch> <title> <body-file> [--draft]"
58
+ [ "$#" -ge 4 ] && [ "$#" -le 5 ] || die "usage: push-mr <repo-dir> <branch> <title> <body-file> [--draft]"
59
+ dir="$1" branch="$2" title="$3" body="$4" draft=()
60
+ if [ "$#" -eq 5 ]; then
61
+ [ "$5" = "--draft" ] || die "unknown flag: $5"
62
+ draft=(--draft)
63
+ fi
64
+ [ -f "$body" ] || die "body file not found: $body"
65
+ dir="$(cd "$dir" 2>/dev/null && pwd -P)" || die "repo dir not found"
66
+ git check-ref-format --branch "$branch" >/dev/null 2>&1 || die "bad branch name"
67
+ case "$branch" in
68
+ main | master | HEAD) die "Not pushing branch '$branch': Loki never pushes directly to a default branch." ;;
69
+ esac
70
+ cur="$(git -C "$dir" config --get remote.origin.url 2>/dev/null)" || cur=""
71
+ [ "$cur" = "$url" ] || die "Not pushing branch '$branch': origin changed during the run; Loki does not push to a destination the agent could have chosen."
72
+
73
+ enc="${proj//\//%2F}"
74
+ def="$(_e10_glab api "projects/$enc" 2>/dev/null \
75
+ | python3 -c 'import json,sys; print(json.load(sys.stdin).get("default_branch") or "")' 2>/dev/null)" || def=""
76
+ [ -n "$def" ] || die "Not pushing branch '$branch': could not resolve the default branch of $proj."
77
+ [ "$branch" != "$def" ] || die "Not pushing branch '$branch': it is the default branch of $proj."
78
+
79
+ tmp="$(mktemp -d "${TMPDIR:-/tmp}/loki-push-gl.XXXXXX")" || die "mktemp failed" 1
80
+ trap 'rm -rf "$tmp"' EXIT
81
+ git init -q --template= "$tmp" >/dev/null 2>&1 \
82
+ && git -C "$tmp" fetch -q --no-tags --update-shallow "$dir" "+refs/heads/$branch:refs/heads/$branch" >/dev/null 2>&1 \
83
+ && git -C "$tmp" rev-parse -q --verify "refs/heads/$branch" >/dev/null 2>&1 \
84
+ || die "could not stage branch '$branch' in a fresh repo"
85
+ git -C "$tmp" push -q "$url" "refs/heads/$branch:refs/heads/$branch" || die "push failed (rc=$?)"
86
+
87
+ mr="$(_e10_glab mr list --repo "$proj" --source-branch "$branch" --output json 2>/dev/null \
88
+ | python3 -c 'import json,sys; d=json.load(sys.stdin); print(d[0].get("web_url","") if d else "")' 2>/dev/null)" \
89
+ || die "glab mr list failed"
90
+ if [ -z "$mr" ]; then
91
+ mr="$(_e10_glab mr create --repo "$proj" --source-branch "$branch" --title "$title" \
92
+ --description "$(cat "$body")" --yes "${draft[@]}" | grep -Eo 'https://gitlab\.com/[^[:space:]]+' | tail -n 1)" \
93
+ || die "glab mr create failed"
94
+ [ -n "$mr" ] || die "glab mr create printed no URL"
95
+ fi
96
+ printf '%s\n' "$mr"
@@ -41,8 +41,66 @@ _LOKI_ORIGIN_PINNED="$_e10_pinned"
41
41
  _LOKI_PINNED_ORIGIN="$_e10_origin"
42
42
 
43
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")"
44
+
45
+ # E-41: the eval harness (eval/loki10/harness.py) pins origin to a local bare
46
+ # repo and scores "PR opened" as a branch landing there. Only an absolute,
47
+ # colon-free path whose own git dir is itself a bare repo qualifies; anything
48
+ # else (URL, scp host:path, relative, non-bare, a subdirectory) takes the
49
+ # GitHub path below and its refusal.
50
+ _e10_local_bare() {
51
+ local p="$1" abs
52
+ case "$p" in /*) ;; *) return 1 ;; esac
53
+ case "$p" in *:*) return 1 ;; esac
54
+ abs="$(cd "$p" 2>/dev/null && pwd -P)" || return 1
55
+ [ "$(git -C "$abs" rev-parse --is-bare-repository 2>/dev/null)" = "true" ] || return 1
56
+ [ "$(git -C "$abs" rev-parse --absolute-git-dir 2>/dev/null)" = "$abs" ]
57
+ }
58
+ _e10_local=""
59
+ _e10_git_env="GIT_DIR GIT_WORK_TREE GIT_COMMON_DIR GIT_CONFIG_PARAMETERS GIT_CONFIG_COUNT"
60
+ # shellcheck disable=SC2086 # word-split list of variable names
61
+ if (unset $_e10_git_env; _e10_local_bare "$_LOKI_PINNED_ORIGIN"); then
62
+ _e10_local=1
63
+ else
64
+ _e10_repo="$(_loki_github_repo_from_url "$_LOKI_PINNED_ORIGIN")" \
65
+ || die "pinned origin refused: $(_loki_origin_refusal "$_LOKI_PINNED_ORIGIN")"
66
+ fi
67
+
68
+ # Local push: like _loki_trusted_push, the branch is fetched into a fresh
69
+ # template-less repo and pushed from there, so the agent repo's config
70
+ # (pushInsteadOf, remote.<url>.receivepack) and hooks never apply. The bare
71
+ # repo's own receive-side hooks (and its core.hooksPath) DO run: git does not
72
+ # pass -c core.hooksPath to the local receive-pack. What protects them is the
73
+ # allowlisted env below: they inherit it, so no token, SSH agent or askpass
74
+ # reaches them.
75
+ _e10_git() {
76
+ env -i PATH="$PATH" HOME=/dev/null TMPDIR="${TMPDIR:-/tmp}" GIT_CONFIG_NOSYSTEM=1 \
77
+ GIT_CONFIG_GLOBAL=/dev/null GIT_TERMINAL_PROMPT=0 git -c core.hooksPath=/dev/null "$@"
78
+ }
79
+ _e10_local_push() {
80
+ local dir="$1" branch="$2" origin="$_LOKI_PINNED_ORIGIN" def tmp rc=1
81
+ dir="$(cd "$dir" 2>/dev/null && pwd -P)" || return 1
82
+ git check-ref-format --branch "$branch" >/dev/null 2>&1 || return 1
83
+ case "$branch" in
84
+ main | master | HEAD)
85
+ log_warn "Not pushing branch '$branch': Loki never pushes directly to a default branch."
86
+ return 2 ;;
87
+ esac
88
+ def="$(_e10_git -C "$origin" symbolic-ref --short HEAD 2>/dev/null)" || def=""
89
+ if [ -z "$def" ] || [ "$branch" = "$def" ]; then
90
+ log_warn "Not pushing branch '$branch': it is (or may be) the default branch of $origin."
91
+ return 2
92
+ fi
93
+ tmp="$(mktemp -d "${TMPDIR:-/tmp}/loki-push.XXXXXX")" || return 1
94
+ if _e10_git init -q --template= "$tmp" >/dev/null 2>&1 \
95
+ && _e10_git -C "$tmp" fetch -q --no-tags --update-shallow "$dir" \
96
+ "+refs/heads/$branch:refs/heads/$branch" >/dev/null 2>&1 \
97
+ && _e10_git -C "$tmp" rev-parse -q --verify "refs/heads/$branch" >/dev/null 2>&1; then
98
+ rc=0
99
+ _e10_git -C "$tmp" push -q "$origin" "refs/heads/$branch:refs/heads/$branch" || rc=$?
100
+ fi
101
+ rm -rf "$tmp"
102
+ return "$rc"
103
+ }
46
104
 
47
105
  _e10_gh() { _loki_with_github_tokens _loki_run_neutral "$_e10_repo" command gh "$@"; }
48
106
 
@@ -57,6 +115,11 @@ case "$mode" in
57
115
  draft=(--draft)
58
116
  fi
59
117
  [ -f "$body" ] || die "body file not found: $body"
118
+ if [ -n "$_e10_local" ]; then
119
+ _e10_local_push "$dir" "$branch" || die "push refused or failed (rc=$?)"
120
+ printf 'local://%s#%s\n' "$_LOKI_PINNED_ORIGIN" "$branch"
121
+ exit 0
122
+ fi
60
123
  _loki_trusted_push _loki_with_github_tokens "$dir" "$branch" || die "push refused or failed (rc=$?)"
61
124
  url="$(_e10_gh pr list --repo "$_e10_repo" --head "$branch" --state open --json url --jq '.[0].url')" \
62
125
  || die "gh pr list failed"
@@ -71,12 +134,14 @@ case "$mode" in
71
134
  [ "$#" -eq 2 ] || die "usage: comment <pr-number> <body-file>"
72
135
  case "$1" in '' | *[!0-9]*) die "pr number must be digits" ;; esac
73
136
  [ -f "$2" ] || die "body file not found: $2"
137
+ [ -z "$_e10_local" ] || { log_info "local origin: no PR to comment on (no-op)"; exit 0; }
74
138
  _e10_gh pr comment "$1" --repo "$_e10_repo" --body-file "$2" || die "gh pr comment failed"
75
139
  ;;
76
140
  status)
77
141
  [ "$#" -eq 3 ] || die "usage: status <sha> <state> <description>"
78
142
  [[ "$1" =~ ^[0-9a-f]{40}$ ]] || die "sha must be 40 lowercase hex characters"
79
143
  case "$2" in pending | success | failure | error) ;; *) die "bad state: $2" ;; esac
144
+ [ -z "$_e10_local" ] || { log_info "local origin: no commit status to set (no-op)"; exit 0; }
80
145
  _e10_gh api "repos/$_e10_repo/statuses/$1" -f "state=$2" -f context=loki/deep-verify \
81
146
  -f "description=$3" >/dev/null || die "gh api status failed"
82
147
  ;;
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "9.78.0"
10
+ __version__ = "9.80.1"
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.78.0
5
+ **Version:** v9.80.1
6
6
 
7
7
  ---
8
8
 
@@ -62,11 +62,11 @@ loki_run_tmp_create() {
62
62
  # usage string, a filesystem block, an empty result, or a concatenation of any
63
63
  # of those is rejected on every platform.
64
64
  loki_run_tmp_stat_field() {
65
- local gnu_fmt="$1" bsd_fmt="$2" path="$3" value
65
+ local gnu_fmt="$1" bsd_fmt="$2" target_path="$3" value
66
66
 
67
- value="$(stat -c "$gnu_fmt" -- "$path" 2>/dev/null)" || value=''
67
+ value="$(stat -c "$gnu_fmt" -- "$target_path" 2>/dev/null)" || value=''
68
68
  case "$value" in
69
- '' | *[!0-9]*) value="$(stat -f "$bsd_fmt" -- "$path" 2>/dev/null)" || value='' ;;
69
+ '' | *[!0-9]*) value="$(stat -f "$bsd_fmt" -- "$target_path" 2>/dev/null)" || value='' ;;
70
70
  esac
71
71
  case "$value" in
72
72
  '' | *[!0-9]*) return 1 ;;
package/docs/v10/BOARD.md CHANGED
@@ -293,37 +293,76 @@ set is declared to avoid overlap with those and with each other.
293
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
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
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
+ | EV-1 | Eval runner and scorer (eval/loki10/harness.py, run.sh, summarize): fresh clone per run, local bare remote, hidden tests after the arm, nonce-verified grading, pre-arm task_invalid checks, provider-only cost | eval/loki10/{harness.py,run.sh,summarize,lib-tmp.sh,README.md,test-harness.sh,fixtures/} | HIGH | bash eval/loki10/test-harness.sh | merged@2026-09-27T22:55Z | D29 gate. Built d63fc5c2 (61 passed, 0 failed); adversarial review REJECT on 3cf723be fixed item by item; merging EV-3 and the task nonce fixes on branch worktree-agent-ad850d483c4960e62. d63fc5c2..68bfbc4f (test-harness 77 passed; no-op baseline graded all 29 tasks not completed, none task_invalid, 108s); main 694866fc. |
297
+ | EV-2 | Eval task set: 25 or more real tasks with hidden tests (augmentiq, public issues with merged-fix tests, quickstart briefs) | eval/loki10/tasks/ | HIGH | python3 eval/loki10/harness.py validate eval/loki10/tasks/*/ | merged@2026-09-27T22:34Z | 29 tasks (augmentiq 1: the repo has only 3 issues; public 14; quickstart 14); re-review APPROVE (every public task red at ref, green at fix); on main 51b37c6f. |
298
+ | EV-3 | Eval arm config isolation: fresh CLAUDE_CONFIG_DIR per run, one credential passed only to the arm | eval/loki10/harness.py (arm_env, arm_auth), test-harness.sh leg 12, README | HIGH | bash eval/loki10/test-harness.sh | merged@2026-09-27T22:55Z | 451ba56c; security review CONCERN (test could not catch a leak) fixed: M1/M2/M4 leak mutations each red; merging into EV-1 branch. 451ba56c (merged via EV-1 branch); main 694866fc. |
299
+ | EV-7 | Task nonce fix: aiq-52 and the 14 qs tasks print LOKI_EVAL_NONCE only after all assertions pass | eval/loki10/tasks/aiq-52-searchbar, eval/loki10/tasks/qs-* | MEDIUM | a no-op baseline over all 29 tasks grades every task not completed, none task_invalid | merged@2026-09-27T22:55Z | Found by the EV-1 audit: 15 tasks could never pass under nonce grading. Assigned to the EV-1 builder with the baseline run. 1a17ad92 (15 tasks print the nonce after assertions; aiq-52 genuine pass at b65b0752 "Tests 3 passed (3)"); main 694866fc. |
300
+ | EV-4 | Raw claude -p arm: real runs on the gate tasks at the gate model and budget | eval/loki10 results under eval/loki10/results/ (gitignored) plus a summary | HIGH | eval/loki10/run.sh --arm raw-claude --task <id> records completed, time_to_pr_s and provider cost | merged@2026-09-27T23:17Z | Smoke on 3 public tasks now, from a scratch clone of the EV-1 branch with EV-3 merged; the full arm runs when EV-1 lands. Smoke 23:02Z: 3/3 completed, p50 34s, p90 45s, $0.1944 per completed (`summarize --markdown`), 0 capped; full 29-task arm runs next. Full arm: 27/29, p50 39s, p90 68s, $0.2363 per completed (results in ~/loki-ci-logs/eval-raw-claude-20260927T231653Z). |
301
+ | EV-5 | Legacy arm: loki start at the same model and 15-minute cap | same as EV-4 | HIGH | eval/loki10/run.sh --arm legacy --task <id> records completed or capped | building@2026-09-27T22:44Z | Smoke on 1 public task now; capped runs score not completed. Smoke on pub-more-itertools-1192: hidden_pass true, pr_opened false, completed false (results row; arm_stdout.log: "committed as 4f3f20a ... but not pushed ... this session's rules say commits stay local only"); full 29-task arm started 23:27Z. Budget exception: a 29-task measurement at a 900s cap per task and --parallel 3 runs up to about 150 minutes by design (agent status 23:32Z); it is a measurement, not a build. |
302
+ | EV-6 | Gate report: results into docs/v10/METRICS.md and the CHANGELOG block (completion rate, p50/p90 time to PR, cost per completed task, misses) | eval/loki10/summarize, docs/v10/METRICS.md | MEDIUM | eval/loki10/summarize --markdown over the three arms renders every gate number, including misses | merged@2026-09-28T00:27Z | Runs after the first full arm pass; Chief of Staff publishes. Staffed in engine10-gate-push (wf_1d47133f-7c7). Review APPROVE (publish_gate.sh and test-publish-gate.sh); merges together with E-33 (its test is red without gate_report.py). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. test-publish-gate 11/0. |
296
303
  | 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
304
  | 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. |
305
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 761fbad8 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
306
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-02 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 1b08ea30 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
307
+ | 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 | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-03 Phase B (engine10-phaseB), build then review. 518f7e89 (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
308
+ | 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 | merged@2026-09-27T22:36Z | 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. a0cbc7b8 (rework review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
309
+ | 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. E-06b efficiency records (d65d90e2, review APPROVE) plus cost_source provider in 4cc3da48. |
310
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-06 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 6c2f9f07 (re-review CONCERN was a test gap only; follow-up E-TG); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
311
+ | 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 | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-05, E-07 Phase B (engine10-phaseB), build then review. 646701bc (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
312
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-02, E-05 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 779983fa (re-review CONCERN was a test gap only; follow-up E-TG); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
313
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01, E-09 Phase B (engine10-phaseB), build then review. Review CONCERN; rework in engine10-phaseB-rework. 5b53ccb0 (HIGH re-review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
314
+ | 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 | merged@2026-09-27T22:55Z | 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. TS half (stages/pr.ts) building as E-11b in engine10-wave2. TS half 2a3e3264 review APPROVE; main 694866fc. |
308
315
  | 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. |
316
+ | 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 | merged@2026-09-27T22:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 Wave 1b (wf_60ffc02a-bf8). b15b2112 (review CONCERN fixed in 4cc3da48: tokens-null wording, injected missing eta path, import errors rethrown); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
317
+ | 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 | parked@2026-09-27T23:36Z | Source: ENGINE.md 21:50Z cut; wave 1; depends on E-01 through E-13 engine10-integrate (wf_c7ce2eb5-e8f). Built 9d9ff7d2 (first real v10 run: 30s, hidden pass, $0.45); HIGH review CONCERN (green only via run.ts glue, over the 5,000-line budget with it); held, absorbed by E-42. Stopped and re-sliced (CEO 23:31Z): its work (9d9ff7d2) is absorbed by E-42, which deletes the run.ts glue. |
318
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (9a463171); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
319
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-04, E-07 Wave 2 (engine10-wave2). 03ffe6b8 (review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
320
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-07, E-09 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (d88a1078); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
321
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-04, E-05 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (9816234f); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
322
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-02, E-07, E-11 engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (028fcaf0); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
323
+ | 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 | merged@2026-09-27T22:55Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-13, E-18 Wave 2 (engine10-wave2). e22aace4 (review APPROVE); main 694866fc pushed 22:55:38 (`git ls-remote origin refs/heads/main` = 694866fc; tests/engine10 plus spawn guard 185 pass, 0 fail; tsc 0 errors). |
324
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-01, E-12 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (a5cabf83); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
325
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-10 Wave 2 (engine10-wave2). engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (11ebbe89); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
326
+ | 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 | merged@2026-09-27T23:26Z | Source: ENGINE.md 21:50Z cut; wave 2; depends on E-03, E-10, E-11 engine10-integrate (wf_c7ce2eb5-e8f). Review APPROVE (854c93f9); main 44731e0f pushed 23:25:50 (tests/engine10 plus spawn guard 334 pass, 0 fail; engine10 4923 lines). |
327
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-01, E-12 Wave 3 (engine10-wave3). Review APPROVE on 85d398e4; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
328
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-04, E-11 Wave 3 (engine10-wave3). Review APPROVE on cf1a390f; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
329
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 Wave 3 (engine10-wave3). Review APPROVE on e96cb3f4 (HIGH review APPROVE); tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
330
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-25 Wave 3 (engine10-wave3). Review APPROVE on 410fdc06; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
331
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-13, E-25 Wave 3 (engine10-wave3). Review APPROVE on cda6ffdb; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
332
+ | 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 | merged@2026-09-27T23:13Z | Source: ENGINE.md 21:50Z cut; wave 3; depends on E-02, E-16 Wave 3 (engine10-wave3). Review APPROVE on dd453b7b; tests/engine10 plus spawn guard 231 pass, 0 fail; test-engine10-push-gitlab 20 passed. |
333
+ | 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 | merged@2026-09-27T22:36Z | 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. 77927604 (review APPROVE); on main (`git ls-remote origin refs/heads/main` = 646701bc; tests/engine10 88 pass, 0 fail; tsc 0 errors). |
334
+ | E-41 | Local-origin push mode so a v10 run can open a "PR" in the eval (bare local origin only, no credentials, hooks env scrubbed) | 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 | merged@2026-09-27T23:26Z | dea31627 plus review fixes; HIGH review CONCERN non-blocking (no remote reached the local path, no token reached any hook); main 44731e0f; test-engine10-push 36 passed. |
335
+ | E-42 | Real entry runs end to end: supervisor and worker main, pr stage only in the supervisor with the pinned origin, stage exports, seal commit fix, CLI invoker markers, in-engine cost records, real model id; absorbs and deletes run.ts | loki-ts/src/engine10/{supervisor,worker,session,cost}.ts, stages/*, tests/engine10/e2e.test.ts | HIGH | LOKI_ENGINE=v10 LOKI_TS_ENTRY=<abs>/loki-ts/src/cli.ts bin/loki "<task>" --no-pr, then eval/loki10/run.sh --arm v10 --task pub-more-itertools-1192 | merged@2026-09-28T00:04Z | engine10-e42 (wf_2111e96d-f6e). Merged 9db2a4ed (train E10, cherry-picked 71a7ac36, 260b034d, 8a6f77dd); train head bun test tests/engine10/ 346 pass 0 fail, tsc exit 0. |
336
+ | E-43 | Stage cost knobs (plan and wall on/off and tier, fix rounds) so the eval measures the full design and cheaper variants | loki-ts/src/engine10/knobs.ts, loki-ts/tests/engine10/knobs.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/knobs.test.ts | parked@2026-09-28T00:04Z | engine10-e42. TL CONCERN (reproduced): defaults planning/development match neither live literal (plan fast, wall planning), a silent cost rise. Parked, superseded by E-45 (same plan/wall tier control, cost-directed); engine has about 12 lines of budget left. |
337
+ | E-44 | Output fixes: status column spacing; token count includes cache tokens | loki-ts/src/engine10/output.ts, loki-ts/tests/engine10/output.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/output.test.ts | merged@2026-09-28T00:04Z | engine10-e42. Merged 9db2a4ed (31ce71a0); TL APPROVE. |
338
+ | E-45 | Cost path for the gate: small tasks skip the separate plan call (implementer plans), Wall author pinned to sonnet with a short prompt and the cached repo map; variant recorded | loki-ts/src/engine10/sizing.ts, loki-ts/tests/engine10/sizing.test.ts, plan/wall wiring | HIGH | cd loki-ts && bun test tests/engine10/sizing.test.ts, then a 5-task v10 measurement before the full arm | building@2026-09-28T00:27Z | CEO directive 23:31Z: target cost per completed task at or below $0.2363 (raw claude -p baseline). engine10-gate-push. Opus CONCERN (reproduced): repomap caps at 2000 files so the over-3000 rule never fires; truncated map must size normal. Rework dispatched with a Wall tier assertion. |
339
+ | E-52 | Eval harness passes LOKI_TS_ENTRY and an allowlist of LOKI_E10_* knobs to the v10 arm (dropped today, so knobs never reach the run) | eval/loki10/harness.py (arm_env only), eval/loki10/test-harness.sh (one leg) | HIGH | bash eval/loki10/test-harness.sh; a leg asserts LOKI_E10_PLAN reaches the arm env and GH_TOKEN does not | ready@2026-09-28T00:06Z | Source: E-42 real run finding 1. |
340
+ | E-53 | Verify runs pytest with the repo's own interpreter (.venv/bin/python, venv/bin/python) when present, not bare python -m pytest (always PARTIAL on venv repos) | loki-ts/src/engine10/testmap.ts (pytest command only), loki-ts/tests/engine10/testmap.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/testmap.test.ts; fixture with .venv/bin/python selects it | ready@2026-09-28T00:06Z | Source: E-42 finding 2. Net line change must be 10 or fewer (budget). |
341
+ | E-54 | A killed or timed-out Wall author never copies its test file into the repo | loki-ts/src/engine10/stages/wall.ts (kill path only), loki-ts/tests/engine10/wall.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/wall.test.ts; aborted wall leaves git status clean | ready@2026-09-28T00:06Z | Source: E-42 finding 3. |
342
+ | E-55 | Seal marks NOT PROVEN when the diff edits or deletes a pre-existing test file (implement weakening tests) | loki-ts/src/engine10/stages/seal.ts (check only), loki-ts/tests/engine10/seal.test.ts | HIGH | cd loki-ts && bun test tests/engine10/seal.test.ts; fixture diff touching an existing test yields a NOT PROVEN entry naming the file | ready@2026-09-28T00:06Z | Source: E-42 finding 4. Opus reviewer (Seal). |
343
+ | E-56 | Verify matches Wall test paths repo-relative (absolute vs relative mismatch drops the Wall test from fast verify) | loki-ts/src/engine10/stages/verify.ts (path normalize only), loki-ts/tests/engine10/verify.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/verify.test.ts; absolute Wall path is selected | ready@2026-09-28T00:06Z | Source: E-42 finding 5. |
344
+ | E-57 | Line reclaim: engine10 back to 4,700 or fewer by deleting dead exports and duplicated helpers, no behavior change | loki-ts/src/engine10/ (deletions only, no new files) | LOW | cd loki-ts && bun test tests/engine10/ && bunx tsc --noEmit; budget.test count at or below 4700 | ready@2026-09-28T00:06Z | Source: train E10 hit 5,019 and needed a header trim; E-36, E-45 and E-52..E-56 need room. Merge after the gate-path slices to avoid conflicts. |
345
+ | EV-10 | Harness reaps arm descendants that escape the timeout process group: after the cap, KILL recorded PIDs under the run clone (.loki/**/*.pid) and processes whose cwd is inside that run-owned clone; guard in docs/v10/GUARDS.md | eval/loki10/harness.py (kill_orphans only), eval/loki10/test-harness.sh (one leg), docs/v10/GUARDS.md (one entry) | HIGH | bash eval/loki10/test-harness.sh; a fixture arm that setsid-spawns a sleeper leaves no live process after the cap | ready@2026-09-28T00:09Z | Source: incident 00:08Z, pulse ORPHAN_WORKTREE caught 4 legacy /tmp/loki-run-*.sh loops (ppid 1, 30 min, 15-min cap) plus 2 sleep 300 children from run dir loki-run.u6ikBxCT; stopped by PID (kill -TERM 58249 58251 58633 58634 57049 56916, ps -p afterwards empty). Never match by name. |
346
+ | E-58 | Issue-ref runs: supervisor creates runDir before the fetch child writes issue.json; makes E-47 green | loki-ts/src/engine10/supervisor.ts (one line before fetchIssueToFile), E-47 test files from 544348a7 | MEDIUM | cd loki-ts && bun test tests/engine10/issue_ref_e2e.test.ts (3 pass) | ready@2026-09-28T00:14Z | Source: E-47 finding (TL reproduced). |
347
+ | E-59 | Receipt model and summary tokens match the provider: cost.ts takes model from the result-cost file; events.ts fold sums cache read and creation tokens; makes E-50 green | loki-ts/src/engine10/cost.ts, loki-ts/src/engine10/events.ts, E-50 test files from 716618d4 | HIGH | cd loki-ts && bun test tests/engine10/model_report.test.ts tests/engine10/output.test.ts | ready@2026-09-28T00:14Z | Source: E-50 finding. Reconcile with E-44 (output.ts already folds cache tokens at render). Opus reviewer (cost numbers feed the gate). |
348
+ | EV-8 | v10 cost check on 5 tasks before the full arm (CEO 23:31Z): v10 arm, same model, after E-42 and E-45 merge | eval/loki10 results (gitignored) plus docs/v10/METRICS.md block | HIGH | eval/loki10/run.sh --arm v10 --tasks <5 ids> reports completed, time to PR and provider cost per task | ready@2026-09-27T23:48Z | Target cost per completed task at or below $0.2363 (raw claude -p full arm). Depends on E-42, E-45, E-38 (--tasks). |
349
+ | EV-9 | v10 full arm over the 29 tasks from the shipped entry, then EV-6 publishes the gate report | eval/loki10 results plus docs/v10/METRICS.md and the CHANGELOG block | HIGH | eval/loki10/run.sh --arm v10 --all yields 29 rows, none arm_unavailable; eval/loki10/publish_gate.sh writes the loki10-gate marker | ready@2026-09-27T23:48Z | Depends on EV-8 meeting cost, E-32, E-33, EV-6. |
350
+ | E-46 | Wire --resume end to end through the supervisor (refused today) | loki-ts/src/engine10/supervisor.ts (resume path only), loki-ts/tests/engine10/resume_cli.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/resume_cli.test.ts | ready@2026-09-27T23:48Z | Found by E-14 (resume refused). Depends on E-42. |
351
+ | E-47 | Issue-ref run end to end (owner/repo#N and URL) through the fetch child with a stub gh | loki-ts/tests/engine10/issue_ref_e2e.test.ts, loki-ts/tests/engine10/fixtures/issue-ref/ | MEDIUM | cd loki-ts && bun test tests/engine10/issue_ref_e2e.test.ts | approved@2026-09-28T00:14Z | Found by E-14 (issue refs wired but untested). Depends on E-42. Staffed in engine10-tests-e42, based on the E-42 branch. Built 544348a7, TL APPROVE: 3 tests red for one real bug (supervisor.ts fetchIssueToFile before runDir exists, ENOENT exit 2). Held; merges with E-58. |
352
+ | E-48 | Spawn deep verify detached from the supervisor after pr.opened, and wire adapters notify (Slack) after run.completed | loki-ts/src/engine10/supervisor.ts (post-PR hook only), loki-ts/tests/engine10/deep_wiring.test.ts | MEDIUM | cd loki-ts && bun test tests/engine10/deep_wiring.test.ts | ready@2026-09-27T23:48Z | E-23 and E-28 exist but nothing calls them. Depends on E-42. |
353
+ | E-49 | loki dashboard reachable through the real entry: serves a run folded from a fixture event log | loki-ts/tests/engine10/dashboard_entry.test.ts | LOW | cd loki-ts && bun test tests/engine10/dashboard_entry.test.ts | ready@2026-09-27T23:48Z | E-24 exists; this proves the cli route reaches it. Depends on E-42. |
354
+ | E-50 | Receipt model field and summary token count match the provider report on a real SDK session (fixture replay of a recorded result-cost file) | loki-ts/tests/engine10/model_report.test.ts, loki-ts/tests/engine10/fixtures/model-report/ | MEDIUM | cd loki-ts && bun test tests/engine10/model_report.test.ts | approved@2026-09-28T00:14Z | Found by E-14 (model "default", 1k tokens shown for 372k used). Depends on E-42, E-44. Staffed in engine10-tests-e42, based on the E-42 branch. Built 716618d4, TL APPROVE: 2 tests red for real bugs (cost.ts writes caller model not provider model; events.ts fold drops cache tokens, 1004 vs 373164). Held; merges with E-59. |
355
+ | E-51 | v10 run passes the pinned origin and the task through to a local-origin PR in the eval harness (regression test of the E-41 plus E-42 path) | loki-ts/tests/engine10/eval_pr_path.test.ts | HIGH | cd loki-ts && bun test tests/engine10/eval_pr_path.test.ts (bare local origin receives the branch; pr.opened url is local://) | merged@2026-09-28T00:14Z | Guards the path that lets v10 score in the gate. Depends on E-41, E-42. Staffed in engine10-tests-e42, based on the E-42 branch. Merged (cherry-pick of 018fbcd4 onto main): bun test tests/engine10/eval_pr_path.test.ts 1 pass 0 fail; TL APPROVE with mutation (env scrub removed -> canary leak caught). |
356
+ | E-31 | Default flip to v10 with LOKI_ENGINE=legacy override and the loki legacy alias (merge held until the gate marker reads met) | bin/loki, loki-ts/src/engine10/cli.ts (USAGE only), tests/test-engine10-default.sh, tests/test-engine10-dispatch.sh, tests/test-engine10-legacy-contract.sh, README.md and docs/v10/GUIDE.md (marked opt-in line only, after E-34) | HIGH | bash tests/test-engine10-default.sh && bash tests/test-engine10-legacy-contract.sh && bash tests/test-engine10-dispatch.sh (0 failed; legacy contract 0 skipped) | building@2026-09-27T23:36Z | Source: ENGINE.md 23:00Z cut. Held at approved until the METRICS.md loki10-gate marker reads met; parked if not met by 03:00Z. Depends on E-30, E-32, E-33, E-34, E-35, E-38, EV-6. Staffed in engine10-gate-push (wf_1d47133f-7c7). |
357
+ | E-32 | Packaging: engine runs from dist and the npm package (static registry, session child via cli route, REPO_ROOT paths) | loki-ts/src/engine10/registry.ts, loki-ts/src/cli.ts (engine10 arm only), loki-ts/src/engine10/machine.ts, loki-ts/src/engine10/session.ts, loki-ts/src/engine10/output.ts, loki-ts/src/engine10/fetch_issue.ts, loki-ts/src/engine10/stages/pr.ts, loki-ts/tests/engine10/registry.test.ts, tests/test-engine10-dist.sh | HIGH | bash tests/test-engine10-dist.sh && (cd loki-ts && bun test tests/engine10/registry.test.ts) | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Later engine slices add one registry line at merge. Depends on E-14, E-TG. Staffed in engine10-gate-push (wf_1d47133f-7c7). Built f44797bf+0b859361, APPROVE; conflicts with E-42 in session.ts. Rebase dispatched. |
358
+ | E-33 | Gate report generator: METRICS.md and CHANGELOG blocks with every gate number, misses and the loki10-gate marker | eval/loki10/gate_report.py, eval/loki10/test-gate-report.sh, eval/loki10/fixtures/gate/ | HIGH | bash eval/loki10/test-gate-report.sh | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. EV-6 runs it on real results and commits METRICS.md. Depends on EV-1. Building in a private clone (worktrees full). Built 06c457b8; review CONCERN (one-model check not covered by a test); fix in engine10-gate-push. Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. Fix 4eb826b2 APPROVE; test-gate-report 34/0. |
359
+ | E-34 | v10 user docs: README quickstart and docs/v10/GUIDE.md (5-line summary, NOT PROVEN, receipts), opt-in until the flip | README.md, docs/v10/GUIDE.md, tests/test-engine10-docs.sh | LOW | bash tests/test-engine10-docs.sh | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-13, E-22. Building in a private clone (worktrees full). Stopped over budget (CEO 23:31Z); built 9716677f; re-sliced to a 15-minute review in engine10-gate-push. Re-review APPROVE, but README says the run does not execute a build yet, false since E-42 (9db2a4ed). Refresh dispatched. |
360
+ | E-35 | Legacy engine deprecation note for loki legacy help and CHANGELOG (no removal) | autonomy/lib/engine10-legacy-notice.txt, CHANGELOG.md, tests/test-engine10-legacy-notice.sh | LOW | bash tests/test-engine10-legacy-notice.sh | merged@2026-09-27T23:36Z | Source: ENGINE.md 23:00Z cut. Depends on none; lands before E-31. Building in a private clone (worktrees full). Review APPROVE (75e732c0); main 39ba4f67 (`bash tests/test-engine10-legacy-notice.sh` 8 passed, 1 skipped). |
361
+ | E-36 | First-run preflight: repo, git identity, provider CLI, opencode refusal, host guard, gh auth, UNSIGNED warning | loki-ts/src/engine10/preflight.ts, loki-ts/tests/engine10/preflight.test.ts, loki-ts/src/engine10/supervisor.ts (one call in main) | MEDIUM | cd loki-ts && bun test tests/engine10/preflight.test.ts | building@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-14. Staffed in engine10-gate-push (wf_1d47133f-7c7). Opus REJECT (reproduced): runSupervisor calls preflight without opts.env. Rework dispatched; merges with E-37. |
362
+ | E-37 | Non-claude provider paths (codex, cline, aider) through session.ts with cost not measured and NOT PROVEN entries | loki-ts/tests/engine10/providers.test.ts, loki-ts/tests/engine10/fixtures/providers/ | MEDIUM | cd loki-ts && bun test tests/engine10/providers.test.ts | approved@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Test only; a red becomes its own slice. Depends on E-14, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Built 41995357, APPROVE; its opencode group un-skips now that E-42 exports main and fails without E-36. Held; merges with E-36. |
363
+ | E-38 | v10 arm gate run over the 29 tasks from dist; legacy arm pinned to LOKI_ENGINE=legacy | eval/loki10/harness.py (legacy arm env), eval/loki10/test-harness.sh (one leg) | HIGH | bash eval/loki10/test-harness.sh && eval/loki10/run.sh --arm v10 --all (29 rows, none arm_unavailable) | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. The missing third arm for the gate. Depends on EV-1, E-32, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. test-harness 79/0. |
364
+ | E-39 | Interrupt and resume end to end (SIGINT, no orphan, resume to seal on the same run) | loki-ts/tests/engine10/resume_e2e.test.ts, loki-ts/tests/engine10/fixtures/resume/ | MEDIUM | cd loki-ts && bun test tests/engine10/resume_e2e.test.ts | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. Depends on E-14. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. |
365
+ | E-40 | Live PR smoke on a sandbox GitHub repo from the dist layout | tests/test-engine10-live-pr.sh | HIGH | LOKI_E10_LIVE_REPO=<owner>/<sandbox> bash tests/test-engine10-live-pr.sh | merged@2026-09-28T00:27Z | Source: ENGINE.md 23:00Z cut. SKIP without the variable does not count as done. Depends on E-23, E-32, E-36. Staffed in engine10-gate-push (wf_1d47133f-7c7). Merged 23b20e6f (train E12): shard coverage 19/0, drift 6/0, engine10 349 pass 0 fail, tsc exit 0. Live leg SKIPs without LOKI_E10_LIVE_REPO. |
327
366
 
328
367
  Every slice above: implement with red-then-green tests, run diff-scoped tests
329
368
  plus `bash tests/moat/run.sh` in your own worktree, never touch `main`,