Skip to content

publish-smoke / packed-tarballs is RED ON MAIN: the new boot scan fails on a vendor-handled UNIQUE constraint line — and it is blocking the release #17027

Description

@os-bill

publish-smoke / packed-tarballs has been failing on main since ~2026-09-09T01:07Z. It is a status check on the Version Packages PR (#15334), so it currently blocks the release — and that release is the one open action on #16500 (the published on-ramp is broken for every new user until it ships).

⛔ Filed by the seat that hit it while verifying #16500's release path. Main-red is shared damage, so it is filed rather than worked around. domain:* and priority:* are triage's to set — deliberately not set here.

The failure

Run 34304339043, job Packed-tarball smoke (release candidate), on main @ d127f9b:

16:...ERROR Insert operation failed {"object":"sys_oauth_resource","error":{"message":
  "UNIQUE constraint failed: sys_oauth_resource.identifier [statement and bound values redacted]",
  "stack":"SqliteError: ... at _SqlDriver.create (.../@objectstack/driver-sql@...17.4.0.tgz/...)
           at _ObjectQL.createWithAutonumberResync (.../@objectstack/objectql@...17.4.0.tgz/...)"}}
##[error]error-level log lines during BOOT, before any probe ran (see above)

No probe ever ran — the job exits on the boot scan.

⭐ The line is a caught, by-design no-op — quoted from the vendor

@better-auth/oauth-provider@1.7.2, dist/introspect-*.mjs, docblock over the resource seeder (read from the published tarball):

"insertOnly" (default, safe): inserts rows whose identifier is not already present. Existing rows are untouched …

Race-safety: the identifier column carries a UNIQUE constraint, so two processes booting simultaneously can each attempt the insert — one wins, the other catches the constraint error and treats it as a no-op.

⇒ The vendor deliberately uses the UNIQUE violation as its race-safety mechanism and swallows it. Our SQL driver logs the exception at ERROR on the way out, before the vendor catches it, and the boot scan then reads that line as a failed boot.

⚠️ So the most likely reading is a false positive: a handled exception rendered as an unhandled-looking ERROR line. ⛔ Not asserted as certain — see NOT MEASURED below.

Why it appeared now — the gate is 5 hours old

when what
2026-09-08 22:19:31Z b810fd0test(publish-smoke): judge the boot before the probes run (#16976) lands, adding the boot-window error scan
2026-09-09 ~01:07Z onward packed-tarballs red on main, repeatedly

Failing runs on main, all same job: 34297886522 (01:07Z) · 34298625221 (01:18Z) · 34299337307 (01:28Z) · 34300907710 (01:52Z) · 34302122333 (02:10Z) · 34304339043 (02:43Z). Interleaved runs show cancelled because the next push superseded them.

⇒ The defect is not in the release candidate's product code. The gate started asserting something new, and this pre-existing benign log line fails it. ⛔ The maintainer's merge attempt did not cause this.

⭐ What this run DOES prove: the better-auth fix works

Same log, boot summary:

Plugins: 34 loaded
  ObjectQL, SqlDriver, ..., HonoServer, Metadata, Marketplace, PlatformObjects, Auth, ...

Auth is loaded. There is no AuthPlugin failed to load. The exact-pin fix (#16634) does clear #16500's root cause in the packed 17.4.0 artifacts — measured, not inferred.

NOT MEASURED

  • Whether the auth + CRUD probes pass. They never executed. The vendor's own contract says the row survives (one inserter wins), but this seat did not run them.
  • Why two seeders race on a fresh DB at all. A single-process objectstack dev boot colliding with itself is worth understanding; it may be a second betterAuth() instance rather than a true two-process race.

Suggested shape (for whoever picks this up)

Three candidate repairs, in the order this seat would try them:

  1. The scan's population is wrong, not its severity. A driver-level ERROR for an exception a caller catches is not a failed boot. The narrow fix is for the boot scan to judge unhandled boot failures — the class [finding] publish-smoke's log scan cannot name a WARN-level boot failure — it runs after the probes and matches only error/fatal #16793/test(publish-smoke): judge the boot before the probes run #16976 were built for (failed to load) — rather than every error-level line.
  2. The log level is wrong. _SqlDriver.create logs ERROR and then throws; the throw is the real signal and the caller handles it. Logging ERROR for an exception you are about to hand to a caller double-reports it.
  3. Avoid the collision. If the seed genuinely runs twice in one process, one of the two attempts should not exist.

⛔ Do not simply add sys_oauth_resource to an ignore list — that suppresses the specimen without answering which of the three above is true, and the next benign-but-noisy boot line reopens this.

Related

Activity

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

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions