Skip to content

sync fork with upstream 2026-08-20 - #24

Merged
oponder merged 37 commits into
mainfrom
sync-upstream-2026-08-20
Aug 20, 2026
Merged

sync fork with upstream 2026-08-20#24
oponder merged 37 commits into
mainfrom
sync-upstream-2026-08-20

Conversation

@oponder

@oponder oponder commented Aug 20, 2026

Copy link
Copy Markdown

Syncs the fork with upstream main at bc72622b — 36 commits since the 2026-08-18 sync point. Merged cleanly, no conflicts.

The fork now carries zero local divergence: upstream took both fork patches, so the merged tree is byte-identical to upstream main.

What else comes in

api-rs — Standard Webhooks authentication (paradigmxyz#1380), workflow principals resolved by OID (paradigmxyz#1439), customizable workflow Slack messages (paradigmxyz#1401)

slackbotv2 — owns its nanocodex rollout policy (paradigmxyz#1437), Slack API emulator upgrade (paradigmxyz#1152), retries for transient sync failures (paradigmxyz#1443), stale channel catalog retained on fetch failure (paradigmxyz#1441)

console — Slack channel autocomplete (paradigmxyz#1408), Ruby dependency bumps

sandbox — brokered Codex auth seeded for Hermes (paradigmxyz#1368), custom Codex providers (paradigmxyz#1410)

chart — explicit Console service hosts via console.allowedHosts (paradigmxyz#1144), repo-cache rolls when its GitHub token secret changes (paradigmxyz#1322)

tools / workflows — Figma credential contract (paradigmxyz#1146), Attio CRM mutation + pagination hardening (paradigmxyz#1306), Granola shared meeting links (paradigmxyz#1434), Linear searchIssues takes term (paradigmxyz#1335)

Validation

Tree matches upstream main exactly, so upstream CI on bc72622b covers it. Locally re-ran the parts we changed most recently: cargo test -p centaur-api-server --lib and bun test test in services/githubbot (101 pass).

Follow-ups

  • fix(api-rs): authorize githubbot for all its session key families #22 becomes redundant once this lands — same code, now via upstream. Merge that one first only if you want the githubbot fix deployed before this sync.
  • feat/githubbot-ignored-checks needs a rebase — it touches contrib/chart/values.yaml and githubbot.yaml, both of which move in this sync.

🤖 Generated with Claude Code

mslipper and others added 30 commits August 18, 2026 19:24
* feat: run workflow agents in parallel

* docs: align parallel agent result example
…ew (paradigmxyz#1414)

* feat(githubbot): ack owned-PR management turns with a working reaction (PE-8082)

Review-request and issue-work turns already ack instantly (eyes on the
subject, settled to rocket/confused when the turn finishes), but owned-PR
management turns — address-review, CI-fix, conflict resolution — gave no
signal until the agent pushed or replied. A reviewer leaving feedback on a
bot-owned PR saw silence while the turn ran.

Fire the same subject-reaction lifecycle from fireManagementTurn, the choke
point all management turns flow through: eyes before the turn starts (not
awaited, so the ack can't delay the turn), settled in the background chain.

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

* feat(githubbot): move the review ack onto the review itself via GraphQL

Live testing showed the PR-top-post ack goes unnoticed — reviewers look at
their own review, and a reaction on the PR description isn't clearly tied to
anything. The REST reactions API has no endpoint for reviews, so the ack now
goes through the GraphQL addReaction mutation with the review's node id:
eyes lands on the reviewer's review, settled to rocket/confused there.

Turns with no triggering review (CI-fix, conflict resolution) no longer
react at all.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* feat: allow workflows to select principals

* fix: prevent session principal rebinding
…gmxyz#1419)

fix(sentry): expose read-only client commands (fork patch)

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>
* feat: add an option to configure openAI base url

* fix: preserve activity summary endpoint overrides

* fix: remove ineffective Codex base URL config

* refactor: remove unused OpenAI URL re-export

* chore(chart): bump chart version to 0.1.117

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
…th 6 updates (paradigmxyz#1424)

Bumps the api-rs-dependencies group with 6 updates in the /services/api-rs directory:

| Package | From | To |
| --- | --- | --- |
| [async-trait](https://github.com/dtolnay/async-trait) | `0.1.91` | `0.1.92` |
| [aws-smithy-types](https://github.com/smithy-lang/smithy-rs) | `1.6.1` | `1.6.2` |
| [eyre](https://github.com/eyre-rs/eyre) | `0.6.12` | `0.6.14` |
| [thiserror](https://github.com/dtolnay/thiserror) | `2.0.19` | `2.0.20` |
| [uuid](https://github.com/uuid-rs/uuid) | `1.24.0` | `1.24.1` |
| [futures](https://github.com/rust-lang/futures-rs) | `0.3.33` | `0.3.34` |



Updates `async-trait` from 0.1.91 to 0.1.92
- [Release notes](https://github.com/dtolnay/async-trait/releases)
- [Commits](dtolnay/async-trait@0.1.91...0.1.92)

Updates `aws-smithy-types` from 1.6.1 to 1.6.2
- [Release notes](https://github.com/smithy-lang/smithy-rs/releases)
- [Changelog](https://github.com/smithy-lang/smithy-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/smithy-lang/smithy-rs/commits)

Updates `eyre` from 0.6.12 to 0.6.14
- [Commits](eyre-rs/eyre@eyre-v0.6.12...v0.6.14)

Updates `thiserror` from 2.0.19 to 2.0.20
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](dtolnay/thiserror@2.0.19...2.0.20)

Updates `uuid` from 1.24.0 to 1.24.1
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](uuid-rs/uuid@v1.24.0...v1.24.1)

Updates `futures` from 0.3.33 to 0.3.34
- [Release notes](https://github.com/rust-lang/futures-rs/releases)
- [Changelog](https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md)
- [Commits](rust-lang/futures-rs@0.3.33...0.3.34)

---
updated-dependencies:
- dependency-name: async-trait
  dependency-version: 0.1.92
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
- dependency-name: aws-smithy-types
  dependency-version: 1.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
- dependency-name: eyre
  dependency-version: 0.6.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
- dependency-name: thiserror
  dependency-version: 2.0.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
- dependency-name: uuid
  dependency-version: 1.24.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
- dependency-name: futures
  dependency-version: 0.3.34
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: api-rs-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…z#1405)

Bumps the github-actions group with 3 updates: [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain), [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) and [actions/github-script](https://github.com/actions/github-script).


Updates `dtolnay/rust-toolchain` from e97e2d8cc328f1b50210efc529dca0028893a2d9 to 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772
- [Commits](dtolnay/rust-toolchain@e97e2d8...6c977a6)

Updates `astral-sh/setup-uv` from 9.0.0 to 10.0.1
- [Commits](astral-sh/setup-uv@c771a70...20cfd1b)

Updates `actions/github-script` from d746ffe35508b1917358783b479e04febd2b8f71 to 3a2844b7e9c422d3c10d287c895573f7108da1b3
- [Commits](actions/github-script@d746ffe...3a2844b)

---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
  dependency-version: 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772
  dependency-type: direct:production
  dependency-group: github-actions
- dependency-name: astral-sh/setup-uv
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/github-script
  dependency-version: 3a2844b7e9c422d3c10d287c895573f7108da1b3
  dependency-type: direct:production
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
fix: send Slack DMs without im:write scope
…z#992)

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
fix: allow explicit Console service hosts

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
…gmxyz#998)

* docs: drop dead secret keys; fix stale proxy-fallback comment

SANDBOX_SIGNING_KEY, LOCAL_DEV_API_KEY, and IRON_BROKER_TOKEN have no
consumers left on main — they are python-era / standalone-token-broker
leftovers. Remove them from the secret tables and examples in the docs
(and the matching lines in the docs/public/md mirrors) and stop seeding
them in bootstrap-k8s-secrets.sh.

Also fix the IRON_CONTROL_URL comment in the api-rs template: there is
no static-proxy-config fallback; api-rs fails fast when iron-proxy is
configured without iron-control.

Closes paradigmxyz#996

* docs: correct broker credential setup

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
…adigmxyz#1322)

* fix(chart): roll repo-cache when its GitHub token secret changes

repo-cache authenticates to GitHub from a token file mounted off
repoCache.githubToken, but its pod template carries no annotation tied to
that secret. Every other component in the chart has checksum/infra-secrets,
so repo-cache is the only workload that keeps running against a stale
token after the secret is rotated or recreated. Recovering means noticing
that repos have stopped syncing and deleting the pod by hand.

Add checksum/github-token, built from the same centaur.secretResourceVersion
helper the other components use. Recreating a Secret changes its
resourceVersion, so the next upgrade rolls the pod. Rendered only when a
token is configured, so token-less deployments see no change.

* chore(chart): bump release to 0.1.122

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
)

* docs: document the access-token broker credential bootstrap; hint at it from api-rs

In access_token mode the harness proxy fragment references a console
broker credential (openai-codex / anthropic-claude) that must be created
out of band with 'centaur-perms broker create'. The production guide
never mentioned it, and instead described the removed standalone
token-broker flow (OPENAI_CODEX_BLOB / CLAUDE_CODE_BLOB items in the
secrets backend that nothing reads anymore), so a fresh deployment ends
in an api-rs crash-loop on the console's 422.

- rewrite the Codex/Claude Auth Modes sections around the real
  bootstrap: codex/claude login, store OPENAI_CODEX_ACCOUNT_ID (codex
  only), create the broker credential, restart api-rs; keep the
  token-family reuse warnings
- select the mode via sandbox.codexAuthMode / sandbox.claudeCodeAuthMode
  instead of sandbox.extraEnv — extraEnv only reaches sandbox pods, not
  api-rs, which is the component that acts on the mode
- point at the out-of-band step from the bootstrap script usage text
- api-rs: when the registration 422 names a missing broker credential,
  append a 'centaur-perms broker create' hint to the startup error

Closes paradigmxyz#995

* docs: correct broker bootstrap instructions

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
* fix(attio): support replacing record values

Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>

* fix(attio): harden CRM mutations and pagination

Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>

* fix(attio): parse rate-limit reset dates

Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
* feat(console): add Slack channel autocomplete

* fix(console): allow editing existing Slack permissions

---------

Co-authored-by: Matthew Slipper <me@matthewslipper.com>
…gmxyz#1335)

paradigmxyz#832 fixed this argument in tools/productivity/linear/readonly.py and pinned it
with a regression test. There is a second, independent copy of the same client
at workflows/linear/readonly.py that was never touched -- it still builds:

    query SearchIssues($query: String!, ...) { searchIssues(query: $query, ...) }

while the copy upstream tests builds `searchIssues(term: $term, ...)`. The two
disagree on the argument name, and only one of them is pinned.

This copy ships: services/api-rs/Dockerfile copies workflows/ into the image,
WORKFLOW_DIRS points at it, and LinearReadonlyClient is exported from
workflows/linear/__init__.py. Nothing calls search_issues on this path today, so
it is latent rather than a live break -- which is why it went unnoticed.

The test is a mirror of the one paradigmxyz#832 added, asserting the same three things
against this client. The absence of a test here is the reason the fix did not
propagate; paradigmxyz#1300 now runs workflows/tests in CI, so it is gated from here on.
Verified it fails against the unfixed client and passes against the fixed one.

Scope is the argument name only. The two copies still differ in their selection
sets -- the tools copy also selects `project` and `projectMilestone` -- and this
change leaves that alone rather than quietly widening the payload of a query
nobody calls yet.

Co-authored-by: aaditya krishnamohan <201291201+aadityakbh@users.noreply.github.com>
Co-authored-by: José Ribeiro <32641844+ribeirojose@users.noreply.github.com>
… 4 updates (paradigmxyz#1403)

* chore(deps): bump the ruby-dependencies group across 1 directory with 4 updates

Bumps the ruby-dependencies group with 4 updates in the /services/console directory: [rails-paradedb](https://github.com/paradedb/rails-paradedb), [bootsnap](https://github.com/rails/bootsnap), [thruster](https://github.com/basecamp/thruster) and [selenium-webdriver](https://github.com/SeleniumHQ/selenium).


Updates `rails-paradedb` from 0.7.0 to 0.12.0
- [Release notes](https://github.com/paradedb/rails-paradedb/releases)
- [Changelog](https://github.com/paradedb/rails-paradedb/blob/main/CHANGELOG.md)
- [Commits](paradedb/rails-paradedb@v0.7.0...v0.12.0)

Updates `bootsnap` from 1.24.6 to 1.25.0
- [Release notes](https://github.com/rails/bootsnap/releases)
- [Changelog](https://github.com/rails/bootsnap/blob/main/CHANGELOG.md)
- [Commits](rails/bootsnap@v1.24.6...v1.25.0)

Updates `thruster` from 0.1.23 to 0.1.25
- [Changelog](https://github.com/basecamp/thruster/blob/main/CHANGELOG.md)
- [Commits](basecamp/thruster@v0.1.23...v0.1.25)

Updates `selenium-webdriver` from 4.46.0 to 4.47.0
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](SeleniumHQ/selenium@selenium-4.46.0...selenium-4.47.0)

---
updated-dependencies:
- dependency-name: bootsnap
  dependency-version: 1.25.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: rails-paradedb
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: selenium-webdriver
  dependency-version: 4.47.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: thruster
  dependency-version: 0.1.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: keep ParadeDB Rails integration compatible

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
* feat: add server-side Slack app DMs

* revert: remove standalone Slack app DM tool

* feat: customize workflow Slack messages

* refactor: simplify workflow Slack method signature

---------

Co-authored-by: Vijith Bheemireddi <vijith@khvkmhft4w.tail388b2e.ts.net>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
Co-authored-by: ecejas <15933097+ecejas@users.noreply.github.com>
…sole in the ruby-dependencies group (paradigmxyz#1430)

chore(deps): bump rails-paradedb

Bumps the ruby-dependencies group in /services/console with 1 update: rails-paradedb.


Updates `rails-paradedb` from 0.7.0 to 0.9.0

---
updated-dependencies:
- dependency-name: rails-paradedb
  dependency-version: 0.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* refactor(slack): own nanocodex rollout policy

* chore(chart): bump version to 0.1.121

* refactor(slack): simplify rollout selection check

* docs: correct nanocodex rollout visibility

* docs(chart): describe nanocodex rollout value
fix: align Figma credential contract
* feat: support custom Codex providers

Amp-Thread-ID: https://ampcode.com/threads/T-01a0118a-4098-7650-b30b-fce6b8237f41
Co-authored-by: Amp <amp@ampcode.com>

* fix: persist custom Codex providers across turns

* chore(chart): bump chart to 0.1.123

* chore(chart): bump chart to 0.1.124

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
oponder and others added 7 commits August 19, 2026 21:46
…radigmxyz#1435)

The platform scoping added in paradigmxyz#1374 pins each ingress key to a single
thread-key prefix, but githubbot mints four: github: (chat),
github-issue: (issue work), github-manage: (owned-PR management) and
github-review: (review runs). Only the first matched, so api-rs 403'd
the bot out of its own issue-work, management and review sessions
("ingress caller denied for another platform's session").

Callers now carry the full list of prefixes their ingress mints, and the
session guard accepts any of them. The other ingresses each mint a
single family and keep their single prefix; unlisted github-* strings
stay denied.

Both ends of the contract are pinned so they cannot drift apart
silently: the api-rs test asserts the shipped ingress spec rather than a
hand-written list, and githubbot pins the prefix each of its thread-key
helpers produces.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#1429)

* chore(deps): bump the harness-server-dependencies group across 1 directory with 3 updates

Bumps the harness-server-dependencies group with 3 updates in the /crates/harness-server directory: [allocative](https://github.com/facebookexperimental/allocative), [thiserror](https://github.com/dtolnay/thiserror) and [uuid](https://github.com/uuid-rs/uuid).


Updates `allocative` from 0.3.4 to 0.3.6
- [Release notes](https://github.com/facebookexperimental/allocative/releases)
- [Commits](https://github.com/facebookexperimental/allocative/commits)

Updates `thiserror` from 2.0.19 to 2.0.20
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](dtolnay/thiserror@2.0.19...2.0.20)

Updates `uuid` from 1.24.0 to 1.24.1
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](uuid-rs/uuid@v1.24.0...v1.24.1)

---
updated-dependencies:
- dependency-name: allocative
  dependency-version: 0.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: harness-server-dependencies
- dependency-name: thiserror
  dependency-version: 2.0.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: harness-server-dependencies
- dependency-name: uuid
  dependency-version: 1.24.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: harness-server-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(deps): retain compatible allocative version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
Co-authored-by: Liam Horne <1933029+snario@users.noreply.github.com>
Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
Merges upstream main bc72622 — 36 commits since the 2026-08-18 sync
point (b985a36). No conflicts.

The fork carries no local divergence after this: upstream took both
fork patches, the sentry read-only CLI commands (paradigmxyz#1419) and githubbot's
session key families (paradigmxyz#1435), so the merged tree matches upstream main
exactly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@oponder
oponder marked this pull request as ready for review August 20, 2026 17:46
@oponder
oponder requested a review from 0xdiid August 20, 2026 17:49
@oponder
oponder merged commit e267510 into main Aug 20, 2026
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.