loki-mode 11.17.38 → 11.17.40
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.
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/autonomy/lib/chat.sh +3 -2
- package/autonomy/lib/config-map.sh +11 -4
- package/autonomy/lib/secure-scan.py +3 -0
- package/autonomy/loki +90 -40
- package/completions/_loki +5 -0
- package/completions/loki.bash +2 -2
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/DEPLOYMENT.md +22 -0
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/BOARD.md +35 -2
- package/docs/v10/PROGRESS.md +6 -0
- package/loki-ts/dist/loki.js +1163 -1133
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +103 -19
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-DSztSxlG.js → AdminPage-DgI8B2Aw.js} +1 -1
- package/web-app/dist/assets/{Avatar-DAEkH-Kr.js → Avatar-B_8yy8iY.js} +1 -1
- package/web-app/dist/assets/{Badge-C2g1rIJS.js → Badge-CldU-vT_.js} +1 -1
- package/web-app/dist/assets/{Button-CV_oHoqk.js → Button-BpQvTqIa.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-K5cwryNH.js → CockpitPage-t3XC9izG.js} +1 -1
- package/web-app/dist/assets/{ComparePage-DdbrA3RG.js → ComparePage-CHtGYEWI.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-Dpxn98IB.js → ErrorBoundary-ChO4RY3O.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-km5l3vCA.js → EvidenceReceiptPanel-DOrDxj2L.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-DMlTqaRk.js → GitHubIssuesPanel-DEpNXTp_.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-CJoaaFmz.js → GitHubPRsPanel-Bb3uLQbx.js} +1 -1
- package/web-app/dist/assets/{HomePage-K3iEsqVb.js → HomePage-_-_Rk_C5.js} +2 -2
- package/web-app/dist/assets/{LoginPage-BOVpvaDP.js → LoginPage-BQ2k_mIH.js} +1 -1
- package/web-app/dist/assets/{MagicPage-DosEW7yP.js → MagicPage-BEt2Y-hw.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-BlEv6oWo.js → MetricsPage-B5tQU5QT.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-CLU9tMFT.js → NotFoundPage-CCL_Ubl7.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-BisHUpNi.js → ProjectPage-azR0ZXjf.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-CB3Nrofn.js → ProjectsPage-rCLcH5bP.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-wcakpvlP.js → SettingsPage-CKYC6E1u.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-C4YdF5sd.js → ShowcasePage-D1XPEQII.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-Bn5btsR8.js → SystemSettingsPage-BQkC6pPn.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-CB6GZBBR.js → TeamsPage-Cqr9g4dU.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-D7EZJX1e.js → TemplatesPage-Cw_2IQ4v.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-Da768cHK.js → TerminalOutput-BZGkuuBg.js} +1 -1
- package/web-app/dist/assets/{activity-BuLQXksG.js → activity-CA-Uv87R.js} +1 -1
- package/web-app/dist/assets/{bell-_Kr8CUYd.js → bell-BKUeJsc9.js} +1 -1
- package/web-app/dist/assets/{bot-DAbnYgrW.js → bot-DQV5dtCP.js} +1 -1
- package/web-app/dist/assets/{check-g8z-jOih.js → check-BAOpMn0h.js} +1 -1
- package/web-app/dist/assets/{chevron-left-BX1wBgJb.js → chevron-left-N282XJLx.js} +1 -1
- package/web-app/dist/assets/{circle-alert-CAQ9CJWO.js → circle-alert-DM1r83A3.js} +1 -1
- package/web-app/dist/assets/{clock-B_12h7xJ.js → clock-C-mYgAEh.js} +1 -1
- package/web-app/dist/assets/{cloud-BSXueLDB.js → cloud-YP7y_t17.js} +1 -1
- package/web-app/dist/assets/{code-xml-CIJS-Yar.js → code-xml-hdfcpa45.js} +1 -1
- package/web-app/dist/assets/{database-Cdz3n1dm.js → database-Cnw7XVsm.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-C80juwD5.js → dollar-sign-C5JkuNww.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-DrUlON06.js → file-code-corner-CBmlYvL-.js} +1 -1
- package/web-app/dist/assets/{file-plus-CM4quXAg.js → file-plus-DeUBJXx_.js} +1 -1
- package/web-app/dist/assets/{globe-B0sONCFO.js → globe-oyhkB-N3.js} +1 -1
- package/web-app/dist/assets/{hammer-BjJX-yOi.js → hammer-CtSvH7U4.js} +1 -1
- package/web-app/dist/assets/{index-DVGMLFpa.js → index-BLc2yb4N.js} +3 -3
- package/web-app/dist/assets/{layers-DkEVnjKP.js → layers-CDQYDQ6K.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CIDRsfEi.js → loader-circle-BtP3HE6o.js} +1 -1
- package/web-app/dist/assets/{lock-D7LZarTx.js → lock-td8sv77w.js} +1 -1
- package/web-app/dist/assets/{package-BcupWHAG.js → package-trunnqYD.js} +1 -1
- package/web-app/dist/assets/{plus-CefQT9P-.js → plus-fuJ7BLsH.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-CFCZx15Z.js → refresh-cw-CWSAQRMi.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-CqmoHhjk.js → rotate-ccw-lDG-5zfN.js} +1 -1
- package/web-app/dist/assets/{scroll-text-zdRz-1_5.js → scroll-text-gNonKSJc.js} +1 -1
- package/web-app/dist/assets/{server-CtCyqZ6x.js → server-B_i2HlpV.js} +1 -1
- package/web-app/dist/assets/{shield-alert-BUi9cBVm.js → shield-alert-4VXBQxgY.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-DQs8lwJ2.js → thumbs-up-Dep29ImG.js} +1 -1
- package/web-app/dist/assets/{trash-2-DQRQ4sfI.js → trash-2-kEwKjXBG.js} +1 -1
- package/web-app/dist/assets/{trending-down-DTC_CsGY.js → trending-down-BGlFS9Sf.js} +1 -1
- package/web-app/dist/assets/{trending-up-BXz50tOk.js → trending-up-eORQxMOu.js} +1 -1
- package/web-app/dist/assets/{upload-DC8jWYOF.js → upload-SPvyhOMU.js} +1 -1
- package/web-app/dist/assets/{usePolling-DoIkN7zy.js → usePolling-CDfhS2YL.js} +1 -1
- package/web-app/dist/assets/{user-ndm8EPzF.js → user-BmyaIilH.js} +1 -1
- package/web-app/dist/index.html +1 -1
package/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: loki-mode
|
|
|
3
3
|
description: An autonomous software factory that knows what it is supposed to deliver, and proves it did. Use when the user says Loki Mode or asks to build, fix or verify software autonomously.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Loki Mode v11.17.
|
|
6
|
+
# Loki Mode v11.17.40
|
|
7
7
|
|
|
8
8
|
**Current entry points (Loki 10 engine):** `loki "<task>"`, `loki owner/repo#N` and `loki quick "<task>"` run the Loki 10 engine and end with a signed receipt (`loki verify`). `loki backlog owner/repo --all` runs many issues in parallel. Guide: `docs/v10/GUIDE.md`. The skill instructions below, and `loki start`, describe the previous bash loop. PRD-file starts (`loki start ./prd.md`) and the opencode provider still run on it until FC38-SWEEP ports them; the legacy-engine command and the LOKI_ENGINE switch remain removed. Prefer `loki owner/repo#N` for issues.
|
|
9
9
|
|
|
@@ -483,4 +483,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
|
|
|
483
483
|
|
|
484
484
|
---
|
|
485
485
|
|
|
486
|
-
**v11.17.
|
|
486
|
+
**v11.17.40 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.17.
|
|
1
|
+
11.17.40
|
package/autonomy/lib/chat.sh
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Sourced by autonomy/loki; defines cmd_chat. Free text goes to the provider
|
|
4
4
|
# in the current mode; slash commands delegate to existing loki commands.
|
|
5
5
|
|
|
6
|
-
_LOKI_CHAT_SYSTEM_PROMPT="You are running inside Loki Mode chat. Be concise. Prefer small, verifiable changes. Loki commands available to the user: loki start (also --workspace and --deploy), loki quick, loki verify, loki receipt, loki undo. During a run, /steer sends a mid-run directive via loki steer (applied at the next plan or implement stage); /pause and /resume control the run, and /answer replies to a blocked run."
|
|
6
|
+
_LOKI_CHAT_SYSTEM_PROMPT="You are running inside Loki Mode chat. Be concise. Prefer small, verifiable changes. Loki commands available to the user: loki start (also --workspace and --deploy; deploy takes --destination, --canary, --env-file, --domain and --health-url), loki quick, loki verify (loki verify --url https://host checks a live deploy against its provenance), loki receipt, loki undo. During a run, /steer sends a mid-run directive via loki steer (applied at the next plan or implement stage); /pause and /resume control the run, and /answer replies to a blocked run."
|
|
7
7
|
|
|
8
8
|
_chat_loki_bin() {
|
|
9
9
|
local d="${_LOKI_SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
|
@@ -50,7 +50,8 @@ Loki chat commands:
|
|
|
50
50
|
/resume loki resume
|
|
51
51
|
/answer <text> loki answer --text: answer a BLOCKED run with a follow-up run
|
|
52
52
|
/workspace <name> <brief> loki start --workspace (multi-repo run, composite receipt)
|
|
53
|
-
/deploy [--
|
|
53
|
+
/deploy [--destination D] [--canary] [--env-file F] [--domain H] [--health-url U] [--auto-rollback]
|
|
54
|
+
loki deploy --execute after you confirm (gated on a VERIFIED receipt)
|
|
54
55
|
/attach attach to the current or most recent loki start run in this repo
|
|
55
56
|
/quick <task> loki quick
|
|
56
57
|
/edit <change> apply one change (build mode for this turn)
|
|
@@ -749,18 +749,25 @@ loki_maybe_apply_config_file() {
|
|
|
749
749
|
path="$LOKI_CONFIG_FILE"
|
|
750
750
|
fi
|
|
751
751
|
# 2. scan args (explicit flag overrides the env var).
|
|
752
|
-
|
|
753
|
-
local a
|
|
752
|
+
# With --deploy on the line, --env-file is the deploy env file, not config.
|
|
753
|
+
local prev="" a ef_cfg=1
|
|
754
|
+
for a in "$@"; do [ "$a" = "--deploy" ] && ef_cfg=0; done
|
|
754
755
|
for a in "$@"; do
|
|
755
756
|
case "$prev" in
|
|
756
|
-
--config|--vars
|
|
757
|
+
--config|--vars)
|
|
757
758
|
path="$a"
|
|
758
759
|
;;
|
|
760
|
+
--env-file)
|
|
761
|
+
[ "$ef_cfg" = 1 ] && path="$a"
|
|
762
|
+
;;
|
|
759
763
|
esac
|
|
760
764
|
case "$a" in
|
|
761
|
-
--config=*|--vars
|
|
765
|
+
--config=*|--vars=*)
|
|
762
766
|
path="${a#*=}"
|
|
763
767
|
;;
|
|
768
|
+
--env-file=*)
|
|
769
|
+
[ "$ef_cfg" = 1 ] && path="${a#*=}"
|
|
770
|
+
;;
|
|
764
771
|
esac
|
|
765
772
|
prev="$a"
|
|
766
773
|
done
|
|
@@ -606,10 +606,12 @@ def scan(target_dir, secrets_everywhere=False):
|
|
|
606
606
|
raise ValueError("not a directory: %s" % target_dir)
|
|
607
607
|
|
|
608
608
|
findings = []
|
|
609
|
+
files_scanned = 0
|
|
609
610
|
for abs_path, rel_path in _iter_files(target_dir):
|
|
610
611
|
lines = _read_lines(abs_path)
|
|
611
612
|
if lines is None:
|
|
612
613
|
continue
|
|
614
|
+
files_scanned += 1
|
|
613
615
|
findings.extend(_scan_file(rel_path, lines, secrets_everywhere))
|
|
614
616
|
|
|
615
617
|
# deterministic ordering: by file, then line, then rule
|
|
@@ -625,6 +627,7 @@ def scan(target_dir, secrets_everywhere=False):
|
|
|
625
627
|
"summary": {
|
|
626
628
|
"total": len(findings),
|
|
627
629
|
"by_severity": by_severity,
|
|
630
|
+
"files_scanned": files_scanned,
|
|
628
631
|
},
|
|
629
632
|
}
|
|
630
633
|
|
package/autonomy/loki
CHANGED
|
@@ -446,60 +446,61 @@ EOF
|
|
|
446
446
|
[ "$l_pat" -gt "$c_pat" ]
|
|
447
447
|
}
|
|
448
448
|
|
|
449
|
-
#
|
|
450
|
-
#
|
|
451
|
-
#
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
[ -n "${CI:-}" ] && return 0
|
|
456
|
-
[ ! -t 1 ] && return 0
|
|
457
|
-
|
|
458
|
-
local current
|
|
459
|
-
current=$(get_version)
|
|
460
|
-
case "$current" in
|
|
461
|
-
[0-9]*.[0-9]*.[0-9]*) ;;
|
|
462
|
-
*) return 0 ;; # "unknown" or non-semver -> never nudge
|
|
463
|
-
esac
|
|
464
|
-
|
|
465
|
-
local cache_file latest=""
|
|
449
|
+
# _loki_latest_published_version: print the latest published version (fresh
|
|
450
|
+
# cache first, else one short registry fetch that refreshes the cache), or
|
|
451
|
+
# nothing when offline. Optional $1 = curl timeout seconds (default 3).
|
|
452
|
+
# Never fabricates, always returns 0.
|
|
453
|
+
_loki_latest_published_version() {
|
|
454
|
+
local timeout="${1:-3}" cache_file latest="" checked_at now age
|
|
466
455
|
cache_file=$(_loki_update_cache_path)
|
|
467
|
-
|
|
468
|
-
# Fast path: a fresh (< 24h) cache means zero network.
|
|
469
456
|
if [ -f "$cache_file" ]; then
|
|
470
|
-
local checked_at now age
|
|
471
457
|
checked_at=$(sed -n 's/.*"checkedAt"[[:space:]]*:[[:space:]]*\([0-9]\{1,\}\).*/\1/p' "$cache_file" 2>/dev/null | head -1)
|
|
472
458
|
latest=$(sed -n 's/.*"latest"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$cache_file" 2>/dev/null | head -1)
|
|
459
|
+
now=$(date +%s 2>/dev/null || echo 0)
|
|
473
460
|
if [ -n "$checked_at" ] && [ -n "$latest" ]; then
|
|
474
|
-
now=$(date +%s 2>/dev/null || echo 0)
|
|
475
461
|
age=$(( now - checked_at ))
|
|
476
462
|
if [ "$age" -ge 0 ] && [ "$age" -lt 86400 ]; then
|
|
477
|
-
|
|
478
|
-
printf 'A newer loki-mode is available (%s). Update: bun install -g loki-mode\n' "$latest" >&2
|
|
479
|
-
fi
|
|
463
|
+
printf '%s\n' "$latest"
|
|
480
464
|
return 0
|
|
481
465
|
fi
|
|
482
466
|
fi
|
|
483
|
-
latest=""
|
|
467
|
+
latest=""
|
|
484
468
|
fi
|
|
485
|
-
|
|
486
|
-
# Cache miss/stale: query the registry. Hard timeout, fail-silent.
|
|
487
469
|
if command -v curl >/dev/null 2>&1; then
|
|
488
|
-
latest=$(curl -fsS --max-time
|
|
470
|
+
latest=$(curl -fsS --max-time "$timeout" "https://registry.npmjs.org/loki-mode/latest" 2>/dev/null \
|
|
489
471
|
| sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' | head -1)
|
|
490
472
|
fi
|
|
491
|
-
# No usable result -> print nothing, write nothing (never fabricate).
|
|
492
473
|
case "$latest" in
|
|
493
474
|
[0-9]*.[0-9]*.[0-9]*) ;;
|
|
494
475
|
*) return 0 ;;
|
|
495
476
|
esac
|
|
496
|
-
|
|
497
|
-
# Persist the fresh result (best-effort; a non-writable HOME must not break).
|
|
498
|
-
local now2
|
|
499
|
-
now2=$(date +%s 2>/dev/null || echo 0)
|
|
500
477
|
( mkdir -p "$(dirname "$cache_file")" 2>/dev/null \
|
|
501
|
-
&& printf '{"checkedAt":%s,"latest":"%s"}\n' "$
|
|
478
|
+
&& printf '{"checkedAt":%s,"latest":"%s"}\n' "$(date +%s 2>/dev/null || echo 0)" "$latest" > "$cache_file" 2>/dev/null ) || true
|
|
479
|
+
printf '%s\n' "$latest"
|
|
480
|
+
return 0
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
# maybe_print_update_hint: print the one-line update nudge to stderr if (and
|
|
484
|
+
# only if) a successful, non-fabricated check reports a strictly newer release.
|
|
485
|
+
# Never blocks, never slows the command, never touches stdout. Always returns 0.
|
|
486
|
+
maybe_print_update_hint() {
|
|
487
|
+
# Opt-out / non-interactive / CI: do nothing, touch neither disk nor network.
|
|
488
|
+
[ "${LOKI_NO_UPDATE_CHECK:-}" = "1" ] && return 0
|
|
489
|
+
[ -n "${CI:-}" ] && return 0
|
|
490
|
+
[ ! -t 1 ] && return 0
|
|
502
491
|
|
|
492
|
+
local current
|
|
493
|
+
current=$(get_version)
|
|
494
|
+
case "$current" in
|
|
495
|
+
[0-9]*.[0-9]*.[0-9]*) ;;
|
|
496
|
+
*) return 0 ;; # "unknown" or non-semver -> never nudge
|
|
497
|
+
esac
|
|
498
|
+
|
|
499
|
+
# Fresh cache means zero network; otherwise one short fail-silent fetch.
|
|
500
|
+
# No usable result -> print nothing (never fabricate).
|
|
501
|
+
local latest
|
|
502
|
+
latest=$(_loki_latest_published_version 1.5)
|
|
503
|
+
[ -n "$latest" ] || return 0
|
|
503
504
|
if _loki_semver_newer "$latest" "$current"; then
|
|
504
505
|
printf 'A newer loki-mode is available (%s). Update: bun install -g loki-mode\n' "$latest" >&2
|
|
505
506
|
fi
|
|
@@ -1904,6 +1905,9 @@ show_help_all() {
|
|
|
1904
1905
|
echo " --openspec PATH Use OpenSpec change directory as input"
|
|
1905
1906
|
echo " --config PATH Load settings from a config file (.yaml/.json/.env). Alias: --env-file, --vars"
|
|
1906
1907
|
echo " Precedence: CLI flag > env var > --config file > defaults. Secrets via \${VAR}."
|
|
1908
|
+
echo " --deploy After a start that exits 0, run the gated loki deploy --execute. Deploy flags: --destination preview|staging|production,"
|
|
1909
|
+
echo " --canary, --env-file FILE (deploy env, not config, with --deploy), --domain HOST, --github (publish after deploy),"
|
|
1910
|
+
echo " --health-url URL, --health-match STR, --auto-rollback"
|
|
1907
1911
|
echo ""
|
|
1908
1912
|
echo "Deprecated alias 'run': 'loki run <issue-ref>' still works as an alias"
|
|
1909
1913
|
echo "for 'loki start'. See its options with 'loki run --help'."
|
|
@@ -2644,8 +2648,31 @@ cmd_start() {
|
|
|
2644
2648
|
# that ended 0. cmd_deploy owns every gate: no VERIFIED HEAD-anchored
|
|
2645
2649
|
# receipt means a refusal, never a deploy.
|
|
2646
2650
|
local _ps_ws="" _ps_deploy=0 _ps_health="" _ps_hmatch="" _ps_rb=0 _ps_rest=() _ps_brief=() _ps_a
|
|
2651
|
+
local _ps_dest="" _ps_canary=0 _ps_envf="" _ps_domain="" _ps_gh=0 _ps_dep_in=0
|
|
2652
|
+
# --env-file and --github already mean config alias and issue sync for a plain
|
|
2653
|
+
# start; they are deploy flags only when --deploy is on the line.
|
|
2654
|
+
for _ps_a in "$@"; do [ "$_ps_a" = "--deploy" ] && _ps_dep_in=1; done
|
|
2647
2655
|
while [ $# -gt 0 ]; do
|
|
2648
2656
|
case "$1" in
|
|
2657
|
+
--destination)
|
|
2658
|
+
[ -n "${2:-}" ] && [ "${2#-}" = "$2" ] || { echo -e "${RED}--destination requires preview, staging or production${NC}" >&2; exit 2; }
|
|
2659
|
+
_ps_dest="$2"; shift 2 ;;
|
|
2660
|
+
--destination=*) _ps_dest="${1#*=}"; shift ;;
|
|
2661
|
+
--domain)
|
|
2662
|
+
[ -n "${2:-}" ] && [ "${2#-}" = "$2" ] || { echo -e "${RED}--domain requires a hostname${NC}" >&2; exit 2; }
|
|
2663
|
+
_ps_domain="$2"; shift 2 ;;
|
|
2664
|
+
--domain=*) _ps_domain="${1#*=}"; shift ;;
|
|
2665
|
+
--env-file)
|
|
2666
|
+
if [ "$_ps_dep_in" != 1 ]; then _ps_rest+=("$1"); shift; continue; fi
|
|
2667
|
+
[ -n "${2:-}" ] && [ "${2#-}" = "$2" ] || { echo -e "${RED}--env-file requires a file path${NC}" >&2; exit 2; }
|
|
2668
|
+
_ps_envf="$2"; shift 2 ;;
|
|
2669
|
+
--env-file=*)
|
|
2670
|
+
if [ "$_ps_dep_in" = 1 ]; then _ps_envf="${1#*=}"; else _ps_rest+=("$1"); fi
|
|
2671
|
+
shift ;;
|
|
2672
|
+
--canary) _ps_canary=1; shift ;;
|
|
2673
|
+
--github)
|
|
2674
|
+
if [ "$_ps_dep_in" = 1 ]; then _ps_gh=1; else _ps_rest+=("$1"); fi
|
|
2675
|
+
shift ;;
|
|
2649
2676
|
--workspace)
|
|
2650
2677
|
[ -n "${2:-}" ] && [ "${2#-}" = "$2" ] || { echo -e "${RED}--workspace requires a workspace name${NC}" >&2; exit 2; }
|
|
2651
2678
|
_ps_ws="$2"; shift 2 ;;
|
|
@@ -2663,8 +2690,8 @@ cmd_start() {
|
|
|
2663
2690
|
*) _ps_rest+=("$1"); shift ;;
|
|
2664
2691
|
esac
|
|
2665
2692
|
done
|
|
2666
|
-
if { [ -n "$_ps_health" ] || [ -n "$_ps_hmatch" ] || [ "$_ps_rb" = 1 ]; } && [ "$_ps_deploy" != 1 ]; then
|
|
2667
|
-
echo -e "${RED}--health-url, --health-match
|
|
2693
|
+
if { [ -n "$_ps_health" ] || [ -n "$_ps_hmatch" ] || [ "$_ps_rb" = 1 ] || [ -n "$_ps_dest" ] || [ "$_ps_canary" = 1 ] || [ -n "$_ps_domain" ]; } && [ "$_ps_deploy" != 1 ]; then
|
|
2694
|
+
echo -e "${RED}--health-url, --health-match, --auto-rollback, --destination, --canary and --domain apply only with --deploy${NC}" >&2
|
|
2668
2695
|
exit 2
|
|
2669
2696
|
fi
|
|
2670
2697
|
if [ -n "$_ps_ws" ]; then
|
|
@@ -2708,8 +2735,17 @@ cmd_start() {
|
|
|
2708
2735
|
[ -n "$_ps_health" ] && _ps_dargs+=(--health-url "$_ps_health")
|
|
2709
2736
|
[ -n "$_ps_hmatch" ] && _ps_dargs+=(--health-match "$_ps_hmatch")
|
|
2710
2737
|
[ "$_ps_rb" = 1 ] && _ps_dargs+=(--auto-rollback)
|
|
2711
|
-
|
|
2712
|
-
|
|
2738
|
+
[ -n "$_ps_dest" ] && _ps_dargs+=(--destination "$_ps_dest")
|
|
2739
|
+
[ "$_ps_canary" = 1 ] && _ps_dargs+=(--canary)
|
|
2740
|
+
[ -n "$_ps_envf" ] && _ps_dargs+=(--env-file "$_ps_envf")
|
|
2741
|
+
[ -n "$_ps_domain" ] && _ps_dargs+=(--domain "$_ps_domain")
|
|
2742
|
+
local _ps_drc=0
|
|
2743
|
+
cmd_deploy "${_ps_dargs[@]}" || _ps_drc=$?
|
|
2744
|
+
if [ "$_ps_drc" -ne 0 ]; then return "$_ps_drc"; fi
|
|
2745
|
+
if [ "$_ps_gh" = 1 ]; then
|
|
2746
|
+
( cmd_github publish ) || _ps_drc=$?
|
|
2747
|
+
fi
|
|
2748
|
+
return "$_ps_drc"
|
|
2713
2749
|
fi
|
|
2714
2750
|
# P12-07b: a bare `loki start --resume [run-id]` goes to the same engine10
|
|
2715
2751
|
# resume path as `loki resume` (util/run_outputs.ts resumeMain), never into a
|
|
@@ -2841,6 +2877,11 @@ cmd_start() {
|
|
|
2841
2877
|
echo " --quiet Suppress [INFO]/[STEP]; warnings and errors still print"
|
|
2842
2878
|
echo " --log-level LEVEL debug | info | warn | error (default: info)"
|
|
2843
2879
|
echo " --max-duration DUR Wall-clock cap: seconds, or 90m / 2h (default: none)"
|
|
2880
|
+
echo " --deploy After a start that exits 0, run the gated loki deploy --execute. Deploy flags:"
|
|
2881
|
+
echo " --destination preview|staging|production, --canary, --domain HOST,"
|
|
2882
|
+
echo " --env-file FILE (the deploy env file, not config, when --deploy is set),"
|
|
2883
|
+
echo " --health-url URL, --health-match STR, --auto-rollback,"
|
|
2884
|
+
echo " and, with --deploy, the flag --github runs loki github publish after a good deploy"
|
|
2844
2885
|
echo ""
|
|
2845
2886
|
echo "Issue-mode options (used when input is an ISSUE-REF or a --brief):"
|
|
2846
2887
|
echo " --dry-run Preview generated PRD without starting"
|
|
@@ -14662,7 +14703,7 @@ cmd_setup_skill() {
|
|
|
14662
14703
|
# loki self-update --to bun Switch from current to Bun
|
|
14663
14704
|
# loki self-update --to npm Switch from current to npm
|
|
14664
14705
|
# loki self-update --to brew Switch from current to Homebrew
|
|
14665
|
-
# loki self-update --check Print detection result + exit 0
|
|
14706
|
+
# loki self-update --check Print detection result, installed vs latest version + exit 0
|
|
14666
14707
|
#
|
|
14667
14708
|
cmd_self_update() {
|
|
14668
14709
|
local target_manager=""
|
|
@@ -14691,7 +14732,7 @@ Usage:
|
|
|
14691
14732
|
loki self-update --to bun Switch to Bun (recommended for v8)
|
|
14692
14733
|
loki self-update --to npm Switch to npm
|
|
14693
14734
|
loki self-update --to brew Switch to Homebrew
|
|
14694
|
-
loki self-update --check Print detected manager and exit
|
|
14735
|
+
loki self-update --check Print detected manager, installed vs latest version, and exit
|
|
14695
14736
|
loki self-update --help Show this help
|
|
14696
14737
|
|
|
14697
14738
|
Auto-detection looks at the resolved path of the `loki` binary:
|
|
@@ -14761,6 +14802,15 @@ EOF
|
|
|
14761
14802
|
echo "loki binary: $resolved"
|
|
14762
14803
|
echo "package dir: $pkg_dir"
|
|
14763
14804
|
echo "current mgr: $current_mgr"
|
|
14805
|
+
local installed_v latest_v="" update_flag="unknown"
|
|
14806
|
+
installed_v=$(get_version)
|
|
14807
|
+
latest_v=$(_loki_latest_published_version)
|
|
14808
|
+
if [ -z "$latest_v" ]; then
|
|
14809
|
+
echo "installed $installed_v, latest unknown"
|
|
14810
|
+
else
|
|
14811
|
+
if _loki_semver_newer "$latest_v" "$installed_v"; then update_flag="yes"; else update_flag="no"; fi
|
|
14812
|
+
echo "installed $installed_v, latest $latest_v, update available $update_flag"
|
|
14813
|
+
fi
|
|
14764
14814
|
return 0
|
|
14765
14815
|
fi
|
|
14766
14816
|
|
package/completions/_loki
CHANGED
|
@@ -157,6 +157,7 @@ function _loki {
|
|
|
157
157
|
'--yes[Skip redaction-preview confirmation]' \
|
|
158
158
|
'--private[Create a secret gist when sharing]' \
|
|
159
159
|
'--hosted[Hosted publishing (coming in R9)]' \
|
|
160
|
+
'--dry-run[Scan and list what share would publish; publishes nothing]' \
|
|
160
161
|
'--help[Show help]' \
|
|
161
162
|
'1:subcommand:(list show open share badge md bundle)'
|
|
162
163
|
;;
|
|
@@ -365,6 +366,10 @@ function _loki_start {
|
|
|
365
366
|
'--deploy[Deploy after a VERIFIED run via loki deploy --execute]' \
|
|
366
367
|
'--health-url[With --deploy: health probe URL]:url:' \
|
|
367
368
|
'--auto-rollback[With --deploy: roll back on a failed health probe]' \
|
|
369
|
+
'--destination[With --deploy: preview, staging or production]:destination:(preview staging production)' \
|
|
370
|
+
'--canary[With --deploy: canary rollout]' \
|
|
371
|
+
'--domain[With --deploy: attach this domain and prove TLS]:hostname:' \
|
|
372
|
+
'--env-file[With --deploy: env file pushed to the provider]:file:_files' \
|
|
368
373
|
'--background[Background mode]' \
|
|
369
374
|
'--bg[Background mode]' \
|
|
370
375
|
'--simple[Force simple complexity]' \
|
package/completions/loki.bash
CHANGED
|
@@ -28,7 +28,7 @@ _loki_completion() {
|
|
|
28
28
|
# If the word starts with a dash, show flags
|
|
29
29
|
# Rule: list every flag bin/loki routes (Bun/engine10 ones such as --model, --max-cost, --spec, --no-pr too), not only cmd_start's own.
|
|
30
30
|
if [[ "$cur" == -* ]]; then
|
|
31
|
-
local flags="--provider --max-iterations --parallel --background --bg --simple --complex --github --no-dashboard --sandbox --skip-memory --cost --spec --spec-first --yes --budget --attempts --model --isolation --max-cost --no-pr --explain-route --brief --worktree --pr --ship --detach --workspace --deploy --health-url --auto-rollback --resume --help"
|
|
31
|
+
local flags="--provider --max-iterations --parallel --background --bg --simple --complex --github --no-dashboard --sandbox --skip-memory --cost --spec --spec-first --yes --budget --attempts --model --isolation --max-cost --no-pr --explain-route --brief --worktree --pr --ship --detach --workspace --deploy --health-url --auto-rollback --destination --canary --domain --env-file --resume --help"
|
|
32
32
|
COMPREPLY=( $(compgen -W "${flags}" -- "$cur") )
|
|
33
33
|
return 0
|
|
34
34
|
fi
|
|
@@ -305,7 +305,7 @@ _loki_completion() {
|
|
|
305
305
|
|
|
306
306
|
proof)
|
|
307
307
|
if [[ "$cur" == -* ]]; then
|
|
308
|
-
COMPREPLY=( $(compgen -W "--yes --private --hosted --out --help" -- "$cur") )
|
|
308
|
+
COMPREPLY=( $(compgen -W "--yes --private --hosted --dry-run --out --help" -- "$cur") )
|
|
309
309
|
return 0
|
|
310
310
|
fi
|
|
311
311
|
if [[ $cword -eq 2 ]]; then
|
package/dashboard/__init__.py
CHANGED
package/docs/CLI-REFERENCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI reference
|
|
2
2
|
|
|
3
|
-
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.
|
|
3
|
+
Generated from `loki-ts/src/cli/registry.ts` by `scripts/generate-stale-zero.sh` for v11.17.40. Do not edit by hand.
|
|
4
4
|
Hidden and legacy-only commands are omitted; see `docs/v10/CLI-MODERN.md` for the full inventory.
|
|
5
5
|
|
|
6
6
|
| Command | Description |
|
package/docs/DEPLOYMENT.md
CHANGED
|
@@ -523,6 +523,28 @@ deliberately.
|
|
|
523
523
|
|
|
524
524
|
---
|
|
525
525
|
|
|
526
|
+
## From brief to verified URL
|
|
527
|
+
|
|
528
|
+
One command builds from a brief, deploys the result and proves what is live.
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
loki start "a todo app with login" --deploy \
|
|
532
|
+
--destination production --domain todo.example.com --env-file .env.production \
|
|
533
|
+
--health-url https://todo.example.com/health --auto-rollback --github
|
|
534
|
+
loki verify --url https://todo.example.com
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
- `loki start` runs first. Only a start that exits 0 reaches the deploy; a non-zero start prints `not deploying` and returns its own code.
|
|
538
|
+
- `--deploy` runs `loki deploy --execute` with `--destination`, `--canary`, `--env-file`, `--domain`, `--health-url`, `--health-match` and `--auto-rollback` passed through. The deploy still refuses without a VERIFIED receipt for this exact HEAD.
|
|
539
|
+
- With `--deploy`, `--env-file` is the deploy env file (key names are recorded, values are not), not a config file.
|
|
540
|
+
- `--github` runs `loki github publish` after a deploy that exited 0. A failed deploy skips it.
|
|
541
|
+
- A flag value that starts with `-` exits 2. The deploy-only flags without `--deploy` exit 2.
|
|
542
|
+
- `loki verify --url` fetches `/.well-known/loki-provenance.json` from the live host and is VERIFIED only when its signature and cited receipt both check out.
|
|
543
|
+
|
|
544
|
+
In `loki chat`, `/deploy` takes the same deploy flags, prints the full argv and waits for a y before running.
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
526
548
|
## Reference
|
|
527
549
|
|
|
528
550
|
| Env var | Where | Meaning |
|
package/docs/INSTALLATION.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Loki Mode, by [Autonomi](https://www.autonomi.dev/), turns a spec or an issue into a verified pull request with a receipt you can check. This page covers installing it, a first run, and the options around it.
|
|
4
4
|
|
|
5
|
-
**Version:** v11.17.
|
|
5
|
+
**Version:** v11.17.40
|
|
6
6
|
|
|
7
7
|
**Engine note:** `loki start` is the primary command. `loki start`, `loki "<task>"`, `loki owner/repo#N` and `loki quick` all run the Loki 10 engine, whatever the flag order or input form (PRD file, issue ref, task or one-word brief). The previous loop runs only on `--engine legacy`, `LOKI_ENGINE=legacy`, or for one call when a flag Loki 10 cannot honor is present. See the [user guide](v10/GUIDE.md) and the [5-minute quickstart](QUICKSTART.md).
|
|
8
8
|
|
package/docs/v10/BOARD.md
CHANGED
|
@@ -760,7 +760,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
|
|
|
760
760
|
| A-119b | A-119 opus review (REJECT on pre-existing holes, A-119 landed as a strict improvement): weakening still ends VERIFIED via (1) a helper file a base test imports (eq=()=>{}), (2) snapshot or fixture edits (__snapshots__/*.snap, tests/fixtures/*.json), (3) tests isTestFile (testmap.ts:51) does not recognise: __tests__/*.js, mocha test/*.js, cargo tests/*.rs, including rename to .bak. Also: verdictOf returns ALREADY_SATISFIED before the weakened downgrade when implement says already_done; package.json jest testPathIgnorePatterns and vite.config.ts test.exclude skip config detection. Fix: widen the seal.ts weakTests predicate to any changed/deleted base path under test/, tests/, __tests__/, __snapshots__/, fixtures dirs plus non-test files a base test imports; check weakened before the already_done early return; add vite.config and in-block jest keys to CFG detection | loki-ts/src/engine10/stages/seal.ts, verify.ts (CFG only), tests | HIGH | each repro gives not-VERIFIED; source-only fix and new test stay VERIFIED | rejected@2026-10-01T05:12Z | |
|
|
761
761
|
| A-117 | FALSE VERIFIED IN `loki verify` (A-130 r2 opus reviewer): on a run whose events.jsonl was tampered (append, edit, truncate, delete), the run now ends FAILED (A-130) but the receipt on disk still says VERIFIED with no tamper mark, because the worker sealed it before the supervisor detected the tamper; `loki verify` prints verdict: VERIFIED rc=0. Fix: record the tamper on the receipt via the registered receipt.addendum event (hash-chained) or have verify check the event log hash; verify must say TAMPERED and exit non-zero | loki-ts/src/engine10/verify_cmd.ts, supervisor.ts or seal.ts, tests | HIGH | tampered-log fixture: loki verify TAMPERED rc!=0 | released@2026-10-16T00:49Z | after A-130 (supervisor.ts); r2: opus REJECT, tail truncation erases post-seal tamper, fix = signed final log line |
|
|
762
762
|
| A-118 | Exit-honest policy gap on the DEFAULT path (A-115 r2 finding): legacy `loki quick` prints `Evidence Receipt: NOT VERIFIED` yet exits rc 0 on a run whose target test was skipped; G1 exit-honest counts a skipped test as green, so it does not catch this. CTO call: should legacy quick exit non-zero on NOT VERIFIED when a relevant test was skipped/weakened, and should G1 count skipped as not-green? | autonomy/run.sh (quick exit path), scripts/first-run-gate.sh G1 | HIGH | skipped-target legacy run exits non-zero; G1 treats skipped as not green | released@2026-10-16T00:49Z | D47 decided: rc 3 on tests_integrity failed (skip added, runner config changed, test file deleted/renamed); assertion edits disclosed rc 0; G1 green needs pass 2 fail 0, 9b asserts rc 3. Files: proof-generator.py, run.sh after generate_proof_of_run, first-run-gate.sh, docs/exit-codes.md. Blocks promote of `latest`; built df404970, opus review |
|
|
763
|
-
| A-112b | A-112 readability debt: subtractBase in verify.ts was folded to reach 4999 of 5000 core lines (9 lines over 200 chars, longest 347; un/progress/base-run loop each on one line). Unfold when A-150 frees budget; no behaviour change | loki-ts/src/engine10/stages/verify.ts | MEDIUM | budget test plus verify_prered unchanged |
|
|
763
|
+
| A-112b | A-112 readability debt: subtractBase in verify.ts was folded to reach 4999 of 5000 core lines (9 lines over 200 chars, longest 347; un/progress/base-run loop each on one line). Unfold when A-150 frees budget; no behaviour change | loki-ts/src/engine10/stages/verify.ts | MEDIUM | budget test plus verify_prered unchanged | released v11.17.39 | after A-150 |
|
|
764
764
|
| A-113b | A-110 opus notes on A-113: (1) under the CLI invoker (LOKI_E10_INVOKER=cli) the provider child stderr never reaches the fatal classifier (the *-impl.stderr.log is empty), so a credit/auth failure printed on plain stderr gives stop:null and burns the fix rounds; (2) machine.ts re-records the previous signature when a verify crashes, so a crashed verify counts toward a stall. Fix both in session.ts/machine.ts, with end-to-end tests through the real worker | loki-ts/src/engine10/session.ts, machine.ts, tests | HIGH | CLI stderr credit line stops fatal; crashed verify does not count as a stall repeat | released@2026-10-01T01:19Z | keep the A-110 escalated emit; the A-110 reviewer plugin probe is a good e2e template Released in v10.5.14 (merge 0377398d is an ancestor of v10.5.14). |
|
|
765
765
|
| A-121 | v10 signs and verifies natively (item 3) | see plan A-121 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge 08b31271 is an ancestor of v10.5.13). |
|
|
766
766
|
| A-122 | Delete the GPG signing layer (item 3, deletion) | see plan A-122 | HIGH | first-run-gate assertion per plan card | released@2026-10-01T00:52Z | Wave per plan section 5; one writer per file. Released in v10.5.13 (merge cb738c36 is an ancestor of v10.5.13). |
|
|
@@ -1012,7 +1012,7 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
|
|
|
1012
1012
|
| TEN-DEPLOY-06 | loki deploy --domain: attach a custom domain and prove TLS | autonomy/loki (cmd_deploy --domain parse and a post-health domain block in _deploy_try_execute, _deploy_record domain/tls fields only), tests/test-deploy-receipt-gate.sh (new section), CHANGELOG.md | MEDIUM | see Wall in note | released v11.17.38 | wave 5; depends: TEN-DEPLOY-05 (same function, serialized). Goal: `--domain example.com` (with --execute) runs documented verbs after a healthy deploy: Vercel `vercel alias set <deployed_url> <domain>`; Fly `fly certs add <domain>`. Netlify and Cloudflare print the manual dashboard step and set domain_status=manual. Then a TLS proof runs: `openssl s_client -servername <domain> -connect <domain>:443` plus `openssl x509 -noout -enddate -checkend 604800`. It records domain, tls_status (valid/expiring/invalid/unchecked) and tls_not_after, and re-probes https://<domain>/.well-known/loki-provenance.json for the same head_sha. DNS not yet pointed gives tls_status=invalid and exit 6, with the DNS record the provider needs printed. It never claims valid without the openssl check. Wall: RED: vercel, openssl and curl are stubbed. On main, --domain is ignored. GREEN: the alias set argv is recorded, tls_status=valid and tls_not_after is set. An openssl stub that fails -checkend gives expiring. An openssl handshake failure gives invalid and exit 6. A netlify project gives domain_status=manual, no alias call, and tls still checked. No openssl on PATH gives unchecked, never valid. MUTATION: default tls_status to valid and the missing-openssl case goes red. Gate: bash -n autonomy/loki && shellcheck -S warning autonomy/loki && bash tests/test-deploy-receipt-gate.sh Rules: FAILURE-CLASSES row first for any bug fix (D86); no CHANGELOG edits (Release Manager writes notes); DECISIONS numbers assigned by the Chief of Staff; reuse util/secure_scan.ts, the shared badge helper, keys_cmd export and the TS claude login probe instead of new copies; new CLI flags update autonomy/completions and the help-drift guard. |
|
|
1013
1013
|
| TEN-DEPLOY-07 | loki github publish: receipt-stamped GitHub export from the CLI | autonomy/loki (cmd_github publish arm and its help line only), tests/test-github-publish.sh (new: no existing test owns cmd_github repo creation; test-proven-pr-check.sh covers PR checks only) plus its run-all-tests.sh registration and shard row, CHANGELOG.md | MEDIUM | see Wall in note | released@2026-10-17T03:50Z | merged efa201ffd (TL APPROVE 81346df2a) Shipped in npm 11.17.15 (latest+next) or 11.17.16 (Release run success on e3d445460). |
|
|
1014
1014
|
| TEN-DEPLOY-08 | Web app deploy and GitHub push go through the gated CLI; no fabricated URLs | web-app/server.py (deploy_session ~5236-5336 and github_push_session ~5339-5395 only), web-app/tests/test_server.py (new cases), CHANGELOG.md | HIGH | see Wall in note | released v11.17.35 | SPLIT per CTO critic into (a) deploy_session, (b) github_push_session plus web-app url:null handling; build as two commits or two agents. wave 4; depends: TEN-DEPLOY-01 (deployed_url), TEN-DEPLOY-07 (github publish). Goal: Replace the bodies of deploy_session and github_push_session in web-app/server.py. Deploy runs `loki deploy --execute --dir <session_dir>` as an argv list with a timeout, then reads the newest <session>/.loki/deploys/*.json. It returns {url: deployed_url or null, health_status, live_binding, record_path, refused_reasons} and exits non-2xx on refusal. The platform param is kept as a hint only when it matches the CLI's detected provider; otherwise it returns 409 with the reason. GitHub push calls `loki github publish` (private default). Delete the hardcoded https://vercel.app, https://netlify.app and https://github.io fallbacks and the `git add -A` / `--public` path in the same change. Wall: RED: test_server.py with monkeypatched subprocess. On main, a deploy whose output has no URL returns url='https://vercel.app' (assert url is None fails), and no receipt gate is invoked. GREEN: the subprocess argv is [loki, deploy, --execute, --dir, <dir>]. A gate refusal returns 4xx with the reasons. A no-URL deploy returns url null. A github push argv contains `github publish` and never `add -A`. `grep -n 'https://vercel.app\/https://netlify.app\/"https://github.io"' web-app/server.py` exits 1. MUTATION: restore a fallback URL and the null-URL test goes red. Gate: python3 -m pytest web-app/tests/test_server.py -q && bash tests/moat/p7-no-fabricated-data.sh && bash tests/test-web-app-no-orphan-components.sh Rules: FAILURE-CLASSES row first for any bug fix (D86); no CHANGELOG edits (Release Manager writes notes); DECISIONS numbers assigned by the Chief of Staff; reuse util/secure_scan.ts, the shared badge helper, keys_cmd export and the TS claude login probe instead of new copies; new CLI flags update autonomy/completions and the help-drift guard. |
|
|
1015
|
-
| TEN-DEPLOY-09 | One-click from loki start and loki chat: pass the new deploy flags through | autonomy/loki (cmd_start _ps_ deploy parse block ~2625-2690 only), loki-ts/src/commands/start.ts (help string ~148-151 only), autonomy/lib/chat.sh (help line 53, system prompt line 6, _chat_deploy echo only), tests/test-help-start-flags.sh, docs/DEPLOYMENT.md, CHANGELOG.md | LOW | see Wall in note |
|
|
1015
|
+
| TEN-DEPLOY-09 | One-click from loki start and loki chat: pass the new deploy flags through | autonomy/loki (cmd_start _ps_ deploy parse block ~2625-2690 only), loki-ts/src/commands/start.ts (help string ~148-151 only), autonomy/lib/chat.sh (help line 53, system prompt line 6, _chat_deploy echo only), tests/test-help-start-flags.sh, docs/DEPLOYMENT.md, CHANGELOG.md, completions/loki.bash, completions/_loki | LOW | see Wall in note | released v11.17.39 | SPLIT per CTO critic into (a) start passthrough, (b) chat and docs text; build as two commits or two agents. wave 5; depends: TEN-DEPLOY-05, TEN-DEPLOY-06, TEN-DEPLOY-07. Goal: `loki start --deploy` passes --destination, --canary, --env-file, --domain and --github through to cmd_deploy. --github runs `loki github publish` after a successful deploy. Flag validation uses the existing _ps_ pattern (a value must not start with '-'). Bun-route start.ts help text lists them, and the PATH-slice divert keeps routing --deploy to bash. chat.sh `/deploy` help and _LOKI_CHAT_SYSTEM_PROMPT mention --domain, --env-file and `loki verify --url`, and the confirm prompt prints the full argv. docs/DEPLOYMENT.md gets one end-to-end 'brief to verified URL' section. Wall: RED: test-help-start-flags.sh asserts `loki start --help` lists --domain and --env-file, and a stubbed cmd_deploy recorder receives `--domain x.com --env-file .env` from `loki start --deploy --domain x.com --env-file .env`. It fails on main. GREEN: both pass. `--domain --env-file` (flag-shaped value) exits 2. A non-zero start exit still never deploys. MUTATION: drop the --domain forward and the recorder assertion goes red. Gate: bash -n autonomy/loki autonomy/lib/chat.sh && bash tests/test-help-start-flags.sh && (cd loki-ts && bun test tests/commands/start.test.ts && bunx tsc --noEmit) && for t in tests/test-help-*.sh; do bash "$t" || exit 1; done Rules: FAILURE-CLASSES row first for any bug fix (D86); no CHANGELOG edits (Release Manager writes notes); DECISIONS numbers assigned by the Chief of Staff; reuse util/secure_scan.ts, the shared badge helper, keys_cmd export and the TS claude login probe instead of new copies; new CLI flags update completions/loki.bash and completions/_loki and every tests/test-help-*.sh guard (row fixed by CoS 2026-10-17: there is no autonomy/completions dir and no tests/test-help-drift.sh). |
|
|
1016
1016
|
| TEN-ADOPTION-01 | Tour shows a receipt you can actually verify offline | autonomy/loki (cmd_demo offline branch only, ~15927-15965); skills/fixtures/demo-receipt/ (add receipt.json, the event log the log_seal check reads, pubkey.jwk; update README.md); tests/cli/test-tour-verify.sh (new: no test owns tour today, and test-proof-command.sh covers the legacy proof store) | MEDIUM | see Wall in note | released v11.17.33 | wave 3; depends: none (the fixture must come from a real sealed run; see not_codeable). Goal: `loki tour` (and `loki demo --offline`) runs the real Bun verifier against a bundled engine10 receipt.json, its event log and a public JWK, and prints VERIFIED. It then flips one byte in a copy under a run-owned temp dir and prints TAMPERED. It stays offline, needs no key and spends nothing. When Bun is absent it prints the exact verify command instead of claiming a result. The display-only disclaimer at autonomy/loki:15953-15957 goes away (the replaced text is deleted). Wall: Red first: the new test asserts the tour stdout contains VERIFIED from the verifier, and TAMPERED for the byte-flipped copy, with rc 0. On main it fails because the stdout says 'for display only'. Mutations: (a) point the tour at a receipt with one changed field: the test must see TAMPERED, not VERIFIED; (b) remove pubkey.jwk: the tour must say UNCHECKED or the verify-command fallback, never VERIFIED; (c) hide bun from PATH: output has the command and no verdict. Gate: bash tests/cli/test-tour-verify.sh && bash tests/test-help-discoverability.sh && bash scripts/local-ci.sh. Register the new test in tests/run-all-tests.sh and its shard. Rules: FAILURE-CLASSES row first for any bug fix (D86); no CHANGELOG edits (Release Manager writes notes); DECISIONS numbers assigned by the Chief of Staff; reuse util/secure_scan.ts, the shared badge helper, keys_cmd export and the TS claude login probe instead of new copies; new CLI flags update autonomy/completions and the help-drift guard. |
|
|
1017
1017
|
| TEN-ADOPTION-02 | Portable receipt bundle builder | loki-ts/src/util/receipt_bundle.ts (new: no existing module packages a receipt for third-party verify, and engine10/verify_cmd.ts is core at its line budget); loki-ts/tests/util/receipt_bundle.test.ts (new, beside the existing util tests) | HIGH | see Wall in note | released@2026-10-17T03:50Z | TL APPROVE bb4957e90, merged for v11.17.14 Shipped in npm 11.17.15 (latest+next) or 11.17.16 (Release run success on e3d445460). |
|
|
1018
1018
|
| TEN-ADOPTION-03 | proof bundle/badge/share work for loki start (engine10) runs | loki-ts/src/commands/proof.ts; loki-ts/tests/commands/proof_badge.test.ts; loki-ts/tests/commands/proof.test.ts | HIGH | see Wall in note | released@2026-10-17T04:08Z | v11.17.17; TL APPROVE 260474376, merged as clean cherry-pick 029bdd1a6 |
|
|
@@ -1152,3 +1152,36 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
|
|
|
1152
1152
|
| TEN-GATES-17 | fix: a pre-existing test file the run edited must not count as agent-independent proof for loki verify --require-exogenous (reviewer finding on the n-key fix: status M edits keep provenance exogenous) | loki-ts/src/util/check_result.ts, loki-ts/tests/engine10/seal.test.ts | HIGH | red: a sealed run whose only passing check is a test file the run modified (status M, assertions weakened or replaced) passes --require-exogenous with rc 0; green: that check is advisory and --require-exogenous exits 4 while an untouched exogenous test still counts; cd loki-ts && bunx tsc --noEmit && bun test tests/engine10/seal.test.ts tests/engine10/verify_cmd.test.ts tests/engine10/budget.test.ts | released v11.17.38 | Source: HIGH review of c958f563c. Grep checkProvenance and the A-119 edit rule first; decide whether to reuse the weakened-test detector instead of a blanket M rule, so legit test fixes stay exogenous. Record the call in DECISIONS.md if it changes D104. |
|
|
1153
1153
|
| TEN-STABILITY-13 | P0 fix-forward: engine10 core is 5006 lines against the 5000 cap (budget.test.ts red on main since at least v11.17.35); bring core to 4950 or below without behavior change | loki-ts/src/engine10 (non-modernize) files only, plus the util or e10ext module that already owns any moved helper | MEDIUM | red: cd loki-ts && bun test tests/engine10/budget.test.ts fails with core is 5006 lines; green: same command passes with core at or below 4950, bun test tests/engine10 and bunx tsc --noEmit pass | released v11.17.38 | Move pure helpers out of the largest core files into the module that owns their concern (extend, never duplicate); delete dead code first; never squeeze lines by joining statements. Source: combined-tree run after v11.17.36. |
|
|
1154
1154
|
| TEN-SECURITY-03 | fix: the bash secret scanners miss Anthropic keys (sk-ant-...) and the bash run_secure_scan applies the token rule only to browser-served files | autonomy/lib/secret-scan.sh, autonomy/verify.sh (secret pattern near 1177 and run_secure_scan only), the existing test that owns secret-scan.sh | HIGH | red: a runtime-built sk-ant key in a committed non-browser file passes both bash scanners; green: both report it by file and line without echoing the key, clean fixture passes; bash -n on both files plus the owning test | released v11.17.38 | Source: TEN-SECURITY-01 HIGH review (non-blocking item 5). Reuse one pattern list across both scripts if one already exists; fixtures build keys at runtime (gitleaks rule). |
|
|
1155
|
+
| TEN-STABILITY-14 | P0 fix-forward: four loki-ts/tests/util structural guards are red on main (model_output_regex_guard: wall.ts count mismatched after TEN-STABILITY-13 moved classifiers to util/check_result.ts; full_env_spawn_guard: doctor.ts mismatched and util/funnel.ts unlisted; registration_list_guard: stale commands/status.ts entry; start_flag_parity_guard: --cost undeclared) | the four allowlist or table files those guards load, plus the src file only when the honest fix is in code (for example funnel.ts spawning with the full env) | MEDIUM | red: cd loki-ts && bun test tests/util/model_output_regex_guard.test.ts tests/util/full_env_spawn_guard.test.ts tests/util/registration_list_guard.test.ts tests/util/start_flag_parity_guard.test.ts has 4 fails; green: 0 fails and bun test tests/util tests/engine10 has 0 fails | released v11.17.39 | Each allowlist entry needs a true reason; a full-env spawn in funnel.ts is fixed in code (allowlisted env) unless it is a documented passthrough. Three were red at ac43fb498 (v11.17.37). Source: combined-tree run before v11.17.38. |
|
|
1156
|
+
| TEN-COST-31 | feature: loki report kpis --since <Nd or YYYY-MM-DD> limits the iteration totals to a window and the human output names the window | loki-ts/src/commands/kpis.ts, loki-ts/src/metrics/kpis.ts, loki-ts/tests/commands/kpis.test.ts | MEDIUM | red: `loki report kpis --since 7d` exits 1 with unknown arg; green: iterations older than the window are excluded from cost and token totals, output says "since <date>", bad value exits 1; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/kpis.test.ts | released v11.17.40 | Gap: grep -n -e '--since' loki-ts/src/commands/kpis.ts returned 0 hits; the flag loop at kpis.ts:66-80 accepts only --json and help. Engineer confirms the iteration file mtime or timestamp field in metrics/kpis.ts before filtering. |
|
|
1157
|
+
| TEN-COST-32 | enhancement: a BUDGET_STOP run's next line names the exact recovery (loki start --max-cost <higher> or the resume command) instead of the generic loki status | loki-ts/src/util/run_summary.ts, loki-ts/tests/util/run_summary.test.ts | LOW | red: nextOf for a BUDGET_STOP run returns "loki status"; green: next line contains "--max-cost" and the run id; cd loki-ts && bunx tsc --noEmit && bun test tests/util/run_summary.test.ts | ready@2026-10-17T08:05Z | Gap: run_summary.ts:62-67 returns "loki status" for every stopped result; grep -n 'max-cost' loki-ts/src/util/run_summary.ts returned 0 hits. Keep the change in util/ (engine10/output.ts is at the line cap): key on the outcome the summary input already carries. |
|
|
1158
|
+
| TEN-COST-33 | feature: loki queue run --max-total-cost <usd> stops the queue before the next item once cumulative spend reaches the cap and says so in the digest | loki-ts/src/commands/queue.ts, loki-ts/tests/commands/queue.test.ts, loki-ts/src/cli/registry.ts | MEDIUM | red: queue run has no total cap, a 3-item queue runs all 3 with injected spend 2 each and cap 3; green: stops after item 2, remaining items stay queued, digest line names the cap; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/queue.test.ts tests/cli/registry_guard.test.ts | ready@2026-10-17T08:05Z | Gap: grep -nE 'max-cost or total or spend' loki-ts/src/commands/queue.ts shows only the governor forecast (queue.ts:213-235); no cumulative cap. Serialize on queue.ts after TEN-STABILITY-15 and TEN-UX-16. |
|
|
1159
|
+
| TEN-COST-34 | enhancement: the run summary Spend line adds "of which $X on retries" when retry sessions cost money | loki-ts/src/util/run_summary.ts, loki-ts/tests/util/run_summary.test.ts | LOW | red: a summary input with retry_usd 0.40 prints no retry figure; green: Spend line ends with "($0.40 on retries)", nothing printed when retry_usd is 0 or null; cd loki-ts && bunx tsc --noEmit && bun test tests/util/run_summary.test.ts | released v11.17.40 | Gap: costBreakdown computes retry_usd and retry_sessions (util/cost_breakdown.ts:17-43) and engine10/cost.ts:168 attaches it, but grep -rn retry_usd loki-ts/src outside cost_breakdown.ts returned 0 hits, so no reader. If the breakdown does not reach the summary input, thread it through spendText in run_summary.ts:166 only. |
|
|
1160
|
+
| TEN-SPEED-06 | enhancement: loki doctor runs its independent CLI version and network probes concurrently (Promise.all) so the report takes the slowest probe, not the sum | loki-ts/src/commands/doctor.ts, loki-ts/tests/commands/doctor.test.ts | MEDIUM | red: a test with three injected probes of 200ms each takes at least 600ms; green: under 350ms and the output order is unchanged; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/doctor.test.ts | ready@2026-10-17T08:05Z | Gap: grep -c 'spawnSync or execSync' loki-ts/src/commands/doctor.ts is 11 against 4 Promise.all uses. Output ordering must stay byte-identical (doctor_router and doctor_count tests). Do not touch claudeLoginProbeCached (TEN-SPEED-05). |
|
|
1161
|
+
| TEN-SPEED-07 | feature: fix-round verification runs the previously failing test files first (pytest --ff style, bun/vitest file order) and stops at first failure when the runner supports it | loki-ts/src/util/check_result.ts, loki-ts/src/e10ext/select.ts, loki-ts/tests/e10ext/select.test.ts | MEDIUM | red: fix-round test command is identical to the round-1 command; green: command lists last-round failing files first for bun test, pytest and jest, unchanged for unknown runners; cd loki-ts && bunx tsc --noEmit && bun test tests/e10ext/select.test.ts tests/util | released v11.17.40 | Gap: grep -rnE 'failed.?first or lastFailed or --ff or --bail' loki-ts/src returned 0 hits. Engineer finds the verify command builder; if the only wiring point is inside engine10 core, land the pure helper in e10ext/ and wire with a net-zero line change. |
|
|
1162
|
+
| TEN-SPEED-08 | fix: back-to-back loki start runs reuse a successful gh auth status probe for 10 minutes like the Claude login probe | loki-ts/src/commands/doctor.ts, loki-ts/src/engine10/preflight.ts, loki-ts/tests/engine10/preflight.test.ts | MEDIUM | red: two checkPreflight calls with --pr spawn gh auth status twice; green: second call within 10 minutes spawns once, a failed probe is never cached; cd loki-ts && bunx tsc --noEmit && bun test tests/engine10/preflight.test.ts tests/engine10 | released v11.17.40 | Gap: engine10/preflight.ts:36-38 spawns gh --version and gh auth status on every PR run; TEN-SPEED-05 cached only claudeLoginProbeCached (preflight.ts:30). Put ghAuthProbeCached beside claudeLoginProbeCached in doctor.ts; preflight.ts may change by net zero lines (4949 of 5000 core cap). |
|
|
1163
|
+
| TEN-QUALITY-16 | feature: before the commit stage the run formats only its own changed files with the repo's own formatter when the repo already configures one (ruff format, prettier, gofmt, cargo fmt) | loki-ts/src/e10ext/commit_filter.ts, loki-ts/src/runner/repo_profile.ts, loki-ts/tests/e10ext/commit_filter_guard.test.ts | MEDIUM | red: a run that leaves an unformatted py file commits it unformatted; green: changed files are formatted, unchanged files untouched, no formatter config means no-op; cd loki-ts && bunx tsc --noEmit && bun test tests/e10ext tests/runner/harness_intelligence.test.ts | ready@2026-10-17T08:05Z | Gap: grep -rnE 'ruff format or prettier --write or eslint --fix or gofmt -w or cargo fmt' loki-ts/src returned 0 hits. Detect config only (pyproject [tool.ruff], .prettierrc, rustfmt.toml); never install a formatter. Reviewer PRs stay small because no unrelated reformat. |
|
|
1164
|
+
| TEN-QUALITY-17 | enhancement: a failing test that passes on one immediate rerun is classified flaky (not fail) so fix rounds are not spent on it | loki-ts/src/util/check_result.ts, loki-ts/tests/util/check_result.test.ts | MEDIUM | red: a check that fails then passes on rerun is classified fail; green: classified flaky with the rerun evidence, a deterministic fail stays fail; cd loki-ts && bunx tsc --noEmit && bun test tests/util | released v11.17.40 | Gap: grep -nE 'rerun or re-run or retryOnce' loki-ts/src/util/check_result.ts returned 0 hits; the flaky label exists only for Playwright output (check_result.ts:162) and the summary renderer (run_summary.ts:192). A flaky result must never count as agent-independent proof. If no check_result.test.ts exists, add cases to the nearest test that imports it. |
|
|
1165
|
+
| TEN-QUALITY-18 | feature: a TypeScript repo with tsconfig.json and a typescript dependency but no typecheck script gets a tsc --noEmit typecheck command in the repo profile | loki-ts/src/runner/repo_profile.ts, loki-ts/tests/runner/harness_intelligence.test.ts | LOW | red: profile for such a repo has no typecheck command; green: entry "typecheck: <runner> tsc --noEmit" sourced from tsconfig.json, a script named typecheck still wins; cd loki-ts && bunx tsc --noEmit && bun test tests/runner/harness_intelligence.test.ts | released v11.17.40 | Gap: repo_profile.ts:296 picks typecheck only from package scripts named typecheck, type-check or tsc, while Python gets a config-based mypy fallback at repo_profile.ts:311; grep -n tsconfig loki-ts/src/runner/repo_profile.ts returned 0 hits. |
|
|
1166
|
+
| TEN-GATES-18 | feature: Seal risk summary flags a dependency manifest change (package.json deps, pyproject deps, go.mod) with no matching lockfile change | loki-ts/src/util/check_result.ts, loki-ts/tests/util/check_result.test.ts, loki-ts/tests/engine10 L0 guard allowlist (widened at review) | HIGH | red: diff touching package.json dependencies only produces no finding; green: advisory finding "manifest changed without lockfile", clean when both change or only scripts change; cd loki-ts && bunx tsc --noEmit && bun test tests/util tests/engine10 | released v11.17.40 | Gap: check_result.ts:272 classifies lockfile paths and :312 flags deleted tests, but nothing pairs a manifest with its lockfile (grep -nE 'manifest.*lock' returned only the classifier). Advisory only, never turns a VERIFIED into a fail; needs FAILURE-CLASSES row. |
|
|
1167
|
+
| TEN-GATES-19 | feature: the signed receipt records the toolchain that ran the checks (bun, node, python3, git versions) so a verifier can see what produced the proof | loki-ts/src/util/composite_seal.ts, loki-ts/src/util/receipt_signer.ts, loki-ts/tests/engine10/seal_group.test.ts | HIGH | red: receipt payload has no toolchain field; green: receipt carries toolchain {bun,node,python3,git}, absent tools recorded as null, old receipts still verify; cd loki-ts && bunx tsc --noEmit && bun test tests/engine10 tests/util/receipt_bundle.test.ts | released v11.17.40 | Gap: grep -rnE 'node_version or toolchain or bun_version or python_version' loki-ts/src/util loki-ts/src/engine10 returned 0 hits. Schema is additive and optional so verify of pre-existing receipts is unchanged; moat file set, two unanimous reviewers. |
|
|
1168
|
+
| TEN-GATES-20 | enhancement: secure-scan.py reports files_scanned and the Seal treats a scan of zero files as not_run instead of a clean pass | autonomy/lib/secure-scan.py, loki-ts/src/util/secure_scan.ts, loki-ts/tests/util/secure_scan.test.ts | HIGH | red: scanning an empty directory returns ok with total 0 and no file count; green: result carries summary.files_scanned, zero files yields not_run in the wrapper; cd loki-ts && bunx tsc --noEmit && bun test tests/util/secure_scan.test.ts && bash tests/test-secure-scan.sh | released v11.17.40 | Gap: scan() at autonomy/lib/secure-scan.py:600-630 returns only rules_version, findings, summary.total and by_severity; grep -n 'files_scanned or scanned' loki-ts/src/util/secure_scan.ts returned 0 hits. Serialize with TEN-SECURITY-06/07 (same python file). |
|
|
1169
|
+
| TEN-UX-16 | feature: loki queue remove <issue...> and loki queue clear take items out of the queue | loki-ts/src/commands/queue.ts, loki-ts/src/cli/registry.ts, loki-ts/tests/commands/queue.test.ts | LOW | red: `loki queue remove 12` prints the usage error; green: remove drops the normalized ref and reports "N removed, M left", clear empties the file, missing ref exits 0 with "not queued"; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/queue.test.ts tests/cli/registry_guard.test.ts | ready@2026-10-17T08:05Z | Gap: runQueue dispatches only add, list, run (queue.ts:384-390) and registry.ts:174 declares the same three subcommands; grep -nE 'queue.*(remove or rm or clear)' loki-ts/src returned 0 hits. Serialize after TEN-STABILITY-15. |
|
|
1170
|
+
| TEN-UX-17 | feature: loki undo --list prints the recent runs that can be undone (run id, verdict, files changed, age) | loki-ts/src/commands/undo.ts, loki-ts/tests/commands/undo.test.ts | LOW | red: `loki undo --list` prints the usage text and exits 2; green: lists newest first from the runs dir, exits 0, empty state says "no runs to undo"; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/undo.test.ts | released v11.17.40 | Gap: undo.ts:156 USAGE lists only --plan and --dry-run forms and :180 requires a run id; grep -rnE '"--list"' loki-ts/src/commands returned 0 hits. New test file only if grep -rl runUndo loki-ts/tests finds none. Read-only: no git writes. |
|
|
1171
|
+
| TEN-UX-18 | enhancement: loki doctor --quiet prints only failed and warned checks plus the summary footer | loki-ts/src/commands/doctor.ts, loki-ts/tests/commands/doctor.test.ts | LOW | red: doctor --quiet is rejected or prints every pass row; green: only non-pass rows and the footer, exit code unchanged, --json unaffected; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/doctor.test.ts | ready@2026-10-17T08:05Z | Gap: grep -nE 'quiet or -q\b' loki-ts/src/commands/doctor.ts returned 0 hits; the footer tally is at doctor.ts:1026. Update the usage text at doctor.ts:1052 and the start_flag_parity or help-drift guards if they list doctor flags. |
|
|
1172
|
+
| TEN-UX-19 | enhancement: loki start --help ends with three copyable examples (brief, PRD file, issue ref) | loki-ts/src/commands/start.ts, loki-ts/tests/commands/start.test.ts | LOW | red: start help text has no Examples section; green: help lists loki start "<brief>", loki start ./prd.md, loki start owner/repo#123 and the quick-start docs agree; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/start.test.ts tests/commands/cli_help_routes.test.ts | ready@2026-10-17T08:05Z | Gap: grep -nE 'Examples?:' loki-ts/src/commands/start.ts returned 0 hits. Check the bash help route (autonomy/help-core.sh) is not the one users reach; if it is, change the one that owns the text and keep the other byte-equal per the help-drift guard. |
|
|
1173
|
+
| TEN-ADOPTION-13 | feature: loki proof share --dry-run runs the secret scan and prints what would be published without publishing | loki-ts/src/commands/proof.ts, loki-ts/tests/commands/proof.test.ts | MEDIUM | red: `proof share <id> --dry-run` is treated as an unknown arg or publishes; green: prints the file list and scan verdict, publishes nothing, exit 0 clean and 1 when the scan blocks; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/proof.test.ts | released v11.17.40 | Gap: grep -n 'dry' loki-ts/src/commands/proof.ts returned 0 hits; share dispatch is at proof.ts:890 and its token scan came from TEN-ADOPTION-03-F1. |
|
|
1174
|
+
| TEN-ADOPTION-14 | enhancement: loki proof list --json prints the proof index as machine-readable JSON | loki-ts/src/commands/proof.ts, loki-ts/tests/commands/proof.test.ts | LOW | red: `proof list --json` prints the text table; green: JSON array of {id, verdict, created} sorted newest first, text output unchanged; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/proof.test.ts | ready@2026-10-17T08:05Z | Gap: only show handles --json (proof.ts:47 and :149 args.includes("--json") inside show); the list arm at proof.ts:873 ignores it. Serialize after TEN-ADOPTION-13 (same file). |
|
|
1175
|
+
| TEN-ADOPTION-15 | enhancement: loki self-update --check also reports the installed version, the latest published version and whether an update is available | autonomy/loki, tests/test-self-update.sh | MEDIUM | red: --check prints only the detected package manager; green: also prints "installed X, latest Y, update available yes/no", offline prints "latest unknown" and exits 0; bash tests/test-self-update.sh | released v11.17.40 | Gap: autonomy/loki:14665 and :14694 document --check as "Print detection result" only. Reuse the registry lookup already in loki-ts/src/util/update_check.ts:97 instead of a second fetch. If tests/test-self-update.sh does not exist, extend the test that owns cmd_self_update (grep -l self-update tests/*.sh). |
|
|
1176
|
+
| TEN-DEPLOY-13 | fix: loki status --probe reports a regression when the health URL redirects to a different host (login page, provider not-found page) even though the final status is 200 | loki-ts/src/commands/status.ts, loki-ts/tests/commands/status.test.ts | MEDIUM | red: probe of a URL that redirects to another host returning 200 prints "Deploy health OK"; green: prints a failure naming the final host and exits 1, same-host redirects (http to https, trailing slash) still pass; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/status.test.ts | released v11.17.40 | Gap: status.ts:865 fetches with redirect follow and accepts 200-399 without comparing res.url to the recorded health_url host, so a redirect to a shared provider page reads healthy. |
|
|
1177
|
+
| TEN-DEPLOY-14 | feature: loki status --probe --json prints the probe result as one JSON object (url, ok, status, attempts, reason) | loki-ts/src/commands/status.ts, loki-ts/tests/commands/status.test.ts | LOW | red: --probe --json prints text lines; green: single JSON object, exit codes unchanged (0 healthy or nothing to probe, 1 regression); cd loki-ts && bunx tsc --noEmit && bun test tests/commands/status.test.ts | ready@2026-10-17T08:05Z | Gap: status.ts:1023-1031 parses --probe and the usage text allows --json only without --probe; probe output at status.ts:850-880 is text only. Serialize after TEN-DEPLOY-13 (same region). |
|
|
1178
|
+
| TEN-DEPLOY-15 | enhancement: loki doctor disk check measures the current repo directory and the temp directory volumes, not only the home directory | loki-ts/src/commands/doctor.ts, loki-ts/tests/commands/doctor.test.ts | LOW | red: checkDisk reads statfs of homedir only; green: result reports the minimum free GB across home, cwd and tmpdir and names which volume is low; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/doctor.test.ts | ready@2026-10-17T08:05Z | Gap: checkDisk at doctor.ts:353-365 calls statfsSync(homedir()) only; builds and worktrees write under cwd and tmpdir, which can be a separate full volume. Keep the DiskCheck JSON shape backwards compatible (add a field, do not rename). Serialize after TEN-SPEED-06 and TEN-UX-18 (same file). |
|
|
1179
|
+
| TEN-STABILITY-15 | fix: queue add on a corrupt queue file quarantines it and warns instead of silently overwriting every queued item | loki-ts/src/commands/queue.ts, loki-ts/tests/commands/queue.test.ts | MEDIUM | red: a truncated queue.json followed by queue add leaves a file holding only the new item; green: the bad file is renamed to queue.json.corrupt-<ts>, a warning is printed once, the new item is added to a fresh file; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/queue.test.ts | ready@2026-10-17T08:05Z | Gap: readQueue returns [] on any JSON error (queue.ts:79-86) and queueAdd then writeQueue overwrites (queue.ts:108-124). Same class as TEN-STABILITY-12 (outbox quarantine at util/outbox.ts:28-33); reuse that pattern and add the row to FAILURE-CLASSES.md. |
|
|
1180
|
+
| TEN-STABILITY-16 | enhancement: loki start sweeps stale temp files left by a killed atomic write (name.tmp.<deadpid>.<n>) older than 1 hour in the .loki state dirs | loki-ts/src/util/atomic.ts, loki-ts/tests/util/atomic.test.ts | MEDIUM | red: a leftover state.json.tmp.99999.1 with a dead pid stays forever; green: swept when pid is dead and mtime older than 1h, a live pid or fresh file is untouched, only exact tmp names matched; cd loki-ts && bunx tsc --noEmit && bun test tests/util | released (already shipped before the row: loki-ts/src/runner/state.ts:444 sweepOrphanTmpFiles) | Gap: grep -rnE '\.tmp\.' loki-ts/src shows temp names created at util/atomic.ts:89 and run_control.ts:13 with no sweeper anywhere. Never glob outside .loki; reuse processStartTime or kill -0 from util/run_pid.ts for the liveness test; wire from a util/ entry point, not engine10 core. |
|
|
1181
|
+
| TEN-STABILITY-17 | feature: loki doctor lists orphan runs (a run dir whose owner process died before run.completed) with the resume or undo command for each | loki-ts/src/commands/doctor.ts, loki-ts/tests/commands/doctor.test.ts | MEDIUM | red: doctor ignores a run dir with a dead pid and no run.completed event; green: a warn row names the run id and "loki resume" or "loki undo", live and completed runs produce no row; cd loki-ts && bunx tsc --noEmit && bun test tests/commands/doctor.test.ts | ready@2026-10-17T08:05Z | Gap: runOwnerAlive (util/run_pid.ts:59) is consumed only by util/run_outputs.ts:156; grep -n runOwnerAlive loki-ts/src/commands/doctor.ts returned 0 hits. Warn level only, never fails doctor. Serialize after TEN-DEPLOY-15 (same file). |
|
|
1182
|
+
| TEN-STABILITY-18 | P0 fix-forward: nightly 39016259458 reds still red on main e32ee1b5d (pr_body_golden not-recorded producer util/check_result.ts; sizing wall brief 726 vs cap 616; router_optout_golden wall stage haiku for development; verify.test uv resolution CI-only via Bun.which PATH; test-sigpipe-guard 1737 vs ceiling 1728; help-changelog-drift loki verify --require-exogenous; test-ui-bare-loki exact-match on new control lines; test-local-ci-gitleaks scope) | the failing tests, loki-ts/src/util/check_result.ts, loki-ts/src/engine10/stages/wall.ts, loki-ts/src/engine10/stages/verify.ts, verify help and completions, scripts/local-ci.sh, docs/v10/FAILURE-CLASSES.md | MEDIUM | red: each named test fails on e32ee1b5d; green: cd loki-ts && bun test tests/engine10/pr_body_golden.test.ts tests/engine10/sizing.test.ts tests/engine10/router_optout_golden.test.ts tests/engine10/verify.test.ts tests/util; bash tests/test-sigpipe-guard.sh; bash tests/test-help-changelog-drift.sh; bash tests/test-ui-bare-loki.sh; bash tests/test-local-ci-gitleaks.sh | ready@2026-10-17T09:20Z | Diagnosis 2026-10-17 by nightly diag agent; one FAILURE-CLASSES row per class |
|
|
1183
|
+
| TEN-STABILITY-19 | P0 fix-forward: moat P8.ablation-dead-code-not-sealed positive control headline VERIFIED WITH GAPS (expected VERIFIED) and first-run-gate --stub FAILED with dirty tracked tree M sum.js at intake.ts:61 | tests/moat/p8-*.sh or the ablation producer, scripts/first-run-gate.sh, loki-ts/src/engine10/stages/intake.ts only if the honest fix is there | HIGH | red: bash tests/moat/run.sh prints moat suite: FAIL (1 rule failure(s)); bash scripts/first-run-gate.sh --stub fails 7 assertions; green: both exit 0 | ready@2026-10-17T09:20Z | Diagnosis 2026-10-17; never weaken a moat assertion to pass |
|
|
1184
|
+
| TEN-SECURITY-04 | fix: redactSecrets also strips GitLab (glpat-), npm (npm_), Hugging Face (hf_), Stripe (sk_live_, rk_live_) tokens and PEM private key blocks | loki-ts/src/util/redact.ts, loki-ts/tests/util/redact.test.ts | HIGH | red: each of the five token shapes and a -----BEGIN PRIVATE KEY----- block survive redactSecrets; green: all replaced with [REDACTED:...] markers, existing rules and ordering unchanged; cd loki-ts && bunx tsc --noEmit && bun test tests/util/redact.test.ts | released v11.17.40 | Gap: redact.ts RULES (lines 3-14) cover Anthropic, GitHub, Slack, AWS, JWT, Google, OpenAI, Bearer, URL userinfo; grep -rnE 'glpat or npm_ or hf_ or BEGIN [A-Z ]*PRIVATE or sk_live' loki-ts/src/util/redact.ts returned 0 hits (export_sarif.ts:18 and contrib/ai_bom.ts:83 know the shapes but are not the redactor). Specific rules before generic, keep ReDoS-safe quantifiers. |
|
|
1185
|
+
| TEN-SECURITY-05 | enhancement: redactSecrets strips secret query parameters (token, access_token, api_key, apikey, password, secret, sig) from URLs in logged and receipted output | loki-ts/src/util/redact.ts, loki-ts/tests/util/redact.test.ts | HIGH | red: https://h/x?access_token=abc123 survives; green: value replaced, parameter name and other params kept, non-secret params untouched; cd loki-ts && bunx tsc --noEmit && bun test tests/util/redact.test.ts | ready@2026-10-17T08:05Z | Gap: TEN-SECURITY-02 covers URL userinfo and Authorization only (redact.ts:12-13); grep -nE 'access_token or api_key or \?' loki-ts/src/util/redact.ts returned 0 query-string rules. Serialize after TEN-SECURITY-04 (same two files). |
|
|
1186
|
+
| TEN-SECURITY-06 | feature: secure-scan rule 6 flags disabled TLS verification in committed code (verify=False, rejectUnauthorized: false, InsecureSkipVerify: true, NODE_TLS_REJECT_UNAUTHORIZED=0) | autonomy/lib/secure-scan.py, tests/test-secure-scan.sh | HIGH | red: a fixture with requests.get(url, verify=False) scans clean; green: finding rule tls-verify-disabled with file and line, test and fixture paths and comments excluded like rule 4; bash tests/test-secure-scan.sh | ready@2026-10-17T08:05Z | Gap: secure-scan.py has rules 1-5 only (rule comments at lines 93, 105, 193, 238, 345); grep -nE 'verify=False or rejectUnauthorized or InsecureSkipVerify or NODE_TLS' autonomy/lib/secure-scan.py returned 0 hits. Bump RULES_VERSION (line 49). Serialize after TEN-GATES-20 and before TEN-SECURITY-07. |
|
|
1187
|
+
| TEN-SECURITY-07 | feature: secure-scan rule 7 flags shell injection shapes (subprocess with shell=True and an f-string or format argument, os.system with concatenation, child_process.exec with a template literal) | autonomy/lib/secure-scan.py, tests/test-secure-scan.sh | HIGH | red: subprocess.run(f"rm {x}", shell=True) scans clean; green: finding rule shell-injection with file and line, constant-string commands and test paths not flagged; bash tests/test-secure-scan.sh | ready@2026-10-17T08:05Z | Gap: grep -nE 'shell=True or os\.system or child_process' autonomy/lib/secure-scan.py returned 0 hits. Precision first (the file's stated design: literal forms only), measure false positives on this repo's own tests before shipping. Serialize after TEN-SECURITY-06. |
|
package/docs/v10/PROGRESS.md
CHANGED
|
@@ -2494,3 +2494,9 @@ v11.17.21 published (Release success on 462fbc40a; npm latest 11.17.21, next 11.
|
|
|
2494
2494
|
|
|
2495
2495
|
## 2026-10-17T08:00Z (CoS) v11.17.38
|
|
2496
2496
|
- Wave AE released: 17 APPROVE merged clean (merged-ae.txt), including P0 TEN-STABILITY-13 (core 4949 lines) and HIGH TEN-SECURITY-01/02/03, TEN-GATES-16/17. TEN-COST-30 and TEN-QUALITY-15 already shipped. TEN-DEPLOY-03 BLOCK eca0e17e0 and TEN-GATES-15 BLOCK 6f7591b8c re-dispatched. Combined tree: bun test tests/engine10 tests/util had 4 structural guard fails (3 pre-existing at ac43fb498: full_env_spawn, registration_list, start_flag_parity; 1 new: model_output_regex wall.ts count); P0 TEN-STABILITY-14 opened.
|
|
2497
|
+
|
|
2498
|
+
## 2026-10-17T09:06Z (CoS) v11.17.39
|
|
2499
|
+
- Wave AF: TEN-STABILITY-14 (APPROVE f0a131549) and TEN-DEPLOY-09 (APPROVE 87fa1bbfb) merged; cd loki-ts && bun test tests/util: 382 pass, 0 fail on the merged tree. A-112b already shipped (bfd6b98d8). Q17-05b BLOCK 812d13e0c and Q18-03e BLOCK 0c0c7ef0c after a fix round; TEN-DEPLOY-03 and TEN-GATES-15 fix rounds never ran (CoS script bug: the review pointer did not start with BLOCK), re-dispatched.
|
|
2500
|
+
|
|
2501
|
+
## 2026-10-17T09:21Z (CoS) v11.17.40
|
|
2502
|
+
- v11.17.40: wave AG, 14 slices merged (QUALITY-17 test file hand-merged with GATES-18, 16 pass 0 fail); tests/util 407 pass 0 fail, budget and L0 guards 36 pass 0 fail, tsc clean outside control-plane. STABILITY-16 was already shipped. COST-32, SPEED-06, QUALITY-16, UX-19 and STABILITY-15 builders started from a stale base without their rows and are re-dispatched. P0 rows TEN-STABILITY-18 and TEN-STABILITY-19 added for nightly 39016259458 reds.
|