Skip to content

sync fork with upstream (2026-08-18) - #19

Merged
oponder merged 405 commits into
mainfrom
sync-upstream-2026-08-18
Aug 18, 2026
Merged

sync fork with upstream (2026-08-18)#19
oponder merged 405 commits into
mainfrom
sync-upstream-2026-08-18

Conversation

@oponder

@oponder oponder commented Aug 18, 2026

Copy link
Copy Markdown

Brings the fork up to date with upstream b985a365 (2026-08-18) — 113 upstream commits since the Jul 31 sync (#15).

Same recipe as #15: take upstream as-is and re-apply the fork's genuine changes on top. Fork main's content matched upstream 5b78273a (Jul 31) exactly except one patch, so this branch is upstream main + one commit re-applying the sentry read-only client commands fix (#13).

⚠️ Merge with a MERGE COMMIT — do not squash

#15 said the same thing and was squash-merged anyway, which severed the shared history again (that's why a plain git merge upstream/main shows phantom conflicts, and why this PR exists in replace-form). The repo allows merge commits — use "Create a merge commit". Squashing this one condemns the next sync to the same wall.

What rides along

  • Four new migrations (0049 company-context reader sources, 0050 granola-search RLS, 0051 hermes harness, 0052 session-execution request). They apply on the next api-rs boot after an image rebuild. Deploy api-rs first or together with the bots; note that once applied, rolling api-rs back to a pre-sync image will fail sqlx's migration check — roll forward instead.
  • api-rs auth refactor (protected /api/* router), workflow durability changes, githubbot/test expansions — the full upstream 2.5 weeks.

Why now

Testing our upstream PRs (paradigmxyz#1414, paradigmxyz#1415) in this deployment requires the fork to be at upstream parity: paradigmxyz#1415 ships migration 0053, which presumes 0049–0052 are applied. After this merges, upstream-status-command / upstream-review-ack are deployable here essentially 1:1.

Validation

  • tools/infra/sentry/test_cli.py passes (the only fork-patched code).
  • Every other file is byte-identical to upstream main b985a365, which upstream CI validates.
  • Sanity: git diff origin/main HEAD = exactly upstream's post-Jul-31 delta; git diff upstream/main HEAD = the 2 sentry files only.

🤖 Generated with Claude Code

mslipper and others added 30 commits July 10, 2026 08:59
* feat: proxy slack channel listing

* fix: harden slack channel enrichment
fix(sandbox): support gpt-5.6-sol

Co-authored-by: ecejas <15933097+ecejas@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* fix: proxy Slack file listing

* feat: add direct Slack file search command

* fix: correct Slack files list pagination

* fix: require channel for Slack file proxy

* fix: require channel for Slack file search

* fix: update Slack file search callers
* feat: expose Slack file info proxy

* refactor: share Slack file info helpers

* fix: authorize Slack file info before config

* feat: proxy Slack channel members
* fix: use host Slack team for principals

* fix: stop scoping Slack channel principals by requester team

The prior approach threaded the host Slack team through a request
context so channel principals would use it. That is unnecessary: a
Slack channel id is globally unique, so channel principals never need
a team in scope. Scoping them by the message-derived team (introduced
in paradigmxyz#882) let a Slack Connect requester's external workspace fork a
separate principal from the host channel's.

Derive channel principals without any team scope, keeping the DM
metadata-team folding from paradigmxyz#882 intact, and revert the request-context
plumbing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* feat: configure default sandbox capabilities

* feat: manage sandbox defaults in console

* feat: manage sandbox defaults in console

* refactor: simplify sandbox default application

* refactor: rely on sandbox setting validation

* refactor: remove redundant sandbox default constants

* fix: preserve explicit sandbox repo-cache labels

* refactor: store sandbox repo cache as enum

* refactor: require repo cache label for principals

* fix: prefer principal repo cache setting over label

* fix: reject sandbox repo cache label input

* fix: validate sandbox repo cache label consistency

* refactor: always project sandbox repo cache label
* fix: gate otlp egress on observability

* chore: bump helm chart version

* fix: always label api-rs for observability
* fix(slackbotv2): resolve trigger bot identities

* fix(slackbotv2): match webhook bots by app identity

* refactor(slackbotv2): allowlist bot members only
…le (paradigmxyz#984)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
fix(slackbotv2): support scoped trigger bot ids

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
* fix: allow hosted MCP OAuth redirects

* test: update MCP redirect rejection case
* feat: sync Granola via user OAuth

* fix: satisfy Granola sync CI checks
* feat: expose sandbox permission query

* fix: expose console URL to sandboxes

* refactor: clarify sandbox console URL wiring

* fix: require explicit API server proxy hosts

* chore: bump chart version to 0.1.99

* fix: require configured sandbox entitlement host
kreplik and others added 23 commits August 14, 2026 16:00
…igmxyz#1320)

The example's create-secret command lists OP_SERVICE_ACCOUNT_TOKEN and
OP_VAULT without saying which ironProxy.secretSource they belong to. They
match the chart default, but a reader running secretSource: env copies two
keys that have no effect and no way to tell from the example.

Name the source each key belongs to, using the same pairings as the infra
secret table in the production guide.
Both overlay mount paths are served by repo-cache, but the dependency is
not stated anywhere. Record the requirement and point clusters that cannot
use writable hostPath volumes at repoCache.storage.type=persistentVolumeClaim
instead of disabling the cache.
* feat: add collaborative skill editors

* feat: manage skill editors through API

* fix: expose editors for shared skills
* fix: prevent task phrasing from selecting amp

* fix: generalize amp classifier guidance
Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
…digmxyz#1324)

sessions.harness_type is written when the session is created, and a later
request for a different harness raises HarnessConflict and falls back to
the session's existing harness. So sandbox.harnessEngine only affects new
sessions.

The reference tables say this for SLACKBOTV2_DEFAULT_HARNESS and
TEAMS_DEFAULT_HARNESS_TYPE, but not where operators actually choose a
harness. State it next to the harness table.
…z#991)

* fix(mcp): validate tool arguments before sandbox dispatch

* test(mcp): update unready app state setup

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
* ci: close inactive draft pull requests

* ci: clarify stale draft comment

* ci: make stale draft comment friendlier
* feat: add sandbox API JWT capabilities

* refactor: route sandbox API access through proxies

* chore: bump chart version to 0.1.118

* fix: check sandbox API permissions in prompt

* test: remove brittle prompt assertion
* fix: resolve OAuth identity before credential upsert

* fix: handle OAuth identity network failures
* feat: add optional Console Sentry reporting

* chore: add Sentry dependency and bump chart
…z#1392)

* fix: enqueue session executions before processing

* fix: claim persisted executions by id

* fix: preserve queued executions during shutdown

* refactor: simplify shutdown execution recovery
…adigmxyz#1363)

* fix: do not terminalize Codex error notifications with willRetry

Codex emits intermediate error notifications with willRetry=true while
reconnecting a dropped model stream. Treat those as non-terminal so the
turn can finish, and persist nested params.error text when it does fail.

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(api-rs): rustfmt retryable Codex error guard

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(slack): use MCP user token for message search

* test(slack): remove obsolete resource namespaces
Content is upstream main b985a36 as-is (-s ours from the upstream side);
this merge exists to re-join the histories that the squash-merges of #11/#15
severed, so this and future syncs merge without phantom conflicts.
Re-applies the fork's one genuine change (#13) on top of upstream main
b985a36 — the replace-with-upstream sync recipe from #15.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@oponder
oponder force-pushed the sync-upstream-2026-08-18 branch from f695010 to 9867a00 Compare August 18, 2026 11:01
@oponder
oponder marked this pull request as ready for review August 18, 2026 11:04
@oponder
oponder requested a review from 0xdiid August 18, 2026 11:06
@oponder
oponder merged commit 2d4f2b1 into main Aug 18, 2026
@oponder
oponder deleted the sync-upstream-2026-08-18 branch August 18, 2026 17:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.