Loki Mode v8.0.1
Patch release. Every change is a bug fix; no behavior a working v8.0.0 install
depends on was altered.
Trust core
- The Evidence Receipt attested to an understated diff.
_git_diffstat
computed the receipt's stat against_LOKI_ITER_START_SHA-- the
per-ITERATION baseline, which is re-captured to current HEAD at the top of
every iteration -- while presenting the result as run-level. A multi-iteration
run therefore attested only to changes since its last iteration, and that
count feedsdiff_sha256, the integrity hash written on every run. Measured
on a real 2-commit run: 850 insertions + 76 deletions reported where the run
produced 1479 across 10 files. Now resolves the run-level baseline, falls back
to the empty tree for greenfield runs, and recordsbase_shafrom the same
baseline the diff used so a verifier recomputing it cannot disagree. - The verifier rejected the greenfield baseline it is meant to accept.
_rev_resolvableprobed only<ref>^{commit}; the empty tree is a TREE, so
genuine proofs failed with "base ref unresolvable". Fixed without loosening
the forgery defense -- fabricated, all-zero, and garbage SHAs are all still
rejected.
Reporting
Every gate decision examined during this work was a TRUE positive. The defects
were in how those correct decisions were reported.
- A greenfield run reported
files_changed: 0for work it had done. A build
that produced 4 spec-required files and passed 28/28 of its own tests told the
user nothing was changed. Now diffs against the empty tree when no baseline
commit exists: the same artifact reports 9 files, 1300 insertions. PAUSED.mdnever said why it paused. It was static boilerplate. It now
names the blocking gate, its failure count and threshold, the findings path,
and what was built before the pause.- Terminal outcomes gave no next step. Guidance was reachable only for
complete|max_iterationsANDfiles_changed == 0, sointervention,
failed,stopped,force_stoppedandinconclusive_spec_contradiction
got nothing -- exactly the outcomes where a user is stuck. Each now names a
concrete next action, and the guidance is independent of the file count. loki doctorhid the inline-image protocol when bun was absent. The
Cockpit section printed "Render path" but not "Inline-image protocol", so a
user could not tell whether their terminal was unsupported or simply never
probed.
CI and portability
The Tests workflow had not started for four days: a secrets reference in a
step-level if: is rejected at parse time, so ZERO jobs were created and the
only symptom was "workflow file issue". Fixing that surfaced a backlog of
platform bugs, each of which reported a product failure for an environment
difference:
tar tzf | grep -qunderpipefailreported a missing tarball artifact that
was present --grep -qcloses the pipe and GNU tar dies of SIGPIPE.- GNU
stat -fmeans "filesystem status" and exits 0, so a macOS-first
stat -f ... || stat -c ...never fell through on Linux (5 suites). - An apostrophe inside a quoted heredoc nested in
$( )makes macOS bash 3.2
reject the whole file, breaking both macOS Bun jobs. - Three suites grepped a hardcoded
/Users/<name>/git/loki-modecheckout, and
two pinned/opt/homebrew/bin/python3.12. - The shell-tests job installed a hand-maintained dependency subset missing
sqlalchemy, failing five suites on one import; it now installs from
requirements-test.txt. import mcpresolved to this repo's ownmcp/directory rather than the SDK,
so a preflight guard passed with no SDK installed at all.
New guards prevent each class from returning: bash 3.2 parse compatibility,
stat ordering, hardcoded home and toolchain paths, greenfield diff-stat,
per-outcome guidance, and the receipt's run-level baseline. Every guard was
verified non-vacuous by reintroducing the bug it exists to catch.