loki-mode 11.74.2 → 11.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +2 -3
  3. package/VERSION +1 -1
  4. package/autonomy/completion-council.sh +10 -10
  5. package/autonomy/council-v2.sh +4 -4
  6. package/autonomy/grill.sh +1 -1
  7. package/autonomy/lib/browser-open.sh +1 -1
  8. package/autonomy/lib/chat.sh +1 -1
  9. package/autonomy/lib/cockpit-render.sh +1 -1
  10. package/autonomy/lib/done-recognition.sh +4 -4
  11. package/autonomy/lib/efficiency_cost.py +1 -1
  12. package/autonomy/lib/engine10-push.sh +2 -2
  13. package/autonomy/lib/prd-enrich.sh +1 -1
  14. package/autonomy/lib/proof-check.sh +1 -1
  15. package/autonomy/lib/proof-generator.py +3 -3
  16. package/autonomy/lib/proof-pr.sh +1 -1
  17. package/autonomy/lib/skill-link-heal.sh +1 -1
  18. package/autonomy/lib/voter-agents.sh +1 -1
  19. package/autonomy/loki +26 -37
  20. package/autonomy/prd-checklist.sh +1 -1
  21. package/autonomy/receipt_jwt.py +1 -1
  22. package/autonomy/run.sh +28 -28
  23. package/autonomy/trigger-schedule.py +6 -414
  24. package/autonomy/tui.sh +1 -1
  25. package/autonomy/verify.sh +4 -4
  26. package/completions/loki.bash +0 -5
  27. package/dashboard/__init__.py +1 -1
  28. package/docs/ARCHITECTURE.md +1 -2
  29. package/docs/CLI-REFERENCE.md +1 -1
  30. package/docs/COMPONENTS.md +1 -1
  31. package/docs/INSTALLATION.md +1 -1
  32. package/docs/ROUTING-EVIDENCE.md +1 -2
  33. package/docs/V10-RESEARCH.md +1 -1
  34. package/docs/dev/architecture-reference.md +3 -7
  35. package/docs/dev/project-structure.md +1 -4
  36. package/docs/dev/release-checklist.md +13 -31
  37. package/docs/research-2026-07/OBSERVABILITY-TOOL-SPEC.md +1 -1
  38. package/docs/v11/MARKET-SLICES.md +1 -1
  39. package/docs/v11/REGISTRIES.md +1 -1
  40. package/docs/v11/ROUTER-1.md +2 -2
  41. package/loki-ts/dist/loki.js +2 -2
  42. package/mcp/__init__.py +1 -1
  43. package/package.json +2 -2
  44. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  45. package/skills/extending.md +2 -3
  46. package/skills/factory-operations.md +11 -18
  47. package/skills/release-cadence.md +2 -2
  48. package/web-app/dist/assets/{AdminPage-jkjilfbl.js → AdminPage-xKgtIhk2.js} +1 -1
  49. package/web-app/dist/assets/{Avatar-bd5JWkSJ.js → Avatar-Q14AHox9.js} +1 -1
  50. package/web-app/dist/assets/{Badge-DVRit2Xw.js → Badge-yk5M-lip.js} +1 -1
  51. package/web-app/dist/assets/{Button-BNAB-pVZ.js → Button-ynznk0At.js} +1 -1
  52. package/web-app/dist/assets/{CockpitPage-DpG29h_w.js → CockpitPage-C8B765za.js} +1 -1
  53. package/web-app/dist/assets/{ComparePage-Dasg5V41.js → ComparePage-DqzmWKnf.js} +1 -1
  54. package/web-app/dist/assets/{ErrorBoundary-DJojse6b.js → ErrorBoundary-DdBPd_Lq.js} +1 -1
  55. package/web-app/dist/assets/{EvidenceReceiptPanel-Blxw7_u1.js → EvidenceReceiptPanel-jb4Tp38b.js} +1 -1
  56. package/web-app/dist/assets/{GitHubIssuesPanel-BBvSFj80.js → GitHubIssuesPanel-xJQiLcxs.js} +1 -1
  57. package/web-app/dist/assets/{GitHubPRsPanel-BCIKeSBg.js → GitHubPRsPanel-84W3Dhk_.js} +1 -1
  58. package/web-app/dist/assets/{HomePage-C7d__oNG.js → HomePage-St1Xl2tu.js} +2 -2
  59. package/web-app/dist/assets/{LoginPage-BXljL3yY.js → LoginPage-jRt0NUHb.js} +1 -1
  60. package/web-app/dist/assets/{MagicPage-Xjkts_yE.js → MagicPage-CQLFe7LR.js} +1 -1
  61. package/web-app/dist/assets/{MetricsPage-kQvVp-j2.js → MetricsPage-zzX9eTC5.js} +1 -1
  62. package/web-app/dist/assets/{NotFoundPage-D-4ZlEaO.js → NotFoundPage-DDu023SY.js} +1 -1
  63. package/web-app/dist/assets/{ProjectPage-DfzR5RXP.js → ProjectPage-D60UURaH.js} +3 -3
  64. package/web-app/dist/assets/{ProjectsPage-DFDsWzkV.js → ProjectsPage-DqVsKxlt.js} +1 -1
  65. package/web-app/dist/assets/{SettingsPage-CLPIoYT3.js → SettingsPage-G7pPKvo0.js} +1 -1
  66. package/web-app/dist/assets/{ShowcasePage-PZKkyGeY.js → ShowcasePage-CrU_aKgS.js} +1 -1
  67. package/web-app/dist/assets/{SystemSettingsPage-BsBlcnzo.js → SystemSettingsPage-ClKGQFsB.js} +1 -1
  68. package/web-app/dist/assets/{TeamsPage-BSjgNhoU.js → TeamsPage-B530vSNe.js} +1 -1
  69. package/web-app/dist/assets/{TemplatesPage-W2KeAzbg.js → TemplatesPage-COmv_Cqd.js} +1 -1
  70. package/web-app/dist/assets/{TerminalOutput-BjroTiCC.js → TerminalOutput-CufG9YzF.js} +1 -1
  71. package/web-app/dist/assets/{activity-BXZ5YYes.js → activity-Ct1Updr6.js} +1 -1
  72. package/web-app/dist/assets/{bell-D1urp5pa.js → bell-rcvhQuGr.js} +1 -1
  73. package/web-app/dist/assets/{bot-Chedf2bF.js → bot-DzeqEI-b.js} +1 -1
  74. package/web-app/dist/assets/{check-DhaCuOCV.js → check-zacnZHyC.js} +1 -1
  75. package/web-app/dist/assets/{chevron-left-D7BpQyA6.js → chevron-left-Lxnkl8Qg.js} +1 -1
  76. package/web-app/dist/assets/{circle-alert-DnGvQ_AQ.js → circle-alert-DoqSdQdB.js} +1 -1
  77. package/web-app/dist/assets/{clock-CqfxWhHM.js → clock-B7bJcVIC.js} +1 -1
  78. package/web-app/dist/assets/{cloud-BKxp5AWB.js → cloud-DdA9Bu6q.js} +1 -1
  79. package/web-app/dist/assets/{code-xml-BDQ6GBtt.js → code-xml-CAZEZ9T8.js} +1 -1
  80. package/web-app/dist/assets/{database-BmpEx1y_.js → database-Da2GkEIN.js} +1 -1
  81. package/web-app/dist/assets/{dollar-sign-DYNY9R_C.js → dollar-sign-DjDiG-37.js} +1 -1
  82. package/web-app/dist/assets/{file-code-corner-BJi0IBFd.js → file-code-corner-CSL-Jij-.js} +1 -1
  83. package/web-app/dist/assets/{file-plus-Dqyb2bcQ.js → file-plus-02DRA8pV.js} +1 -1
  84. package/web-app/dist/assets/{globe-DPh4RWfM.js → globe-CGyB90kK.js} +1 -1
  85. package/web-app/dist/assets/{hammer-B3xnuoA1.js → hammer-BaQB96TG.js} +1 -1
  86. package/web-app/dist/assets/{index-BpX8DcTr.js → index-lcoI1_Kk.js} +3 -3
  87. package/web-app/dist/assets/{layers-BRCmyCW8.js → layers-BWJBvoeg.js} +1 -1
  88. package/web-app/dist/assets/{loader-circle-n07Pky0M.js → loader-circle-CdcI0FeS.js} +1 -1
  89. package/web-app/dist/assets/{lock-BWqOuQmS.js → lock-BBkw5NJx.js} +1 -1
  90. package/web-app/dist/assets/{package-BJlB_Z-Z.js → package-BpPRO3LM.js} +1 -1
  91. package/web-app/dist/assets/{plus-oH17BZu2.js → plus-D7XbyK29.js} +1 -1
  92. package/web-app/dist/assets/{refresh-cw-CPQ476LL.js → refresh-cw-DLG3hyAi.js} +1 -1
  93. package/web-app/dist/assets/{rotate-ccw-7hLvOcnS.js → rotate-ccw-Bqau4R_S.js} +1 -1
  94. package/web-app/dist/assets/{scroll-text-BCmLauQn.js → scroll-text-BtIL3cNk.js} +1 -1
  95. package/web-app/dist/assets/{server-DfTfvW84.js → server-tZCmZ4yH.js} +1 -1
  96. package/web-app/dist/assets/{shield-alert-CaeGRq19.js → shield-alert-K5JXzFKg.js} +1 -1
  97. package/web-app/dist/assets/{thumbs-up-Dz-l2GPC.js → thumbs-up-CHCVyJdw.js} +1 -1
  98. package/web-app/dist/assets/{trash-2-B-OsDmSo.js → trash-2-DncNxVq0.js} +1 -1
  99. package/web-app/dist/assets/{trending-down-CXTFOxzq.js → trending-down-D8Bp0azX.js} +1 -1
  100. package/web-app/dist/assets/{trending-up-FQEdqr3v.js → trending-up-AixETdKR.js} +1 -1
  101. package/web-app/dist/assets/{upload-CacWSNTg.js → upload-VCbjFn2H.js} +1 -1
  102. package/web-app/dist/assets/{usePolling-cIjZ9qd2.js → usePolling-CQvKD2Jj.js} +1 -1
  103. package/web-app/dist/assets/{user-DAouWFHi.js → user-SK-YguQ6.js} +1 -1
  104. package/web-app/dist/index.html +1 -1
  105. package/autonomy/company-seats.json +0 -82
  106. package/docs/COMPETITIVE-INTEL-2026-09.md +0 -444
  107. package/docs/FOUNDER-DECISIONS-TRUST-SEMANTICS-2026-08-01.md +0 -145
  108. package/docs/FOUNDER-STATUS-AND-DECISIONS-2026-07-01.md +0 -132
  109. package/docs/LOKI-10-BUILD-PROMPT.md +0 -350
  110. package/docs/STRATEGY-2026-2028.md +0 -124
  111. package/docs/V10-VISION.md +0 -161
  112. package/docs/v10/ADOPTION-PLAN.md +0 -375
  113. package/docs/v10/ARCHITECT-CUTS.md +0 -744
  114. package/docs/v10/BACKLOG.md +0 -231
  115. package/docs/v10/BOARD.md +0 -1403
  116. package/docs/v10/CONTROL-PLANE.md +0 -120
  117. package/docs/v10/CONTROL.md +0 -36
  118. package/docs/v10/CP-ASK-PLAN.md +0 -85
  119. package/docs/v10/CP-ENTERPRISE-UI.md +0 -537
  120. package/docs/v10/D51-PHASE-B.md +0 -120
  121. package/docs/v10/D61-SPEED.md +0 -105
  122. package/docs/v10/D63-CARDS.md +0 -354
  123. package/docs/v10/DECISIONS.md +0 -915
  124. package/docs/v10/E2E-D65.md +0 -123
  125. package/docs/v10/ENGINE-LAWS.md +0 -163
  126. package/docs/v10/ENGINE-MEASURE.md +0 -69
  127. package/docs/v10/ENGINE.md +0 -743
  128. package/docs/v10/FAILURE-CLASSES.md +0 -2026
  129. package/docs/v10/FC21B-FC22-PLAN.md +0 -107
  130. package/docs/v10/FIRST-RUN-GATE.md +0 -39
  131. package/docs/v10/FOUNDER-QUEUE.md +0 -29
  132. package/docs/v10/GAP-RESEARCH-1003.md +0 -32
  133. package/docs/v10/GUARDS.md +0 -883
  134. package/docs/v10/L0-WAVE1.md +0 -81
  135. package/docs/v10/LEGACY-REMOVAL.md +0 -408
  136. package/docs/v10/MEDIUM-ANALYSIS.md +0 -346
  137. package/docs/v10/METRICS.md +0 -645
  138. package/docs/v10/MODERNIZE.md +0 -437
  139. package/docs/v10/OPENCODE-PARITY-PLAN.md +0 -84
  140. package/docs/v10/OPERATING-MODEL.md +0 -60
  141. package/docs/v10/PLAN-V12.md +0 -896
  142. package/docs/v10/PROGRESS.md +0 -2735
  143. package/docs/v10/RELEASE-11.md +0 -77
  144. package/docs/v10/RETRO-2026.md +0 -650
  145. package/docs/v10/ROADMAP-D63.md +0 -35
  146. package/docs/v10/SCALE.md +0 -140
  147. package/docs/v10/SCORECARD-PLAN.md +0 -250
  148. package/docs/v10/SWARM-PROMPT.md +0 -98
  149. package/docs/v10/SWARM.md +0 -293
  150. package/docs/v10/cp-redesign/PARITY.md +0 -188
  151. package/docs/v10/cp-redesign/legacy/INDEX.md +0 -1167
  152. package/docs/v10/roadmap-10/01-measurement.md +0 -113
  153. package/docs/v10/roadmap-10/02-cost.md +0 -75
  154. package/docs/v10/roadmap-10/03-speed.md +0 -65
  155. package/docs/v10/roadmap-10/04-first-run.md +0 -61
  156. package/docs/v10/roadmap-10/05-deploy.md +0 -61
  157. package/docs/v10/roadmap-10/06-stability.md +0 -64
  158. package/docs/v10/roadmap-10/07-quality.md +0 -57
  159. package/docs/v10/roadmap-10/08-proof.md +0 -48
  160. package/docs/v10/roadmap-10/09-safety.md +0 -74
  161. package/docs/v10/roadmap-10/README.md +0 -1464
  162. package/skills/sdlc-fleet.md +0 -170
  163. package/tools/cockpit/SPEC.md +0 -275
  164. package/tools/cockpit/index.html +0 -146
  165. package/tools/cockpit/roi-basis.json +0 -33
  166. package/tools/cockpit/server.py +0 -946
package/autonomy/run.sh CHANGED
@@ -4680,7 +4680,7 @@ except Exception:
4680
4680
  # Where the time went, per stage. Same "written but never read" story as
4681
4681
  # first-preview above: emit_stage_complete (run.sh:2413) has appended a
4682
4682
  # stage_complete record -- stage, status, duration_s, iteration -- to
4683
- # events.jsonl since v7.91.x, and NOTHING consumed it. A founder watching a
4683
+ # events.jsonl since v7.91.x, and NOTHING consumed it. A user watching a
4684
4684
  # 322-word issue take 25+ minutes inside iteration 1 had no way to see which
4685
4685
  # step ate it, because the measurement existed and was never surfaced.
4686
4686
  #
@@ -6092,7 +6092,7 @@ _loki_trusted_push() {
6092
6092
  log_warn "Not pushing branch '$_branch': origin changed during the run (it was $(_loki_github_repo_from_url "$_LOKI_PINNED_ORIGIN" 2>/dev/null || echo "not a GitHub repository") when the run started). Loki does not push to a destination the agent could have chosen."
6093
6093
  return 2
6094
6094
  fi
6095
- # S-100: never push a default branch, for every caller (on_run_complete,
6095
+ # never push a default branch, for every caller (on_run_complete,
6096
6096
  # create_session_pr): the branch name can come from agent-writable state.
6097
6097
  # The default branch is resolved for the origin just validated (the pinned
6098
6098
  # one when pinned), gh run from / with an explicit OWNER/REPO. An
@@ -6310,7 +6310,7 @@ on_run_complete() {
6310
6310
  case "$branch" in
6311
6311
  ""|main|master|HEAD) return 0 ;;
6312
6312
  esac
6313
- # S-100: the repository's ACTUAL default branch (develop, trunk, ...) is
6313
+ # the repository's ACTUAL default branch (develop, trunk, ...) is
6314
6314
  # refused inside _loki_trusted_push, for every caller.
6315
6315
  log_info "LOKI_DELEGATE_PR=1: opening a local pull request for branch '$branch'..."
6316
6316
  # Push, then create. Non-interactive (no tty in --bg). Best-effort, each
@@ -6474,7 +6474,7 @@ check_parallel_support() {
6474
6474
  return 0
6475
6475
  }
6476
6476
 
6477
- # E-130: npm install cache keyed on sha256(package-lock.json + package.json),
6477
+ # npm install cache keyed on sha256(package-lock.json + package.json),
6478
6478
  # stored under the project's .loki/cache/install/. Hit: copy cached node_modules.
6479
6479
  # Miss or unusable entry: real install, then publish the entry atomically
6480
6480
  # (temp dir + rename) so concurrent worktrees never see a partial entry.
@@ -6529,7 +6529,7 @@ _loki_npm_install_cached() {
6529
6529
  return 0
6530
6530
  }
6531
6531
 
6532
- # E-130: copy .loki into a worktree without the install cache (the cache is
6532
+ # copy .loki into a worktree without the install cache (the cache is
6533
6533
  # often hundreds of MB; copy-then-delete would cost more than it saves).
6534
6534
  # Children are copied one by one, so no tar/rsync flavour issues (bash 3.2 safe).
6535
6535
  _loki_copy_state_no_install_cache() {
@@ -6588,7 +6588,7 @@ create_worktree() {
6588
6588
 
6589
6589
  # Copy .loki state to worktree
6590
6590
  if [ -d "$TARGET_DIR/.loki" ]; then
6591
- # E-130: never copy the install cache into the worktree
6591
+ # never copy the install cache into the worktree
6592
6592
  _loki_copy_state_no_install_cache "$TARGET_DIR/.loki" "$worktree_path/.loki"
6593
6593
  fi
6594
6594
 
@@ -10954,7 +10954,7 @@ _loki_untracked_status() {
10954
10954
  # <exclude> is an empty list; any other read or write failure is non-zero and
10955
10955
  # leaves <out> as it was. Sorted bytewise, like `LC_ALL=C sort -z -u`. One
10956
10956
  # python process: bash 3.2 has no associative arrays, and a bash loop cost
10957
- # 300ms per 6,000 entries on /bin/bash. -I -S and no cwd on sys.path (D7): the
10957
+ # 300ms per 6,000 entries on /bin/bash. -I -S and no cwd on sys.path: the
10958
10958
  # cwd is the agent's repo.
10959
10959
  # BACKLOG 129: this is the snapshot WRITER -- its <out> becomes
10960
10960
  # preexisting-untracked.z, one of the two files the seal above digests. A bare
@@ -11222,7 +11222,7 @@ if ! type _commit_path_looks_secret >/dev/null 2>&1; then _commit_path_looks_sec
11222
11222
  # Atomically write <out>: the NUL-delimited entries of <paths> that <snapshot>
11223
11223
  # covers (the entry itself or a parent "dir/" entry, as workspace_diff._covered)
11224
11224
  # and that still exist under <top>. Non-zero on a read or write failure. -I -S
11225
- # and no cwd on sys.path (D7): the cwd is the agent's repo.
11225
+ # and no cwd on sys.path: the cwd is the agent's repo.
11226
11226
  # BACKLOG 129: this is the snapshot READER -- it reads <snapshot>
11227
11227
  # (preexisting-untracked.z, sealed content) and decides which of the agent's
11228
11228
  # newly-added paths are actually the user's pre-existing files (to be removed
@@ -11316,7 +11316,7 @@ _loki_untrack_agent_committed_user_files() {
11316
11316
  rm -f "$rec.added"
11317
11317
  if [ ! -s "$rec.new" ]; then
11318
11318
  rm -f "$rec.new"
11319
- # S-194: the tree diff above cannot see a file an earlier (resumed)
11319
+ # the tree diff above cannot see a file an earlier (resumed)
11320
11320
  # session added and then untracked, but the branch history still
11321
11321
  # holds it and create_session_pr gates the push on this record. Keep
11322
11322
  # the record while that history holds any recorded path; on a failed
@@ -11339,7 +11339,7 @@ _loki_untrack_agent_committed_user_files() {
11339
11339
  fi
11340
11340
  mv -f "$rec.new" "$rec"
11341
11341
  names="$(_loki_nul_names "$rec")"
11342
- # S-220: keep what the agent force-staged. Save the index as a tree, make the
11342
+ # keep what the agent force-staged. Save the index as a tree, make the
11343
11343
  # removal commit from the branch tip alone, then restore the saved index minus
11344
11344
  # the removed paths. A global `git reset -q` here dropped those staged files
11345
11345
  # from the session commit that follows. No saved tree (unmerged index): the
@@ -11461,7 +11461,7 @@ commit_session_changes() {
11461
11461
  # (_commit_path_looks_secret + _commit_scan_secret_file over EVERY staged
11462
11462
  # file) is the actual guarantee for nested/weak secrets; these excludes are a
11463
11463
  # cheap first cut for the obvious top-level files only.
11464
- # S-219: a failed add must not fall through to the "nothing staged" no-op,
11464
+ # a failed add must not fall through to the "nothing staged" no-op,
11465
11465
  # which would silently commit nothing. Unstage any partial result and say so.
11466
11466
  # rc 1 is benign: git exits 1 after staging everything else when a pathspec
11467
11467
  # (':!.loki') names an ignored path, which is the normal case. A real
@@ -12610,7 +12610,7 @@ COMPOUND_SCRIPT
12610
12610
  # every project -- a CLI with no build step read identically to a skipped real
12611
12611
  # build, and both dragged the receipt to "WITH GAPS". This is the missing writer.
12612
12612
  #
12613
- # The distinction the receipt needs (and the founder demanded, no fabrication) is
12613
+ # The distinction the receipt needs (and the receipt must never fabricate) is
12614
12614
  # THREE-WAY, not two (a council review caught the two-way version laundering
12615
12615
  # "unrecognized build system" into a fake N/A):
12616
12616
  # - a build command WE RUN exists (npm "build" / go / cargo) -> RUN it, record
@@ -12677,7 +12677,7 @@ enforce_build_check() {
12677
12677
  # an allowlist of build systems -> the allowlist is structurally leaky). The
12678
12678
  # two error directions are NOT equal: a REAL build read as N/A -> VERIFIED is
12679
12679
  # DISHONEST over-claim (the cardinal fake-green sin); a no-build CLI read as a
12680
- # not_run gap is an HONEST under-claim (merely the founder's original UX nit).
12680
+ # not_run gap is an HONEST under-claim (merely an original UX nit).
12681
12681
  # So not_run is the SAFE CATCH-ALL and N/A requires a POSITIVE proof-of-no-build.
12682
12682
  # A forgotten stack (Bazel, meson, autotools, Zig, Nix...) now falls to not_run
12683
12683
  # (honest), never to fake N/A -- fixing the whole CLASS, not each instance.
@@ -12718,7 +12718,7 @@ enforce_build_check() {
12718
12718
  # N/A fires on POSITIVE proof-of-no-build, which we can only assert for a
12719
12719
  # package.json project: it EXISTS and its scripts are build-ish-free and no
12720
12720
  # foreign manifest / build-tool devDep is present -> a JS CLI/lib that
12721
- # genuinely has no build step (the founder's invoice case). CRITICAL (the
12721
+ # genuinely has no build step (an invoice-CLI case). CRITICAL (the
12722
12722
  # council's convergence line): a project with NO package.json is "I don't
12723
12723
  # recognize a build here" = IGNORANCE, not proof-of-no-build. Ignorance must
12724
12724
  # map to not_run (honest gap), NEVER N/A -- else Zig/autotools/bare-C/meson/
@@ -12801,7 +12801,7 @@ enforce_build_check() {
12801
12801
  fi
12802
12802
  else
12803
12803
  # build_class="none": a POSITIVE proof-of-no-build determination -> honest
12804
- # N/A (the founder's CLI). applicable already false; status not_applicable.
12804
+ # N/A (a CLI project). applicable already false; status not_applicable.
12805
12805
  applicable="false"; ran="false"; status="not_applicable"
12806
12806
  log_info "Build check: no build step for this stack (N/A)"
12807
12807
  fi
@@ -13211,7 +13211,7 @@ PYEOF
13211
13211
  # is compile(bytes, path, "exec", dont_inherit=True)), but it
13212
13212
  # writes no __pycache__/*.pyc into the user's repo, where the
13213
13213
  # session commit would pick it up. -E and the sys.path filter
13214
- # (D7): the repo under check must not supply modules to the gate.
13214
+ #: the repo under check must not supply modules to the gate.
13215
13215
  LOKI_DEADLINE_IDLE_TIMEOUT=0 _loki_with_deadline "$gate_timeout" \
13216
13216
  python3 -E -c 'import sys; sys.path[:] = [p for p in sys.path if p not in ("", ".")]; compile(open(sys.argv[1], "rb").read(), sys.argv[1], "exec", dont_inherit=True)' \
13217
13217
  "${TARGET_DIR:-.}/$f" 2>&1 || _py_compile_rc=$?
@@ -14337,7 +14337,7 @@ enforce_test_coverage() {
14337
14337
  # that is the legitimate case they were written for (a package that ships
14338
14338
  # a runner but no npm script).
14339
14339
  local _declared_test_script=""
14340
- # BACKLOG 81 (D7): -E plus the sys.path filter, so the agent's repo (the
14340
+ # BACKLOG 81: -E plus the sys.path filter, so the agent's repo (the
14341
14341
  # cwd) cannot supply json or sitecustomize to this reader.
14342
14342
  _declared_test_script=$(_LOKI_PKG="${TARGET_DIR:-.}/package.json" python3 -E -c "import sys; sys.path[:] = [p for p in sys.path if p not in ('', '.')]
14343
14343
  import json, os, sys
@@ -14472,7 +14472,7 @@ TREOF
14472
14472
  # npm test), so the grep only ever picked the LABEL, never
14473
14473
  # what ran. This corrects the evidence, not the execution.
14474
14474
  local _ws_script
14475
- # BACKLOG 81 (D7): same guard as the root reader above.
14475
+ # BACKLOG 81: same guard as the root reader above.
14476
14476
  _ws_script=$(_LOKI_PKG="$pkg_json" python3 -E -c "import sys; sys.path[:] = [p for p in sys.path if p not in ('', '.')]
14477
14477
  import json, os, sys
14478
14478
  try:
@@ -14561,7 +14561,7 @@ sys.stdout.write(t.strip())
14561
14561
  -not -path '*/.venv/*' -not -path '*/venv/*' \
14562
14562
  -print -quit 2>/dev/null | grep -q .; then
14563
14563
  # #139: a ROOT-LEVEL (or shallow) test_*.py / *_test.py with NO tests/
14564
- # dir and NO config file. The founder's invoice CLI had exactly this
14564
+ # dir and NO config file. An invoice CLI had exactly this
14565
14565
  # shape (test_invoice_cli.py at the root) -> was missed -> tests read
14566
14566
  # "not run" on a genuinely-passing 16-test unittest suite. This is the
14567
14567
  # same false-negative class as #79 (validated work reads as unvalidated).
@@ -14573,7 +14573,7 @@ sys.stdout.write(t.strip())
14573
14573
  # v7.5.15 (Triage #14): wrapped with configurable timeout via helper.
14574
14574
  output=$(_loki_run_pytest_with_timeout "${TARGET_DIR:-.}" --tb=short)
14575
14575
  pytest_exit=$?
14576
- # S3: the helper falls back to unittest discover on pytest exit 5; the
14576
+ # the helper falls back to unittest discover on pytest exit 5; the
14577
14577
  # record must name the runner that actually produced the verdict.
14578
14578
  case "$output" in *"fell back to python3 -m unittest discover"*) test_runner="unittest" ;; esac
14579
14579
  if [ "$pytest_exit" -eq 124 ]; then
@@ -14831,7 +14831,7 @@ TREOF
14831
14831
  # TAP "# fail 1" and the spec reporter's "<info sign> fail 1", counted only
14832
14832
  # right after the matching pass line (node TAP echoes a test's own stdout
14833
14833
  # as "# ..." lines, which must not count), mocha "1 failing", go "--- FAIL:"
14834
- # lines. BACKLOG 103 (S-140): jest's "Test Suites: 1 failed, 1 total" and
14834
+ # lines. BACKLOG 103: jest's "Test Suites: 1 failed, 1 total" and
14835
14835
  # vitest's "Test Files 1 failed | 2 passed" lines are matched too -- a
14836
14836
  # whole crashed suite/file can carry the ONLY failed count while the
14837
14837
  # "Tests:" line above reports just the tests that ran elsewhere ("Tests: 2
@@ -16540,7 +16540,7 @@ _dispatch_reviewer() {
16540
16540
  # pass NO --model by default (unchanged behavior: they run on the
16541
16541
  # account default). When the operator/user sets LOKI_ADVISOR_MODEL to
16542
16542
  # an allowlisted alias, pin the trust-gate reviewer to it for a
16543
- # stronger/consistent judge - the founder's "advisor will be opus if
16543
+ # stronger/consistent judge - the documented "advisor will be opus if
16544
16544
  # needed or user opted". Only the tier aliases haiku|sonnet|opus are
16545
16545
  # honored; any other value is ignored with no --model.
16546
16546
  if [ -n "${LOKI_ADVISOR_MODEL:-}" ]; then
@@ -19862,7 +19862,7 @@ start_dashboard() {
19862
19862
  # Auto-open the dashboard in the browser, but ONLY for an interactive
19863
19863
  # foreground session. loki_open_url (lib/browser-open.sh) refuses on
19864
19864
  # no TTY, CI, test runners, LOKI_NO_BROWSER=1 or LOKI_NO_AUTO_OPEN=1.
19865
- # CP-LEGACY (D57): open the Control Plane, not this legacy server,
19865
+ # CP-LEGACY: open the Control Plane, not this legacy server,
19866
19866
  # unless LOKI_LEGACY_DASHBOARD=1 opts back in.
19867
19867
  if [ "${BACKGROUND_MODE:-false}" != "true" ]; then
19868
19868
  if [ "${LOKI_LEGACY_DASHBOARD:-0}" = "1" ]; then
@@ -21688,7 +21688,7 @@ ${_commits}"
21688
21688
  # stream-fighting, byte-identical behavior (no TTY checks, no interactive paths;
21689
21689
  # the generator is deterministic given the same codebase index).
21690
21690
  #
21691
- # INCREMENTAL change-detection (E3): regenerating the wiki walks + hashes the
21691
+ # INCREMENTAL change-detection: regenerating the wiki walks + hashes the
21692
21692
  # source set, which is wasted work on an iteration that did not change the
21693
21693
  # codebase structure. We avoid even spawning python on an unchanged repo with a
21694
21694
  # cheap bash-level signal: a hash over the source file list and their mtimes,
@@ -22076,7 +22076,7 @@ PYEOF
22076
22076
  # v6.83.0 Phase 1: RARV-C REFLECT/VERIFY shadow-write. Only when both
22077
22077
  # managed flags are on AND the episode meets the consolidation importance
22078
22078
  # threshold (>= 0.6). Fully non-blocking (backgrounded subprocess).
22079
- # S-156: skip when PROJECT_DIR is empty (bash 3.2 `cd ""` succeeds and
22079
+ # skip when PROJECT_DIR is empty (bash 3.2 `cd ""` succeeds and
22080
22080
  # would run a memory package from the cwd), and pass importance via argv.
22081
22081
  if [ -n "${PROJECT_DIR:-}" ] \
22082
22082
  && [ "$LOKI_MANAGED_AGENTS" = "true" ] && [ "$LOKI_MANAGED_MEMORY" = "true" ] \
@@ -22214,7 +22214,7 @@ load_state() {
22214
22214
  if command -v python3 &> /dev/null; then
22215
22215
  # BUG-ST-006: Validate checkpoint integrity before loading state
22216
22216
  local state_valid
22217
- # -E and the sys.path filter (D7): the cwd is the target repo, and a
22217
+ # -E and the sys.path filter: the cwd is the target repo, and a
22218
22218
  # committed json.py must not decide the loaded iteration count
22219
22219
  # (a fake non-zero count would skip the iteration-0 evidence drop).
22220
22220
  state_valid=$(LOKI_STATE_FILE="$state_file" python3 -E -c "
@@ -22367,7 +22367,7 @@ def extract_tasks(filepath, prefix):
22367
22367
  # This was `tasks[:3]`, applied SEPARATELY to in-progress.json and
22368
22368
  # pending.json. A release doc decomposed into 5 tasks silently lost 2
22369
22369
  # from each file: the agent received a plan it was never told was
22370
- # truncated, and the founder-facing case ("hand it a release doc") was
22370
+ # truncated, and the user-facing case ("hand it a release doc") was
22371
22371
  # quietly capped at 3.
22372
22372
  #
22373
22373
  # A count is the wrong bound anyway: one rich PRD task with a 300-char
@@ -25200,7 +25200,7 @@ except Exception:
25200
25200
  fi
25201
25201
 
25202
25202
  # Notify dashboard of active project directory (for AI Chat cross-directory usage)
25203
- # S-195: skip when the dashboard is off (runtime flag, not LOKI_DASHBOARD).
25203
+ # skip when the dashboard is off (runtime flag, not LOKI_DASHBOARD).
25204
25204
  if [[ "${ENABLE_DASHBOARD:-true}" == "true" ]] && command -v curl &>/dev/null; then
25205
25205
  local project_cwd
25206
25206
  project_cwd="$(pwd)"