Releases: gentropic/auditable
Release list
v0.6.4
Scrubbable numbers
Alt+drag any numeric literal in any cell editor and it scrubs: the source rewrites under your
finger and the cell plus everything downstream re-runs live — the reactive DAG as a direct-manipulation
surface. The literal's own form sets the step (50 by 1, 0.75 by 0.01, 1.5e3 steps its mantissa),
Shift multiplies ×10, and one undo restores the pre-drag value. Language-agnostic: works in js, Python
(adder), Soft, SQL — even a number inside a glsl template scrubs the live shader. The source text
stays the single truth — a scrub is an edit, just faster than typing.
New example: scrubbable numbers (basics/example_scrub) — a rainbow spirograph, a wave-matching
game that makes you scrub across a cell boundary to win, and the step-semantics cheat sheet.
Fixes
- npm artifacts for adder, air, dee, grid, sadpan, shader, voxmesh republished in sync with the repo
(stale bundles under unchanged version numbers — the cause of the dead install-from-npm soft
examples, all healed). - Push-CI green again: lockfile synced with the dispatch/facet/groma workspaces; two flaky smoke
timings hardened.
v0.6.3
Examples
- Multipass: per-pass min-samples ratio — the 75 % rule is now a live control in both
multipass editions: each pass gets a min ratio slider (0.25–1.0, default 0.75), with the
computed min-sample count displayed under the sliders and in the calibration table. Dropping
a ratio demonstrates the lesson's spacing-blend pitfall interactively. Defaults reproduce the
previous calibration exactly, and the JS/Python twins agree at any slider setting.
v0.6.2
New examples
- Multiple-pass estimation (
gsjs/example_gsjs_multipass) — the Harding & Deutsch
variance-calibrated MPE workflow (geostatisticslessons.com/lessons/multipass), end to end:
ground truth is a real unconditional SGSIM realization (@atra/gslib, Wasm) from a known
nested variogram, drilled at three spacings; each kriging pass is calibrated into the
change-of-support f window against a nearest-neighbour reference; SPLS and NN straw men
bracket the calibrated model in a grade–tonnage verdict judged against the simulated truth.
All parameters are live sliders. - Multiple-pass estimation, Python edition (
gsjs/example_gsjs_multipass_py) — the same
document with every cell in adder (Python). The RNG is ported bit-for-bit, so both editions
produce identical numbers — two languages, one verifiable result.
@gcu/plot
- Perceptual colormaps (viridis, coolwarm, turbo, plasma, inferno, magma, cividis) now
interpolate real anchor stops instead of polynomial fits that went badly wrong at the ends
(viridis topped out green instead of yellow; coolwarm ended white instead of dark red). cmapaccepts a list of colors as a categorical map (matplotlib's ListedColormap idiom).
micro
- Analysis-window footers: opaque
--panelbackground, docked to the window bottom.
v0.6.1
Fix: exported workspaces could ship an invisible click shield
Exporting a workspace clones the live page the instant "Export" is clicked — while the export dialog itself is still playing its closing fade. When the clone lost that race, the captured dialog backdrop (an invisible full-viewport overlay, with no script left in the exported document to remove it) shipped inside the file: the export loaded to "ready" and then absorbed every click and keystroke. The clone now strips all transient chrome — dialogs, backdrops, popup menus — before embedding, and the works smoke asserts a mid-close dialog cannot survive into an export.
Already-affected exports can be repaired by deleting the gcu-dialog-backdrop / gcu-dialog elements from the file (or via devtools), or simply by re-exporting from a shell on this release.
v0.6.0
The catalog is full — "Everything" means everything
The first-party package catalog grew from 13 to ~22 entries: the ten built-in surfaces (hex, encode, wasm4, doc, docs, book, dd60, patchbay, strata, plate) now ship as real .gcupkg packages, @gcu/adder (Python) and @gcu/soft install as cell-type languages, @gcu/plot/@gcu/sadpan as libraries with offline import plt, and @gcu/sql/@gcu/shader/@gcu/calque as tagged-language packs.
- Declarative languages — installed language packs appear in every cell-type picker, the File → "New ⟨language⟩ notebook" menu, and the default-language setting, loading cold→hot on first use. Python runs end-to-end in a provisioned works-core notebook.
- The 4-profile ladder — Minimal ⊂ Notebook ⊂ Geoscience ⊂ Everything (
extends-based), baked into works-core's first-run setup. - bootLoad fix — a path-less "New notebook" no longer stack-overflows copying the workspace into its own mount; the notebook surface boots in works/works-core again.
Data-integrity fix: --> in saved notebooks
A literal --> anywhere in a notebook's cleartext payload — cell code like i --> 0, or an installed module whose source draws mermaid arrows — closed the AUDITABLE-VFS HTML comment early and silently truncated the saved or exported file. The payload's --> sequences are now re-spelled with the JSON > escape: byte-safe for comment embedding, parses identically, and older runtimes read new files unchanged.
Libraries and tools grown alongside
Two months of standalone-tool work rode the same tree: micro's workbench/audit/modularization era (@gcu/condenser grew the grid-join engine, deferred re-shade, the gcu.condenser Jupyter widget), @gcu/groma + @gcu/facet (structural geology on outcrop meshes), @gcu/dispatch (session-trained NL → command), gslib.atra and bands.gpu, plus plan.gantt accepting the plain string-holiday calendar form.
All app smokes green: works, examples (84/84), micro ×2, gslib ×2, bands, lamina, condenser-widget; npm test 7474 passing.
v0.5.2
auditable v0.5.2
@gcu/wasm4 — a WASM-4 fantasy console
A new playable Works surface (.w4): a headless console engine (rasterizer + host) plus a 60 Hz canvas player. atra compiles WASM-4 carts with zero compiler changes; the platform is feature-complete — sprites (blit/blitSub), text + the vendored WASM-4 font, and 4-channel APU sound on WebAudio. Input is local (keyboard + gamepad), no latency. Added atra data segments at explicit offsets (data p, n = @0xADDR "…").
Owned build toolchain — @gcu/build self-host + @gcu/make
- @gcu/build self-hosts off air's bundle:
ext/air/build.jsnow emits an export footer, so @gcu/build consumes air's published API instead of reaching into its source. - ~24 extension packages migrated onto the @gcu/build bundler (rename-on-collision; caught latent export drift along the way).
- @gcu/make
make.yaml: the build orchestrator's targets are now declarative (replacing a hardcoded JS table), with per-packageext/<pkg>/make.yamldiscovery andrun:recipes — pure in-process GCU-function builds (e.g. compiling atra → wasm with no subprocess).
Works
- bootSurface universal rollout — all 15 built-in surfaces now share one handshake base.
- Settings → Updates panel (manual service-worker update controls).
- Text editor syntax highlighting — the text surface now colors js/py/css/html, plus
.atrafiles.
Docs
SPEC + README sync; example count corrected.
v0.5.1
Auditable v0.5.1 — Works launcher polish + a much nicer tab reorder.
A focused UX pass on the Works shell, surfaced from the live works-core PWA.
Launcher
- Fixed glued title/description on launcher cards (label/desc are stacked now).
- Live refresh — provisioning a profile or installing a package now makes its card appear in the open launcher without a reload (new
Shell.LaunchItemsChangedsignal). - "+" button at the end of every tab strip opens a Launcher in that stack.
- Cards open in the launcher's own stack — a card you click lands right where the launcher is, not in a default stack.
Rails (@gcu/rails) — tab reordering
- Dragging a tab over a strip used to hide the other tabs behind a strip-wide highlight, with only 6px targets to drop between them. Switched to the standard VS-Code/browser model: each tab is a half-width insert target, the highlight is a thin caret at the boundary, and the tabs stay visible the whole drag. Reordering is now easy and predictable. Improves every rails host, not just Works.
v0.5.0
Auditable v0.5.0 — Distributions, the notebook as a package, and one markdown engine.
Distributions & the lean GCU desktop
.gcuprofileformat + resolver — a profile is a base + named package set + settings + starter. Editions are now profiles (auditable-py,auditable-geo).works-core— the lean GCU desktop shell (~1.14 MB, fits a floppy): core surfaces only, dep-union libs, terminal on @gcu/term (xterm dropped).- First-run setup screen — pick a profile, theme, and provision it into the lean shell at runtime; re-runnable / idempotent recovery from a partial setup.
- First-party code-package catalog (
--target=packages) — auditable hosts its own.gcupkgregistry; dep-closure installer pulls a package's lib deps automatically. - Contribution registry — cold→hot service activation; the workbench ships as a provisioned
@gcu/workbenchpackage. - Profile export + distribution sources + a geas
profilecommand.
The notebook is now a package
@gcu/notebook— the notebook ships as a module-tree package assembled at spawn, baked into Works (shrank works ~0.5 MB), provisioned from the catalog in works-core.- Thin canvas in Works — slim cell toolbar (cell-ops + type changer + find + transport); the shell menubar drives the active notebook over A-Bus.
@gcu/airas the first fragment package.
One markdown engine
@gcu/markdownv0.1 — re-validated 100% against CommonMark/markdown-it over a 3,820-chunk corpus.renderMdnow wraps it (html-inert; the blacklist sanitizer is gone). Surface md forks deleted — preview/doc render through the shared engine with scoped lib inlining.
Works
- Launcher surface — the "what do you want to make?" entry point, auto-opens on an empty workspace.
- Welcome / starter-cell seeding — a profile greets you with a welcome notebook (or doc fallback in the lean shell).
- PWA —
@gcu/sw(the extracted, de-raced GCU service worker), storage-persist, update-available banner.
Other
- @gcu/vfs 0.2.0 — DropboxBackend (cloud VFS over the Dropbox API).
- CI — de-commit regenerable build outputs (built + deployed fresh); Works gets its own home at gentropic.org/works; actions bumped to v5 (Node 24).
v0.4.0
First release on the gentropic org. Signed builds (Ed25519); the in-app updater verifies before applying.
Highlights since v0.3.0
- adder (Python) is first-class —
import plt/import sadpan/import gslib/import natralazy-load with no bootstrap cell; adder cells auto-activate. - Notebook shell-lite —
!pkg install …,!ls,!cat …run natively over the notebook VFS (no install, works onfile://). - Editions — single-file offline bundles:
auditable-py(NumPy/pandas/matplotlib-shaped) andauditable-geo(+ geostatistics). - Reproducible builds + a new landing page, live language playground, and an examples gallery.
Download auditable.html (or works.html) below — one self-contained file, no install.
v0.3.0
What's new
- Packed save: notebooks can compress themselves via browser-native gzip. Split save button lets you toggle between normal and packed modes.
- Toolbar badges: signed and packed status shown as badges next to the title.
- Module hygiene: all ES modules are now pure (no side effects). A dedicated
globals.jshandles allwindow.*bindings. - Release notes: update panel now shows release notes when checking for updates.
- Build compression:
node build.js --compressproduces a self-extracting packed build.
Fixes
- Fixed multi-line imports not stripped by build script.
- Fixed cross-module imports (
notifyDirty,Sin init,setBadge). - Converted inline
window.Xdefinitions in keyboard.js to proper exports.