loki-mode 9.8.0 → 9.12.0
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 +19 -14
- package/SKILL.md +3 -2
- package/VERSION +1 -1
- package/autonomy/loki +122 -1
- package/autonomy/run.sh +49 -2
- package/dashboard/__init__.py +1 -1
- package/dashboard/api_evidence.py +411 -0
- package/dashboard/api_operator.py +283 -0
- package/dashboard/api_phases.py +262 -0
- package/dashboard/api_releases.py +242 -0
- package/dashboard/api_runs.py +477 -0
- package/dashboard/api_tests.py +444 -0
- package/dashboard/api_v2.py +47 -1
- package/dashboard/server.py +54 -0
- package/dashboard/static/index.html +246 -135
- package/docs/ARCHITECTURE-OVERVIEW.md +5 -3
- package/docs/CAPABILITY-BACKLOG.md +53 -0
- package/docs/COMPARISON.md +2 -2
- package/docs/COMPETITIVE-ANALYSIS.md +1 -1
- package/docs/COMPETITIVE-SCORECARD.md +422 -0
- package/docs/DASHBOARD-9.12-EVIDENCE.md +97 -0
- package/docs/DASHBOARD-ARCHITECTURE.md +423 -0
- package/docs/DEMOS.md +21 -23
- package/docs/HANDOFF-2026-08-03.md +439 -0
- package/docs/INSTALLATION.md +17 -10
- package/docs/OUTCOME-FRONTIER.md +536 -0
- package/docs/PROMPT-ABLATION-RESULT.md +97 -0
- package/docs/TOOLS.md +800 -0
- package/docs/alternative-installations.md +2 -3
- package/docs/audit-logging.md +44 -35
- package/docs/authentication.md +13 -2
- package/docs/authorization.md +87 -81
- package/docs/git-workflow.md +6 -3
- package/docs/metrics.md +15 -16
- package/docs/network-security.md +16 -13
- package/docs/openclaw-integration.md +36 -556
- package/docs/show-hn-post.md +2 -2
- package/docs/siem-integration.md +39 -36
- package/loki-ts/dist/loki.js +18 -18
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/references/confidence-routing.md +18 -1
- package/references/invariant-checks.md +13 -8
- package/references/magic-rarv-integration.md +0 -1
- package/references/multi-provider.md +27 -5
- package/skills/healing.md +4 -2
- package/tools/audit-docs.py +488 -0
- package/tools/baseline-pin.py +19 -1
- package/tools/calibration-audit.py +523 -0
- package/tools/ci-gate.py +19 -1
- package/tools/cost-forecast.py +344 -0
- package/tools/cost-guard.py +19 -1
- package/tools/cost-history.py +19 -1
- package/tools/cost-per-outcome.py +394 -0
- package/tools/estimate-run.py +19 -1
- package/tools/evidence-freshness.py +307 -0
- package/tools/gate-init.py +19 -1
- package/tools/gate-report.py +19 -1
- package/tools/gate-simulate.py +570 -0
- package/tools/gate-trend.py +354 -0
- package/tools/model-advisor.py +52 -1
- package/tools/policy-load.py +19 -1
- package/tools/prompt-cost.py +363 -0
- package/tools/prompt-diff.py +448 -0
- package/tools/prompt-lint.py +448 -0
- package/tools/receipt-bundle.py +72 -2
- package/tools/receipt-diff.py +19 -1
- package/tools/receipt-find.py +19 -1
- package/tools/receipt-stats.py +380 -0
- package/tools/receipt-timeline.py +478 -0
- package/tools/receipt-verify-batch.py +291 -0
- package/tools/run-replay.py +19 -1
- package/tools/signing-status.py +19 -1
- package/tools/token-guard.py +19 -1
- package/tools/token-tax.py +375 -0
- package/tools/tool-index.py +19 -1
- package/tools/verification-tax.py +277 -0
- package/tools/verify-chain.py +361 -0
|
@@ -67,8 +67,10 @@ What you get:
|
|
|
67
67
|
the changed files (secret-leak axis) - v8.0.0, `SKILL.md`.
|
|
68
68
|
|
|
69
69
|
Provider-agnostic (stable since v5.0.0): Claude (Tier 1, full), Cline (Tier 2),
|
|
70
|
-
Codex and Aider (Tier 3, degraded, sequential)
|
|
71
|
-
`
|
|
70
|
+
Codex and Aider (Tier 3, degraded, sequential), opencode (sequential). With
|
|
71
|
+
`LOKI_PROVIDER` unset, auto-detection picks the first installed provider in that
|
|
72
|
+
order (`providers/loader.sh:191`); an explicit choice always wins. Gemini was
|
|
73
|
+
removed as a provider in v7.5.18. See `skills/providers.md`.
|
|
72
74
|
|
|
73
75
|
---
|
|
74
76
|
|
|
@@ -168,7 +170,7 @@ in `autonomy/completion-council.sh`; proof generation in
|
|
|
168
170
|
sequenceDiagram
|
|
169
171
|
participant Runner as run_autonomous (run.sh)
|
|
170
172
|
participant Prompt as build_prompt
|
|
171
|
-
participant Provider as Provider (Claude/Codex/
|
|
173
|
+
participant Provider as Provider (Claude/Cline/Codex/Aider/opencode)
|
|
172
174
|
participant Verify as Gates + council
|
|
173
175
|
participant Evidence as Evidence gate
|
|
174
176
|
participant Council as completion council
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Capability Backlog
|
|
2
|
+
|
|
3
|
+
Generated 2026-08-03. Companion to `docs/COMPETITIVE-SCORECARD.md`.
|
|
4
|
+
|
|
5
|
+
Gaps are referenced by their number in that file's section 4 ("What we do NOT
|
|
6
|
+
know") and are not restated here. Ordering is by pillars unblocked per unit of
|
|
7
|
+
free work, where "free" means no paid model calls and no third-party installs.
|
|
8
|
+
|
|
9
|
+
Pillar numbers refer to the seven-pillar system in the scorecard's "How to read
|
|
10
|
+
this document" section.
|
|
11
|
+
|
|
12
|
+
## Priority order
|
|
13
|
+
|
|
14
|
+
| # | Item | Closes | Pillars | Free? | Measurement that closes it |
|
|
15
|
+
|---|---|---|---|---|---|
|
|
16
|
+
| 1 | Verification tax instrumentation | Gap 13 | 5, 7 | Yes | SHIPPED 2026-08-03, partial. `tools/verification-tax.py` + 14 tests. First reading: 19.0s wall, outcome changed 1/1. Remaining: token cost, and hit rate over real history |
|
|
17
|
+
| 2 | Confidence calibration audit | Gap 14 | 3, 5 | Yes | Reliability diagram of self-reported confidence against observed outcome, over existing run history |
|
|
18
|
+
| 3 | Provider parity measurement | Pillar 7 cell | 7 | No (paid) | Identical task across `--provider` values, scored on completion quality not flag presence |
|
|
19
|
+
| 4 | T0-T1 tier harness | Gaps 2, 11 | 1, 6 | No (paid) | Completion quality and intervention rate on single-file and multi-file tasks |
|
|
20
|
+
| 5 | T2-T4 architecture tiers | Gaps 2, 12 | 2, 3 | No (paid) | Same dimensions on migration, performance, and distributed-system tasks |
|
|
21
|
+
| 6 | T5 research tier | Gap 11 | 4 | No (paid) | Novelty and usefulness of a research result, needs a domain judge |
|
|
22
|
+
|
|
23
|
+
Items 3-6 require spend and are therefore not startable under the current
|
|
24
|
+
constraint. They are listed so the ordering is visible, not because they are
|
|
25
|
+
actionable now.
|
|
26
|
+
|
|
27
|
+
## Why item 1 is the slice
|
|
28
|
+
|
|
29
|
+
It is the only candidate that clears all four constraints: free, measurement
|
|
30
|
+
rather than new verification machinery, testable with one runnable check, and it
|
|
31
|
+
closes a numbered gap.
|
|
32
|
+
|
|
33
|
+
It is also a prerequisite rather than an end in itself. The mandated trajectory
|
|
34
|
+
for verification is toward near-zero overhead, applied selectively where
|
|
35
|
+
calibrated confidence is low. Neither "shrink the tax" nor "bypass it
|
|
36
|
+
selectively" can be validated as an improvement without a baseline for what the
|
|
37
|
+
tax currently costs and how often it earns its keep. Item 2 depends on item 1's
|
|
38
|
+
outcome-change data for the same reason.
|
|
39
|
+
|
|
40
|
+
Explicit non-goal: this must not become another gate, another artifact format, or
|
|
41
|
+
another blocking check. If the implementation starts adding verification
|
|
42
|
+
machinery rather than measuring the machinery that exists, it has failed its own
|
|
43
|
+
filter and should be stopped.
|
|
44
|
+
|
|
45
|
+
## Deliberately not on this list
|
|
46
|
+
|
|
47
|
+
- Any new gate, reviewer, council, or evidence format. The founder constraint is
|
|
48
|
+
to avoid building more verification machinery unless it directly unlocks
|
|
49
|
+
broader capability. Items 1 and 2 measure existing machinery so it can be made
|
|
50
|
+
cheaper or skipped; neither adds any.
|
|
51
|
+
- Marketing-facing comparison content. The scorecard is an evidence ledger and
|
|
52
|
+
two thirds of it is UNKNOWN; it is not ready to be a positioning asset and
|
|
53
|
+
should not be turned into one.
|
package/docs/COMPARISON.md
CHANGED
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
| **npm/wk** | 6.1K | 21.4K | N/A | N/A | N/A | N/A | N/A |
|
|
213
213
|
| **Agents** | 41 roles in 8 domains | 11 agents | Fresh per task | 108 agents | Swarm-based | 32 agents | N/A |
|
|
214
214
|
| **Skills** | Progressive disclosure | 6 slash commands | N/A | 129 skills | N/A | 35 skills | Memory focus |
|
|
215
|
-
| **Multi-Provider** | Yes (Claude/Codex/
|
|
215
|
+
| **Multi-Provider** | Yes (Claude/Cline/Codex/Aider/opencode) | 3 CLIs (separate) | No | No | No | No | No |
|
|
216
216
|
| **Memory System** | 3-tier (episodic/semantic/procedural) | None | N/A | N/A | Hybrid | N/A | SQLite+FTS5 |
|
|
217
217
|
| **Quality Gates** | 8 gates + Completion Council | User verify only | Two-Stage Review | N/A | Consensus | Tiered | N/A |
|
|
218
218
|
| **Context Mgmt** | Standard | Fresh per task (core innovation) | Fresh per task | N/A | N/A | N/A | Progressive |
|
|
@@ -237,7 +237,7 @@ These are patterns from competing projects that are **practically and scientific
|
|
|
237
237
|
|
|
238
238
|
| Strength | Details | Competitors Lacking This |
|
|
239
239
|
|----------|---------|-------------------------|
|
|
240
|
-
| **Multi-Provider Support** |
|
|
240
|
+
| **Multi-Provider Support** | Supports Claude, Cline, Codex, Aider, and opencode with graceful degradation | The 8 competitors compared here are Claude-only |
|
|
241
241
|
| **RARV Cycle** | Reason-Act-Reflect-Verify is more rigorous than Plan-Execute | Most use simple Plan-Execute |
|
|
242
242
|
| **8-Gate Quality System** | Static analysis + test suite (pass/fail) + 3 blind reviewers with severity blocking + devil's advocate + mock-integrity + test-mutation + documentation coverage + Magic Modules debate (backward-compat is a conditional healing auditor) + Phase 1 closure | Superpowers has 2-stage, others have less |
|
|
243
243
|
| **Constitutional AI Integration** | Principles-based self-critique from Anthropic research | None have this |
|
|
@@ -24,7 +24,7 @@ GSD is the closest competitor -- a context engineering system that spawns fresh
|
|
|
24
24
|
| Memory system | Episodic/semantic/procedural + vector search | None | Loki |
|
|
25
25
|
| Context management | Standard | Fresh subagent contexts per task (core innovation) | GSD |
|
|
26
26
|
| Time to value | Learn architecture, understand CLI flags | `npx get-shit-done-cc` and go | GSD |
|
|
27
|
-
| Multi-provider | Orchestrates across Claude/Codex/
|
|
27
|
+
| Multi-provider | Orchestrates across Claude/Cline/Codex/Aider/opencode with degraded mode | Installs separately to each | Loki |
|
|
28
28
|
| Real-world proof | No public case studies | Testimonials, 1.1K forks, 75 PRs | GSD |
|
|
29
29
|
|
|
30
30
|
**Key takeaway:** GSD proved the market wants sharp blades, not Swiss Army knives. Loki Mode's Completion Council and quality gates are genuinely unique IP that no competitor has.
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
# Competitive Scorecard
|
|
2
|
+
|
|
3
|
+
Generated 2026-08-03 against Loki Mode v9.8.1.
|
|
4
|
+
|
|
5
|
+
Every cell in this document is one of three things and nothing else:
|
|
6
|
+
|
|
7
|
+
- `[measured]` - reproduced on this machine with a command in the "How to reproduce"
|
|
8
|
+
section, whose output is pasted here or in that section.
|
|
9
|
+
- `[sourced: URL]` - taken from a public page that was actually fetched on
|
|
10
|
+
2026-08-03. Vendor marketing claims are labelled `vendor-claimed` and are not
|
|
11
|
+
treated as fact.
|
|
12
|
+
- `UNKNOWN` - not measured and not sourced. This is a legitimate and common answer
|
|
13
|
+
in this document.
|
|
14
|
+
|
|
15
|
+
There is deliberately no fourth category in the axis table. Unmarked guesses do
|
|
16
|
+
not appear.
|
|
17
|
+
|
|
18
|
+
One exception, quarantined: section 2b is a **planned** benchmark design. Nothing
|
|
19
|
+
in it has been run, none of it is evidence, and it is excluded from the cell
|
|
20
|
+
counts below. It is separated precisely so it can never be mistaken for a result.
|
|
21
|
+
|
|
22
|
+
**Cell census** (the 48 axis-table cells in section 2, being 6 axes x 8 products):
|
|
23
|
+
**10 measured, 5 sourced, 33 UNKNOWN**. Two thirds of this document is an
|
|
24
|
+
admission of ignorance, which is the honest state of the evidence.
|
|
25
|
+
|
|
26
|
+
This file is distinct from `docs/COMPETITIVE-ANALYSIS.md`, which is a narrative
|
|
27
|
+
positioning document. This one is an evidence ledger and makes no claim it cannot
|
|
28
|
+
back with a pasted command output or a fetched URL. Where the two disagree, this
|
|
29
|
+
file is the one with the receipts; no attempt is made here to reconcile them.
|
|
30
|
+
|
|
31
|
+
## How to read this document (scope limits)
|
|
32
|
+
|
|
33
|
+
Two limits on what these measurements mean. Both narrow the document; neither
|
|
34
|
+
softens a single cell.
|
|
35
|
+
|
|
36
|
+
**Verification is one sub-axis, not the thesis.** The evidence-document
|
|
37
|
+
capability measured below is adaptive scaffolding: useful at today's model
|
|
38
|
+
capability, expected to become progressively cheaper, more selective, and ideally
|
|
39
|
+
invisible as frontier models get better. The correct trajectory for it is toward
|
|
40
|
+
near-zero overhead, applied where calibrated confidence is low and bypassed where
|
|
41
|
+
it is high - not toward a permanent tollbooth on every build. Pillar 7 sharpens
|
|
42
|
+
this: an orchestration layer is supposed to benefit automatically from model
|
|
43
|
+
improvement rather than be displaced by it, so a verification tax that stays
|
|
44
|
+
fixed while models improve converts from an asset into precisely the drag that
|
|
45
|
+
displaces us. A scorecard row that looks like a win today is therefore a snapshot
|
|
46
|
+
of a gap we intend to make matter less. Do not read the observability row as the
|
|
47
|
+
product's reason to exist, and do not let a competitor closing that gap read as a
|
|
48
|
+
strategic loss. In the structure below, verification appears as one sub-axis of
|
|
49
|
+
observability and as one scored dimension of the proposed benchmark - nowhere as
|
|
50
|
+
the organising claim.
|
|
51
|
+
|
|
52
|
+
**These six axes do not measure the durable ambition.** The stated ambition is
|
|
53
|
+
frontier software-and-research execution at arbitrary complexity, framed as a
|
|
54
|
+
compound capability system of six pillars. The table below barely touches any of
|
|
55
|
+
them:
|
|
56
|
+
|
|
57
|
+
| Pillar | Covered by this table? |
|
|
58
|
+
|---|---|
|
|
59
|
+
| 1. Outcome intelligence - ambiguous intent to excellent products/research, not merely passing tests | No. Nothing here measures outcome quality. |
|
|
60
|
+
| 2. Architecture depth - massive repos, distributed systems, migrations, performance, security, UX, data, infra, long-horizon evolution | No. Deepest probe was a 5-file diff. |
|
|
61
|
+
| 3. Adaptive autonomy - dynamic planning/replanning, hierarchical agents, memory, simulation, tool/model routing, recovery, learning from outcomes | No. Not probed at all. |
|
|
62
|
+
| 4. Scientific research - literature/web/code/data synthesis, hypothesis generation, experiment design, reproducibility, statistical rigor | No. Not probed at all. |
|
|
63
|
+
| 5. Economics - best quality-adjusted completion per dollar and wall-clock, budget-aware routing, minimal coordination/verification tax | Barely. One prompt-size ablation, no quality-adjusted or wall-clock figure. |
|
|
64
|
+
| 6. Developer experience - fastest intent to trustworthy shipped value, excellent observability/control, easy onboarding, graceful human collaboration | Partially, and only as affordances. The onboarding and observability rows list which commands exist; no one was timed, and "graceful human collaboration" is untested. |
|
|
65
|
+
| 7. Extensibility/independence - model-agnostic orchestration that benefits automatically from exponential model improvement rather than being displaced by it | Partially, and the flag overstates it. `loki start --provider claude\|codex\|cline\|aider` exists `[measured]` from `loki --help`, but whether quality holds across providers is unmeasured. Concretely: this machine has `codex-cli 0.146.0` `[measured]`, while the repo still classifies Codex as Tier 3 on v0.98-era flag assumptions (CLAUDE.md). A provider flag that exists against stale assumptions is a capability claim, not an independence result - the same conflation this document polices elsewhere. |
|
|
66
|
+
|
|
67
|
+
The axes in this document are process-and-plumbing axes, and passing all of them
|
|
68
|
+
could coexist with mediocre outcomes. In particular the "quality of completion"
|
|
69
|
+
row measures whether a verdict was produced by an independent runner - it does
|
|
70
|
+
not measure whether the resulting software was any good. Note also that pillar 5
|
|
71
|
+
names the verification tax as a cost to minimise, which is the same direction as
|
|
72
|
+
the scaffolding point above: the observability row measures a capability whose
|
|
73
|
+
own overhead is a tax the roadmap intends to shrink. Treat any gap in this table
|
|
74
|
+
as necessary, not sufficient, evidence. The benchmarks that would test the real
|
|
75
|
+
ambition do not exist yet; the gaps are enumerated in section 4.
|
|
76
|
+
|
|
77
|
+
## 1. Honest summary
|
|
78
|
+
|
|
79
|
+
Thirty-three of the 48 cells in this table are UNKNOWN, and that is the headline.
|
|
80
|
+
Three of the six axes (reliability, time-to-first-success, quality of completion)
|
|
81
|
+
are UNKNOWN for every product including Loki Mode, because we have run no
|
|
82
|
+
head-to-head build benchmark and any number there would be invented. None of the
|
|
83
|
+
seven capability pillars that constitute the actual ambition - outcome
|
|
84
|
+
intelligence, architecture depth, adaptive autonomy, scientific research,
|
|
85
|
+
economics, developer experience, extensibility - is measured here at all; pillars
|
|
86
|
+
3 and 4 are entirely unprobed. Every difference this document did find is a
|
|
87
|
+
difference in **CLI affordances**, not in outcomes: what a tool's `--help`
|
|
88
|
+
advertises is not what it delivers. Within that narrow frame, the one capability
|
|
89
|
+
no competitor matched is a persisted, schema-versioned evidence document with a
|
|
90
|
+
freshness re-check (`loki verify --json` emitted a `schema_version: "1.0"` doc
|
|
91
|
+
with a per-gate `runner` field and exit code 2; `--check-fresh` then correctly
|
|
92
|
+
returned STALE once the tree moved). That is one sub-axis of observability, it is
|
|
93
|
+
adaptive scaffolding rather than an identity, and its value is expected to decline
|
|
94
|
+
as models improve - see "How to read this document" above. It is emphatically not
|
|
95
|
+
a claim to be the only tool with review or machine-readable output; the opposite
|
|
96
|
+
is true and competitors are close. Claude Code ships `ultrareview --json`, a
|
|
97
|
+
cloud-hosted multi-agent review printing a raw `bugs.json` payload; Codex ships a
|
|
98
|
+
first-class `codex review` subcommand plus `exec --json` and `--output-schema`;
|
|
99
|
+
cursor-agent has `--output-format json|stream-json`; OpenCode has `run --format
|
|
100
|
+
json`, `export`, and a working `stats`. Structured output is table stakes in 2026.
|
|
101
|
+
On cost we can cite exactly one in-repo measurement (the `LOKI_SIMPLE=1` prompt
|
|
102
|
+
ablation, -78% prompt size, ~1562 tokens/iteration) whose own README entry says
|
|
103
|
+
its effect on build speed and quality is not yet measured - a prompt-size number,
|
|
104
|
+
nothing about value delivered. Devin, Replit and Emergent were **not tested**:
|
|
105
|
+
Devin does publish a local CLI at cli.devin.ai which we deliberately did not
|
|
106
|
+
install, and Replit and Emergent appear to be web-only; all three of their rows
|
|
107
|
+
are sourced or UNKNOWN, never measured.
|
|
108
|
+
|
|
109
|
+
## 2. Axis table
|
|
110
|
+
|
|
111
|
+
Column key: the first five columns are CLIs installed and version-verified on this
|
|
112
|
+
machine. The last three ship no CLI we tested; their cells are sourced or UNKNOWN.
|
|
113
|
+
|
|
114
|
+
Verified versions `[measured]`, via `<cmd> --version`:
|
|
115
|
+
`claude 2.1.220 (Claude Code)` / `codex-cli 0.146.0` / `cursor-agent
|
|
116
|
+
2026.05.24-dda726e` / `opencode 1.18.9` / `Loki Mode v9.8.1`. (`aider 0.86.2` is
|
|
117
|
+
installed and probed; see footnote 1 rather than a column.)
|
|
118
|
+
|
|
119
|
+
### reliability
|
|
120
|
+
|
|
121
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
122
|
+
|---|---|---|---|---|---|---|---|
|
|
123
|
+
| UNKNOWN. No head-to-head reliability benchmark was run. What is `[measured]` is only that a deterministic gate run emits a per-gate pass/fail with a named runner (`tests: fail (jest)`, `static_analysis: pass (syntax)`, `dependency_audit: fail`) - the presence of gates is not a reliability measurement. | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN. Vendor references "SWE 1.7, our latest model" with no supporting benchmark data on the pricing page `[sourced: https://devin.ai/pricing]` | UNKNOWN. Vendor states the agent "is probabilistic - meaning it may occasionally make mistakes" `[sourced: https://replit.com/pricing]`; this is a disclaimer, not a metric | UNKNOWN `[sourced: https://app.emergent.sh/]` - no reliability or benchmark claim on the landing page |
|
|
124
|
+
|
|
125
|
+
### time-to-first-success
|
|
126
|
+
|
|
127
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
128
|
+
|---|---|---|---|---|---|---|---|
|
|
129
|
+
| UNKNOWN. Not measured. No build was run for this document. | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN |
|
|
130
|
+
|
|
131
|
+
This entire row is UNKNOWN by construction: measuring it requires running paid
|
|
132
|
+
model builds on a common task across eight products, which was out of scope and
|
|
133
|
+
would have cost money. Do not fill this row from vendor demos.
|
|
134
|
+
|
|
135
|
+
### quality of completion
|
|
136
|
+
|
|
137
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
138
|
+
|---|---|---|---|---|---|---|---|
|
|
139
|
+
| UNKNOWN as an outcome. `[measured]`: a verdict is computed only from executed gate rows, and `--explain` prints "pass = independent evidence (a real runner/scanner exit), never a self-assessment". Also `[measured]`: `llm_review.status = "skipped"` with reason "deterministic-only MVP ... blind council are deferred to Phase 2" - so the LLM review half of our own quality story is **not shipped** in `loki verify` today. | UNKNOWN as an outcome. `[measured]` from `claude ultrareview --help`: a cloud-hosted multi-agent code review exists with `--json` emitting a raw `bugs.json` payload. Not executed (paid). | UNKNOWN as an outcome. `[measured]` from `codex review --help`: a dedicated non-interactive review subcommand exists with `--uncommitted`, `--base <BRANCH>`, `--commit <SHA>`. Not executed (paid). | UNKNOWN | UNKNOWN | UNKNOWN. `[sourced: https://docs.devin.ai/]` - docs emphasise making "tasks easy to verify - e.g. checking that CI passes", described as manual verification, not a structured output format | UNKNOWN | UNKNOWN |
|
|
140
|
+
|
|
141
|
+
Note the discipline here: the existence of gates, councils or review subcommands
|
|
142
|
+
is a capability, not a quality measurement. Nobody in this row has a measured
|
|
143
|
+
quality-of-completion number, us included.
|
|
144
|
+
|
|
145
|
+
### cost
|
|
146
|
+
|
|
147
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
148
|
+
|---|---|---|---|---|---|---|---|
|
|
149
|
+
| Partially `[measured]`, in-repo: `LOKI_SIMPLE=1` strips the coaching half of the system prompt, measured at **-78% prompt size, ~1562 tokens per iteration**, on both the bash and Bun routes (`README.md:757`). The same README entry states plainly that "Whether it changes build speed or quality is NOT yet measured". So this is a prompt-size reduction, not a demonstrated cost-per-delivered-outcome win. Total cost per build: UNKNOWN. `loki report cost` exists `[measured]` from `loki help report`. | UNKNOWN (BYO model spend, not measured) | UNKNOWN (BYO model spend, not measured) | UNKNOWN | `[measured]` `opencode stats` runs locally and prints an OVERVIEW plus COST & TOKENS panel (this machine: 142 sessions, 3,441 messages, Avg Tokens/Session 1.4M, Total Cost $0.00 - the $0.00 reflects local config, not a claim about OpenCode's price) | `[sourced: https://devin.ai/pricing]` Free $0; Pro $20/mo; Max $200/mo; Team $80/mo base + $40/mo per seat; Enterprise custom. Cost per message varies by model and task complexity; overage at API rates | `[sourced: https://replit.com/pricing]` Starter free with daily agent credits; Core $20/mo annually with $25 monthly credits, up to 2 parallel agents; Pro $95/mo annually with $100 monthly credits, up to 10 parallel agents; Enterprise custom | UNKNOWN `[sourced: https://app.emergent.sh/]` - a Pricing link exists in nav but no figures on the landing page |
|
|
150
|
+
|
|
151
|
+
Cross-product cost comparison is deliberately **not** computed. The units are not
|
|
152
|
+
commensurable (subscription credits vs BYO token spend) and we have no
|
|
153
|
+
cost-per-completed-task figure for any product including our own.
|
|
154
|
+
|
|
155
|
+
### observability
|
|
156
|
+
|
|
157
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
158
|
+
|---|---|---|---|---|---|---|---|
|
|
159
|
+
| `[measured]` `loki verify --json` writes a persisted `evidence.json` with top-level keys `schema_version, verdict, exit_code, subject, produced_by, deterministic_gates, llm_review, findings, suppressed, scope`; verdict BLOCKED, exit_code 2. `--explain` prints a per-gate table with a RUNNER and REPRO column. `--check-fresh` re-reads a prior evidence doc and returned `VERDICT: STALE (worktree modified since 1c80c85ff059)`. `loki status --json`, `loki doctor --json`, `loki report cost/metrics/export`, and a dashboard server also exist `[measured]` from `loki --help`. | `[measured]` `--output-format text\|json\|stream-json` (with `--print`), `--json-schema` for structured output, `--include-partial-messages`; `ultrareview --json` emits raw `bugs.json`. No persisted on-disk evidence document or freshness re-check was found in `--help`. | `[measured]` `codex exec --json` prints events as JSONL; `--output-schema <FILE>` takes a JSON Schema for the final response shape; `-o/--output-last-message <FILE>` writes the last message to a file. `codex review --help` lists **no** `--json` and no evidence-file flag (grep for json/output flags on that subcommand returned 0 matches). `codex doctor` exists. | `[measured]` `--output-format text\|json\|stream-json` with `--print`, plus `--stream-partial-output`. No evidence artifact or freshness check found in `--help`. | `[measured]` `opencode run --format json` (raw JSON events), `opencode export [sessionID]` exports session data as JSON, `opencode stats` prints usage/cost, `opencode serve` headless server. Session export is not a verdict artifact. | UNKNOWN. `[sourced: https://docs.devin.ai/]` - a Devin API is referenced; docs list no machine-readable verdict or evidence artifact | UNKNOWN | UNKNOWN |
|
|
160
|
+
|
|
161
|
+
This is the row where the honest differentiator lives, and it is narrow. Four of
|
|
162
|
+
five installed competitors emit structured JSON. What was not found in any
|
|
163
|
+
competitor's help output is a **persisted verdict document plus a staleness
|
|
164
|
+
re-check** (`--check-fresh`). "Not found in help output" is weaker than "does not
|
|
165
|
+
exist" - see section 4.
|
|
166
|
+
|
|
167
|
+
### onboarding
|
|
168
|
+
|
|
169
|
+
| Loki Mode | Claude Code | Codex CLI | cursor-agent | OpenCode | Devin | Replit | Emergent |
|
|
170
|
+
|---|---|---|---|---|---|---|---|
|
|
171
|
+
| `[measured]` from `loki --help`: a dedicated first-run path is printed at the top of help - `loki welcome`, `loki doctor`, `loki quickstart`, `loki start ./prd.md`, plus `loki next` ("Run the right next step for you"). Whether this reduces real time-to-first-build: UNKNOWN, not user-tested. | `[measured]` `claude doctor` subcommand; interactive session is the default with no subcommand. | `[measured]` `codex doctor` ("Diagnose local Codex installation, config, auth, and runtime health"); interactive by default; `codex login`. | `[measured]` interactive by default; `install-shell-integration` subcommand. | `[measured]` TUI is the default command; `opencode providers/auth` for credentials; `opencode upgrade`. | `[sourced: https://docs.devin.ai/]` a local CLI ("Devin for Terminal") installs via `curl -fsSL https://cli.devin.ai/install.sh \| bash`, with `/handoff` to escalate to cloud Devin. **We did not install or run it.** | `[sourced: https://replit.com/pricing]` web platform; no local CLI mentioned on the pricing page | `[sourced: https://app.emergent.sh/]` web-based, "Build production-ready apps through conversation"; no CLI mentioned on the landing page |
|
|
172
|
+
|
|
173
|
+
Footnote 1 - aider 0.86.2 is installed and was probed but is not given a column.
|
|
174
|
+
`[measured]`: grepping `aider --help` for verify/json/report/audit/attest returned
|
|
175
|
+
only `--verify-ssl/--no-verify-ssl` and `--git-commit-verify`, both unrelated to
|
|
176
|
+
output verification. No verdict artifact, no JSON output surface found.
|
|
177
|
+
|
|
178
|
+
## 2b. Proposed benchmark: complexity tiers (PLANNED - nothing here has been run)
|
|
179
|
+
|
|
180
|
+
Everything in this section is a **planned experiment**, not a result. No tier has
|
|
181
|
+
been executed, no score exists, and no cell below should ever be cited as
|
|
182
|
+
evidence. It is here so the gaps in section 4 have a concrete shape.
|
|
183
|
+
|
|
184
|
+
The six axes in section 2 measure plumbing. To measure the seven pillars, tasks
|
|
185
|
+
have to span real complexity and be scored on outcome, not on gate output.
|
|
186
|
+
|
|
187
|
+
**Tiers** (each a real task, run identically across tools):
|
|
188
|
+
|
|
189
|
+
| Tier | Task shape | Which pillars it exercises |
|
|
190
|
+
|---|---|---|
|
|
191
|
+
| T0 | Single-file bug fix with a failing test | 6 |
|
|
192
|
+
| T1 | Multi-file feature in an unfamiliar mid-size repo | 1, 6 |
|
|
193
|
+
| T2 | Cross-cutting migration (framework or API version) over a large repo | 2, 3 |
|
|
194
|
+
| T3 | Performance or security investigation with no known answer | 2, 3 |
|
|
195
|
+
| T4 | Distributed-system change spanning services, with a rollback path | 2, 3 |
|
|
196
|
+
| T5 | Open research task: literature plus code plus data synthesis, hypothesis, experiment, reproducible result | 4 |
|
|
197
|
+
|
|
198
|
+
**Scored dimensions** (per tier, per tool). Note verification is one row here,
|
|
199
|
+
not the frame:
|
|
200
|
+
|
|
201
|
+
| Dimension | Definition | Why it is not a gate metric |
|
|
202
|
+
|---|---|---|
|
|
203
|
+
| Completion quality | Does the result actually solve the stated problem, judged against the intent | Passing tests is the floor, not the score |
|
|
204
|
+
| Intervention rate | Human corrections needed per task | Directly measures autonomy (pillar 3) |
|
|
205
|
+
| Wall-clock time | Intent to shipped value | Pillar 5, 6 |
|
|
206
|
+
| Cost | Total spend, quality-adjusted | Pillar 5; unadjusted cost is meaningless |
|
|
207
|
+
| Recovery | Behaviour after an induced failure | Pillar 3; needs deliberate fault injection |
|
|
208
|
+
| Maintainability | Quality of what is left behind | Long-horizon evolution, pillar 2 |
|
|
209
|
+
| Novelty/usefulness | For T5, is the finding actually new and useful | Pillar 4; needs a domain judge |
|
|
210
|
+
| User value | Would the requester ship it | The only dimension that ends in a human |
|
|
211
|
+
| Verification tax | Time and tokens spent verifying, and how often it changed an outcome | Pillar 5. A *cost* row. Should trend down over time |
|
|
212
|
+
|
|
213
|
+
The verification-tax row is the one that keeps scaffolding honest: it measures
|
|
214
|
+
overhead and the hit rate that justifies it. If overhead rises while the hit rate
|
|
215
|
+
falls, the scaffolding is being over-applied and should be selectively bypassed.
|
|
216
|
+
|
|
217
|
+
### 2b-FROZEN. Design seal for T1 and T2 (2026-08-03)
|
|
218
|
+
|
|
219
|
+
T1 and T2 are FROZEN as designs. Nothing has been run, no money has been
|
|
220
|
+
spent, and this seal exists so that stays true until a founder decision says
|
|
221
|
+
otherwise.
|
|
222
|
+
|
|
223
|
+
**Held-out discipline, and why it is written down BEFORE any run.** The value
|
|
224
|
+
of a benchmark is destroyed by the ordinary act of debugging against it. Once a
|
|
225
|
+
task has been attempted, the harness tuned, and the task attempted again, the
|
|
226
|
+
score measures fit to that task rather than capability. So:
|
|
227
|
+
|
|
228
|
+
1. **The T1 and T2 task instances are not selected yet, and must not be
|
|
229
|
+
selected by whoever tunes the harness.** Selection and tuning by the same
|
|
230
|
+
party is how a held-out set stops being held out.
|
|
231
|
+
2. **One scored attempt per tool per task.** A retry after seeing the result is
|
|
232
|
+
a different experiment and must be reported as such, never averaged in.
|
|
233
|
+
3. **The scoring rubric is frozen before the first run.** A dimension added
|
|
234
|
+
after seeing results is a dimension chosen because of them.
|
|
235
|
+
4. **Task text is never committed to this repo.** A task in the repo is a task
|
|
236
|
+
in the training and context of the thing being measured.
|
|
237
|
+
|
|
238
|
+
**What would make a T1/T2 result quotable**, stated now so it cannot be
|
|
239
|
+
loosened later to fit an outcome:
|
|
240
|
+
|
|
241
|
+
- n >= 3 independent instances per tier, scored blind to which tool produced
|
|
242
|
+
the artifact where the dimension allows it.
|
|
243
|
+
- Every competitor run under the same instance, same day, same rubric.
|
|
244
|
+
- Cost and wall clock read from each tool's own artifacts, never from a
|
|
245
|
+
supervising process.
|
|
246
|
+
- Any dimension that could not be scored reads UNKNOWN. A partial rubric is
|
|
247
|
+
reported as partial rather than averaged over the dimensions that happened to
|
|
248
|
+
work.
|
|
249
|
+
|
|
250
|
+
**Explicitly NOT frozen and NOT designed:** T3, T4 and T5. T5 in particular
|
|
251
|
+
needs a domain judge for novelty, and no such judge is identified. Listing them
|
|
252
|
+
in the tier table is a sketch, not a design.
|
|
253
|
+
|
|
254
|
+
**Cost, stated because it is the reason this is frozen rather than run.** Each
|
|
255
|
+
tier instance is a real build across eight tools. At n>=3 that is dozens of paid
|
|
256
|
+
runs, and the T2 shape (cross-cutting migration over a large repo) is the
|
|
257
|
+
expensive end. No run happens without an explicit founder spend decision.
|
|
258
|
+
|
|
259
|
+
**Status separation.** Required reading before quoting anything from this file:
|
|
260
|
+
|
|
261
|
+
| Category | What is in it |
|
|
262
|
+
|---|---|
|
|
263
|
+
| **Measured capability** | Only section 2, and only cells tagged `[measured]` or `[sourced]`. These are CLI affordances and one prompt-size ablation. No outcome quality anywhere. |
|
|
264
|
+
| **Planned experiments** | All of section 2b. Tiers T0-T5 and every scored dimension. Zero runs to date. |
|
|
265
|
+
| **Aspirational** | The seven pillars as a whole. They are the stated ambition and are not claims of current capability. Pillars 3 and 4 are entirely unprobed. |
|
|
266
|
+
|
|
267
|
+
## 3. How to reproduce
|
|
268
|
+
|
|
269
|
+
Every command below was actually run on 2026-08-03 in the repo working tree at
|
|
270
|
+
`/Users/lokesh/git/lokimode-anthropic/.claude/worktrees/pre-push-scoped-pytest`.
|
|
271
|
+
None of them makes a paid model call.
|
|
272
|
+
|
|
273
|
+
Versions:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
for c in claude codex cursor-agent opencode aider loki; do
|
|
277
|
+
printf "=== %s ===\n" "$c"; command -v "$c"; "$c" --version 2>&1 | head -3
|
|
278
|
+
done
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Capability probes (help text only - no model calls, no spend):
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
loki --help
|
|
285
|
+
loki help verify
|
|
286
|
+
loki help report
|
|
287
|
+
claude --help | grep -iE "output-format|json"
|
|
288
|
+
claude ultrareview --help
|
|
289
|
+
codex --help
|
|
290
|
+
codex review --help
|
|
291
|
+
codex exec --help | grep -iE "json|output-schema|output"
|
|
292
|
+
cursor-agent --help
|
|
293
|
+
opencode --help
|
|
294
|
+
opencode run --help
|
|
295
|
+
aider --help | grep -iE "verify|json|report|audit|attest"
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
The evidence-document claim, which is the only differentiator asserted here:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# Deterministic-only: loki verify's help states there is NO LLM code review in
|
|
302
|
+
# this slice, so this run is free.
|
|
303
|
+
loki verify HEAD~1 --out /tmp/loki-verify-sc2 --explain
|
|
304
|
+
|
|
305
|
+
# Persisted, schema-versioned artifact:
|
|
306
|
+
python3 -c "import json;d=json.load(open('/tmp/loki-verify-sc2/evidence.json'));print(list(d.keys()))"
|
|
307
|
+
# -> ['schema_version','verdict','exit_code','subject','produced_by',
|
|
308
|
+
# 'deterministic_gates','llm_review','findings','suppressed','scope']
|
|
309
|
+
|
|
310
|
+
# Freshness re-check against the current tree:
|
|
311
|
+
loki verify --check-fresh --out /tmp/loki-verify-sc2
|
|
312
|
+
# -> VERDICT: STALE (worktree modified since 1c80c85ff059) -- re-run loki verify
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Observed `--explain` output from that run, verbatim:
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
GATE STATUS RUNNER REPRO EVIDENCE
|
|
319
|
+
---- ------ ------ ----- --------
|
|
320
|
+
build skipped - true no detectable build command
|
|
321
|
+
tests fail jest true tests failed (rc=1)
|
|
322
|
+
static_analysis pass syntax true 4 file(s) checked, no syntax errors
|
|
323
|
+
nomock skipped - true no scannable UI/data-render files in diff
|
|
324
|
+
secret_scan pass regex-fallback true no secrets matched
|
|
325
|
+
dependency_audit fail npm-audit true 0 critical, 4 high CVEs
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
SCOPE NOTE on that audit row, because both numbers are real and they mean
|
|
329
|
+
very different things to a release decision:
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
npm audit -> 7 vulnerabilities (1 low, 2 moderate, 4 high)
|
|
333
|
+
npm audit --production -> 2 moderate, 0 high
|
|
334
|
+
|
|
335
|
+
The four highs (brace-expansion, form-data, js-yaml, ws) do NOT appear in the
|
|
336
|
+
production dependency tree; they arrive through dev tooling. The shipped
|
|
337
|
+
package's own exposure is 2 moderate, both reached via
|
|
338
|
+
@modelcontextprotocol/sdk -> @hono/node-server, one of which is a
|
|
339
|
+
Windows-only path traversal in serve-static.
|
|
340
|
+
|
|
341
|
+
Both are stated rather than one being chosen. "4 high CVEs" unqualified
|
|
342
|
+
overstates what someone installing the package is exposed to; "2 moderate"
|
|
343
|
+
alone understates what our own gate sees and blocks on.
|
|
344
|
+
spec_drift skipped loki-spec true no spec lock (.loki/spec/spec.lock)
|
|
345
|
+
|
|
346
|
+
VERDICT: BLOCKED
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Note this is a BLOCKED verdict on our own tree, reported unchanged. A scorecard
|
|
350
|
+
whose own tool passes cleanly on the first try is a scorecard to distrust.
|
|
351
|
+
|
|
352
|
+
Cost citation (in-repo, cite - do not re-derive): `README.md:757`, the
|
|
353
|
+
`LOKI_SIMPLE` row. Re-run the ablation on your own workload with
|
|
354
|
+
`benchmarks/run-prompt-ablation.sh` before drawing any conclusion from it.
|
|
355
|
+
|
|
356
|
+
Cleanup after reproducing:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
rm -rf /tmp/loki-verify-scorecard /tmp/loki-verify-sc2 /tmp/loki-verify-scorecard.err
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## 4. What we do NOT know
|
|
363
|
+
|
|
364
|
+
This section is mandatory and is not empty.
|
|
365
|
+
|
|
366
|
+
1. **We did not execute any competitor's review or build command.** Every
|
|
367
|
+
competitor capability above is read from `--help` output only. Running
|
|
368
|
+
`claude ultrareview`, `codex review`, `cursor-agent -p`, or an OpenCode build
|
|
369
|
+
would each make a paid model call, which was out of scope. "Not listed in
|
|
370
|
+
`--help`" is not proof of absence - a capability may exist undocumented, in a
|
|
371
|
+
config file, or behind a subcommand we did not enumerate.
|
|
372
|
+
2. **No head-to-head build benchmark exists.** Reliability, time-to-first-success
|
|
373
|
+
and quality-of-completion are UNKNOWN for all eight products. We have never
|
|
374
|
+
run the same task through even two of these tools and compared outcomes.
|
|
375
|
+
3. **We have no cost-per-completed-task figure for any product, including Loki.**
|
|
376
|
+
The `LOKI_SIMPLE` number is a prompt-size measurement only, and its effect on
|
|
377
|
+
speed and quality is explicitly unmeasured per its own README entry.
|
|
378
|
+
4. **Devin was not tested despite having a local CLI.** `docs.devin.ai` documents
|
|
379
|
+
`curl -fsSL https://cli.devin.ai/install.sh | bash`. We chose not to install
|
|
380
|
+
third-party software, so every Devin cell is sourced or UNKNOWN. An earlier
|
|
381
|
+
read of the pricing page suggested "no local CLI"; the docs page corrected
|
|
382
|
+
that. Treat any Devin claim here as provisional.
|
|
383
|
+
5. **Replit and Emergent were assessed from marketing pages only** (a pricing page
|
|
384
|
+
and a landing page). Neither page discusses verification. Absence of a claim on
|
|
385
|
+
a marketing page is not evidence the capability is absent from the product.
|
|
386
|
+
6. **Our own LLM review stage is not shipped in `loki verify`.** The evidence doc
|
|
387
|
+
records `llm_review.status = "skipped"`, reason "deterministic-only MVP ...
|
|
388
|
+
blind council are deferred to Phase 2". The 8-gate build loop is a separate
|
|
389
|
+
path from `loki verify` and was not exercised for this document.
|
|
390
|
+
7. **The freshness/evidence differentiator is help-text-derived for competitors.**
|
|
391
|
+
We verified our own `--check-fresh` by running it. We did not exhaustively
|
|
392
|
+
search competitor filesystems, config schemas, or APIs for an equivalent.
|
|
393
|
+
8. **Onboarding is unmeasured.** No user was timed through first build on any
|
|
394
|
+
product. The onboarding row records which affordances exist, not whether they
|
|
395
|
+
work.
|
|
396
|
+
9. **`opencode stats` showed Total Cost $0.00 on this machine**, which reflects
|
|
397
|
+
local provider configuration and tells us nothing about OpenCode's economics.
|
|
398
|
+
10. **Vendor benchmark claims were not independently verified.** Devin's "SWE 1.7"
|
|
399
|
+
reference appears with no supporting data on the page fetched.
|
|
400
|
+
11. **We have no measurement of outcome intelligence for anyone, including us.**
|
|
401
|
+
Nothing here tests whether ambiguous intent becomes an excellent product or
|
|
402
|
+
a real research result, as opposed to a change that passes its gates. Gate
|
|
403
|
+
pass rates and verdict artifacts are explicitly not a proxy for this. No
|
|
404
|
+
benchmark for it currently exists in this repo.
|
|
405
|
+
12. **We have no measurement of architecture depth for anyone, including us.**
|
|
406
|
+
Nothing here tests reasoning across a massive repository, a distributed
|
|
407
|
+
system, a migration, or a performance investigation. Every probe in this
|
|
408
|
+
document ran against a single repo's help text or a 5-file diff, which is
|
|
409
|
+
the shallowest possible case.
|
|
410
|
+
13. **The overhead of verification itself is only partially measured.**
|
|
411
|
+
PARTIALLY CLOSED 2026-08-03. `tools/verification-tax.py` now computes wall
|
|
412
|
+
time and outcome-change rate from evidence documents. First real reading, on
|
|
413
|
+
the `loki verify HEAD~1` run cited in section 3: **19.0s, outcome changed 1
|
|
414
|
+
of 1 runs**. That is a single-run sample and a single axis - it is a
|
|
415
|
+
baseline, not a trend. Still unmeasured: **token** cost of verification (only
|
|
416
|
+
wall time is captured), and the hit rate over a meaningful history rather
|
|
417
|
+
than one run. Reproduce with
|
|
418
|
+
`python3 tools/verification-tax.py <log.jsonl>`.
|
|
419
|
+
14. **Confidence calibration is unmeasured.** Selectively bypassing verification
|
|
420
|
+
where confidence is high presupposes that the confidence signal is
|
|
421
|
+
calibrated. We have not measured whether ours is, so we cannot currently
|
|
422
|
+
say where bypassing would be safe.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Dashboard 9.12: what was measured before any code was written
|
|
2
|
+
|
|
3
|
+
Every number here was measured on 2026-08-03 against the working tree at
|
|
4
|
+
`76e42773`. Commands are included so each can be re-run rather than trusted.
|
|
5
|
+
|
|
6
|
+
## The premise, corrected
|
|
7
|
+
|
|
8
|
+
An earlier pass in this session measured "is the dashboard rendering fabricated
|
|
9
|
+
data" and answered mostly no: 38 of 43 components call a real API, and only two
|
|
10
|
+
files contain `Math.random`. That measurement was sound and it answered the
|
|
11
|
+
wrong question.
|
|
12
|
+
|
|
13
|
+
The founder directive does not ask whether data is fabricated. It asks whether
|
|
14
|
+
**every metric shows source, freshness, unknown, and error state**. That is a
|
|
15
|
+
different property, and it is where the work is.
|
|
16
|
+
|
|
17
|
+
## The finding
|
|
18
|
+
|
|
19
|
+
The Python readers were built with strict envelope discipline: an empty result
|
|
20
|
+
carries a `reason`, an unmeasured number reads `None` rather than `0`, and
|
|
21
|
+
`source` names the files consulted. The UI discards most of that.
|
|
22
|
+
|
|
23
|
+
| Envelope field | Components consuming it | What its absence means |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `freshness_s` | **0 of 43** | A 40-minute-old poll renders identically to a fresh one |
|
|
26
|
+
| `measured` | **0 of 43** | A real cost observation is indistinguishable from an absent one |
|
|
27
|
+
| `reason` | 6 of 43 | "no runs" and "could not read runs" render the same in 37 components |
|
|
28
|
+
| `source` | 10 of 43 | Most rows cannot be audited back to the file they came from |
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
cd dashboard-ui
|
|
32
|
+
grep -l "freshness_s" components/*.js core/*.js | wc -l # 0
|
|
33
|
+
grep -l "measured" components/*.js core/*.js | wc -l # 0
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Absent rendered as zero
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
grep -o '|| 0' components/*.js | wc -l # 116
|
|
40
|
+
grep -l '|| 0' components/*.js | wc -l # 23 of 43 components
|
|
41
|
+
grep -o '?? 0' components/*.js | wc -l # 8
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
116 occurrences across 23 components. This is the exact violation
|
|
45
|
+
`record_is_measured()` exists to prevent, expressed in the UI layer: an absent
|
|
46
|
+
measurement rendered as the number zero. From an operator's chair it is
|
|
47
|
+
indistinguishable from fabricated data, because a fabricated zero and an
|
|
48
|
+
unmeasured zero look the same.
|
|
49
|
+
|
|
50
|
+
### No staleness signal exists
|
|
51
|
+
|
|
52
|
+
`stale` appears 112 times but collapses to a SINGLE distinct usage:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
grep -h -o ".\{45\}stale.\{25\}" components/*.js | sort -u
|
|
56
|
+
# >${st.status === 'running' || st.status === 'stale' ? ...
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
It is a server-supplied status enum value, never a client-side computation
|
|
60
|
+
over data age. There are no `isStale`, `staleness`, or `stale_s` identifiers.
|
|
61
|
+
Nothing in the UI derives freshness from a timestamp.
|
|
62
|
+
|
|
63
|
+
## The one genuine fabrication
|
|
64
|
+
|
|
65
|
+
`components/loki-session-timeline.js:_buildPhasesFromStatus` synthesizes a
|
|
66
|
+
timeline and renders it as history. Its own comment says so:
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
// Simulate a multi-phase timeline based on iteration count
|
|
70
|
+
const phaseOrder = ['planning', 'building', 'testing', 'reviewing'];
|
|
71
|
+
const duration = segmentDuration * (0.8 + Math.random() * 0.4);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Phase NAMES come from a fixed rotation and durations are randomized. Neither is
|
|
75
|
+
measured. An operator reads plausible phase boundaries for work that never
|
|
76
|
+
happened at those times.
|
|
77
|
+
|
|
78
|
+
The other `Math.random` (`loki-log-stream.js:267`) is benign: a unique key for
|
|
79
|
+
a real log entry.
|
|
80
|
+
|
|
81
|
+
**Fix direction** follows `version_is_ahead`: not a better estimate, an explicit
|
|
82
|
+
"phase history not recorded". Whether real phase transitions can be read from
|
|
83
|
+
`trust-events.jsonl` must be checked against that file rather than inferred
|
|
84
|
+
from the component.
|
|
85
|
+
|
|
86
|
+
## What this means for scope
|
|
87
|
+
|
|
88
|
+
The redesign is not a rewrite of 31,924 lines of working component code. It is
|
|
89
|
+
making the UI carry the honesty contract the backend already has:
|
|
90
|
+
|
|
91
|
+
1. Every metric renders `unknown` rather than `0` when unmeasured.
|
|
92
|
+
2. Every panel shows data age, and marks itself stale past a threshold.
|
|
93
|
+
3. Every empty state states its `reason` and names its `source`.
|
|
94
|
+
4. Nothing is synthesized and presented as measured.
|
|
95
|
+
|
|
96
|
+
Items 1-3 are the founder's four required states (source, freshness, unknown,
|
|
97
|
+
error) applied to surfaces that already fetch real data. Item 4 is one bug.
|