Skip to content

[pull] main from UsefulSoftwareCo:main - #36

Merged
pull[bot] merged 11 commits into
midego1:mainfrom
UsefulSoftwareCo:main
Aug 17, 2026
Merged

pull[bot] merged 11 commits into
midego1:mainfrom
UsefulSoftwareCo:main

Conversation

@pull

@pull pull Bot commented Aug 17, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

…se (#1623)

* Redact all non-allowlisted headers on spans

Effect's HttpClient tracer records every request and response header on the
span, masking only a four-name default blocklist. Upstream integrations carry
credentials in provider-specific headers, so any name outside the list shipped
verbatim to the trace backend. Invert the model: redact everything except a
short allowlist of structurally safe headers.

* Parent DO tool spans under the live request

currentParentSpan() was a stub returning undefined, so runToolEffect always
fell back to the Effect context captured when the session server was built.
Every tool execution span in a legacy session parented under the long-closed
construction span instead of the request that triggered it. Track the most
recent request's traceparent in the DO and resolve it to an external parent
span. The grammar moves to do-headers beside the producer; the worker edge
parser delegates to it.

* Drop zero-duration bootstrap and annotation spans

mcp.host.register_tool, mcp.host.register_resource, mcp.host.create_server,
mcp.request.annotate, and the executor.stack sub-spans wrap synchronous
context lookups and registrations. Together they were about a fifth of weekly
span ingest at exactly 0ms each, with zero recorded errors. The stack keeps
its executor.stack.build umbrella span; mcp.request keeps the fingerprint
attributes the annotate wrapper was duplicating onto itself.

* Name workos and user_store spans by operation

The two highest-volume span names in the corpus were bare "workos" and
"user_store" wrappers with no attributes, swallowing every distinct SDK and
store call. use() now takes the operation name, so spans read
workos.userManagement.getUser and user_store.getOrganization, and failure
logs say which call failed. The WorkOSClient layer construction span goes
away with them: synchronous, per-build, and told us nothing.

* Record exceptions on worker http.server error spans

The worker-boundary catch set ERROR with no message and no exception event,
leaving those spans with zero diagnostic content. Record the exception and a
status message, and stamp HTTP <status> on the 5xx path.

* Clarify where header-name lowercasing happens
* test: repro sign-out answering with a raw Unauthorized page

* fix: sign out browsers whose session has already ended

Sign-out was declared on the session-authenticated API group, so a browser
whose sealed session no longer authenticated at click time got a 401 from
SessionAuth instead of being signed out. The console posts sign-out as a
top-level form navigation, so that error body was rendered as the page:
a screenful of {"_tag":"Unauthorized"}.

Move the endpoint to the public group and read the sealed session off the
request cookie. Nothing here needs authorizing — the request can only end
the session whose cookie it presents — and the handler already fell back to
"/" when the cookie would not unseal.

Cookies are dropped only when the request actually presented one, so the
now-public endpoint cannot be used cross-site to sign a user out.
The account Logpush job exports workers_trace_events to Axiom, but the
script-level logpush flag was lost in the July deploy migration and the
export silently stopped. Pin it in config so deploys preserve it; the flag
was re-enabled via API today.
* Bind span header redaction to the hosted HTTP client

Live verification after the telemetry-layer redaction shipped showed
post-deploy http.client spans still recording non-allowlisted headers:
consumers capture the client value at construction and execute requests on
fibers a host telemetry layer never reaches, so providing the redaction
reference by layer was not enough. Bind it to the client itself so every
request effect carries it, and keep the cloud layer as the server-side half.
Regression test drives a request through the real client and asserts on the
recorded span attributes.

* Add DOM.Iterable to the mcp plugin tsconfig

The package's tsc build failed on Headers.entries() and the iterable
protocol: its lib had DOM without DOM.Iterable, so the fetch Headers type
lacked both. Latent on main; every CI run served the package build from the
turbo cache until the sdk change invalidated it. Same lib pairing
hosts/cloudflare already uses.
* Add first-party OAuth clients (host-operated GitHub/Google apps)

* Allow endpoint overrides for the first-party GitHub app in tests/dev

* Launch built-in Google OAuth for Calendar and Sheets
@pull pull Bot locked and limited conversation to collaborators Aug 17, 2026
@pull pull Bot added the ⤵️ pull label Aug 17, 2026
@pull
pull Bot merged commit 75a3c45 into midego1:main Aug 17, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant