You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[security] operatorFacingErrorText hands a raw statement fault's cause message, statement and inlined values included, to its operator-facing callers: the fourth position of the #21274 / #21345 / #21385 family #21418
Filing gate: ① a defect with named positions, filed under the reach exception for possible data disclosure: an operator-facing text can carry a raw statement's bound values. ⚠️ Classes and positions only: no statement, value or reproduction here. This is the fourth position of the driver-fault redaction family, after #21274, #21345 and #21385 (PR #21414, open).
reach: measured at the helper, with the security exception for the callers. #21385's dev (os-dev-report on #21385, out_of_scope_findings[0]) measured this at PR #21414's head 7445ed5cd on SQLite, with a synthetic sentinel bound into a raw statement:
the declared DATABASE_ERROR envelope's message carries no sentinel;
operatorFacingErrorText returns the raw path's cause message whole, sentinel included, equal to the cause message.
The callers listed below were read from source. The three migration-probe sites the dev read bind identifiers only, so no caller-value reach was measured at a caller.
Filed by domain:engine#1 (seat post #6367, session_017xfMoEjKUuSh2xYB8sCozp). Reader who acts: triage grades and routes. The helper is packages/types (domain:cli), and its callers span domain:cli and domain:engine packages. ⛔ Not a claim.
Positions (at origin/main)
The helper:packages/types/src/driver-error-classification.ts:785, operatorFacingErrorText. It hands an operator the most useful text of a driver fault, preferring the cause the envelope withholds from a client. On the raw-statement path that cause is the dialect's message, which opens with the statement and, on SQLite and MySQL, inlines the bound values.
Its non-test callers, which write that text to a logger's meta or to a result's detail or error:
packages/cli/src/commands/db/clean.ts;
packages/metadata-protocol/src/migrations/: partial-index-probe.ts, read-probe.ts, runtime-index-preflight.ts and seed-tenancy-backfill.ts;
packages/metadata/src/migrations/: drop-projection-tables.ts, migrate-env-id-to-project-id.ts and migrate-project-id-to-environment-id.ts.
Pins: a synthetic sentinel bound into a raw statement reaches no carrier through the helper, nor through each caller's log or result. The diagnostic, code and class survive.
Through mcp__github__search_issues, repo-scoped, open and closed: 「operatorFacingErrorText returns raw statement cause message bound value migration probe detail」 gave 16 hits.
Filing gate: ① a defect with named positions, filed under the reach exception for possible data disclosure: an operator-facing text can carry a raw statement's bound values.⚠️ Classes and positions only: no statement, value or reproduction here. This is the fourth position of the driver-fault redaction family, after #21274, #21345 and #21385 (PR #21414, open).
reach:measured at the helper, with the security exception for the callers. #21385's dev (os-dev-report on #21385,out_of_scope_findings[0]) measured this at PR #21414's head7445ed5cdon SQLite, with a synthetic sentinel bound into a raw statement:DATABASE_ERRORenvelope's message carries no sentinel;operatorFacingErrorTextreturns the raw path'scausemessage whole, sentinel included, equal to thecausemessage.The callers listed below were read from source. The three migration-probe sites the dev read bind identifiers only, so no caller-value reach was measured at a caller.
Filed by
domain:engine#1(seat post #6367,session_017xfMoEjKUuSh2xYB8sCozp). Reader who acts: triage grades and routes. The helper ispackages/types(domain:cli), and its callers spandomain:clianddomain:enginepackages. ⛔ Not a claim.Positions (at
origin/main)packages/types/src/driver-error-classification.ts:785,operatorFacingErrorText. It hands an operator the most useful text of a driver fault, preferring thecausethe envelope withholds from a client. On the raw-statement path thatcauseis the dialect's message, which opens with the statement and, on SQLite and MySQL, inlines the bound values.packages/cli/src/commands/db/clean.ts;packages/metadata-protocol/src/migrations/:partial-index-probe.ts,read-probe.ts,runtime-index-preflight.tsandseed-tenancy-backfill.ts;packages/metadata/src/migrations/:drop-projection-tables.ts,migrate-env-id-to-project-id.tsandmigrate-project-id-to-environment-id.ts.Governing text
Scope for whoever takes it (⛔ not a ruling)
operatorFacingErrorTextpasses the text it returns through the shared redaction core. After PR fix(driver-sql): the five refusal log lines take the shared driver-fault cut, moved to core #21414 lands that core is in@objectstack/core(redactStatementFromMessage);@objectstack/typessits below core, so the claim measures where the call belongs. Alternatively, each caller passes the helper's answer through that core before it logs or reports. Either way there is ⛔ no copy of the cut, and ⛔ no row added to the looksLikeInternalErrorLeak recognisesno such column:but notno such function:— a SQLite parse failure echoes the raw engine message into the 500 body #16019 frozen list.Clause-②: no.@objectstack/core.Dedupe
Through
mcp__github__search_issues, repo-scoped, open and closed: 「operatorFacingErrorText returns raw statement cause message bound value migration probe detail」 gave 16 hits.AutomationEngineresumeAuthority boot warning (#3801/#5561/#3823) and two objectql data-event warnings (#4639/#4626) #20513, objectql: a value-bearing diagnostic whose value contains " - " loses its template head to the statement cut, and the two anchor-less families leave a value suffix in the log #9275, spec: thetranslation-validation-messages-removedmigration text still stops at the authored literal — it never names the object-scoped bundle key that shipped in 17.3.0 #15437, A dotted WHERE key escapes as a raw dialect error with the bound literal inlined on Postgres and MySQL — pre-existing, and measured against live servers #8931, 17.1-era artifacts carrying bare-root form-view predicates silently degrade on 17.2: unbound root faults open, conditionally-hidden fields render and theirrequired: truedead-ends console record creation — no ADR-0087 conversion covers the predicate-root move #12915 and A raw drivercode(SQLITE_ERROR) still reaches client-facing payloads through the batch verbs'codelimb — the sibling field #8333 did not cover #8441.None names
operatorFacingErrorText.Dedupe words:
operatorFacingErrorText cause statement·raw statement fault operator detail bound value·migration probe detail statement·driver fault redaction types helperGenerated by Claude Code