v0.2.5
Name the test runner helix, and tighten the runner-import guard
/testing must stay runner-agnostic, and the guard listed a foreign
runner's package alongside helix's. There is no foreign runner in this
universe to import, so the alternative goes and the guard keeps saying
what it means: nothing here imports a test runner.
Release the work that landed after the last published version
The registry now carries the version this package.json was still on, so
everything committed since ships under the next one rather than
retroactively changing what a published version means.
Build the cross-platform matrix only when the version moves
The five-runner matrix exists to produce the prebuilt binaries a release
ships. It ran on every push to main, rebuilding artefacts nobody
downloads — five runners, every time, for a comment fix.
A version-gate job now compares the package version at HEAD^ with
the one at HEAD and the matrix runs only when they differ. Anything
that is not a push passes the gate unconditionally, so workflow_dispatch
— how a release is actually cut — is unaffected, and so is publish,
which still waits on the full matrix. A missing HEAD^ reads as a bump:
erring towards building is the safe direction.
The test signal deliberately does NOT move with it. quality and the
cargo/integration jobs were already independent of the matrix, but
vitest ran INSIDE it, so gating the matrix alone would have quietly
taken the TypeScript suite off every ordinary push. A ts-tests job now
runs it on ubuntu, building its own napi binary rather than waiting on a
gated artefact. On a push without a bump that leaves typecheck, lint,
cargo and vitest — one runner instead of five.
Accept secondary TIMESTAMP columns — TDengine does
validate_stable and compile_create_table rejected a second TIMESTAMP
column with E_TS_DUPLICATE. TDengine has no such rule. Its parser
checks the TYPE of column 0 (TSDB_CODE_PAR_INVALID_FIRST_COLUMN) and,
past that, rejects only JSON — there is no counter and no error code for
a second timestamp. Its own test suite creates
create table stb_ts (ts timestamp, c0 timestamp, c1 timestamp).
The rule the check was reaching for is "the first column is a
TIMESTAMP", which is the row key, and that check was already there and
stays. What it actually enforced was "at most one", which blocks the
normal shape of a dated fact carrying secondary dates: a dividend keyed
on its ex-date also has declaration, record and payment dates. Those had
to be stored as VARCHAR(10) — lossless for a calendar date, but the type
and every date function on the column are gone.
Not modelled, and worth knowing before someone reaches for it: TDengine
3.3's COMPOSITE KEY marks a SECOND primary-key column, which must sit
at index 1 and be an integer or VARCHAR — never a TIMESTAMP.
Changes since v0.2.4.