loki-mode 11.74.1 → 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.
- package/README.md +1 -1
- package/SKILL.md +2 -3
- package/VERSION +1 -1
- package/autonomy/completion-council.sh +10 -10
- package/autonomy/council-v2.sh +4 -4
- package/autonomy/grill.sh +1 -1
- package/autonomy/lib/browser-open.sh +1 -1
- package/autonomy/lib/chat.sh +1 -1
- package/autonomy/lib/cockpit-render.sh +1 -1
- package/autonomy/lib/done-recognition.sh +4 -4
- package/autonomy/lib/efficiency_cost.py +1 -1
- package/autonomy/lib/engine10-push.sh +2 -2
- package/autonomy/lib/prd-enrich.sh +1 -1
- package/autonomy/lib/proof-check.sh +1 -1
- package/autonomy/lib/proof-generator.py +3 -3
- package/autonomy/lib/proof-pr.sh +1 -1
- package/autonomy/lib/skill-link-heal.sh +1 -1
- package/autonomy/lib/voter-agents.sh +1 -1
- package/autonomy/loki +26 -37
- package/autonomy/prd-checklist.sh +1 -1
- package/autonomy/receipt_jwt.py +1 -1
- package/autonomy/run.sh +28 -28
- package/autonomy/trigger-schedule.py +6 -414
- package/autonomy/tui.sh +1 -1
- package/autonomy/verify.sh +4 -4
- package/completions/loki.bash +0 -5
- package/dashboard/__init__.py +1 -1
- package/docs/ARCHITECTURE.md +1 -2
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/COMPONENTS.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/ROUTING-EVIDENCE.md +1 -2
- package/docs/V10-RESEARCH.md +1 -1
- package/docs/dev/architecture-reference.md +3 -7
- package/docs/dev/project-structure.md +1 -4
- package/docs/dev/release-checklist.md +13 -31
- package/docs/research-2026-07/OBSERVABILITY-TOOL-SPEC.md +1 -1
- package/docs/v11/MARKET-SLICES.md +1 -1
- package/docs/v11/REGISTRIES.md +1 -1
- package/docs/v11/ROUTER-1.md +2 -2
- package/loki-ts/dist/loki.js +2 -2
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/skills/extending.md +2 -3
- package/skills/factory-operations.md +11 -18
- package/skills/release-cadence.md +2 -2
- package/web-app/dist/assets/{AdminPage-BJm9y_qE.js → AdminPage-xKgtIhk2.js} +1 -1
- package/web-app/dist/assets/{Avatar-EEiOX0Y0.js → Avatar-Q14AHox9.js} +1 -1
- package/web-app/dist/assets/{Badge-ZXM82z0d.js → Badge-yk5M-lip.js} +1 -1
- package/web-app/dist/assets/{Button-BTMAbQBv.js → Button-ynznk0At.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-BaorxOYw.js → CockpitPage-C8B765za.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BxhA3QxZ.js → ComparePage-DqzmWKnf.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-DGIdCZdm.js → ErrorBoundary-DdBPd_Lq.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-OgHK5zmn.js → EvidenceReceiptPanel-jb4Tp38b.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-Bx89fXVx.js → GitHubIssuesPanel-xJQiLcxs.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-cuzSw_N3.js → GitHubPRsPanel-84W3Dhk_.js} +1 -1
- package/web-app/dist/assets/{HomePage-B-XP9eTl.js → HomePage-St1Xl2tu.js} +2 -2
- package/web-app/dist/assets/{LoginPage-DuNSWyVy.js → LoginPage-jRt0NUHb.js} +1 -1
- package/web-app/dist/assets/{MagicPage-DEqUoT0l.js → MagicPage-CQLFe7LR.js} +1 -1
- package/web-app/dist/assets/{MetricsPage--rnXkkOt.js → MetricsPage-zzX9eTC5.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-BLCJKK70.js → NotFoundPage-DDu023SY.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-BtF37a4e.js → ProjectPage-D60UURaH.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-BmRyPzwL.js → ProjectsPage-DqVsKxlt.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-Cg3fgOLx.js → SettingsPage-G7pPKvo0.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-CD25qTmg.js → ShowcasePage-CrU_aKgS.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-DNrCZvNp.js → SystemSettingsPage-ClKGQFsB.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-Bpe58D0B.js → TeamsPage-B530vSNe.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-Cwl_bmhO.js → TemplatesPage-COmv_Cqd.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-DYgZnII2.js → TerminalOutput-CufG9YzF.js} +1 -1
- package/web-app/dist/assets/{activity-CsVLJUZG.js → activity-Ct1Updr6.js} +1 -1
- package/web-app/dist/assets/{bell-DCcGk9Ub.js → bell-rcvhQuGr.js} +1 -1
- package/web-app/dist/assets/{bot-BaAaPto-.js → bot-DzeqEI-b.js} +1 -1
- package/web-app/dist/assets/{check-Dy8Lpprr.js → check-zacnZHyC.js} +1 -1
- package/web-app/dist/assets/{chevron-left-CiX3YEuG.js → chevron-left-Lxnkl8Qg.js} +1 -1
- package/web-app/dist/assets/{circle-alert-Bm2AEdEx.js → circle-alert-DoqSdQdB.js} +1 -1
- package/web-app/dist/assets/{clock-D1nWLjJm.js → clock-B7bJcVIC.js} +1 -1
- package/web-app/dist/assets/{cloud-Bp-p2q6I.js → cloud-DdA9Bu6q.js} +1 -1
- package/web-app/dist/assets/{code-xml-Crt8tNsY.js → code-xml-CAZEZ9T8.js} +1 -1
- package/web-app/dist/assets/{database-0lcGHtpv.js → database-Da2GkEIN.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-cup3uE0C.js → dollar-sign-DjDiG-37.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-jPdCMfoJ.js → file-code-corner-CSL-Jij-.js} +1 -1
- package/web-app/dist/assets/{file-plus-CncZcY9z.js → file-plus-02DRA8pV.js} +1 -1
- package/web-app/dist/assets/{globe-BvCLfBOs.js → globe-CGyB90kK.js} +1 -1
- package/web-app/dist/assets/{hammer-CG7gCbza.js → hammer-BaQB96TG.js} +1 -1
- package/web-app/dist/assets/{index-C5sRHsGA.js → index-lcoI1_Kk.js} +3 -3
- package/web-app/dist/assets/{layers-BPIeLcUT.js → layers-BWJBvoeg.js} +1 -1
- package/web-app/dist/assets/{loader-circle-wH9n2Xbt.js → loader-circle-CdcI0FeS.js} +1 -1
- package/web-app/dist/assets/{lock-D_CuUhM7.js → lock-BBkw5NJx.js} +1 -1
- package/web-app/dist/assets/{package-137A8C6B.js → package-BpPRO3LM.js} +1 -1
- package/web-app/dist/assets/{plus-QVF6Q3NZ.js → plus-D7XbyK29.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-Dq_1uZWi.js → refresh-cw-DLG3hyAi.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Dyzxf9m5.js → rotate-ccw-Bqau4R_S.js} +1 -1
- package/web-app/dist/assets/{scroll-text-DrYmLoL4.js → scroll-text-BtIL3cNk.js} +1 -1
- package/web-app/dist/assets/{server-QWBqdl1e.js → server-tZCmZ4yH.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DOZLbVQY.js → shield-alert-K5JXzFKg.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-CUKmG90b.js → thumbs-up-CHCVyJdw.js} +1 -1
- package/web-app/dist/assets/{trash-2-Cxx8CMS1.js → trash-2-DncNxVq0.js} +1 -1
- package/web-app/dist/assets/{trending-down-CU5sNvAx.js → trending-down-D8Bp0azX.js} +1 -1
- package/web-app/dist/assets/{trending-up-BV8fTyhT.js → trending-up-AixETdKR.js} +1 -1
- package/web-app/dist/assets/{upload-DsSmwrGn.js → upload-VCbjFn2H.js} +1 -1
- package/web-app/dist/assets/{usePolling-MdyOyVKa.js → usePolling-CQvKD2Jj.js} +1 -1
- package/web-app/dist/assets/{user-DblryVAt.js → user-SK-YguQ6.js} +1 -1
- package/web-app/dist/index.html +1 -1
- package/autonomy/company-seats.json +0 -82
- package/docs/COMPETITIVE-INTEL-2026-09.md +0 -444
- package/docs/FOUNDER-DECISIONS-TRUST-SEMANTICS-2026-08-01.md +0 -145
- package/docs/FOUNDER-STATUS-AND-DECISIONS-2026-07-01.md +0 -132
- package/docs/LOKI-10-BUILD-PROMPT.md +0 -350
- package/docs/STRATEGY-2026-2028.md +0 -124
- package/docs/V10-VISION.md +0 -161
- package/docs/v10/ADOPTION-PLAN.md +0 -375
- package/docs/v10/ARCHITECT-CUTS.md +0 -744
- package/docs/v10/BACKLOG.md +0 -231
- package/docs/v10/BOARD.md +0 -1403
- package/docs/v10/CONTROL-PLANE.md +0 -120
- package/docs/v10/CONTROL.md +0 -36
- package/docs/v10/CP-ASK-PLAN.md +0 -85
- package/docs/v10/CP-ENTERPRISE-UI.md +0 -537
- package/docs/v10/D51-PHASE-B.md +0 -120
- package/docs/v10/D61-SPEED.md +0 -105
- package/docs/v10/D63-CARDS.md +0 -354
- package/docs/v10/DECISIONS.md +0 -915
- package/docs/v10/E2E-D65.md +0 -123
- package/docs/v10/ENGINE-LAWS.md +0 -163
- package/docs/v10/ENGINE-MEASURE.md +0 -69
- package/docs/v10/ENGINE.md +0 -743
- package/docs/v10/FAILURE-CLASSES.md +0 -2025
- package/docs/v10/FC21B-FC22-PLAN.md +0 -107
- package/docs/v10/FIRST-RUN-GATE.md +0 -39
- package/docs/v10/FOUNDER-QUEUE.md +0 -29
- package/docs/v10/GAP-RESEARCH-1003.md +0 -32
- package/docs/v10/GUARDS.md +0 -883
- package/docs/v10/L0-WAVE1.md +0 -81
- package/docs/v10/LEGACY-REMOVAL.md +0 -408
- package/docs/v10/MEDIUM-ANALYSIS.md +0 -346
- package/docs/v10/METRICS.md +0 -645
- package/docs/v10/MODERNIZE.md +0 -437
- package/docs/v10/OPENCODE-PARITY-PLAN.md +0 -84
- package/docs/v10/OPERATING-MODEL.md +0 -60
- package/docs/v10/PLAN-V12.md +0 -896
- package/docs/v10/PROGRESS.md +0 -2735
- package/docs/v10/RELEASE-11.md +0 -77
- package/docs/v10/RETRO-2026.md +0 -650
- package/docs/v10/ROADMAP-D63.md +0 -35
- package/docs/v10/SCALE.md +0 -140
- package/docs/v10/SCORECARD-PLAN.md +0 -250
- package/docs/v10/SWARM-PROMPT.md +0 -98
- package/docs/v10/SWARM.md +0 -293
- package/docs/v10/cp-redesign/PARITY.md +0 -188
- package/docs/v10/cp-redesign/legacy/INDEX.md +0 -1167
- package/docs/v10/roadmap-10/01-measurement.md +0 -113
- package/docs/v10/roadmap-10/02-cost.md +0 -75
- package/docs/v10/roadmap-10/03-speed.md +0 -65
- package/docs/v10/roadmap-10/04-first-run.md +0 -61
- package/docs/v10/roadmap-10/05-deploy.md +0 -61
- package/docs/v10/roadmap-10/06-stability.md +0 -64
- package/docs/v10/roadmap-10/07-quality.md +0 -57
- package/docs/v10/roadmap-10/08-proof.md +0 -48
- package/docs/v10/roadmap-10/09-safety.md +0 -74
- package/docs/v10/roadmap-10/README.md +0 -1464
- package/skills/sdlc-fleet.md +0 -170
- package/tools/cockpit/SPEC.md +0 -275
- package/tools/cockpit/index.html +0 -146
- package/tools/cockpit/roi-basis.json +0 -33
- 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
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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 (
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
#
|
|
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
|
|
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
|
|
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
|
-
#
|
|
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)"
|