loki-mode 10.5.13 → 10.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/autonomy/loki +3 -3
  4. package/autonomy/receipt_jwt.py +4 -1
  5. package/dashboard/__init__.py +1 -1
  6. package/docs/INSTALLATION.md +1 -1
  7. package/docs/v10/BOARD.md +23 -20
  8. package/docs/v10/DECISIONS.md +13 -0
  9. package/docs/v10/FOUNDER-QUEUE.md +3 -1
  10. package/docs/v10/PROGRESS.md +8 -0
  11. package/loki-ts/dist/loki.js +411 -412
  12. package/mcp/__init__.py +1 -1
  13. package/package.json +1 -1
  14. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  15. package/web-app/dist/assets/{AdminPage-C8zraQ0u.js → AdminPage-CJo9x2Xg.js} +1 -1
  16. package/web-app/dist/assets/{Avatar-DnjIA4Ap.js → Avatar-DUoCsqCG.js} +1 -1
  17. package/web-app/dist/assets/{Badge-C487hf0b.js → Badge--P0LPdSw.js} +1 -1
  18. package/web-app/dist/assets/{Button-5AWAEksl.js → Button-BhukYi6h.js} +1 -1
  19. package/web-app/dist/assets/{CockpitPage-B6_1gTFO.js → CockpitPage-DwEqY6Lm.js} +1 -1
  20. package/web-app/dist/assets/{ComparePage-DDbC8-yi.js → ComparePage-BPe_2mZj.js} +1 -1
  21. package/web-app/dist/assets/{ErrorBoundary-CWHKwjEp.js → ErrorBoundary-B50WH4aR.js} +1 -1
  22. package/web-app/dist/assets/{EvidenceReceiptPanel-MfJq92Ty.js → EvidenceReceiptPanel-DCpCP8dt.js} +1 -1
  23. package/web-app/dist/assets/{GitHubIssuesPanel-BBdijzdg.js → GitHubIssuesPanel-DSYI3pJ_.js} +1 -1
  24. package/web-app/dist/assets/{GitHubPRsPanel-DjBHyymT.js → GitHubPRsPanel-6_2i_L2e.js} +1 -1
  25. package/web-app/dist/assets/{HomePage-B_6m7ITK.js → HomePage-DDLSp0M5.js} +2 -2
  26. package/web-app/dist/assets/{LoginPage-OGgMvfjT.js → LoginPage-C7lr6Agg.js} +1 -1
  27. package/web-app/dist/assets/{MagicPage-m4MSfxWf.js → MagicPage-Cz-HNoRN.js} +1 -1
  28. package/web-app/dist/assets/{MetricsPage-D8Ea1ALe.js → MetricsPage-B0_jI3YB.js} +1 -1
  29. package/web-app/dist/assets/{NotFoundPage-ttvXL-7K.js → NotFoundPage-Bu5rS7Bj.js} +1 -1
  30. package/web-app/dist/assets/{ProjectPage-CDX8tSPV.js → ProjectPage-Di908QYE.js} +3 -3
  31. package/web-app/dist/assets/{ProjectsPage-BQ73nYWf.js → ProjectsPage-B4Ll6cvX.js} +1 -1
  32. package/web-app/dist/assets/{SettingsPage-B6k71q2g.js → SettingsPage-CNkij0qv.js} +1 -1
  33. package/web-app/dist/assets/{ShowcasePage-CNbwtr7D.js → ShowcasePage-A9l4k0hu.js} +1 -1
  34. package/web-app/dist/assets/{SystemSettingsPage-CD2qys43.js → SystemSettingsPage-m0ce18E-.js} +1 -1
  35. package/web-app/dist/assets/{TeamsPage-DAmsRIVD.js → TeamsPage-Bk_dSFVZ.js} +1 -1
  36. package/web-app/dist/assets/{TemplatesPage-CcRyyUhL.js → TemplatesPage-ZR0ZHWVu.js} +1 -1
  37. package/web-app/dist/assets/{TerminalOutput-DRquxtQ1.js → TerminalOutput-CKEzz0P1.js} +1 -1
  38. package/web-app/dist/assets/{activity-DUDUi3Qd.js → activity-IlGG_ZsM.js} +1 -1
  39. package/web-app/dist/assets/{bell-tDpCOcHx.js → bell-jLSBSC-K.js} +1 -1
  40. package/web-app/dist/assets/{bot-87IR4aTF.js → bot-BLL9GpDV.js} +1 -1
  41. package/web-app/dist/assets/{check-C2Y2z-Ge.js → check-BBtHVmzR.js} +1 -1
  42. package/web-app/dist/assets/{chevron-left-CsPFT88x.js → chevron-left-XeXYVEhg.js} +1 -1
  43. package/web-app/dist/assets/{circle-alert-Cp2UJikd.js → circle-alert-BRjh-HyY.js} +1 -1
  44. package/web-app/dist/assets/{clock-DZ1cwNyf.js → clock-ejBi2Q3o.js} +1 -1
  45. package/web-app/dist/assets/{cloud-q5TrIOV-.js → cloud-DywHfOmD.js} +1 -1
  46. package/web-app/dist/assets/{code-xml-0TNGOS3c.js → code-xml-B6x31Vqz.js} +1 -1
  47. package/web-app/dist/assets/{database-g73vgDVx.js → database-WvDL64wH.js} +1 -1
  48. package/web-app/dist/assets/{dollar-sign-DAKkR_MO.js → dollar-sign-ByQ6zYfj.js} +1 -1
  49. package/web-app/dist/assets/{file-code-corner-DTAvdxjl.js → file-code-corner-DlL834lY.js} +1 -1
  50. package/web-app/dist/assets/{file-plus-D5SB-1Uk.js → file-plus-B_Od9s5t.js} +1 -1
  51. package/web-app/dist/assets/{globe-j5YaNmx9.js → globe-C5z2FDS3.js} +1 -1
  52. package/web-app/dist/assets/{hammer-C9yoXOC6.js → hammer-DlsFYtnb.js} +1 -1
  53. package/web-app/dist/assets/{index--EayJsJ-.js → index--r7MYJoc.js} +3 -3
  54. package/web-app/dist/assets/{layers-B4mxkWdH.js → layers-DvZddrTO.js} +1 -1
  55. package/web-app/dist/assets/{loader-circle-CP-qD1W2.js → loader-circle-BnINAMhT.js} +1 -1
  56. package/web-app/dist/assets/{lock-DwHNUSTU.js → lock-DB01xu9i.js} +1 -1
  57. package/web-app/dist/assets/{package-BxLWioQ8.js → package-BfQvuNvc.js} +1 -1
  58. package/web-app/dist/assets/{plus-B-43Byzl.js → plus-DXuOzHg3.js} +1 -1
  59. package/web-app/dist/assets/{refresh-cw-5s47zAFV.js → refresh-cw-C5HbASs-.js} +1 -1
  60. package/web-app/dist/assets/{rotate-ccw-BewZ8_Rx.js → rotate-ccw-CcPMU7ks.js} +1 -1
  61. package/web-app/dist/assets/{scroll-text-DPNpHL-Z.js → scroll-text-BrgDBJW1.js} +1 -1
  62. package/web-app/dist/assets/{server-hL8_-vRq.js → server-IkvvVPw2.js} +1 -1
  63. package/web-app/dist/assets/{shield-alert-DAGc2aLO.js → shield-alert-JLLLiL1y.js} +1 -1
  64. package/web-app/dist/assets/{thumbs-up-DRGzcWEH.js → thumbs-up-B5U1gYgk.js} +1 -1
  65. package/web-app/dist/assets/{trash-2-Bo_YPIqS.js → trash-2-CRkgxIjF.js} +1 -1
  66. package/web-app/dist/assets/{trending-down-BQ1cK9F3.js → trending-down-BqGdVKpe.js} +1 -1
  67. package/web-app/dist/assets/{trending-up-BpnkTO1T.js → trending-up-C0bkGp2g.js} +1 -1
  68. package/web-app/dist/assets/{upload-DDdQNxmW.js → upload-WYPmSJcy.js} +1 -1
  69. package/web-app/dist/assets/{usePolling-z_FXsGz7.js → usePolling-DMKrfblv.js} +1 -1
  70. package/web-app/dist/assets/{user-obPH42HX.js → user-CeohKmrz.js} +1 -1
  71. 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 v10.5.13
6
+ # Loki Mode v10.5.14
7
7
 
8
8
  **You are an autonomous agent. You make decisions. You do not ask questions. You do not stop.**
9
9
 
@@ -470,4 +470,4 @@ See `CHANGELOG.md` entries [7.5.7], [7.5.8], [7.5.13] for the per-fix list and r
470
470
 
471
471
  ---
472
472
 
473
- **v10.5.13 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
473
+ **v10.5.14 | [Autonomi](https://www.autonomi.dev/) flagship product | ~410 lines core**
package/VERSION CHANGED
@@ -1 +1 @@
1
- 10.5.13
1
+ 10.5.14
package/autonomy/loki CHANGED
@@ -14218,7 +14218,7 @@ STALE_DAYS = 90
14218
14218
  p = os.environ['LOKI_CATALOG_PATH']
14219
14219
  try:
14220
14220
  updated = json.load(open(p))['updated']
14221
- age = (datetime.date.today() - datetime.date.fromisoformat(updated)).days
14221
+ age = (datetime.datetime.now(datetime.timezone.utc).date() - datetime.date.fromisoformat(updated)).days
14222
14222
  except Exception:
14223
14223
  print('warn|Catalog unreadable or missing an ISO \"updated\" date -- cannot determine age')
14224
14224
  else:
@@ -14447,7 +14447,7 @@ else:
14447
14447
  import os, sys
14448
14448
  sys.path[:] = [p for p in sys.path if p not in ("", ".")]
14449
14449
  sys.path.insert(0, sys.argv[1])
14450
- from receipt_jwt import load_signing_key, _CRYPTO_AVAILABLE
14450
+ from receipt_jwt import load_signing_key, _CRYPTO_AVAILABLE, RECEIPT_SIGNER_BASENAME
14451
14451
  if not _CRYPTO_AVAILABLE:
14452
14452
  print("nocrypto")
14453
14453
  else:
@@ -14734,7 +14734,7 @@ _cat_path = os.environ['LOKI_CATALOG_PATH']
14734
14734
  try:
14735
14735
  import datetime as _dt
14736
14736
  _cat_updated = json.load(open(_cat_path))['updated']
14737
- _cat_age = (_dt.date.today() - _dt.date.fromisoformat(_cat_updated)).days
14737
+ _cat_age = (_dt.datetime.now(_dt.timezone.utc).date() - _dt.date.fromisoformat(_cat_updated)).days
14738
14738
  if _cat_age > CATALOG_STALE_DAYS:
14739
14739
  # Deliberately NOT counted. The block comment above states catalog age is
14740
14740
  # excluded from pass/fail/warn and from 'ok' so a stale catalog can never
@@ -46,6 +46,9 @@ import logging
46
46
  import os
47
47
  from pathlib import Path
48
48
 
49
+ # Default signer file name; one definition, free of key-ish words (E-156).
50
+ RECEIPT_SIGNER_BASENAME = "receipt-ed25519.pem"
51
+
49
52
  try:
50
53
  from cryptography.hazmat.primitives import serialization
51
54
  from cryptography.hazmat.primitives.asymmetric.ed25519 import (
@@ -132,7 +135,7 @@ def load_signing_key(auto_generate=True):
132
135
  key_file = os.environ.get("LOKI_RECEIPT_SIGNING_KEY_FILE", "").strip()
133
136
  is_default = not key_file
134
137
  if is_default:
135
- key_file = str(Path.home() / ".loki" / "keys" / "receipt-ed25519.pem")
138
+ key_file = str(Path.home() / ".loki" / "keys" / RECEIPT_SIGNER_BASENAME)
136
139
  try:
137
140
  try:
138
141
  data = Path(key_file).read_bytes()
@@ -7,7 +7,7 @@ Modules:
7
7
  control: Session control API (start/stop/pause/resume)
8
8
  """
9
9
 
10
- __version__ = "10.5.13"
10
+ __version__ = "10.5.14"
11
11
 
12
12
  # Expose the control app for easy import
13
13
  try:
@@ -2,7 +2,7 @@
2
2
 
3
3
  The flagship product of [Autonomi](https://www.autonomi.dev/). Loki Mode is a spec-driven autonomous builder with a built-in trust layer that takes any spec to a deployed product and verifies completion with evidence (quality gates plus a completion council), not just a "done" claim. Complete installation instructions for all platforms and use cases.
4
4
 
5
- **Version:** v10.5.13
5
+ **Version:** v10.5.14
6
6
 
7
7
  ---
8
8
 
package/docs/v10/BOARD.md CHANGED
@@ -603,41 +603,44 @@ Source: ~/git/autonomi-dev/research/2026-09-30-adoption/SWARM-PROMPT-ADOPTION.md
603
603
  | A-01 | Release to `next`: both `npm publish` lines in release.yml get `--tag next`; a `promote` workflow (workflow_dispatch, exact version) runs the first-run gate against `loki-mode@<version>` installed from npm and only then runs `npm dist-tag add loki-mode@<version> latest`, moves Docker `:latest` and updates Homebrew; fix every check that assumes latest equals the newest release (E-135 post-release smoke, v10-pulse npm-latest comparison); fold in E-152 | .github/workflows/release.yml, .github/workflows/promote.yml (new), scripts/release.sh, scripts/v10-pulse.sh, tests for each | HIGH | fixture: release path publishes with --tag next; promote refuses without a gate pass on that exact version | released@2026-09-30T21:23Z | Blocks every release until merged (releases held since 20:02Z). Released in v10.5.11 (merge cec20054 is an ancestor of v10.5.11). |
604
604
  | A-02 | First-run gate: scripts/first-run-gate.sh (throwaway HOME, bugrepo from firstrun-repro/bugrepo-original, the README's default entry point, stub-provider mode for CI, real-provider mode for promotion) asserting: exit 0 only if npm test fully green; no new files outside the fix except .loki/; printed receipt digest equals what loki verify checks; loki verify OK exit 0; receipt signed; output 15 lines or fewer without --verbose; wall time recorded. Step 1: reproduce each defect from the directive on current main and classify code bug vs machine artifact | scripts/first-run-gate.sh, tests/test-first-run-gate.sh, docs/v10/FIRST-RUN-GATE.md (defect table) | HIGH | gate runs in stub mode in CI as a NON-required job; the defect table cites command and rc per defect | released@2026-09-30T21:23Z | Gates `latest` (via A-01 promote). Released in v10.5.11 (merge 8641dac4 is an ancestor of v10.5.11). |
605
605
  | A-03 | Tier 0 architecture split (opus Architect): slice items 1 Seal correctness, 2 clean first run, 3 signed by default, 5 honest outcomes into non-overlapping file sets with Wall checks, one writer per file, shrink-or-flat per D33; Seal correctness builds on slice-E-125 | docs/v10/ADOPTION-PLAN.md | HIGH | every slice card has a file set, a Wall check tied to a gate assertion, and a line budget | released@2026-09-30T21:23Z | Item 4 (one engine) waits until 1 to 3 pass the gate. Released in v10.5.11 (merge 26dd66b8 is an ancestor of v10.5.11). |
606
- | A-04 | loki-seal: a Claude Code skill plus hook that runs the repo's real test suite on the current diff, refuses done on red or on deleted, skipped, xfailed or weakened tests or CI config (diff scan plus a tree hash of existing tests), prints a 5-line receipt; zero model cost, no dangerous flags; self-contained, no LICENSE file; SUBMIT.md drafts only; a 20-second vhs or asciinema script | packages/loki-seal/** | HIGH | fixture repos: deleting a failing test is blocked; a real fix passes; each weakening class caught | merged@2026-09-30T20:56Z | Tier 1 wedge; answers issue #42. |
606
+ | A-04 | loki-seal: a Claude Code skill plus hook that runs the repo's real test suite on the current diff, refuses done on red or on deleted, skipped, xfailed or weakened tests or CI config (diff scan plus a tree hash of existing tests), prints a 5-line receipt; zero model cost, no dangerous flags; self-contained, no LICENSE file; SUBMIT.md drafts only; a 20-second vhs or asciinema script | packages/loki-seal/** | HIGH | fixture repos: deleting a failing test is blocked; a real fix passes; each weakening class caught | released@2026-10-01T00:52Z | Tier 1 wedge; answers issue #42. Released in v10.5.13 (merge a61e1721 is an ancestor of v10.5.13). |
607
607
  | A-04b | loki-seal follow-ups from opus r5: reset the hook-error counter after a successful stop; fall back to stop_hook_active repetition when the tmpdir is read-only or full; tests must write loki-seal-err-* counter files under LOKI_RUN_TMP, not the real os.tmpdir() | packages/loki-seal/** | MEDIUM | package tests plus demo dry-run; no files left in the real tmpdir after the suite | ready@2026-09-30T20:56Z | Source: A-04 opus r5 APPROVE notes. |
608
- | A-09 | README under 150 lines (directive item 9): line 1 "Your agent says done. Loki proves it." (veto pending, founder queue 10); line 2 "An autonomous software factory that knows what it is supposed to deliver, and proves it did." (D45); then the loki-seal 20-second GIF (placeholder until recorded), then two install lines (loki-seal first, `npx loki-mode tour` second); flags, internal paths, version stamps and app-builder comparisons move to docs; remove the commercial-editions sentence from the top and the npm total-downloads and Docker pulls badges; define "Seal" in one sentence or stop using the word; package.json description and SKILL.md description use line 2 verbatim (SKILL.md header and footer version rules still apply) | README.md, docs/ (moved sections), package.json (description only), SKILL.md (description only) | MEDIUM | README <= 150 lines; no retracted claims (directive Never list); structural checks (SKILL.md sync, readme version) pass | merged@2026-09-30T21:08Z | Source: directive item 9 plus D45. |
608
+ | A-09 | README under 150 lines (directive item 9): line 1 "Your agent says done. Loki proves it." (veto pending, founder queue 10); line 2 "An autonomous software factory that knows what it is supposed to deliver, and proves it did." (D45); then the loki-seal 20-second GIF (placeholder until recorded), then two install lines (loki-seal first, `npx loki-mode tour` second); flags, internal paths, version stamps and app-builder comparisons move to docs; remove the commercial-editions sentence from the top and the npm total-downloads and Docker pulls badges; define "Seal" in one sentence or stop using the word; package.json description and SKILL.md description use line 2 verbatim (SKILL.md header and footer version rules still apply) | README.md, docs/ (moved sections), package.json (description only), SKILL.md (description only) | MEDIUM | README <= 150 lines; no retracted claims (directive Never list); structural checks (SKILL.md sync, readme version) pass | released@2026-10-01T00:52Z | Source: directive item 9 plus D45. Released in v10.5.13 (merge 38ffd386 is an ancestor of v10.5.13). |
609
609
  | A-04c | loki-seal reads the delivery contract (D45): from the task or issue the user gave the session (prompt text, a linked issue, a spec file), derive the acceptance checks and refuse "done" until the checks tied to that request pass, not only "the suite is green"; when no contract can be derived, say so on the receipt (NOT VERIFIED: no contract) instead of passing on green alone. Design first (how the hook sees the user request: transcript_path from the hook input, first user message), then build; zero model cost stays a constraint | packages/loki-seal/** | HIGH | fixtures: a session asking for behavior X with a green suite that never tests X is NOT VERIFIED; with a test for X passing it PASSes | ready@2026-09-30T20:59Z | Source: D45. After A-04b. |
610
610
  | A-103b | Seal lists each discarded Wall test in not_proven as "wall test discarded: <path> (<class>)" (A-103 kept seal.ts out of its file set; today only a count appears via base_run not_run) | loki-ts/src/engine10/stages/seal.ts, its test | HIGH | fixture: a discarded Wall file appears by path in not_proven | ready@2026-09-30T20:56Z | Source: A-103 builder. seal.ts writer order: after A-121 and A-104b. |
611
611
  | A-101 | Receipt canonicalization and verify help (item 1) | see docs/v10/ADOPTION-PLAN.md A-101 | HIGH | first-run-gate assertion per plan card | released@2026-09-30T21:23Z | Wave per plan section 5; one writer per file. Released in v10.5.11 (merge 5ea92836 is an ancestor of v10.5.11). |
612
- | A-102 | Test-runner detection: node:test plus fixtures for all six runners (item 1) | see plan A-102 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T20:56Z | Wave per plan section 5; one writer per file. |
612
+ | A-102 | Test-runner detection: node:test plus fixtures for all six runners (item 1) | see plan A-102 | 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 0990afb8 is an ancestor of v10.5.13). |
613
613
  | A-104 | Commit only the fix (items 1 and 2, v10) | see plan A-104 | HIGH | first-run-gate assertion per plan card | released@2026-09-30T21:23Z | Wave per plan section 5; one writer per file. Released in v10.5.11 (merge d86a5817 is an ancestor of v10.5.11). |
614
614
  | A-104b | A-104 opus follow-ups: run the unstage reset as `git --literal-pathspecs reset` and check its rc (a path starting with `:(top)` was read as a pathspec and committed); match "manifest changed" per directory in monorepos (a stray lockfile in packages/b rode along with a packages/a manifest change); judge new lockfiles and Wall files against the run base, not HEAD, so files the agent commits during implement are also excluded | loki-ts/src/engine10/stages/seal.ts, loki-ts/tests/engine10/seal.test.ts | HIGH | fixtures for each case red first; seal-then-verify still matches | ready@2026-09-30T20:39Z | Source: A-104 opus review (APPROVE with notes). seal.ts writer order: after A-121. |
615
- | A-120 | One signing key, auto-generated (item 3) | see plan A-120 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T20:56Z | Wave per plan section 5; one writer per file. |
616
- | A-132 | Legacy: no HANDOFF.md, USAGE.md or lockfile in a fix commit (item 2) | see plan A-132 | MEDIUM | first-run-gate assertion per plan card | merged@2026-09-30T21:08Z | Wave per plan section 5; one writer per file. |
615
+ | A-120 | One signing key, auto-generated (item 3) | see plan A-120 | 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 1e1417b9 is an ancestor of v10.5.13). |
616
+ | A-132 | Legacy: no HANDOFF.md, USAGE.md or lockfile in a fix commit (item 2) | see plan A-132 | MEDIUM | 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 297c2d1f is an ancestor of v10.5.13). |
617
617
  | A-133 | Legacy: skip Council evidence probes on a trivial diff (item 2) | see plan A-133 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:08Z | Wave per plan section 5; one writer per file. |
618
- | A-132b | A-132 card promised build_prompt fixture-61 (the gated quick-PRD case) but the merged slice never committed it; it sits untracked in the A-132-133 worktree. Commit it with its index.json entry, prove it passes and is red with the gate removed | loki-ts/tests/fixtures/build_prompt/fixture-61/, index.json | LOW | build_prompt.test.ts covers fixture-61 | merged@2026-09-30T22:37Z | worktree .claude/worktrees/agent-a101928295ea43bb7 holds the files |
619
- | A-103 | Wall never leaves a test that fails for unrelated reasons (item 1) | see plan A-103 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:26Z | Wave per plan section 5; one writer per file. |
620
- | A-111 | Empty, skipped or hung checks are NOT VERIFIED (item 5) | see plan A-111 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:26Z | Wave per plan section 5; one writer per file. |
621
- | A-103c | A-103 opus note: apply the missing-module not_run rule only when node's failing-tests block shows a file-level `test failed`, so a child node process crashing on a missing package (inherited stdio) cannot discard a real TypeError red; add the child-crash fixture | loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/wall_runner.test.ts | HIGH | child-crash fixture red | merged@2026-09-30T22:43Z | after A-103 |
622
- | A-103d | A-103c opus note: nested Jest globals on node 20/22 TAP (`t.test("inner", () => expect(...))`) classify red (a false FAILED that keeps a bad Wall test) because nested yaml is indented 6 spaces and `^ {2}name:` misses it; node 26 gives not_run. Match `^ +name:` and `^ +stack:` at any indent. Pre-existing since 0cc1dea4 | loki-ts/src/engine10/stages/wall.ts, wall_runner.test.ts | HIGH | nested Jest-globals fixture not_run on node 20/22/26 | merged@2026-09-30T23:42Z | CI runs node 22 |
618
+ | A-132b | A-132 card promised build_prompt fixture-61 (the gated quick-PRD case) but the merged slice never committed it; it sits untracked in the A-132-133 worktree. Commit it with its index.json entry, prove it passes and is red with the gate removed | loki-ts/tests/fixtures/build_prompt/fixture-61/, index.json | LOW | build_prompt.test.ts covers fixture-61 | released@2026-10-01T00:52Z | worktree .claude/worktrees/agent-a101928295ea43bb7 holds the files Released in v10.5.13 (merge 297c2d1f is an ancestor of v10.5.13). |
619
+ | A-103 | Wall never leaves a test that fails for unrelated reasons (item 1) | see plan A-103 | 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 634124cb is an ancestor of v10.5.13). |
620
+ | A-111 | Empty, skipped or hung checks are NOT VERIFIED (item 5) | see plan A-111 | 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 fa082acc is an ancestor of v10.5.13). |
621
+ | A-103c | A-103 opus note: apply the missing-module not_run rule only when node's failing-tests block shows a file-level `test failed`, so a child node process crashing on a missing package (inherited stdio) cannot discard a real TypeError red; add the child-crash fixture | loki-ts/src/engine10/stages/wall.ts, loki-ts/tests/engine10/wall_runner.test.ts | HIGH | child-crash fixture red | released@2026-10-01T00:52Z | after A-103 Released in v10.5.13 (merge 774885e3 is an ancestor of v10.5.13). |
622
+ | A-103d | A-103c opus note: nested Jest globals on node 20/22 TAP (`t.test("inner", () => expect(...))`) classify red (a false FAILED that keeps a bad Wall test) because nested yaml is indented 6 spaces and `^ {2}name:` misses it; node 26 gives not_run. Match `^ +name:` and `^ +stack:` at any indent. Pre-existing since 0cc1dea4 | loki-ts/src/engine10/stages/wall.ts, wall_runner.test.ts | HIGH | nested Jest-globals fixture not_run on node 20/22/26 | released@2026-10-01T00:52Z | CI runs node 22 Released in v10.5.13 (merge 634124cb is an ancestor of v10.5.13). |
623
623
  | A-111b | A-111 opus note: discount a zero-test trailer only when the test name equals the path under test, so one real passing test named like a bare filename (`a.test.js`) is not not_run | loki-ts/src/engine10/stages/verify.ts, its test | MEDIUM | bare-filename-named test passes | merged@2026-09-30T22:37Z | after A-113 (verify.ts) |
624
624
  | E-154 | Incident 17:14Z: tests wrote real signing keys to the founder's `~/.loki/keys` once signing became default (A-121, A-122 builders). Central guard: tests/run-all-tests.sh, the bun test preload and conftest set LOKI_RECEIPT_SIGNING_KEY_FILE/HOME to a run-owned path, plus a check that fails when a test run creates `~/.loki/keys` | tests/run-all-tests.sh, loki-ts bunfig preload, tests/conftest.py, new guard test | MEDIUM | guard test red when a test writes the real key dir | merged@2026-09-30T22:27Z | after A-121, A-122 |
625
625
  | E-155 | Incident 21:58Z: a shell test run from the MAIN checkout (633 diff-selected tests, xargs -P 4, 17:58:16 local) switched HEAD to the stale branch loki/session-1789047299-95963; main ref intact, restored by `git checkout main` 33s later. Candidates running that second: test-metrics-command, test-metrics-json-unmeasured, test-migration-post-edit-revert, test-mirofish-integration, test-magic-injection. A stray root bun.lock also appeared at 17:54. Guard: tests/run-all-tests.sh records `git symbolic-ref HEAD` + status before and fails loudly when any test changes the parent checkout branch; bisect the culprit with that guard | tests/run-all-tests.sh, culprit test | MEDIUM | guard test red when a test runs git checkout in the parent repo | merged@2026-09-30T22:27Z | process fix already applied: shell batches run only in a disposable worktree |
626
- | E-156 | Incident 22:00Z: pre-push gitleaks (generic-api-key) blocked train/11 on the key FILE NAME string `.loki/keys/receipt-ed25519.pem` (seal.ts:68, seal.test.ts:174, dist/loki.js:1244); no key material. Fixed by exact .gitleaksignore fingerprints, but any future commit that rewrites the minified dist line re-triggers and can block a release push. Durable fix needs a CTO call: a narrow `.gitleaks.toml` allowlist (regexTarget=secret, `^receipt-ed25519\.pem$`, extend defaults) pushed with LOKI_ALLOW_GITLEAKS_CONFIG_CHANGE=1 plus a test that a real key in the same position is still caught | .gitleaks.toml, tests/test-pre-push-gitleaks.sh | HIGH | real-key fixture still flagged; filename allowed | ready@2026-09-30T22:02Z | CTO approval (security scan config) |
626
+ | E-154c | CORRECTED PREMISE (builder, 59c1cb54): CI shards set LOKI_TEST_SHARD, not LOKI_TEST_LIST (a list-only mode that runs nothing), so sharded CI DOES run the guards; the train/14 failure was the guard test inheriting LOKI_TEST_SHARD. Slice adds shard-mode guard checks only. Original claim: the E-154/E-155 guards (run-owned signing key default, real ~/.loki/keys snapshot, parent HEAD check) are skipped whenever LOKI_TEST_LIST is set, and CI shards set it, so sharded CI runs carry NO guard: a test writing the real key dir or switching the parent branch would pass on CI. Make the guards active in shard mode too (the LOKI_TEST_LIST skip was presumably for selective local runs) and keep the guard test hermetic | tests/run-all-tests.sh, tests/test-e154-e155-guards.sh | MEDIUM | guard checks run and pass under LOKI_TEST_LIST | merged@2026-10-01T00:47Z | found while fixing train/14 shard 6 |
627
+ | E-156 | Incident 22:00Z: pre-push gitleaks (generic-api-key) blocked train/11 on the key FILE NAME string `.loki/keys/receipt-ed25519.pem` (seal.ts:68, seal.test.ts:174, dist/loki.js:1244); no key material. Fixed by exact .gitleaksignore fingerprints, but any future commit that rewrites the minified dist line re-triggers and can block a release push. Durable fix needs a CTO call: a narrow `.gitleaks.toml` allowlist (regexTarget=secret, `^receipt-ed25519\.pem$`, extend defaults) pushed with LOKI_ALLOW_GITLEAKS_CONFIG_CHANGE=1 plus a test that a real key in the same position is still caught | .gitleaks.toml, tests/test-pre-push-gitleaks.sh | HIGH | real-key fixture still flagged; filename allowed | merged@2026-10-01T00:30Z | CTO approval (security scan config) |
628
+ | E-157 | D46: Security Audit verdict reuse. (a) security-audit.yml also runs on push to train/** so every train tip gets the full --all gitleaks scan before main is fast-forwarded; (b) required-ci reuses the parent Security Audit verdict for an eligible VERSION-only bump under the existing eligibility rule (diff is VERSION plus generated version stamps only, parent run success at that exact SHA). Moat test: a non-VERSION-only bump still re-runs Security Audit. Supersedes FOUNDER-QUEUE 14 | .github/workflows/security-audit.yml, release.yml (required-ci), tests | HIGH | non-VERSION-only bump re-runs the scan | ready@2026-10-01T00:30Z | after slice-D46-ci |
627
629
  | A-113 | Stop reasons: STALLED and the fatal classifier (item 5) | see plan A-113 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:37Z | Wave per plan section 5; one writer per file. |
628
630
  | A-114 | FALSE VERIFIED ON MAIN (found by the A-112 opus reviewer, repro m6 on 4ad430ad): bugrepo plus an unrelated red test; the agent changes only other.js; verify selects only node:other.test.js (testmap from the diff), so the task's own target test sums.test.js is never run and the run seals VERIFIED rc=0 while it is red. Fix: the relevant tests of the task-named files (hasRelevantTests / impacted(likely), the lean-path Wall stand-in) are ALWAYS selected by verify, whatever the diff touches | loki-ts/src/engine10/stages/verify.ts or testmap selection, tests | HIGH | m6 fixture seals FAILED | merged@2026-09-30T22:37Z | coordinate with A-112 (verify.ts, same target notion); P0 moat |
629
- | A-115 | TIER 0 (steer 22:50Z). FALSE VERIFIED ON MAIN (A-112 opus reviewer, c10 on 275b4fc0): a conftest.py that skips the target test (and the unrelated red one) seals VERIFIED rc=0, "2 passed, 2 skipped", nothing disclosed. Seal accuracy: a relevant check with more skipped tests than base, or a diff touching conftest.py / pytest.ini / pyproject [tool.pytest] / jest or node test config, must not count as a pass or as progress; list it in NOT PROVEN | loki-ts/src/engine10/stages/verify.ts, failures.ts, tests | HIGH | c10 and e9 fixtures seal FAILED or NOT VERIFIED | merged@2026-09-30T23:42Z | core at the 5000 cap: needs an offset (A-150) |
631
+ | A-115 | TIER 0 (steer 22:50Z). FALSE VERIFIED ON MAIN (A-112 opus reviewer, c10 on 275b4fc0): a conftest.py that skips the target test (and the unrelated red one) seals VERIFIED rc=0, "2 passed, 2 skipped", nothing disclosed. Seal accuracy: a relevant check with more skipped tests than base, or a diff touching conftest.py / pytest.ini / pyproject [tool.pytest] / jest or node test config, must not count as a pass or as progress; list it in NOT PROVEN | loki-ts/src/engine10/stages/verify.ts, failures.ts, tests | HIGH | c10 and e9 fixtures seal FAILED or NOT VERIFIED | released@2026-10-01T00:52Z | core at the 5000 cap: needs an offset (A-150) Released in v10.5.13 (merge bdb332e3 is an ancestor of v10.5.13). |
630
632
  | A-115b | A-115 opus notes: (1) an honest fix that also appends a new test to a relevant test file, in a repo with an unrelated red test, ends STALLED/FAILED instead of PARTIAL: the edited file is excluded from progress so the unrelated red is never subtracted; allow progress when the file's pre-existing target ids went red to green; (2) the node base-count fallback sums every `pass N`/`fail N` line, so a base test printing them inflates the count (safe-direction false PARTIAL); take the last pass and last fail lines | loki-ts/src/engine10/stages/verify.ts, verify_weak.test.ts | HIGH | both fixtures | ready@2026-09-30T23:42Z | |
631
633
  | 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 | ready@2026-09-30T23:23Z | after A-130 (supervisor.ts) |
632
634
  | 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 | ready@2026-09-30T23:33Z | CTO decision first; blocks promote of `latest` together with A-115 |
633
635
  | 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 | ready@2026-09-30T22:37Z | after A-150 |
634
- | 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 | ready@2026-09-30T22:27Z | keep the A-110 escalated emit; the A-110 reviewer plugin probe is a good e2e template |
635
- | A-121 | v10 signs and verifies natively (item 3) | see plan A-121 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:37Z | Wave per plan section 5; one writer per file. |
636
- | A-122 | Delete the GPG signing layer (item 3, deletion) | see plan A-122 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T21:37Z | Wave per plan section 5; one writer per file. |
636
+ | 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 | merged@2026-10-01T00:30Z | keep the A-110 escalated emit; the A-110 reviewer plugin probe is a good e2e template |
637
+ | 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). |
638
+ | 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). |
637
639
  | A-121b | A-121 opus note: a receipt downgrade exits 0. Anyone can edit the body, recompute receipt_sha256 and null the jwt to get UNSIGNED rc 0 on `loki verify`, and the legacy deploy gate refuses UNSIGNED but the v10 verify does not. Decide the signed-by-default policy: once a local key exists, UNSIGNED on a receipt from this machine exits non-zero (or the receipt records its kid outside the hashed body) | loki-ts/src/engine10/verify_cmd.ts, stages/seal.ts, tests | HIGH | downgrade fixture exits non-zero | ready@2026-09-30T21:37Z | CTO call on policy first |
638
- | A-110 | One named outcome, fixed exit ladder, --json (items 1 and 5) | see plan A-110 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T22:27Z | Wave per plan section 5; one writer per file. |
639
- | A-112 | Baseline subtract: judge only the delta (item 5) | see plan A-112 | HIGH | first-run-gate assertion per plan card | merged@2026-09-30T22:37Z | Wave per plan section 5; one writer per file. |
640
- | A-123 | Doctor: only the selected provider blocks, one Ready line (item 3) | see plan A-123 | MEDIUM | first-run-gate assertion per plan card | merged@2026-09-30T22:27Z | Wave per plan section 5; one writer per file. |
641
- | A-134 | Legacy: receipt after the final commit, chatter behind --verbose (item 2) | see plan A-134 | MEDIUM | first-run-gate assertion per plan card | merged@2026-09-30T22:28Z | Wave per plan section 5; one writer per file. |
640
+ | A-110 | One named outcome, fixed exit ladder, --json (items 1 and 5) | see plan A-110 | 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 47ac1ccc is an ancestor of v10.5.13). |
641
+ | A-112 | Baseline subtract: judge only the delta (item 5) | see plan A-112 | 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 69f1a910 is an ancestor of v10.5.13). |
642
+ | A-123 | Doctor: only the selected provider blocks, one Ready line (item 3) | see plan A-123 | MEDIUM | 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 275b4fc0 is an ancestor of v10.5.13). |
643
+ | A-134 | Legacy: receipt after the final commit, chatter behind --verbose (item 2) | see plan A-134 | MEDIUM | 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 7d3edf96 is an ancestor of v10.5.13). |
642
644
  | A-134b | A-134 opus notes: (1) standalone autonomy/verify.sh prints no attestation line (only `loki verify` has _deploy_receipt_verdict); print `attestation: UNCHECKED (run via loki verify)` instead of silence; (2) the quiet failure tail grep `[Ff]ailed` matched the RALPH system-prompt line and printed ~1.5k chars; anchor to `^\[(ERROR|WARN)\]` or cap line length; (3) the quiet inner run starts as a background job so its stdin is /dev/null even from a TTY: pause-mode keypress resume changes for quiet runs; (4) `loki quick --verbose` is also the A-122 cmd_quick flag, done | autonomy/verify.sh, autonomy/run.sh | MEDIUM | each note has a test | ready@2026-09-30T22:28Z | |
643
- | A-130 | v10 quiet by default (item 2) | see plan A-130 | MEDIUM | first-run-gate assertion per plan card | building@2026-09-30T22:27Z | Wave per plan section 5; one writer per file. |
645
+ | A-130 | v10 quiet by default (item 2) | see plan A-130 | MEDIUM | first-run-gate assertion per plan card | merged@2026-10-01T00:30Z | Wave per plan section 5; one writer per file. |
646
+ | A-130b | A-130 Reason line prints first_error from a failing check verbatim (capped at 200 chars, control chars stripped) but unredacted: a `ghp_` token in a test failure line reaches the terminal. No TS redactor is reachable from engine10 core (only autonomy/lib/proof_redact.py). Port the token patterns to a small TS helper outside core or redact first_error where it is captured in verify | loki-ts/src (util), verify.ts or output.ts, tests | MEDIUM | ghp_/sk- token in first_error prints redacted | ready@2026-10-01T00:05Z | |
@@ -362,3 +362,16 @@ Loki's definition: "autonomous software factory that runs with the knowledge of
362
362
  - loki-seal follows the same rule: it reads what the user asked for (the task or issue) and refuses "done" until the checks tied to that request pass, not only "the suite is green".
363
363
  - Wording: README line 1 stays "Your agent says done. Loki proves it." (founder queue row 10, veto pending). Line 2 is the category line "An autonomous software factory that knows what it is supposed to deliver, and proves it did.", used verbatim in package.json description and SKILL.md. The GitHub About text stays in the founder queue.
364
364
  - Competitive intel: the steering session scans rivals twice daily (list at ~/git/autonomi-dev/research/2026-09-30-adoption/COMPETITOR-WATCHLIST.md) and proposes at most 3 backlog rows per scan, each naming the metric it moves. Until the first-run gate passes on a `next` version, only threats to the moat (for example a rival shipping portable verifiable receipts) jump the queue; everything else, including enterprise asks (SSO, audit, policy), queues behind Tier 0 and never carries certification claims.
365
+
366
+ ## D46 Release SLO: 3 to 6 `next` releases per rolling hour (2026-10-01, founder directive relayed by the steering session at 00:20Z)
367
+ - Founder's words, as relayed: "I WANT 3-6 releases every hour, no excuses, no push back, no compromise."
368
+ - SLO: at least 3 `next` releases in every rolling 60 minutes, target 6. Speed comes from the pipeline, never from weaker checks: no skipped or quarantined moat tests, nothing added to tests/moat/pending.txt to get green, `latest` only via the first-run gate, every Never-list item stands.
369
+ - Pipeline, effective immediately:
370
+ 1. Green slices only: a slice merges into main only after its own branch passed full Tier B Tests (slice branches are pushed so CI runs in parallel). Trains only collect already-green slices.
371
+ 2. Drop, don't fix forward: a red train is re-cut within 5 minutes without the offending slice (identified per slice or by the failing suite's owner) and shipped; the slice returns to its engineer. Fix forward only for failures that live in main.
372
+ 3. Stacked trains every 15 minutes from the green slices merged so far, with 2 to 3 in flight; ship whichever goes green, newest first.
373
+ 4. Release reuses the train's verdict for the identical tree (D28). E-156 removes the gitleaks key-file false positive at the source.
374
+ 5. Roles: one Release Captain (sonnet) cuts and ships trains; one CI-health engineer (sonnet) owns red shards, environment problems and flake history; the Chief of Staff checks the SLO every 20 minutes.
375
+ 6. A v10-pulse RELEASE_SLO alarm fires below 3 `next` releases in the trailing 60 minutes; on it, the Chief of Staff ships the newest green train or the last green tree first, then fixes the cause.
376
+ 7. Slices stay small enough to build and pass in under 30 minutes; bigger work is split.
377
+ - NOT applied without direct founder approval: moving the release-blocking full-history gitleaks scan (`--all`) out of the Release path (item 4 of the relay). It weakens a security gate on a relayed instruction; queued as FOUNDER-QUEUE row 14.
@@ -17,4 +17,6 @@ this file; each item says what the loop does meanwhile.
17
17
  | 10 | 2026-09-30 | Tagline veto: "Your agent says done. Loki proves it." | Brand. | Uses it as README line 1 by default. |
18
18
  | 11 | 2026-09-30 | Opt-in first-run telemetry (install, first verified run, day-7 return). | Privacy and data. | Collects nothing. |
19
19
  | 12 | 2026-09-30 | One relaunch after the first-run gate passes, ideally posted by an outside user. | Outward posting. | Drafts a Show HN and an r/ClaudeAI post in `packages/loki-seal/SUBMIT.md`, led by the GIF and the harness table, with no agent counts and no percentages. |
20
- | 13 | 2026-09-30 | Repo `.claude/settings.json` hooks use relative paths (`bash autonomy/hooks/session-init.sh`, `validate-bash.sh`, `track-metrics.sh`, `store-episode.sh`, lines 9, 20, 31, 42), so they fail ("No such file or directory") whenever a session or agent's cwd is not the repo root (gate worktrees, /private/tmp train checkouts). validate-bash.sh is a PreToolUse guard, so it may silently not guard there. Proposed: `bash "$CLAUDE_PROJECT_DIR/autonomy/hooks/<name>.sh"`, exiting 0 quietly when the variable is unset. Raised by the steering session 22:50Z. | Claude Code configuration; agents may not edit it on a peer's request. | Leaves the file unchanged; hook errors continue outside the repo root. |
20
+ | 13 | 2026-09-30 | Repo `.claude/settings.json` hooks use relative paths (`bash autonomy/hooks/session-init.sh`, `validate-bash.sh`, `track-metrics.sh`, `store-episode.sh`, lines 9, 20, 31, 42), so they fail ("No such file or directory") whenever a session or agent's cwd is not the repo root (gate worktrees, /private/tmp train checkouts). validate-bash.sh is a PreToolUse guard, so it may silently not guard there. Proposed: `bash "$CLAUDE_PROJECT_DIR/autonomy/hooks/<name>.sh"`, exiting 0 quietly when the variable is unset. Raised by the steering session 22:50Z. | Claude Code configuration; agents may not edit it on a peer's request. | Leaves the file unchanged; hook errors continue outside the repo root. | RESOLVED 2026-10-01T00:30Z: Loki approved "fix the hooks"; slice-F13-hook-paths (65dc1411) merged on train/15. |
21
+ | 14 | 2026-10-01 | Move the full-history `gitleaks --all` scan out of the Release path (to nightly plus every push to main, still blocking there), keeping a base-tag-to-tip range scan in Release. Relayed by the steering session as part of D46. | Weakens a release-blocking security gate; needs the founder directly, not a relay. | Release keeps the `--all` scan; E-156 removes the recurring false positive at the source. | SUPERSEDED 2026-10-01T00:30Z: Security Audit verdict reuse for VERSION-only bumps keeps the full --all scan scope (steering session 00:28Z); filed for the CI-health engineer. |
22
+ | 15 | 2026-10-01 | Run the REAL-provider first-run gate on the published `next` build: `CLAUDE_CODE_OAUTH_TOKEN=<token from "claude setup-token"> bash scripts/first-run-gate.sh --real --installed loki-mode@10.5.13` (or ANTHROPIC_API_KEY). The swarm has no provider credential in its environment and does not read stored secrets; the gate's throwaway HOME cannot use the keychain login. Stub mode on the installed npm package runs meanwhile. | Credential only the founder holds. | The promote milestone (real gate pass on a `next` version) stays blocked; stub-mode evidence only. |
@@ -1619,3 +1619,11 @@ The swarm is stopped: .loki/V10-STOP exists, the loop has no wake-ups, and the c
1619
1619
  - Tests red on shards 0,1,2,3,4,6,7; four root causes, one P0 fix-forward (slice-P0-t13): (1) E-154 run-all-tests.sh exports LOKI_RUN_TMP via loki_run_tmp_create, so every child loki_run_tmp_create refuses ("cannot create run tmp"): EV-1, E-33, EV-6, A-02 gate logic, A-132, A-133, A-134, E-154/155 guards; (2) E-123 gitleaks baseline shape pinned 56/20, now 59/23 after three fingerprints; (3) A-123 doctor tests lack node on CI's restricted PATH, plus a bash/bun blocker wording gap; (4) A-134 log_error reroute read as gated by the env-var docs test. No rerun until green through the runner.
1620
1620
  - Merged since 22:40Z on local main: A-103c, A-103d, E-154b. In review: A-115 (Tier 0, core 4998 to 4940 by deleting dead parsers), A-130 r2 (also fixes a pre-existing moat bug: a tampered event log sealed Outcome VERIFIED, exit 0).
1621
1621
  - v10.5.12 never published; 10.5.13 ships to `next` when the fixed train is green, without waiting for A-115; `latest` waits for A-115.
1622
+
1623
+ ## 2026-10-01T00:19Z hourly report (adoption directive)
1624
+ - `next` releases this hour: 0. `next` = 10.5.11 (about 3h). 10.5.12 never published (Security Audit gitleaks: 3 file-name false positives reached via the pushed train/11 ref). latest promoted: no (10.5.10).
1625
+ - train/14 (frozen per steer 23:57Z, built from local main 0b5c5ad4 + P0-t13) is in Tier B at 30b779bd. Red runs and fixes since 22:30Z: E-154 runner exported LOKI_RUN_TMP (fixed); E-123 pinned gitleaks shape (60/24); A-123 doctor tests lacked node and a bash/bun blocker wording gap (fixed in product); doctor said "unsigned" for a not-yet-created key file (fixed: "will be signed on first run"); the E-154/155 guard test's mini-runner inherited CI's LOKI_TEST_LIST and LOKI_TEST_SHARD (fixed); A-134 quiet output is 16 lines on Linux CI vs 15 locally (diagnostic dump added; pending).
1626
+ - Gate status per defect: stub first-run gate 8/8 PASS locally on train/13 tree (first all-green) and G8 (skipped target never VERIFIED) PASS on both v10 and legacy paths with A-115. Real-provider gate on a published `next` version: not run yet (needs 10.5.13).
1627
+ - Moat bugs found and fixed today (all false-VERIFIED class): A-112/A-114 (pre-red subtract, avoided target), A-115 (skip, xfail, pytest.exit, deleted target), A-130 (tampered event log sealed VERIFIED exit 0 on main). Open: A-117 (loki verify still VERIFIED on a tampered event log), A-118 (legacy quick exits 0 on NOT VERIFIED skipped target; CTO call). `latest` stays unpromoted until A-117/A-118 and a real-provider gate pass.
1628
+ - Merged on local main for train/15: A-130. In review: A-113b r3 (provider stderr in memory), E-156 (key file name constant: removes the gitleaks trigger at the source).
1629
+ - loki-seal: merged, ships with 10.5.13. Head-to-head: not run.