Durable record of decisions, evidence, and next steps for the alpha.8–alpha.10
push. Newest entries last. Release mechanics are in RELEASING.md.
- alpha.7 released (GitHub prerelease + crates.io, PyPI, npm, Maven).
research/power-states-papermerged intomainas PR #4 (f0135e8). portable correctness / research-evidencered onmainsince alpha.6:paper/audit/archive-inventory.jsonwas not regenerated after the power-state archives landed. Lint, clippy, and workspace tests were green.- Uncommitted alpha.8 work from the previous session: TUI
? Functionstab (10 hard-coded entries), TypeScriptbigintrange validation, docs home.
- Decision: ship the existing work plus the CI fix as one small release; defer the full function browser to alpha.9.
- TypeScript bug:
BigUint64Array.from([-1n])stores2^64-1, so a negative ID was written as a different record ID. NowRangeErrorbefore any native call. Test:sdk/typescript/test/qenlo.test.ts(6/6 pass locally). - CI fix: regenerated the inventory (1654 → 1833 files; deterministic across
two runs).
bump_alpha.pynow regenerates it on every version bump. - Local checks:
cargo fmt --check,cargo clippy -p qenlo-browser --all-targets -D warnings,cargo test -p qenlo-browser, TS typecheck + tests, fullresearch-evidencejob steps (17 unit tests, alpha.5 gate reproduction, processed-data diff),check_docs,check_release_versions. - Docs home verified rendering in a browser at
docs/#/.
- alpha.9 function browser: catalog every public
Collectionmethod, group by task, type-to-filter, example per entry, and a test that fails if a public method is missing (drift guard). - alpha.10 README / landing hero: lead with what Qenlo is, the evidence map, and honest results (wins and failed bets), with links to raw data.
- Surgical perf/reliability items found during review (see below).
- CI root cause #2: after regenerating the inventory, Linux still differed in
45 places.
glob()follows filesystem order (NTFS sorted, ext4 hashed), somanifest_referencesreordered. Fixed by sorting on the name string (WindowsPathordering is case-insensitive, POSIX is not).portable correctnessfully green ond1ed007, first time since alpha.5. Tagged alpha.8 there.
- Function browser (delegated to Sonnet, reviewed): 33/33 public
Collectionmethods,/filter, drift test that re-parsescrates/qenlo/src/lib.rs. Review found the 80x24 layout hid the summary and example entirely (8-row shortcut panel) and truncated names; fixed with an adaptive one-line panel and aTestBackendrender test at 80x24. Every example identifier was checked against the source (Filter=Predicate, derivesDefault, etc.). - Reliability scan (Sonnet, read-only) → four fixes, each with a test:
closed collections served stale
get_record/scan_records; FFI free ranclose()outsidecatch_unwindand dropped its error; Python__del__was silent (nowResourceWarning, stdlib convention); TypeScript leaked handles and the directory lock withoutclose()(nowFinalizationRegistry). - Deliberately not done:
scan_records(filter)materializes every matching slot per page (O(matches) per page). Candidate for alpha.10 if measured.
- Found while verifying alpha.8 assets:
SHA256SUMShashed itself mid-write, sosha256sum -calways failed one line. Fixed insdk-release.ymlbefore tagging alpha.9 (5300b6c). The alpha.8 asset digests all match GitHub's recorded digests; only the self-line is bogus. - Line endings: Python
write_texton Windows turned two LF.rsfiles into CRLF in212eb52; restored in5300b6c. Use byte writes from now on.
- Landing page: the three hero cards had rendered ~2px wide on the live site
since alpha.8.
.cardsiscontainer-type: sizeand sizes cards from100cqh; withflex: 1 1 auto, the research section added below it took the height and100cqhresolved to 0 (amin-heightalone did not fix it; a definite flex basis did). Verified 426px desktop, 361px tablet, 347px mobile in a browser. The dot-matrix glyph set lacked 2/3/4/8 (Sonnet caught it), so 4.6 would have drawn as 0.0. - Hero numbers replaced: prototype 1M / 0.17 ms / 100% (unshipped PyTorch CUDA prototype that lost to FAISS in its own gate) → 4.6x, 235.7%, 1,833, each traced to a file. README restructured (install, examples, research table); wording fixed where the draft implied causation ("speed tracks power state") or overstated ("learned rule"). All 1,833 inventory entries are hashed, so "every file" is accurate.
- Web/desktop function browser:
GET /api/functionsfrom the same catalog; checked in a browser (/focuses search; "batch" → 3 of 33). - Deferred with reason: sqlite-vec comparison (roadmap #2). Needs a release
build of the bench and matched filter semantics; too heavy for a modest
overnight run. Next step: add an
SqliteVecbackend toscripts/oss_replay.py(~25 lines) and run the 100K x 384 cell.
- X and LinkedIn were unavailable until the user signed in mid-session.
Posted on X (voice skill + short style): CI glob-order story and alpha.8.
Drafts and a posted log live in
.claude/gtm-drafts.md(untracked).
- Post-publication proof (RELEASING.md) on alpha.8: PyPI wheel works on
Windows; the npm package fails with "native library not found". Cause: the
release job packed
native/windows-x64/qenlo_ffi.dll, the loader looks fornative/win32-x64/(Node'sprocess.platform). Every npm version back to at least alpha.3 has this layout; SDK CI only exercises Linux and local dev uses awin32-x64folder, so nothing caught it. Moving the published DLL intowin32-x64/made the same package pass (search + 18-field report). - The first alpha.10 tag (
806ca76) was pushed before this was found. Its release build was cancelled before any GitHub release or registry upload, the tag was deleted, and alpha.10 is re-tagged on the fixed commit. No published artifact ever carried the first tag.
- Released and published: alpha.8 (
d1ed007), alpha.9 (5300b6c), alpha.10 (5c2400c); all onmain, GitHub prereleases with 11 assets each, and on crates.io, PyPI, and npm (alphadist-tag). Maven Central is still not actually published (job passes without credentials). - Verification per RELEASING.md "post-publication proof", Windows only: clean
uvenv from PyPI and clean npm project from the registry for alpha.8, alpha.9, alpha.10: create in-memory collection, add, filtered search, execution report, close. alpha.10 npm works without any workaround; alpha.8/9 npm needQENLO_LIBRARY_PATHon Windows (noted on their release pages).sha256sum -c SHA256SUMSpasses for alpha.9 and alpha.10 downloads. - GTM (user signed in mid-session): five X posts and one LinkedIn post, voice
skill + short style, links in
.claude/gtm-drafts.md.
- Done: the maintainer moved npm
latestfrom 0.1.0-alpha.1 to 0.1.0-alpha.10. The publish workflow still tags onlyalpha, solatestwill lag again on the next release unless it is moved at publish time. - SDK CI tests TypeScript only on Linux, which is how the Windows layout bug survived; a Windows/macOS job that installs the packed tarball would catch the whole class.
- sqlite-vec comparison (roadmap #2), plan above.
- Linux/macOS post-publication proofs and a Rust registry consumer build were not run locally (CI builds and tests those platforms from source).
- Desktop app Functions tab inherits the web UI; not separately launched.
- Building qenlo-memory (github.com/a3ro-dev/qenlo-memory, a cross-agent memory
on the Python SDK) showed that
flush()never compacted. It returned early ondurable_generation == generation, which every WAL commit satisfies, so one WAL file per write piled up andopenreplayed all of them. Fix: track the loaded or written snapshot generation (OpenedStore.snapshot_generation,Collection.snapshot_generation), and skip only when the snapshot is current.close()keeps the old durable-only check so it never writes a full snapshot. Rust regression testflush_compacts_committed_wal_files; checked through the Python FFI too (300 WAL files -> 0, reopen keeps 300 rows). - Python README: wheel list now matches what is published (no Linux aarch64 or
Intel macOS), and the backend strings match the FFI's
Debugoutput. - Deliberately unchanged: records have no payload and deleted ids are never reused. qenlo-memory keeps text in sqlite next to the collection, which is the intended pattern.
- Published alpha.11 (crates.io, PyPI, npm
alpha); proof on Windows from PyPI: in-memory add/search/report, and a durable collection'sflush()leaves 0 WAL files. npmlateststill pointed at alpha.10, sosdk-publish.ymlnow moveslatestto each release after publishing (future releases).