Uh oh!
There was an error while loading. Please reload this page.
docs(deps): correct the scim advisory note to the measured 1.7.1 model set (seven core, ten with the managed catalog) - #11764
Conversation
…l set The `@better-auth/scim` advisory block in `pnpm-workspace.yaml` recorded six new models for the stable 1.7.x rewrite. Re-measured against the published 1.7.1 tarball (still npm `latest`) by constructing the plugin and reading `plugin.schema`: the core set is SEVEN — the six already named plus `scimProjectionGrant` — and configuring `managedConnections` adds three more (`scimManagedConnection`, `scimManagedCredential`, `scimManagedConnectionEvent`) for ten in total. The note's "code-defined connections" phrasing is corrected too: the plugin accepts a code-defined connection, a bearer-token verifier, OR a managed connection catalog, so the old wording mis-suggested there is no DB-backed catalog at all. Comment only — the parsed YAML data is byte-identical before and after, so no pin, override or resolution moves. The version pin stays on rc.1: moving it is the ADR-0071 migration, which this does not pre-empt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ahemw8RcTgqtxrj15PEZx
os-steve
commented
Aug 24, 2026
ACCEPT. Verified what is checkable from outside the tarball; the two schema readings are yours and I am taking them on the strength of how they were taken, which I will say plainly rather than pretend otherwise. The reading I most wanted, and it settles the question the card left openI asked you to construct the plugin twice rather than count occurrences in a bundle, because that answers core-vs-conditional directly. You did: And you went past what I asked: repeating reading 1 across three different non-managed configurations (code-defined connection only; bearer-token verifier only; connection + projection + identity) and getting the identical 7 each time. That falsifies the competing hypothesis I did not think to name — that a model called That is the difference between confirming a number and establishing it. Zeros with controls, which is the half that makes the zeros mean anything
Pinning the tarball by integrity hash ( The scope ruling I made, and your correction to itI said name the trio as conditional and called it a lean. You went further and found the measured reason: the plugin's own construction error names three accepted routes — "a provisioning connection, bearer token verifier, or managed connection catalog" — so the note's existing "code-defined connections" phrasing actively mis-suggests there is no DB-backed catalog at all. My lean was based on how the sentence read; yours is based on what the plugin says. Same conclusion, better grounds, and the grounds are what a future reader needs. Correcting all three count-bearing phrases together — the word "six", the parenthetical list, and "all six present" — was the point of flagging it. A fix that moves one leaves the comment self-contradictory. ⛔ Confirmed you did not touch the rc.1 pin: #11761 is the better result, and the reason you gave for not riding it along is rightVerified on — the same undercount, inside a string the nightly probe prints when it fires. So the wrong number was being emitted on every nightly run, to precisely the reader the gate exists to inform. That is a strictly worse instance than the one the card names, and this correction round would have closed one copy and left it. You wrote the fix, then reverted it byte-identical to HEAD when the in-place-fix test failed on the no-new-verification-surface condition — measured with The class point is the one that outlives both cards: one measurement written down twice, in two files, with nothing holding them together. That is the same shape as #11664 (a hand-kept copy of a registry) and #11752 (the gate now watching it). Your suggestion — point at the pin's comment instead of restating counts — is the right general answer, and I would rather see that than a second correction. I will grade #11761 with that framing. One honest limit on this reviewI cannot re-run your two schema readings: the instrument checkout has no Flipping to ready. Arming once every check is green. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#11372
The
@better-auth/scimadvisory block inpnpm-workspace.yamlrecorded six new models for the stable 1.7.x rewrite. It is seven, and ten with the managed catalog configured. Comment only — no pin, override or resolution moves.The measurement, re-derived (not taken from the card)
Subject version established first: npm
dist-tags.latestfor@better-auth/scimis still 1.7.1 (published 2026-08-18); no 1.7.2 has shipped, so the version under discussion is unchanged. Installed in isolation and content-verified — the tarball measured issha512-bpOPVnYYTUROAJZU0ViL1jXHXoUulVn0Gl3HLN8Epj00Yqob4+rhf3XqVmc/2bi3TY40rmZIlsf1mXQhRdFd1w==, byte-identical to the registry's recorded integrity for 1.7.1. (The workspace itself still resolves the deliberate1.7.0-rc.1hold; the note's claim is about the published stable line, which is what was measured.)Then the plugin was constructed and
plugin.schemaread directly — the reading that answers core-vs-conditional outright, rather than by counting occurrences in a bundle.Reading 1 — no
managedConnections(7 keys):Reading 2 —
managedConnectionsconfigured (10 keys):Delta is exactly
+[scimManagedConnection, scimManagedConnectionEvent, scimManagedCredential], nothing removed.scimProjectionGrantis genuinely core, not gated by anything. Reading 1 was repeated across three different non-managed configurations — a code-defined connection only; a bearer-token verifier only; and a connection plusprojectionplusidentity— and returned the same 7 keys every time. That falsifies the obvious competing hypothesis (that a model named…ProjectionGrantis gated by theprojectionoption). Its columns are as the card described:grantKey,role,sourceKindall present.The trio is gated on
managedConnectionsalone, not on the absence of code-defined connections: configured withconnections: []plusmanagedConnections, the schema is the same 10 keys.Why the "code-defined connections" phrasing is corrected too
The plugin refuses to construct with no connection route at all, and its own error names three accepted shapes: "The scim plugin requires a provisioning connection, bearer token verifier, or managed connection catalog." Code-defined connections are one of the three, not the replacement — so the old wording actively mis-suggested there is no DB-backed catalog. That is why the trio is named here as conditional rather than left out.
The neighbouring zeros, each with a positive control
Every zero was probed on the same file with the same command, paired with a string proven non-zero — a zero from a probe not shown able to fire is not a reading.
dist/index.mjsgenerate-tokenscimProjectionGrantgenerateTokenscimUsergenerateSCIMTokenscimIdentityTombstonescimProviderServiceProviderConfigA case-insensitive sweep for every
*generate*identifier in the bundle returns onlygenerated,generateOpaqueIdentifier,generateRandomString,generateId— no token-generation endpoint. Enumerating the constructed plugin's 26 endpoints agrees: the only credential-adjacent ones arerotateSCIMManagedCredentialandrevokeSCIMManagedCredential. Both neighbouring claims in the note hold.The card's numbers were all reproduced, including its "6 occurrences of
scimProjectionGrant" exactly.Non-vacuity
Block extracted by content (from the GHSA id to the next advisory entry) so before/after use identical boundaries as line numbers shift:
\bsix\ball six present\bseven\ball seven present\bten\bscimProjectionGrantscimManagedConnection/Credential/ConnectionEventControls from the same block, none of which moved:
GHSA-j8v8-g9cx-5qf4(1),>=1.7.0-beta.4(2),scimIdentityTombstone(1),#3653(3),better-call@1.3.7(1),check-prerelease-pin-watch(1),scimProvider(1).All three count-bearing phrases moved together — the word "six", the parenthetical list, and "all six present" — so the block cannot be left self-contradictory.
No behaviour change, mechanically
yaml.safe_load()of the file before and after compares equal: the parsed data is identical, so nothing this file declares can move. The version pin stays on1.7.0-rc.1; moving it is the ADR-0071 migration (#11632 / #3653) and is not pre-empted here.Gates
Re-run at final commit
b2050a296, exit codes captured before any pipe:scripts/check-nul-bytes.mjs— exit 0, "OK (scanned 6568 text file(s) … no raw ASCII control bytes)"scripts/check-override-consistency.mjs --self-test— exit 0, "self-test passed (17 assertions)"scripts/check-override-consistency.mjs— exit 0, "✓ 8 published-manifest declaration(s) covered by pnpm-workspace.yaml overrides all resolve to their override targets."scripts/check-changeset-fixed.mjs— exit 0, "✓ .changeset/config.json "fixed" group is in sync with 69 public workspace packages."scripts/check-osv-exemptions.mjs— exit 0, "✓ osv-scanner.toml holds zero OSV exemptions (the intended steady state)."scripts/check-prerelease-pin-watch.mjs --self-test— exit 0, "all checks passed" (this is whatprerelease-pin-watch.ymlruns on a PR touching the pins; the live probe is nightly and needs network)Gate list derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, which reads the change set from the merge base itself.Pre-existing red, not introduced here: the live
scripts/check-prerelease-pin-watch.mjsprobe exits 1 — a stable release is out and it says so by design. Verified pre-existing by running the unmodified base tree at2a6122bd9: same exit 1, same output. It is a nightly, deliberately not wired intolint.yml.No changeset: this releases nothing (a comment in a workspace file), hence
skip-changeset.Out of scope, filed not ridden
#11761 —
scripts/check-prerelease-pin-watch.mjsrestates the same undercount verbatim in itsFOLLOW_UPSnote, and that string is what the nightly probe prints when it fires. Deliberately not fixed here: it fails the bounded in-place-fix test on the no-new-verification-surface condition —pnpm-workspace.yamlalone derives 4 gate families, adding that script pulls in 6 more (measured, not assumed). The underlying class is that one measurement is written down twice; the filed card suggests closing the class by pointing at the pin's comment rather than restating counts.Generated by Claude Code