Repository navigation
release: v0.1.0 post-release follow-ups (latest badge, notes, version flag, docs) #501
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationgithub_actionsPull requests that update GitHub Actions codePull requests that update GitHub Actions codepolishImprovements to existing featuresImprovements to existing features
on Aug 19, 2026 Priority re-anchor + five priority changes — consolidated rationale. Posting here because #149 (the launch tracker that anchored the old rubric) is closed, and this is the live post-release tracker.
The anchor
.claude/skills/pm-triage/references/rubric.mddefines P0 as "blocks the flip" — thev0.1.0cut and the repo public-flip. Both shipped 2026-08-19. Since then P0 has been empty and undefinable: there were 0 open P0s and no way to rate a new one, while P2 absorbed 89 of 173 open issues.Working anchor from here, applied below (Eric's call, 2026-08-25):
P0 — live in a shipped, public release and severe enough to cut a patch for.
P1 — wanted in the next release. P2 — blocks broader adoption. P3 — backlog.⚠️ rubric.mdstill says the old thing. That edit needs a PR through the normal gate and has not been made — until it is, this comment is the only written record of the anchor.The changes
issue why #474 P1 → P0 Verified plain read of denied column values ( argMax(*)/argMin(*)on 2-column tables) plus a cardinality oracle at any width. Contradictsaccess-control.mdx:177, published on the public docs site. Independent urgency: the fix is a breaking query-API change whose cost the issue itself notes "grows after the first tagged release" — that clock is running.#460 P1 → P0 A one-character operator typo silently disables row security and /validatereturns{"valid":true}— the safety net certifies the breach. Now scoped to that detection half only; see below.#461 P2 → P1 Not a new exposure but a reach gap, and it is load-bearing — see the ordering note below. #396 P2 → P1 Consolidated with #449. Three failure modes in liveQuery(), a headline documented feature, live in v0.1.0; a first-party consumer has already routed around it.#389 P2 → P1 Consolidated with #477. Unbounded memory growth (~70 MB/hour at 100 ev/s) in .subscribe()— the primary documented streaming API — with no cap and no drain.#460 is now two issues
The strict-decoding half is split out as #514 (P2). It is a breaking change to config parsing needing warn-then-reject over a release, and #460 flags that migration risk itself. Left combined, the urgent half — RLS silently off while
/validatesays it's fine — would have moved at the slow half's pace. #460 now covers rejecting an all-nilFilter, rejectingfilter:underinsert:, and making/validatestop lying.Ordering constraint (not just priority)
#461 must precede #460.
validateRolePermsruns only viaStore.Put; theloadandWatchpaths cache KV policies unvalidated. So every rule #460 adds is inert on any deployment already carrying a policy in KV — which is exactly the population most likely to be carrying the bad policy, including the SCC-2026 pilot. Fixing #460 first produces a fix that does not reach the deployments that need it.Suggested sequence: #461 → #460 → #474 → #514 (warn-first).
Disclosure
Of the three security items, only #474 clears the bar for a GitHub Security Advisory — a verified read of denied data in a shipped public artifact that contradicts published documentation. #460 requires operator misconfiguration to trigger and #461 is a reach gap on an already-disclosed fix; both are defensible as plain open issues. Still undecided — flagging, not deciding.
pm-triage routine, 2026-08-25, on Eric's instruction. All claims verified by code-read against
b2eee9d.- added a commit that references this issue
on Aug 26, 2026
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsBacklog
The first tagged release (
v0.1.0+clients/ts/v0.1.0, 2026-08-19) shipped successfully — every artifact publishes, verifies, and runs. This tracks the rough edges found while verifying it end-to-end.Nothing here is a release blocker. The release is good; these are follow-ups.
What was verified working
Recorded so nobody re-audits it:
.zipon Windows,.tar.gzelsewhere;checksums.txtverifies.-Xldflags — the released binary reportsversion=0.1.0 build_time=2026-08-19T16:54:06Z git_commit=9d4cef9. TheBuildTimeinitializer fix (ci(release): make every version tag-driven and fix the dev channel #485) works in production.go install …@v0.1.0— works off the module proxy, and reports exactly whatdevelopment.mdclaims:version=0.1.0,build_time/git_commit=unknown. ThebuildInfoFallback()doc claim is empirically correct.:v0.1.0and:latestresolve to the same digestsha256:dda9194b533e2ae8e56dbdb5498e216e975e76c24420fe10cf56ecca2c5f2f24.--signer-workflow. Negative control passes too: pointing--signer-workflowatci.ymlis rejected (exit 1), so the check discriminates rather than passing vacuously.@wavehouse/sdk@0.1.0underlatest;npm audit signaturesreports verified registry signatures and verified attestations (SLSA v1).devdist-tag (0.0.1-dev.20260819163639.h62b2f85f436a) is now the semver-highest of all 14 published versions,^devresolves forward, and a dev build cannot satisfy^0.1.0.getting-started.mdsteps 1–5 run clean onghcr.io/wave-rf/wavehouse:v0.1.0: table create, ingest ({"ok":true}), query (both rows), SSE (: connected+ live event), andwavehouse healthexits 0.1. The SDK release stole the "Latest release" badge
https://github.com/Wave-RF/WaveHouse/releases/latestresolves toclients/ts/v0.1.0, which has 0 assets.gh release createdefaults--latestto automatic, and the SDK release was created at 17:06 vs the server's 17:01 — newest non-prerelease wins. Consequences:gh release download --repo Wave-RF/WaveHousewith no tag picks a release containing no binaries;Fix, two parts:
gh release edit v0.1.0 --latest # reclaim it nowand in
.github/workflows/publish-npm.yml(~line 339), so future SDK releases never take it again:2. The SDK release body is a single fallback sentence
clients/ts/v0.1.0's entire body:That's the intended first-release fallback (no earlier
clients/ts/v*to diff from), so it is working as designed and is self-correcting — the next SDK release generates real notes anchored atclients/ts/v0.1.0.Two things still worth doing:
3. Auto-generated notes undersell the release
Category counts for
v0.1.0(142 entries):The taxonomy did its job — Dependabot routing is clean, zero bumps leaked into CI/Docs. The problem is upstream of it: GitHub groups by label,
documentation/github_actionsare auto-applied byactions/labeler, andenhancement/bugare applied by hand and mostly weren't. So a release that contains the entire product reads as a docs-and-CI release.Options, roughly in cost order:
CHANGELOG.mdas the narrative (it already is —development.mdsays the changelog "is not the source of the release body; it is the longer-form record").enhancement/bugon the merged PRs that warrant it and regenerate the notes.feat:/fix:→ labels at merge) is the only lever.4.
wavehouse versionsilently boots the servermain.go:102special-cases exactly one subcommand:Everything else falls through to
run(). Sowavehouse version,--version, and-vall start a full server — binding ports and creating adata/directory in the caller's cwd — instead of printing a version.versionis the first thing most people type aftergo install.The version is available (first log line, and
/version), so this is ergonomics, not a data bug. The code already anticipates it: "If we ever need more, swap to a real argv router." Worth doing now that the binary is public.5.
standalone.yamlcan't run the released imagedeployments/compose/standalone.yaml:14usesbuild: context: ../.., so the documented quickstart requires cloning the repo — it never consumesghcr.io/wave-rf/wavehouse. Now that:latestand:v0.1.0exist, a user should be able to run the stack without the source tree. (Verifying #149's "against the released image" box required a hand-written compose file substitutingimage:.)Suggest either switching the service to
image: ghcr.io/wave-rf/wavehouse:latestwith the build stanza as a documented dev override, or shipping a secondstandalone-released.yaml.6. Query silently returns
[]for a malformed requestSame server, opposite strictness:
/v1/ingest{"pge": …}400 unknown column "pge"/v1/query{"colums": ["page"]}200 []/v1/query{}/{"limit":10}/{"columns":[]}200 []A misspelled or omitted
columnsyields an empty result set that is indistinguishable from "the table has no rows".getting-started.mdexplicitly promises the strict behaviour for ingest ("Unknown fields, type mismatches, and missing required columns are rejected with a400"); query does the opposite.This cost real debugging time during release verification — an empty result was initially read as a broken release. A
400on "no projection specified" (neithercolumnsnorselect_all) would remove the whole failure class.7. Docs corrections
development.md:627— "A tag carrying a prerelease suffix … never takes the 'Latest release' badge from a shipped stable version." True but incomplete: it only covers prerelease-vs-stable, and misses the case that actually bit us (item 1) — two stable tag families in one repo compete for the badge. Should state that the server release owns "Latest" and client releases are created with--latest=false.development.md:628— "Both — release notes generated by GitHub…" is inaccurate for the first release in any tag family, which gets the fallback body instead (item 2). Worth one clause.development.md:618— the Tag naming block documentsclients/go/v0.1.0 Go SDK, but there is noclients/gomodule (onlyclients/ts). Fine as illustration of the scheme; flagging in case it reads as shipped.publish-npm.yml.development.md→ Cutting a release documents the flow and thedevchannel but neither of these. Anyone touching the publish jobs needs both.GitHub release+npm versionbadge alongside the coverage/Go-report/license row would be cheap.Refs
Closes out verification for #149; overlaps the release-path items in #268.