Skip to content

Research

Method

A defect audit built on controls and evidence grades

Bug and control conditions were paired on a green baseline, with evidence graded as UI, executed logic, deductive trace, or live forensics. Fourteen reproduced findings are enumerated, but the full 45-candidate ledger and individual refutation logs were not retained.

enumerated in the audit snapshot; the full 45-candidate ledger was not retained
14 findings
pre-audit baseline, 982 frontend and 1,010 backend tests
0 failures

Question: How can defect candidates in file lifecycle, graph lifecycle, and editing UI be reduced to refutable evidence rather than a list of suspicions?

Observation: Paired bug and control arms on a green baseline retained 14 of 45 candidates, but the complete decision ledger for the other 31 was not preserved.

Decision: Publish the 14 with their evidence grades, audit-time severity, and reproductions, without presenting them as the current backlog or as work by 14 human reviewers.

Audit structure from green baselines through paired controls and four evidence grades to 14 retained defects

The 45→14 reduction is an evidence-retention ledger, not a performance funnel.

1. Define what counts as a defect before looking for one

The base commit was 96aaf8e6; the executable audit record landed in 523dd576. At the start, 982 frontend tests across 85 files and 1,010 Rust backend tests all passed. Only a new failing assertion on top of that green baseline was treated as defect evidence.

Each candidate needed at least two conditions. The bug arm exercised the suspected input or state; the control arm exercised an adjacent condition where the same code should behave normally. Without both, the audit could not distinguish a product defect from intended behavior, mistranscribed test logic, or a machine-specific effect. Its unit of analysis was an independent defect claim, not a user session or an occurrence rate.

Baseline suite n · unit · condition Result
Frontend 982 tests · 85 files · audit-start checkout 0 failures
Rust backend 1,010 tests · cargo test --lib · audit-start checkout 0 failures

2. Every conclusion carried an evidence grade

Grade What the evidence executed What it cannot establish
T1 · live UI Real App.tsx in Chromium with the user action reproduced Other operating systems or long-run frequency
T2 · live logic Shipped function called directly, or private logic transcribed and checked against source Integration effects outside transcribed logic
T3 · deductive trace Exhaustive call-graph trace plus a guarded sibling path Runtime frequency
F · live forensics Read-only measurement of one real 1.2 GB database and vault Generalization to other users or installations

Evidence grade and severity answer different questions. The grade records how a claim was checked; severity records the harm if it fires. Neither is a numeric proxy for the other.

3. What the 45→14 reduction actually preserved

The primary record reports 45 candidates triaged and challenged until 14 remained. What survives is the ID, audit-time severity, evidence grade, reproduction narrative, and selected rejected hypotheses for those findings. It does not preserve a complete 45-candidate manifest, one decision for each of the 31 dropped candidates, or reviewer-level raw logs. The evidence therefore does not support saying that all 31 received independent experiments or that 14 people each reviewed one finding.

ID Severity on 2026-07-31 Evidence Preserved defect claim
C1 critical T1 Partial listings inferred deletion and closed a dirty tab without its guard
C2 high T1 + T2 Folder operations matched open tabs only by exact path
C3 high T2 Only one caller cascaded path changes
C4 high T2 Cut–paste into the same folder changed the file name
M1 medium T2 Case-only rename failed
M2 medium T2 Graph rekey retained the destination and merged two documents
M3 medium T2 Moving a vault folder lost and overwrote user verdicts
M4 medium transcribed T2 Rewind resurrected a renamed file at its old path
M5 medium T1 + vitest Table-widget write-back was lossy
M6 medium F, partial Workspace switching destroyed a graph-store cache
M7 medium T3 Extraction after workspace close could overwrite graph.nq
L1 low F + T2 Notifications remained for a deleted note
L2 low vitest A frontmatter vertical bar rendered as a destructively editable table
L3 low vitest Table-cell selection ranges drifted

These are post-challenge severities recorded on 31 July, not initial candidate labels. C3 and M3, for example, moved from critical to high and medium. Correcting severity, rather than increasing the confirmed count, was the practical output of refutation.

4. Executable artefacts must be read with assertion direction

At the audit commit, the record counted 11 Rust probes, 10 frontend assertions, two e2e specs, and a six-arm permanent regression spec for C1. Those are a historical inventory pinned to 523dd576, not a claim about the current number of test functions.

Artefact Audit-time assertion Signal when the defect exists
src-tauri/src/audit_probe.rs Directly asserts buggy behavior Pass
tests/unit/audit_*.test.ts Asserts correct table round-trip behavior Fail
tests/e2e/audit_*.spec.ts Labels bug or fixed behavior per arm Interpret with its label
tests/e2e/tabLifecycle.spec.ts Asserts correct post-fix tab lifecycle Six arms failed before the fix

A green test is not self-explanatory. A reproduction that asserts the bug should fail after the fix; a regression test that asserts the desired behavior should pass. Promoting one without reversing its assertion direction can leave a meaningless test that remains green after repair.

5. The contribution is a refutable structure, not the defect count

The 14 findings collapsed into six boundary failures: missing cascades for path changes; a reconciler whose observation scope did not match its deletion authority; exact-path-only tab guards; collision handling that did not recognize the source as a possible destination; reuse of display normalization in table write-back; and state transitions that destroyed a cache before claiming synchronization.

The audit also retained rejected proposals. The claim that workspace switching forced full paid re-extraction was rejected when 1,727 of 1,727 body hashes matched disk; the claim that notifications survived indefinitely was rejected by the 30-day retention and 2,000-row trim. These examples are useful do-not-repropose records, but they do not reconstruct the complete ledger for all 31 rejected candidates.

6. Separate audit-time observations from current state

This record describes the discovery process on 31 July 2026, not the current backlog. Later commits changed several implementations and tests, so it cannot honestly say that all 14 remain open, that the Rust file still contains 11 probes, or that two e2e cases are still unresolved. Current status requires a separate check of each fix commit and the latest test suite.

The audit reproduced existence, not real-world frequency. Its live forensics came from one machine and one user’s installation; UI runs were tied to that environment. The live counterfactual analysis of rewind graph scope was performed on 1 August with a different method and conclusion, and is therefore a separate record.

7. Reproducibility and evidence boundary

Evidence Preserved observation and condition Missing or non-generalizable evidence Primary source
Green baseline Frontend 982/85 files and backend 1,010, all with 0 failures · based on 96aaf8e6 Current test counts and status docs/details/lifecycle-usability-audit-2026-07-31.md:9-17
Evidence grades T1, T2, T3, and F definitions attached to conclusions A probabilistic conversion between grades docs/details/lifecycle-usability-audit-2026-07-31.md:19-25
Fourteen findings Titles, severities, and evidence for C1–C4, M1–M7, L1–L3 Complete 45-candidate manifest and one decision for each of the 31 dropped docs/details/lifecycle-usability-audit-2026-07-31.md:60-264
Refutation stage Primary record says 14 independent challenge passes occurred Identity of 14 humans, per-review logs, or complete independence docs/details/lifecycle-usability-audit-2026-07-31.md:3-5
Executable artefacts Audit-time probes, assertions, e2e specs, and six-arm regression Current artefact count and unresolved status after later fixes docs/details/lifecycle-usability-audit-2026-07-31.md:27-37
Selected rejections Representative rebuttals including 1,727/1,727 hashes and retention controls Full mapping for all 31 rejected candidates docs/details/lifecycle-usability-audit-2026-07-31.md:701-725

What this measures

  • Consilience

    A general-purpose AI agent that uses a knowledge graph for coding, design and answering questions. It builds and maintains ontologies from documents without a resident engineer.

Send message