Version Packages - #495
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
July 26, 2026 02:34
79a3094 to
7fdd448
Compare
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.
Checkstack v0.137.0 Changelog
Minor Changes
Add the
objectRefinstanceAccess mode and move the relation-write authz onto itThe relation-tuple writes (
writeRelation/removeRelation/setObjectPublic)administer team access on ANY resource type, so their authorization could not be
expressed by the existing
instanceAccessmodes (which all assume a fixedresource type) and was enforced by hand in the auth handlers with
access: []-leaving the contract unable to declare the rule and the API docs showing no
restriction.
A new
objectRefmode reads the object's TYPE and id from the request body(
typeParam/idParam) and authorizes via the same engine native scoping uses:the endpoint's own access rule (
auth.teams.manage) is the global adminOR-override, otherwise the caller must be able to manage the referenced object
(its own
<type>.managerule on a non-private object, or a team editor/ownergrant on it).
autoAuthMiddlewareenforces it, the boot validator recognises it(input paths cross-checked), and the auth handlers drop their hand-rolled checks.
Behaviour is unchanged; the authorization is now contract-declared and enforced
by the middleware rather than the handler.
Packages: @checkstack/auth-backend, @checkstack/auth-common, @checkstack/backend, @checkstack/backend-api, @checkstack/common
Make endpoint authorization self-documenting in the generated API docs
Every procedure's authorization is now derived from its contract metadata (its
accessrules +instanceAccessmode) via a shared mode-descriptor registry andemitted into the OpenAPI spec - both structurally (
x-orpc-meta.authorization)and as a human
**Authorization.**sentence folded into the operationdescription. Previously the docs surfaced only a flat list of global rule ids, so
an integrator (an API-key/application principal that CAN hold team grants) never
saw the team-grant / per-object dimension, and endpoints gated purely in the
handler showed no restriction at all.
For authorization that no declarative mode can express and is therefore enforced
in the handler (a compound OR, a graded verdict, a DB-derived id set), a new
optional
accessNoteon the procedure metadata surfaces the real rule in thedocs as an explicitly handler-enforced addendum. The note is documentation, not a
guarantee: per
.claude/rules/rlac.mdthe drift guard for such authz isbehavioral tests over an extracted pure decision function, and the note must
state exactly what those tests pin.
Every handler-enforced authorization endpoint now carries such a note so the docs
are complete: the team read/scoping and team-management endpoints
(
@checkstack/auth-common), the health-check assignment/history reads(
@checkstack/healthcheck-common), the audience-graded incident/maintenancereads (
@checkstack/incident-common,@checkstack/maintenance-common), status-page publish's bound-resource check (
@checkstack/status-page-common), thestream
setSystemLinksreadable-additions check(
@checkstack/{metricstream,tracestream,logstream}-common), and the automationrunAsescalation guard (@checkstack/automation-common). These aremetadata-only additions - no runtime behavior changed. The notes describe the
rule for API-doc readers only; the drift guard is behavioral tests over the
check's decision function (per
.claude/rules/rlac.md), so the notes name nointernal test files.
The API docs viewer (
@checkstack/api-docs-frontend) now renders eachoperation's description as Markdown, so the
**Authorization.**block (and anyinline
code) formats correctly instead of showing raw markdown.Packages: @checkstack/api-docs-frontend, @checkstack/auth-common, @checkstack/automation-common, @checkstack/backend, @checkstack/common, @checkstack/healthcheck-common, @checkstack/incident-common, @checkstack/logstream-common, @checkstack/maintenance-common, @checkstack/metricstream-common, @checkstack/status-page-common, @checkstack/tracestream-common
Migrate the frontend from react-router-dom v7 to react-router v8
Resolves GHSA-qwww-vcr4-c8h2 (HIGH): React Router before 8.3.0 has an RSC-mode
CSRF bypass that lets an action execute before the 400 response. Checkstack runs
a client-side SPA (
<BrowserRouter>) and does not use RSC mode, so the platformwas not exploitable through it - but the advisory kept the dependency-graph
security gate red on every pull request, and the fix is only available in the 8.x
line, which the auto-remediation deliberately will not reach (it refuses major
bumps).
react-router-domhas no v8: it was folded intoreact-routerin v7 and v8ships as
react-routeronly. So this is a package swap rather than a range bump:react-router@^8.3.0instead ofreact-router-dom@^7.16.0, and 97 source files import fromreact-router.optimizeDepsanddedupeentries move toreact-router(shared singletonrequiredVersion^8.0.0). Remotes nevershared the router, so the remote contract is unchanged.
react-router, keeping the enforcedsingle-range guarantee that a past four-range regression motivated.
The API surface Checkstack uses is unchanged between v7 and v8 -
BrowserRouter,MemoryRouter,Routes,Route,Link,NavLink,useLocation,useNavigate,useParamsanduseSearchParamsare all exported by v8 with thesame signatures - so no routing code changed beyond the import specifier. v8
requires React >= 19.2.7, which the workspace already pins.
Packages: @checkstack/about-frontend, @checkstack/ai-backend, @checkstack/ai-frontend, @checkstack/announcement-frontend, @checkstack/anomaly-frontend, @checkstack/api-docs-frontend, @checkstack/auth-frontend, @checkstack/automation-frontend, @checkstack/catalog-frontend, @checkstack/command-frontend, @checkstack/dashboard-frontend, @checkstack/dependency-frontend, @checkstack/frontend, @checkstack/gitops-frontend, @checkstack/healthcheck-frontend, @checkstack/incident-frontend, @checkstack/infrastructure-frontend, @checkstack/integration-frontend, @checkstack/logstream-frontend, @checkstack/maintenance-frontend, @checkstack/metricstream-frontend, @checkstack/notification-frontend, @checkstack/pluginmanager-frontend, @checkstack/queue-frontend, @checkstack/release, @checkstack/satellite-frontend, @checkstack/script-packages-frontend, @checkstack/secrets-frontend, @checkstack/slo-frontend, @checkstack/status-page-frontend, @checkstack/telemetry-frontend, @checkstack/tracestream-frontend, @checkstack/ui
Split telemetry "Test connection" so its authorization is contract-declared
testSourceConfigused to accept an optionalsourceId(to reuse an existingsource's stored secrets) and verified MANAGE on that source with a hand-rolled
check in the handler - the one telemetry endpoint whose authorization was not
declared on the contract. It is now split into two procedures, each fully
declared:
testSourceConfig- the fresh-editor dry run (no stored secrets),typeScopedat manage level, as before but with
sourceIdremoved from its input.testExistingSource- the secret-reuse dry run,sourceIdrequired andauthorized by the
idParaminstanceAccess mode (MANAGE on that source),enforced by the middleware. The hand-rolled
assertCanManageSourcehandlercheck is deleted.
The "Test connection" button calls whichever procedure fits (it has a
sourceIdor not), so the UI is unchanged.
BREAKING CHANGE:
testSourceConfigno longer accepts asourceId- callers thatreused stored secrets by passing one must call the new
testExistingSourceinstead. Authorization behaviour is unchanged (still MANAGE on the referenced
source), only the endpoint split.
Packages: @checkstack/telemetry-backend, @checkstack/telemetry-common, @checkstack/telemetry-frontend
Patch Changes
@checkstack/cache-api@0.3.21
Packages: @checkstack/cache-utils, @checkstack/ingest-utils
@checkstack/cache-utils@0.3.2
Packages: @checkstack/ingest-utils
@checkstack/otlp-wire@0.1.1
Packages: @checkstack/ingest-utils
@checkstack/scripts@0.7.7
Packages: create-checkstack-plugin
@checkstack/signal-common@0.3.2
Packages: @checkstack/signal-frontend