fix(mothership): follow-ups for v1.0.0 regressions - #8215
Merged
Merged
Conversation
…bers Workflow file inputs can reference stored files by id, key, or internal URL, and every resolved file is added to the run's explicit file grants. Any caller could use this, so an anonymous public-API, public MCP, chat, or webhook caller could pull another workflow's run files or workspace files into a run and receive a presigned URL for them. Execution now derives a stored-file reference scope from the run's principal: authorized member principals (session, personal/workspace API key, OAuth token, delegated) resolve workspace-wide; system principals may only reference files already stored under the current execution, which keeps chat and webhook uploads working. The default is the restricted scope, so a new caller fails closed. Input-format defaults are workflow-authored and still resolve workspace-wide. Outside workspace scope, an upload whose URL is an internal file URL is resolved as the stored reference it names rather than downloaded with the run user's access, and a key from another execution is refused before it is looked up, so the refusal does not reveal whether the file exists.
…ults Table rows read through sim_cli reached the model without their persisted secret provenance, so stored secrets in cells were never redacted. Row use cases now report the provenance of the rows they return to an observing transport (mirroring the workspace-file delivery observer), and the agent CLI table transport imports it into the tool call's registry, answers 503 without a registry, and marks the registry incomplete when a row-bearing table route returns without reporting provenance. Provenance reported by detached work after the call settles is ignored. Export download links are refused outright: a signed link to the whole table as plaintext CSV cannot carry provenance once fetched. Run-state and enrichment error text (runState.error, blockErrors, enrichment provider errors) is captured from executor output without its secret provenance, so a read that returns any of it is withheld as well; reads whose run state carries no error text are unaffected.
PR #8208 widened Google Calendar's domain-wide delegation scopes to include calendar.readonly for every service-account token. Google refuses the whole token exchange when any requested scope is not authorized for the client, so indexed admin-mode Calendar syncs configured for calendar.events.readonly failed every run and were eventually disabled. Live service search only needed the wider scope to read an all-day event's calendar time zone. events.list returns the calendar's timeZone under calendar.events.readonly, so live search now reads it there and delegates with the same single scope as the indexed crawl, matching Drive and Gmail. The admin calendar picker keeps its own calendar.readonly request, as documented.
…loy and file share
Copilot now deploys chats and shares files through the v2 API, which stored a
whole-value {{NAME}} password literally (or 400'd a short one on length). The
application use cases now resolve the reference from the effective environment
when, and only when, the caller is an admitted Copilot workspace invocation and
the password will actually be stored (password mode; for a file share, only
while enabling it), refuse an unset variable by name, and hold the resolved
value to the password rules. Every other principal keeps literal semantics.
The v2 password fields admit a whole-value reference below the password
minimum as one refined string (not a union, which would make the CLI flag
JSON-only), still capped at the password maximum; the use cases enforce the
15-character rule on the value actually stored. Connector API-key references
share the same principal environment lookup, and the exact reference regex now
lives in one module.
Unlike the removed Copilot tool path, the resolved password is not recorded in
a resolved-secret trace registry: the v2 use case has none, and the password
is write-only and never echoed back.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
There was a problem hiding this comment.
All reported issues were addressed across 58 files
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
Contributor
|
This branch was successfully 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.
Summary
Follow-ups to #8208 for regressions and gaps found auditing it against staging.
calendar.readonlyto Calendar's delegation scopes, which broke indexed admin-mode Calendar syncs whose delegation only authorizescalendar.events.readonly. Live service search now reads the all-day time zone fromevents.listand runs on the same single scope as indexing, like Drive and Gmail. The admin picker keepscalendar.readonly.--brand-primary(invisible); back to--brand-blue.{{SECRET}}references, GitHub PATs), reject$NAMEAPI keys that name an existing secret, and point the config error atsim connector-types list --detail full.{{NAME}}password literally since the move to v2; it's resolved again for Copilot only, validated after resolution, and skipped when a share is being disabled.Type of Change
Testing
Each fix has tests that fail without it. Type-check, lint,
check:audits(49), block registry, and docs manifest pass; ~17k tests across the touched areas pass.Checklist