Repository navigation
chore(repo): version packages (beta) - #903
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub. 5 Skipped Deployments
|
Contributor
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
github-actions
Bot
force-pushed
the
changeset-release/v3
branch
24 times, most recently
from
October 24, 2026 10:38
8406df0 to
8d54e34
Compare
github-actions
Bot
force-pushed
the
changeset-release/v3
branch
from
October 24, 2026 12:35
8d54e34 to
7f2b617
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to v3, this PR will be updated.
v3is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonv3.Releases
evlog@3.0.0-beta.1
Major Changes
#900
cd75745Thanks @evlogai! - A loggedEvlogErrorcarriescode,why,fixandlinkonce, at the top oferror. Itsdatais now the payload passed tocreateError({ data })and nothing else, and it is left out when there is none. Before, the loggeddatarepeated the guidance fields:"error": { "name": "EvlogError", "message": "Payment failed", "code": "PAYMENT_DECLINED", "status": 402, "why": "Card declined by issuer", "fix": "Try another card", - "data": { "retryAfter": 30, "code": "PAYMENT_DECLINED", "why": "Card declined by issuer", "fix": "Try another card" } + "data": { "retryAfter": 30 } }This holds when h3 wraps the error too. A drain or saved query that read
error.data.whyshould readerror.why. The HTTP response is unchanged: itsdatastill carries the guidance fields, whichparseError()reads on the client.#936
bf38917Thanks @HugoRCD! -evlog/nitrois the Nitro 3 module, and the nitropack (Nitro 2) module moves toevlog/nitro/v2.evlog/nitro/v3is removed. Nitro 2 stays supported for all of evlog 3.Rewrite the nitropack imports first, then the Nitro 3 ones, so an import is not moved twice. The Nuxt module needs no change:
evlog/nuxtstill runs on Nuxt 4's nitropack.#937
6387849Thanks @HugoRCD! - The HTTP error body sent by the Nitro, Nuxt and SvelteKit error handlers carries the status instatusand the text inmessageonly. ThestatusCode,statusTextandstatusMessagefields are gone: they repeatedstatusandmessage.url,error: trueanddataare unchanged, andwhy,fixandlinkstay underdata.{ "url": "/api/checkout", "status": 402, - "statusCode": 402, - "statusText": "Payment failed", - "statusMessage": "Payment failed", "message": "Payment failed", "error": true, "data": { "why": "Card declined", "fix": "Use another card" } }parseError()already readsstatusandmessage, so client code that goes through it needs no change. A client that readstatusCodeorstatusMessagefrom the JSON body should readstatusandmessage. The HTTP status line itself is unchanged.#933
0e2d709Thanks @HugoRCD! - OTLP records default to thecompactshape with OpenTelemetry semantic convention attributes. This applies to every drain built on the OTLP encoder:evlog/otlp, PostHog (logs and events mode), HyperDX and Sazabi.recordShapedefaults to'compact': the body is a one-line summary (POST /api/checkout (500)) and nested fields become dotted attributes (user.id). In PostHog events mode, nested properties are flattened the same way.semanticConventionsdefaults totrue: records also carryhttp.request.method,url.path,http.response.status_code,exception.*andgen_ai.*, and the resource carriesdeployment.environment.name. The evlog field names stay.For the same 100 events, the OTLP request shrinks from 151,235 to 140,250 bytes as JSON (2,804 to 2,198 gzipped) and from 76,839 to 63,925 bytes as protobuf.
To keep the 2.x output:
#938
980c1d0Thanks @HugoRCD! - Two optional peer ranges change:evegoes from>=0.30.0to>=0.72.0.evlog/eveno longer supports eve releases older than 0.72.nitrogoes from^3.0.260311-betato>=3.0.0-0 <4.0.0-0. The old range did not cover the later dated Nitro 3 betas such as3.0.260903-beta, and the new one covers every Nitro 3 beta and release without letting in Nitro 4.The open-ended ranges stay open:
@nestjs/commonand@nestjs/core(>=11.2.7),react-router(>=7.18.4) andhono(>=4.13.12) accept new majors. evlog's own tests now run on NestJS 12, React Router 8, eve 0.83 and the latest Nitro 3 beta.nitropack ^2.13.4andh3 ^1.15.11are unchanged.#929
2316600Thanks @HugoRCD! - Remove theevlog/browserentry. It was deprecated in 2.x and re-exportedevlog/httpunder other names. Import fromevlog/httpinstead:The types follow the same rename:
BrowserDrainConfigisHttpDrainConfig,BrowserLogDrainOptionsisHttpLogDrainOptions.#930
96af994Thanks @HugoRCD! - Remove the deprecated credential aliases. The Axiom and Better Stack drains, and the Nuxt module, read the API key fromapiKeyonly.tokenoptionapiKeyAXIOM_TOKEN/NUXT_AXIOM_TOKENAXIOM_API_KEY/NUXT_AXIOM_API_KEYsourceTokenoptionapiKeyBETTER_STACK_SOURCE_TOKEN/NUXT_BETTER_STACK_SOURCE_TOKENBETTER_STACK_API_KEY/NUXT_BETTER_STACK_API_KEYevlog.axiom.tokenevlog.axiom.apiKeyA project that still sets only the old name gets the drain's "Missing apiKey" error and sends nothing.
applyDeprecatedAliasis no longer exported fromevlog/toolkit.#935
f8024f3Thanks @HugoRCD! -EvlogErrorno longer has thestatusCode,statusTextandstatusMessagegetters, deprecated since 2.x. Readstatusfor the HTTP status andmessagefor the text:const error = createError({ message: 'Payment failed', status: 402 }) -error.statusCode // 402 -error.statusMessage // 'Payment failed' +error.status // 402 +error.message // 'Payment failed'Reading one of the removed fields now returns
undefined, and TypeScript reports it. Errors thrown by h3 and Nuxt keep their ownstatusCode, and evlog still reads it from them.#931
9c74c54Thanks @HugoRCD! - RemovecreatePostHogEventsDrain()and thePostHogEventsConfigtype fromevlog/posthog. Both were deprecated in 2.x. Use the main drain in events mode, which takes the same options:PostHogEventsConfigwas an alias ofPostHogConfig.sendToPostHogEvents()andsendBatchToPostHogEvents()are unchanged.#900
cd75745Thanks @evlogai! -statusis optional onEvlogError, oncreateError()options, and on error catalog entries (defineErrorCatalog,defineError). Core no longer defaults it to 500. An error that never reaches an HTTP response (an agent turn, a job, a cron task, a CLI script) has nostatus, andtoJSON()and the logged event leave the field out.Every HTTP boundary still answers 500 for an error without a
status. This covers the Nuxt and Nitro error handlers, h3, Next, Hono, Express, Fastify, Elysia, NestJS, SvelteKit andparseError(). Code that readerror.statusdirectly and expected a number needs to handleundefined, or read the status the framework sends.A non-HTTP error, logged without a status:
{ "name": "EvlogError", "message": "Export job stalled", "data": { "why": "No progress for 5 minutes", "fix": "Retry the export" }, "why": "No progress for 5 minutes", "fix": "Retry the export" }Before this change the same error also logged
status: 500. No codemod is needed. Upgrade checklist: check code that readserror.statusas a number, and any alert or sampling rule that matched on it.#932
5459485Thanks @HugoRCD! -createLoggerStorageis no longer exported fromevlog/toolkit. Import it fromevlog/toolkit/storage, which has exported it since 2.x. The main toolkit barrel no longer pulls innode:async_hooks, so framework integrations built on it stay edge-safe.Minor Changes
8c66a09Thanks @evlogai! - HyperDX and Sazabi now acceptsemanticConventions, and HyperDX also acceptsrecordShape, so a 2.x user can keep the 2.x output withrecordShape: 'json'andsemanticConventions: false. The defaults themselves changed in feat(otlp)!: default OTLP records to compact with semantic conventions #933: both adapters now send the compact record shape with OpenTelemetry semantic conventions on.Patch Changes
#910
5ab0a8dThanks @HugoRCD! - Thebearerredaction built-in now runs before every other built-in, so a Bearer token is masked whole. A token shaped like an IBAN or a card number was partly rewritten first and then no longer matched:Bearer FR76ABCD123456789012was logged asBearer FR76****012, andBearer 4111111111111111asBearer ****1111. Both are nowBearer ***, and so is a JWT afterBearer, which was logged asBearer eyJ***.***.#905
94748e1Thanks @HugoRCD! -log.set(),emit()and the redaction production turns on by default do less work per event. The error check that runs on everyset()payload no longer allocates when the payload holds no error. Redaction copies a plain event once while it redacts, instead of astructuredClonefollowed by a walk per stage, and skips the built-in patterns on strings none of them can match. Events with aDate, aMap, a class instance or another value that is not plain JSON still go through the previous path. The eventtimestampis now one flat string. The concatenated string it replaces madeJSON.stringifyof the event, in a drain or a console line, about three times slower on Node 26. Logged and drained events are unchanged.#907
7fca2baThanks @HugoRCD! - Theibanredaction built-in masks a spaced IBAN whole whencreditCardis also on, as it is with the defaultredact: true. The card pattern ran first and matched the digits inside it, soFR76 3000 6000 0112 3456 7890 189was logged asFR76 ****3456 7890 189. It is nowFR76****189. Abuiltinslist runs in a fixed order, whatever order it is written in.#907
7fca2baThanks @HugoRCD! - A cycle in the context passed tocreateLogger()orcreateRequestLogger(), or in the fields passed toemit(), is logged as'[Circular]', as it already was forset(). It used to overflow the stack when redaction was on, which it is by default in production. AnErrorin that context or inemit()fields is now serialized with itsname,messageandstackinstead of being logged as{}.#907
7fca2baThanks @HugoRCD! -log.set()only merges plain objects. A class instance or aDateis now a value: the nextset()on the same key replaces it. Before, merging into one wrote the new fields into the caller's own object, and a secondDateon the same key was ignored.log.set({ account })followed bylog.set({ account: { plan: 'pro' } })now logs{ plan: 'pro' }and leavesaccountuntouched.#902
7f74e73Thanks @HugoRCD! - Keep evlog 3's process-wide state apart from evlog 2.3.0.0-beta.0still stored its config under the 2.x registry key, so with both majors loaded in one process (for example a dependency still on evlog 2), each copy read and overwrote the other's config, drain and redaction, and the "Multiple major versions of evlog" warning never fired. 3.x now uses its own key and warns when a 2.x copy is also loaded.@evlog/cli@1.0.0-beta.1
Minor Changes
#936
bf38917Thanks @HugoRCD! -evlog initwrites the Nitro import for the evlog major installed in the project. On evlog 3 it importsevlog/nitrofor Nitro 3 andevlog/nitro/v2for nitropack, and on evlog 2 it keepsevlog/nitro/v3andevlog/nitro. The TanStack Start error middleware snippet follows the same rule.evlog configreads the module options from any of the three subpaths.When the project has no evlog yet, a prerelease of the CLI installs
evlog@betaand a release installsevlog, so the import paths it writes match the evlog it installs.#870
df39d50Thanks @evlogai! - Addevlog upgrade, which migrates a project to evlog 3. It reads the evlog range inpackage.jsonand runs every migration above it.This release rewrites two things:
evlog/nitrobecomesevlog/nitro/v2andevlog/nitro/v3becomesevlog/nitro, includingimport(),require.resolve()andimport.meta.resolve().evlog/browserbecomesevlog/http, withcreateBrowserDrain,createBrowserLogDrain,BrowserDrainConfigandBrowserLogDrainOptionsrenamed to theirHttpnames wherever the file uses them.Code that cannot be rewritten safely is reported with its file, line and a link to the migration guide: a dynamic import of a module whose exports were renamed, an
export *from it, or the module named in a plain string. The dry run exits 1 while anything is left, and--writeexits 1 while reported findings remain.--writerefuses to run on uncommitted git changes unless you pass--force.--jsonprints the report with aschemaVersion.Running it again after
--writedoes nothing, becausepackage.jsonalready says evlog 3.Patch Changes
4324afdThanks @evlogai! -@evlog/clinow installs next to evlog 2.31 and later as well as 3.0 betas. Before,npm i -D @evlog/cli@betain a project still on evlog 2.x failed withERESOLVE, because the peer range only allowed 3.0 betas. The minimum is 2.31.0, the first 2.x release the CLI has been built against.