Skip to content

Epic: reliability before features — durability, AOT, query correctness and oracle coverage #288

Closed as not planned

Description

@CaffeinatedCoder

Discussion: #287 · v6.0.0 migration guide, changelog, docs, samples and release engineering: #296

Goal

Every promise in README.md and AOT_LIMITATIONS.md is true and backed by a test, before new features land. The issues below were found by the oracle suites and the AOT smoke test. Most already have a fix PR. The last groups extend the oracles to every documented library section, so the next promise is checked before it is broken.

Done when

P0 — Durability and data integrity

P0 — Native AOT (the mobile and Unity story depends on it)

P0 — Browser (Blazor WASM)

Found by the browser harness (PR #295). The Blazor WASM niche of #287 stays experimental in the stability matrix until these close.

P1 — Index-served queries return what LINQ returns

Typed collections and B-tree:

DynamicCollection and BLQL:

P1 — API correctness found in the v6 review (#296)

P2 — Multi-process mode (experimental until these close)

P2 — Space reclamation

Oracle coverage by library section

One oracle for every library section the documentation makes a promise about, each with a seed that proves it catches a real defect and a candidate registry that links what it finds to issues (method: docs/ORACLE_TESTS.md, in #250). A section counts as stable in the README's stability matrix once its oracle is merged and its registry is empty.

Written, in review:

Next:

  • BSON and source-generated mappers: round trip of every supported type and edge value (identity)
  • Composite and nested indexes: more rows in the LINQ differential vs the same rows unindexed
  • Vector search (HNSW): recall vs exact brute-force k-NN
  • Geospatial (R-tree): differential vs a linear scan with the same predicate
  • TimeSeries and retention policies: model-based, the model applies the retention rule
  • CDC / Watch: model-based, events equal the committed operations in commit order, nothing from rolled-back transactions
  • Key-value store, TTL, BLite.Caching: model-based vs a dictionary with expiry
  • Backup, VACUUM, single ↔ multi-file migration: same contents before and after (Backup and Vacuum are already store-model steps; migration is new)
  • GDPR: secure erase leaves no bytes of the erased document in the file; subject export equals the model filtered by subject; masked CDC events carry no [PersonalData] field

Not covered by any oracle, stays with review: targets other than net10.0 (netstandard2.1, Unity IL2CPP, MAUI), real multi-process races, crashes in multi-process mode and inside Backup, torn page writes, performance, API design.

Docs (after the fixes above land)

The wider v6 docs work (migration guide, docs in the repository, compiled samples) is tracked in #296; the items below are the ones these fixes need.

Activity

  1. CaffeinatedCoder commented on Oct 18, 2026

    @CaffeinatedCoder
    CollaboratorAuthor

    P0 durability, item for #260 → PR #280: land with #321 (fix for #303). #280 adds one WAL sync per commit batch, and with the 500 ms LockTimeout.Default writers queued behind those syncs time out. #321 raises the default to 5 s. The two merge without conflicts, and the full suite on the merge gives 3103 passed / 0 failed.

  2. CaffeinatedCoder commented on Oct 18, 2026

    @CaffeinatedCoder
    CollaboratorAuthor

    Merge order for the 32 open PRs

    I merged every pair of open PRs that touch a common file (git merge-tree --write-tree), and each PR against main. No PR conflicts with main. The pairs that conflicted are now either stacked or have a resolution ready, so the order below is the only constraint.

    Independent, any order. Each merges cleanly with main and with every other open PR (#298 has one README conflict with #310, see below):

    Stacked: merge bottom up. Each PR's base is the branch below it, and that branch's head is in its history. Once the lower PR merges, I retarget the next one to main.

    Independent, but whichever lands second needs a resolution. I did not stack these: the fixes are unrelated, and either can go first. I have the resolution as a patch for either order and will push it to the PR that lands second.

    With all three resolutions applied, #310 + #246 + #280 merge together with no further conflict.

    #280 should land together with a fix for #303. #280 syncs the WAL once per commit batch. A commit queued behind a batch now waits for that batch's fsync while holding up the commit, WAL and collection locks, so the 500 ms LockTimeout.Default (tuned for a WAL that was never synced) fires more often. Measured on one machine (macOS, Apple silicon), full suite, nothing else running: #280 alone had 20 failures in 7 min, and #310 + #246 + #280 with the resolutions had 22 in 12 min. Every failure in both runs is a TimeoutException ("Timed out acquiring commit lock (GroupCommit)", the WAL write lock, a collection lock). For comparison, #282 and the oracle chain pass with 0 failures in 1.5 and 5 min. So the timeouts come from the sync per batch, not from the resolutions. #321 is the fix for #303 (default raised to 5 s); land it with or before #280.

    After this, the pairwise run over all 32 PRs shows no conflicts except the three pairs above.

  3. mrdevrobot commented on Oct 18, 2026

    @mrdevrobot
    Contributor

    Closing as not planned. Bug reports are tracked and prioritised one by one. We do not adopt an external roadmap epic, and the oracle test stack it depends on (#250–#295) is not being merged.

  4. unpinned this issue on Oct 18, 2026
  5. moved this from Todo to Done in BLiteon Oct 18, 2026
  6. CaffeinatedCoder commented on Oct 19, 2026

    @CaffeinatedCoder
    CollaboratorAuthor

    Thank you for the thorough triage, and for the time spent verifying each fix individually, including the probes and measurements on #280 and #310.

    Looking back at this epic, I overstepped in several ways, and I want to name them rather than leave it at a general apology:

    • I proposed a roadmap and a merge order for a project I do not maintain, and presented it as if it were the project's plan. Setting priorities and the shape of a release is your decision, not a contributor's.
    • The oracle stack (test: oracle tests for the LINQ provider and the typed collection store #250–test: browser harness for BLite.Wasm (OPFS, IndexedDB, in-memory; trimmed and AOT) #295) added test infrastructure nobody had asked for, at a CI cost I understated. The WAL crash oracle in particular ran about 40 seconds on my machine and almost 14 minutes on yours; I should have measured on a second machine before stating a figure. Rows that encode known failures as skipped, reflection into private engine fields, a git shell-out and issue drafts inside the test tree were all choices that put my workflow ahead of the maintainability of your suite.
    • I bundled process changes (CONTRIBUTING, release engineering) into what should have been bug reports and fixes.

    The findings themselves are already tracked as individual issues, which is the right place for them, and I am grateful that so many of the fixes were merged.

    Going forward I will keep my contributions to what you have asked for: a bug report with a focused reproduction, and a fix PR with one regression test, scoped to the issue it closes. I will address the open review requests one PR at a time, and I will not propose roadmaps, milestones, pins, process changes or test infrastructure again. If I believe an area deserves broader attention, I will raise it as a question and leave the decision with you.

    Thank you again for the patience and the care in the reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking umbrella for a cohesive featurepackage/coreAffects BLite.Coretriage

    Type

    No type

    Projects

    • Status
      Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions