loki-mode 11.17.40 → 11.17.41
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/secure-scan.py +48 -1
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/BOARD.md +9 -9
- package/docs/v10/FAILURE-CLASSES.md +7 -0
- package/docs/v10/PROGRESS.md +3 -0
- package/loki-ts/dist/loki.js +1169 -1161
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +85 -36
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-DgI8B2Aw.js → AdminPage-BSR_64u1.js} +1 -1
- package/web-app/dist/assets/{Avatar-B_8yy8iY.js → Avatar-CnSNZSx6.js} +1 -1
- package/web-app/dist/assets/{Badge-CldU-vT_.js → Badge-C7p_bqIO.js} +1 -1
- package/web-app/dist/assets/{Button-BpQvTqIa.js → Button-5CI0TYxR.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-t3XC9izG.js → CockpitPage-CeiR5rfl.js} +1 -1
- package/web-app/dist/assets/{ComparePage-CHtGYEWI.js → ComparePage-Cwh3wcqg.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-ChO4RY3O.js → ErrorBoundary-VZcsEDJl.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DOrDxj2L.js → EvidenceReceiptPanel-Cf5DXTqo.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-DEpNXTp_.js → GitHubIssuesPanel-C8pxgZhD.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-Bb3uLQbx.js → GitHubPRsPanel-Dfrm9QTz.js} +1 -1
- package/web-app/dist/assets/{HomePage-_-_Rk_C5.js → HomePage-Be-Hq5wb.js} +2 -2
- package/web-app/dist/assets/{LoginPage-BQ2k_mIH.js → LoginPage-DijL2orB.js} +1 -1
- package/web-app/dist/assets/{MagicPage-BEt2Y-hw.js → MagicPage-x-KpX3Zk.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-B5tQU5QT.js → MetricsPage-uoMG8P0x.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-CCL_Ubl7.js → NotFoundPage-DmW2a7pG.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-azR0ZXjf.js → ProjectPage-zpARxbll.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-rCLcH5bP.js → ProjectsPage-5dTAn3K7.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-CKYC6E1u.js → SettingsPage-ptKy_Tbu.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-D1XPEQII.js → ShowcasePage-BkM5b-6b.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-BQkC6pPn.js → SystemSettingsPage-BbaZ8aqC.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-Cqr9g4dU.js → TeamsPage-CBgDSDWj.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-Cw_2IQ4v.js → TemplatesPage-IdBOifb1.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-BZGkuuBg.js → TerminalOutput-iLcaELwj.js} +1 -1
- package/web-app/dist/assets/{activity-CA-Uv87R.js → activity-Di09VZ-C.js} +1 -1
- package/web-app/dist/assets/{bell-BKUeJsc9.js → bell-CuHhohwY.js} +1 -1
- package/web-app/dist/assets/{bot-DQV5dtCP.js → bot-pGvyFisf.js} +1 -1
- package/web-app/dist/assets/{check-BAOpMn0h.js → check-DYPycZns.js} +1 -1
- package/web-app/dist/assets/{chevron-left-N282XJLx.js → chevron-left-lKRP1pKT.js} +1 -1
- package/web-app/dist/assets/{circle-alert-DM1r83A3.js → circle-alert-D1rDQ9mD.js} +1 -1
- package/web-app/dist/assets/{clock-C-mYgAEh.js → clock-BGhPbAAa.js} +1 -1
- package/web-app/dist/assets/{cloud-YP7y_t17.js → cloud-WsT8-0Fu.js} +1 -1
- package/web-app/dist/assets/{code-xml-hdfcpa45.js → code-xml-DtutBX9b.js} +1 -1
- package/web-app/dist/assets/{database-Cnw7XVsm.js → database-LiEeNmyC.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-C5JkuNww.js → dollar-sign-adGlfVLa.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-CBmlYvL-.js → file-code-corner-DY5GkQGM.js} +1 -1
- package/web-app/dist/assets/{file-plus-DeUBJXx_.js → file-plus-RLd_hPU8.js} +1 -1
- package/web-app/dist/assets/{globe-oyhkB-N3.js → globe-CQvcGE8E.js} +1 -1
- package/web-app/dist/assets/{hammer-CtSvH7U4.js → hammer-BWOWu2Hf.js} +1 -1
- package/web-app/dist/assets/{index-BLc2yb4N.js → index-BBV2psih.js} +3 -3
- package/web-app/dist/assets/{layers-CDQYDQ6K.js → layers-C_cj_ShX.js} +1 -1
- package/web-app/dist/assets/{loader-circle-BtP3HE6o.js → loader-circle-BpyfPEFt.js} +1 -1
- package/web-app/dist/assets/{lock-td8sv77w.js → lock-Bivqy2kG.js} +1 -1
- package/web-app/dist/assets/{package-trunnqYD.js → package-DvDJIgWs.js} +1 -1
- package/web-app/dist/assets/{plus-fuJ7BLsH.js → plus-CVjTmPiU.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-CWSAQRMi.js → refresh-cw-DPEeU-0s.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-lDG-5zfN.js → rotate-ccw-DZX_aED8.js} +1 -1
- package/web-app/dist/assets/{scroll-text-gNonKSJc.js → scroll-text-BBMfK4J7.js} +1 -1
- package/web-app/dist/assets/{server-B_i2HlpV.js → server-Bq18pHWE.js} +1 -1
- package/web-app/dist/assets/{shield-alert-4VXBQxgY.js → shield-alert-Dc5xbnOx.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-Dep29ImG.js → thumbs-up-4nFvjqQ-.js} +1 -1
- package/web-app/dist/assets/{trash-2-kEwKjXBG.js → trash-2-SjUKL3ek.js} +1 -1
- package/web-app/dist/assets/{trending-down-BGlFS9Sf.js → trending-down-B7_1Kuct.js} +1 -1
- package/web-app/dist/assets/{trending-up-eORQxMOu.js → trending-up-DgRWrCNb.js} +1 -1
- package/web-app/dist/assets/{upload-SPvyhOMU.js → upload-Cs07lSfb.js} +1 -1
- package/web-app/dist/assets/{usePolling-CDfhS2YL.js → usePolling-BAUxt1Nu.js} +1 -1
- package/web-app/dist/assets/{user-BmyaIilH.js → user-DC2T8RYB.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.41
|
|
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.41 | [Autonomi](https://www.autonomi.dev/) flagship product | core skill**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
11.17.
|
|
1
|
+
11.17.41
|
|
@@ -46,7 +46,7 @@ import os
|
|
|
46
46
|
import re
|
|
47
47
|
import sys
|
|
48
48
|
|
|
49
|
-
RULES_VERSION = "1.
|
|
49
|
+
RULES_VERSION = "1.1"
|
|
50
50
|
|
|
51
51
|
# --- scan limits -----------------------------------------------------------
|
|
52
52
|
# Cap per-file size so a giant generated bundle cannot stall the gate. 2 MiB is
|
|
@@ -374,6 +374,40 @@ _ACAC_TRUE_CODE = re.compile(
|
|
|
374
374
|
)
|
|
375
375
|
|
|
376
376
|
|
|
377
|
+
# ---------------------------------------------------------------------------
|
|
378
|
+
# rule 6: TLS certificate verification disabled
|
|
379
|
+
# ---------------------------------------------------------------------------
|
|
380
|
+
# Python requests/httpx verify=False, Node rejectUnauthorized: false, Go
|
|
381
|
+
# InsecureSkipVerify: true, and NODE_TLS_REJECT_UNAUTHORIZED set to 0 (env file,
|
|
382
|
+
# shell export or process.env assignment). Each turns off certificate checks and
|
|
383
|
+
# leaves the connection open to man-in-the-middle interception.
|
|
384
|
+
_TLS_VERIFY_DISABLED = re.compile(
|
|
385
|
+
r"""(?:
|
|
386
|
+
\bverify\s*=\s*False\b
|
|
387
|
+
| \brejectUnauthorized['"]?\s*:\s*false\b
|
|
388
|
+
| \bInsecureSkipVerify['"]?\s*:\s*true\b
|
|
389
|
+
| \bNODE_TLS_REJECT_UNAUTHORIZED\b['"\]]?\s*[=:]\s*['"]?0\b
|
|
390
|
+
)""",
|
|
391
|
+
re.VERBOSE,
|
|
392
|
+
)
|
|
393
|
+
# Test and fixture code legitimately disables verification against local
|
|
394
|
+
# servers; rule 4's dev/test path markers apply, plus fixture directories.
|
|
395
|
+
_TLS_FIXTURE_PATH_RE = re.compile(
|
|
396
|
+
r"(?:^|/)(?:fixtures?|__tests__|__mocks__|spec|specs)(?:/|$)|"
|
|
397
|
+
r"[._-](?:spec|fixtures?)[._-]",
|
|
398
|
+
re.IGNORECASE,
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def _tls_rule_applies(rel_path):
|
|
403
|
+
"""False for dev/test/fixture paths and prose docs, where a mention of a
|
|
404
|
+
disabled-verification flag is not a shipped misconfiguration."""
|
|
405
|
+
norm = rel_path.replace("\\", "/")
|
|
406
|
+
if _DEV_MARKER_RE.search(norm) or _TLS_FIXTURE_PATH_RE.search(norm):
|
|
407
|
+
return False
|
|
408
|
+
return not norm.lower().endswith((".md", ".mdx", ".rst", ".txt", ".adoc"))
|
|
409
|
+
|
|
410
|
+
|
|
377
411
|
# ---------------------------------------------------------------------------
|
|
378
412
|
# file walking / reading
|
|
379
413
|
# ---------------------------------------------------------------------------
|
|
@@ -436,6 +470,7 @@ def _scan_file(rel_path, lines, secrets_everywhere=False):
|
|
|
436
470
|
findings = []
|
|
437
471
|
browser_served = _is_browser_served(rel_path)
|
|
438
472
|
prod_config = _is_production_config(rel_path)
|
|
473
|
+
tls_scan = _tls_rule_applies(rel_path)
|
|
439
474
|
|
|
440
475
|
# rule 3 / rule 5 need whole-file context for the AND conditions.
|
|
441
476
|
saw_rls_disable = None # lineno of a DISABLE ROW LEVEL SECURITY
|
|
@@ -556,6 +591,18 @@ def _scan_file(rel_path, lines, secrets_everywhere=False):
|
|
|
556
591
|
"debug-on only in dev/local config.",
|
|
557
592
|
))
|
|
558
593
|
|
|
594
|
+
# --- rule 6: TLS verification disabled ---------------------------
|
|
595
|
+
if (tls_scan and not _COMMENT_OR_DOC_LINE.match(text)
|
|
596
|
+
and _TLS_VERIFY_DISABLED.search(text)):
|
|
597
|
+
findings.append(_finding(
|
|
598
|
+
"tls-verify-disabled", rel_path, lineno, "HIGH",
|
|
599
|
+
"TLS certificate verification is disabled; the connection can "
|
|
600
|
+
"be intercepted by anyone on the network path.",
|
|
601
|
+
"Remove the override and trust the system CA store. For a "
|
|
602
|
+
"private CA, pass its bundle (verify=/path/ca.pem, ca option) "
|
|
603
|
+
"instead of turning verification off.",
|
|
604
|
+
))
|
|
605
|
+
|
|
559
606
|
# --- rule 5: CORS wildcard + credentials (whole-file AND) --------
|
|
560
607
|
# Skip prose/doc lines (_rule3_skip = comment-only line or .md/.rst/.txt
|
|
561
608
|
# doc file): a README or comment WARNING about ACAO * + credentials is not
|
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.41. 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/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.41
|
|
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
|
@@ -1154,13 +1154,13 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
|
|
|
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
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
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 |
|
|
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 | released v11.17.41 | 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
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
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 |
|
|
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 | released v11.17.41 | 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
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
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 |
|
|
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 | released v11.17.41 | 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
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
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
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. |
|
|
@@ -1169,19 +1169,19 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
|
|
|
1169
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
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
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 |
|
|
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 | released v11.17.41 | 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
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 |
|
|
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 | released v11.17.41 | 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
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
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 |
|
|
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 | released v11.17.41 | 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
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 |
|
|
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 | released v11.17.41 | 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
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
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
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
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
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 |
|
|
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 |
|
|
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 | released v11.17.41 | 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 | released v11.17.41 | 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
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. |
|
|
@@ -1033,3 +1033,10 @@ L0 review rule (ENGINE-LAWS.md L0): a fix that adds an `if` or a regex about the
|
|
|
1033
1033
|
- Siblings: tests/engine10/fixtures/e2e/bin/claude, fixtures/issue-ref/bin/claude, inline stubs in supervisor_signal.test.ts and budget_stop_e2e.test.ts (all fixed). tests/engine10/fixtures/providers/bin/* are non-claude providers and are not probed. Two verify_lint.test.ts lint:tsc cases fail only in a worktree with no loki-ts/node_modules (environmental, not this class).
|
|
1034
1034
|
- Mechanism: every stub claude answers `auth status` with {"loggedIn":true}, no side effects.
|
|
1035
1035
|
- Fixture: tests/engine10/e2e.test.ts "every engine10 stub claude answers claude auth status as logged in".
|
|
1036
|
+
|
|
1037
|
+
## FC-TEN-STABILITY-15 queue add on a corrupt queue file silently overwrites every queued item (QUEUE-CORRUPT-OVERWRITE)
|
|
1038
|
+
- User-visible vs raw: user-visible. A truncated .loki/issue-queue.json read as an empty queue, so `loki queue add` wrote a file holding only the new item and the overnight backlog vanished with no message.
|
|
1039
|
+
- Law broken: a reader that maps a parse failure to "empty" must not be followed by a writer of the same file; unreadable state is quarantined and reported, never replaced.
|
|
1040
|
+
- Siblings: util/outbox.ts runOnce (TEN-STABILITY-12, already quarantines); queue run reads the queue and returns "queue is empty" without writing, so it cannot overwrite; its end-of-run writeQueue only follows a successful read.
|
|
1041
|
+
- Mechanism: queueAdd calls quarantineCorruptQueue, which renames the bad file to issue-queue.json.corrupt-<ts> and warns once on stderr before the read.
|
|
1042
|
+
- Fixture: loki-ts/tests/commands/queue.test.ts "add on a corrupt queue file quarantines it".
|
package/docs/v10/PROGRESS.md
CHANGED
|
@@ -2500,3 +2500,6 @@ v11.17.21 published (Release success on 462fbc40a; npm latest 11.17.21, next 11.
|
|
|
2500
2500
|
|
|
2501
2501
|
## 2026-10-17T09:21Z (CoS) v11.17.40
|
|
2502
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.
|
|
2503
|
+
|
|
2504
|
+
## 2026-10-17T09:37Z (CoS) v11.17.41
|
|
2505
|
+
- v11.17.41: wave AJ, 9 of 9 slices approved and merged cleanly; tests/util plus budget and L0 guards 446 pass 0 fail, tsc clean outside control-plane. Follow-ups noted by reviewers: doctor JSON path still serial, help-changelog-drift red (TEN-STABILITY-18 owns it).
|