Skip to content

Sync upstream main (6a4c7c11) - #69

Merged
cooper (czxtm) merged 177 commits into
mainfrom
sync/upstream-main
Oct 22, 2026
Merged

cooper (czxtm) merged 177 commits into
mainfrom
sync/upstream-main

Conversation

@darkmatter

@darkmatter darkmatter Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Caution

Only a human may merge this PR. Automation never merges it.
Merge with a merge commit (“Create a merge commit”). Merge-commit ancestry is required. Do NOT squash or rebase. The upstream tip must become an ancestor of darkmatter/centaur:main so later sync, image, and GitOps stages can validate it. The previous sync (#64) was squash-merged, so main does not contain upstream 05e6ec8a. That is why this merge produced 182 raw conflicts.

Upstream sync candidate

SHA
Upstream paradigmxyz/centaur:main 6a4c7c113ec90e9c17e3e9bc74b33d2330583c66
Base darkmatter/centaur:main 24921080251120d833e27e8bdb0821abd13c7748
Candidate head sync/upstream-main ad9fb9b6c5d9f0e859eeebcb0724c2831e2a8205 (merge commit; parents are base and upstream)

This is a fresh git merge --no-ff of the exact upstream tip onto the exact product base. It replaces the raw candidate 6a4c7c11 with --force-with-lease.

Status: ready for human review.

How conflicts were resolved

Git's merge base is e54c7000, which is stale because #64 was squashed. The fork already contains upstream through 05e6ec8a. Each conflict was reasoned three-way against that effective base, with true upstream delta = 05e6ec8a..6a4c7c11 (58 commits). The reference result was git merge-tree --merge-base=05e6ec8a.

The stale-base auto-merge had also silently resurrected two things, and both were reverted to the correct three-way result:

  • upstream's BM25-free SQL inside the released fork migrations 0012, 0028, 0029, 0030 and 0040, which would have changed their applied checksums;
  • the OMP 18 tests/omp_stdio.rs and its fixtures, which the fork removed in Sync upstream main (05e6ec8a) #64.

All 182 raw conflicted paths were resolved per hunk. None was resolved by taking one side wholesale. 86 still conflicted against the correct base, and those were resolved by hand.

Layout (upstream paradigmxyz#2009)

  • Adopted the single root Cargo workspace: members = ["crates/*"] and one root Cargo.lock.
  • services/api-rs/crates/*, services/company-context/src and services/proxy-sync/src move to crates/*. Sub-workspace lockfiles are removed.
  • Old-path modify/delete entries carried no fork-only delta since 05e6ec8a, so nothing was lost. The proxy-sync conflict code now lives in crates/centaur-console-db.
  • crates/centaur-console-db is kept as upstream's new crate. Git mis-detected it as a rename of the deleted integration-test crate.
  • Root Cargo.toml keeps the fork's aws-config/aws-sdk-s3 for the S3 transcript archive. Cargo.lock is upstream's lock plus the fork's aws stack at its existing versions; no upstream package version changed.

session-sqlx / migrations (crates/centaur-session-sqlx/**, .github/scripts/check-migration-order.sh)

  • All 71 released fork migration, search and override files are byte-identical to main. migrations.lock is append-only.
  • Upstream-numbered duplicates are removed. Each is byte-identical to its fork-numbered file, except nanocodex, which the fork's applied 0048 supersedes.
  • Upstream's only new migration, 0060_slack_external_team_allowlist, becomes 0065 and is appended to the lock.
  • The fork's core-migration-overrides/ mechanism is kept at its new path. Upstream's tests/fixtures/legacy-migrations are dropped because they are byte-identical to fork originals that the fork tests already use.
  • The check script keeps the fork's lock check, with paths updated.

harness-server (src/{claude,codex,lib,main,omp,pi,server,traits}.rs, codex/citations.rs, Cargo.toml, tests/app_server_stdio.rs, conformance Cargo.lock, docs/pages/extend/omp-harness.mdx, the harness-development skill)

api-rs crates (centaur-api-server/src/{args,auth,lib,main,routes,tool_discovery}.rs, sandbox-manager, session-cli, session-core, session-runtime, telemetry, services/api-rs/AGENTS.md)

  • Kept fork code:
    • OMP leases and fenced ownership
    • the workspace-diff route and its attestation
    • the repo-cache default
    • the S3 archive
    • workflow metrics
    • the allocation-only placeholder
  • Added upstream code:
    • Console DB pool
    • Slack external-team allowlist routes and seeding
    • persona-pinned harness
    • workflow starter gate
    • interrupted turns cancelled
  • There is a single HarnessType::Omp.

company-context / proxy-sync / tools (crates/centaur-company-context/**, crates/centaur-proxy-sync/**, tools/productivity/company_context/**, tools/productivity/slack/tests/test_client.py, .agents/skills/company-context, contrib/chart/templates/company-context.yaml)

  • The fork had no delta since 05e6ec8a except conftest.py. That file merges upstream's paths with the fork's core-migration override loader.

chart / CI / docs / e2e (contrib/chart/{Chart.yaml,values.yaml,values.schema.json,templates/{apirs,console-worker,networkpolicy,slackbotv2}.yaml}, .github/{workflows/ci.yml,workflows/publish-images.yml,dependabot.yml}, .gitignore, docs/**, e2e/**, the e2e-testing and qa skills)

  • Kept these fork chart settings:
    • paradedb text-search default
    • SESSION_SANDBOX_DEFAULT_REPO_CACHE_ACCESS
    • databaseUrlSecretKey/deriveDatabaseUrl
    • ompViewerUrl
    • probes, promptPath and RuntimeClass
    • OMP_MODEL mirroring
  • Added upstream's token-broker and calendar/custom indexers.
  • IRON_CONTROL_DATABASE_URL follows the fork's derived-URL mode when it is enabled.
  • CI keeps the fork's push: main and workflow_dispatch triggers. publish-images.yml keeps the darkmatter-owner skip.
  • darkmatter-images.yml now also triggers on root Cargo.toml/Cargo.lock.

JS services / sandbox / console (services/{slackbotv2,discordbot,githubbot,linearbot,teamsbot}/{Dockerfile,package.json}, slackbotv2/src/{index,server,types,response-context}.ts, its test, packages/*/package.json, pnpm-lock.yaml, services/iron-proxy/Dockerfile, services/sandbox/{Dockerfile,entrypoint.sh,SYSTEM_PROMPT.md,test_repo_cache_sync.py}, services/console/{Gemfile.lock,README.md,lib/oauth/providers.rb})

  • Kept fork code:
    • the slackbotv2 OMP-viewer export command, ompViewerUrl and the OMP_MODEL footer
    • the sandbox OMP 17.0.5 install, OMP config/overlay materialization and GitHub App token refresh
  • Took upstream's version bumps, the iron-proxy 0.54.0 image, the sandbox harness build from the root workspace, and the Microsoft provider entry.

Validation (local, merge commit ad9fb9b6)

  • git diff --check (base→merge) is clean, and no conflict markers remain. Parents are 24921080 and 6a4c7c11.
  • .github/scripts/check-migration-order.sh 24921080 passes. A separate byte-compare against old-path main confirms all 71 released migration, search and override files are unchanged and that there are no duplicate versions.
  • Rust, run from the root workspace:
    • cargo fmt --all --check (stable and nightly) is clean.
    • cargo clippy --locked --workspace --all-targets -D warnings is clean.
    • The CI rust-api workspace group passes, as do:
      • session-runtime DB tests: 152, on PG16 + pgvector
      • session-sqlx on plain PG16 + pgvector: 27 + 11 + 1 + 5 + 2
      • absurd-sdk DB tests: 7
      • harness-server: 156 unit + 40 stdio (4 ignored) + 1 pi
      • unit tests in company-context, console-db and active-record-encryption
    • Conformance-workspace fmt, clippy and tests pass.
  • slackbotv2: bun test gives 320 pass, 1 skip. tsgo is clean. githubbot gives 123 pass and its typecheck is clean.
  • pnpm install --frozen-lockfile passes.
  • Sandbox pytest (29) passes. company_context tool tests and slack client tests (88) pass.
  • helm lint and helm template pass, including tokenBroker, derived-DB-URL and repo-cache variants. actionlint and YAML/JSON parsing pass.
  • Not covered locally:
    • company-context DB tests need pg_search.
    • console-db, proxy-sync and token-broker integration tests need the Rails console schema; those crates are byte-identical to upstream.
    • The kind e2e is skipped on the fork.
    • check-migration-order.sh skips its base comparison on this PR because the base keeps migrations at the old path; the byte-compare above covers it.
  • ci.yml was dispatched on sync/upstream-main.

Recovery re-validation (repair re-run)

On the repair re-run, the remote head ad9fb9b6 was found and handled as a recovered prior attempt, so it was not overwritten. In a fresh clone:

  • Both refs are unchanged: main is 24921080 and upstream is 6a4c7c11.
  • ad9fb9b6 is a merge commit whose parents are exactly those two.
  • git diff --check is clean and no conflict markers remain.

Targeted checks were re-run on that commit:

  • Migrations: check-migration-order.sh passes.
  • Rust: cargo fmt --check and clippy --locked --workspace --all-targets -D warnings are clean. Tests pass for:
    • absurd-sdk (7)
    • session-sqlx on PG16 + pgvector (27, 11, 1, 5, 2)
    • the rust-api workspace group
    • session-runtime DB tests (152)
    • harness-server (156 + 40 + 1)
    • company-context unit tests (65)
  • JS:
    • pnpm install --frozen-lockfile passes.
    • slackbotv2: 320 pass and 1 skip, with types clean.
    • githubbot: 123 pass, with types clean.
  • Sandbox: bash -n entrypoint.sh passes, and pytest passes (29).
  • Chart: helm lint and helm template pass, and the workflow, chart and schema files parse.

ci.yml was dispatched again on sync/upstream-main.

* feat(company-context): ingest Google Docs from Drive

* docs(company-context): make Drive rescan explicit

* fix(company-context): reuse embeddings for unchanged chunks

* fix(company-context): harden Google Docs backfill and export

* chore(company-context): revert chart comment change
* feat: apply per-turn reasoning effort to Claude Code

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

* fix(harness-server): apply Claude Code reasoning effort per turn

* fix(slackbotv2): validate Claude Code effort against the selected model

* chore: revert chart values comment change

---------

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

Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>
…ies with 2 updates (paradigmxyz#1808)

Bumps the typescript-dependencies group with 2 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [dotenv](https://github.com/motdotla/dotenv).
Bumps the typescript-dependencies group with 1 update in the /packages/harness-events directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 1 update in the /packages/rendering directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 1 update in the /services/discordbot directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 1 update in the /services/githubbot directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 1 update in the /services/linearbot directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 1 update in the /services/slackbotv2 directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).
Bumps the typescript-dependencies group with 2 updates in the /services/teamsbot directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) and [dotenv](https://github.com/motdotla/dotenv).


Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `dotenv` from 18.0.3 to 18.0.4
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](motdotla/dotenv@v18.0.3...v18.0.4)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/node` from 26.6.2 to 26.6.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `dotenv` from 18.0.3 to 18.0.4
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](motdotla/dotenv@v18.0.3...v18.0.4)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: dotenv
  dependency-version: 18.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: dotenv
  dependency-version: 18.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…e docs-dependencies group (paradigmxyz#1806)

chore(deps-dev): bump wrangler in /docs in the docs-dependencies group

Bumps the docs-dependencies group in /docs with 1 update: [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler).


Updates `wrangler` from 4.140.0 to 4.141.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.141.0/packages/wrangler)

---
updated-dependencies:
- dependency-name: wrangler
  dependency-version: 4.141.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: docs-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…_context v2 (paradigmxyz#1809)

* feat(company-context): grant reader role scoped access to Drive documents

* feat(company-context): retrieve Drive documents from the company-context service

* feat(company-context): gate service Drive retrieval behind a v2 subcommand

* feat(company-context): add v2 status command and help text

* refactor(company-context): move v2 Drive retrieval into its own module

* test(company-context): cover cross-user, shared, and blank subject visibility
…yz#1813)

Deploy proxy-sync unconditionally and require IRON_CONTROL_PROXY_SYNC_URL
for agent-k8s sandboxes instead of falling back to Console's sync endpoint.
…cess source (paradigmxyz#1815)

Drop the unused google_drive_document_access ACL table and move
google_drive_broker_observations into company_context_data so the
system schema stays internal to the service.
* refactor(sandbox): make running limit admission-only

* chore(chart): bump version to 0.1.153

* fix(sandbox): exclude ready warm sandboxes from admission limit

* chore(chart): bump version to 0.1.154
iron-proxy 0.51.0 rejects every client set_config call on proxied
Postgres connections, so company_context query failed before running
the user's SQL. SET LOCAL statement_timeout is equivalent and allowed.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…mxyz#1817)

* fix(chart): allow Postgres egress when using an external database

* feat(console): use built-in PostgreSQL full-text search for skills

Drop the ParadeDB pg_search dependency so Console runs on stock and managed
PostgreSQL such as RDS and Cloud SQL. Local development and CI now use postgres:16.

* feat(api-rs): allow iron-proxy egress to an external core database

KUBERNETES_IRON_PROXY_DATABASE_CIDRS and _PORT add a per-sandbox proxy egress
rule to the database's private ranges, which the public-upstream rule excludes.

* feat(chart): scope external Postgres egress to postgres.external.cidrs

Replace the any-host 5432 rule with ipBlock rules on postgres.external.port,
fail rendering when network policies are enabled without CIDRs, and pass the
ranges to api-rs for per-sandbox iron-proxy policies.

* refactor(chart): move external Postgres egress settings to externalDatabase

Keep postgres.* about the bundled server and fail when externalDatabase.cidrs
is set while the bundled Postgres is enabled.
Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>
…z#1824)

* feat(api-rs): make ParadeDB an opt-in text search backend

Core migrations no longer require pg_search, so api-rs runs on stock
PostgreSQL with pgvector. Keyword-search indexes now come from one backend
per database, selected by DATABASE_TEXT_SEARCH (paradedb by default):
search-migrations/paradedb adopts the existing BM25 indexes and
search-migrations/postgres adds tsvector columns with GIN indexes.

Backend migrations share the core version sequence and merge into it by
version. The six edited core migrations present their previously recorded
checksums, so existing databases validate unchanged. Startup refuses a
backend that differs from the one a database was migrated with.

CI checks numbering across all migration directories, and database tests
cover fresh installs, every upgrade path, and legacy BM25 databases on
both ParadeDB and plain PostgreSQL.

* feat(chart): select the text search backend for external databases

externalDatabase.textSearch defaults to postgres so an external server
such as RDS or Cloud SQL needs no pg_search. The bundled ParadeDB keeps
the paradedb backend.

* feat(company-context): search with built-in PostgreSQL full-text search

Detect the text-search backend from the database and use tsvector
matching and ts_rank when the ParadeDB BM25 indexes are absent.

* fix(api-rs): refuse the postgres backend while BM25 indexes remain

Databases migrated before the backends split carry BM25 indexes that can
be large. Fail startup with the index names instead of dropping them, so
the operator keeps them with paradedb or drops them deliberately.

* test(api-rs): replace per-version upgrade runs with legacy adoption tests

Migrating a new database once per version cost minutes and added little
beyond one fresh run per backend. Cover databases from before the split
directly instead.

* fix(api-rs): detect BM25 indexes left on renamed Slack DM tables

A database stopped before core migration 0045 still has BM25 indexes on
the slack_dm_* tables, which 0045 now renames without rebuilding. The
postgres backend's adoption check looked only at current table names, so
those indexes survived adoption. Check the pre-rename names too.

Legacy tests now replay the real pre-split migrations, kept as fixtures
for the six edited files, from both the last release and before 0045.

* refactor(api-rs): drop pre-0045 upgrade handling

Every deployed database is past core migration 0045, so the Slack DM
index cleanup, the pre-rename table names in the postgres adoption check,
and the legacy test stopped at 0044 cover no real database.

* test(api-rs): pin released core migrations and drop test databases on failure

The six edited core migrations present their legacy checksums, so SQLx
cannot notice later edits to them, and the legacy adoption tests rebuild
pre-split databases from the current files. Pin the SHA-384 of every
released core migration (1-55).

Failed assertions no longer skip test database cleanup.

* ci: require every text-search backend to carry each backend version

Backends are mutually exclusive, so a migration in one backend directory
needs a counterpart, possibly a no-op, in the other. Enforce it in the
migration order check and a unit test, and document that shared test
databases use the postgres backend.

* fix(chart): let apiRs.extraEnv override DATABASE_TEXT_SEARCH

* docs: run host api-rs on pgvector with built-in text search

postgres:16 lacks pgvector, which core migrations need, and has no
pg_search for the default paradedb backend.

* docs: describe running Centaur on an external PostgreSQL

Cover server requirements, databases and secrets, chart values,
NetworkPolicy CIDRs, and the text-search backend choice in the production
deployment guide, and link them from the configuration reference.

* docs: drop company-context ingestion note from external database guide

* fix(chart): reject externalDatabase.textSearch with the bundled Postgres

The setting was silently ignored while postgres.enabled=true. Default it
to empty, which selects postgres for external databases, and fail
rendering when it is set for the bundled Postgres, like
externalDatabase.cidrs.

* feat(api-rs): add a migrate subcommand

centaur-api-server migrate --database-url <url> --text-search <backend>
applies migrations with the same checks as startup and exits. It takes
only flags and none of the server configuration, so an operator can
migrate an external database separately, for example with an
administrator account while api-rs runs with RUN_MIGRATIONS=false.

* docs: describe changing text search backends as migrate-then-copy

A database that has run a backend migration cannot switch in place, so
the guide, values comment, and BM25 error no longer suggest dropping
indexes to switch. Describe migrating a fresh database and copying the
data into it instead.
* feat(company-context): ingest Granola notes and transcripts

* feat(chart): configure company-context Granola sync

* chore(chart): bump version to 0.1.158

* refactor(company-context): leave Granola transcripts to the Granola tool

* fix(company-context): extend task leases while tasks run
…ies with 2 updates (paradigmxyz#1836)

Bumps the typescript-dependencies group with 2 updates in the / directory: [@linear/sdk](https://github.com/linear/linear) and [hono](https://github.com/honojs/hono).
Bumps the typescript-dependencies group with 1 update in the /services/discordbot directory: [hono](https://github.com/honojs/hono).
Bumps the typescript-dependencies group with 1 update in the /services/githubbot directory: [hono](https://github.com/honojs/hono).
Bumps the typescript-dependencies group with 2 updates in the /services/linearbot directory: [@linear/sdk](https://github.com/linear/linear) and [hono](https://github.com/honojs/hono).
Bumps the typescript-dependencies group with 1 update in the /services/slackbotv2 directory: [hono](https://github.com/honojs/hono).


Updates `@linear/sdk` from 96.0.0 to 97.0.0
- [Release notes](https://github.com/linear/linear/releases)
- [Commits](https://github.com/linear/linear/compare/@linear/sdk@96.0.0...@linear/sdk@97.0.0)

Updates `hono` from 4.13.9 to 4.13.10
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.13.9...v4.13.10)

Updates `hono` from 4.13.9 to 4.13.10
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.13.9...v4.13.10)

Updates `hono` from 4.13.9 to 4.13.10
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.13.9...v4.13.10)

Updates `@linear/sdk` from 96.0.0 to 97.0.0
- [Release notes](https://github.com/linear/linear/releases)
- [Commits](https://github.com/linear/linear/compare/@linear/sdk@96.0.0...@linear/sdk@97.0.0)

Updates `hono` from 4.13.9 to 4.13.10
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.13.9...v4.13.10)

Updates `hono` from 4.13.9 to 4.13.10
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.13.9...v4.13.10)

---
updated-dependencies:
- dependency-name: "@linear/sdk"
  dependency-version: 97.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: typescript-dependencies
- dependency-name: hono
  dependency-version: 4.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: hono
  dependency-version: 4.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: hono
  dependency-version: 4.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: "@linear/sdk"
  dependency-version: 97.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: typescript-dependencies
- dependency-name: hono
  dependency-version: 4.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
- dependency-name: hono
  dependency-version: 4.13.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: typescript-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…e docs-dependencies group (paradigmxyz#1835)

chore(deps-dev): bump wrangler in /docs in the docs-dependencies group

Bumps the docs-dependencies group in /docs with 1 update: [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler).


Updates `wrangler` from 4.141.0 to 4.143.0
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.143.0/packages/wrangler)

---
updated-dependencies:
- dependency-name: wrangler
  dependency-version: 4.143.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: docs-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ith 2 updates (paradigmxyz#1833)

* chore(deps): bump the docker-base-images group across 6 directories with 2 updates

Bumps the docker-base-images group with 1 update in the /services/discordbot directory: oven/bun.
Bumps the docker-base-images group with 1 update in the /services/githubbot directory: oven/bun.
Bumps the docker-base-images group with 1 update in the /services/linearbot directory: oven/bun.
Bumps the docker-base-images group with 1 update in the /services/sandbox directory: ubuntu.
Bumps the docker-base-images group with 1 update in the /services/slackbotv2 directory: oven/bun.
Bumps the docker-base-images group with 1 update in the /services/teamsbot directory: oven/bun.


Updates `oven/bun` from 1.3.13-slim to 1.4.2-slim

Updates `oven/bun` from 1.3.13-slim to 1.4.2-slim

Updates `oven/bun` from 1.3.13-slim to 1.4.2-slim

Updates `ubuntu` from 24.04 to 26.04

Updates `oven/bun` from 1.3.13-slim to 1.4.2-slim

Updates `oven/bun` from 1.3.13-slim to 1.4.2-slim

---
updated-dependencies:
- dependency-name: oven/bun
  dependency-version: 1.4.2-slim
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-base-images
- dependency-name: oven/bun
  dependency-version: 1.4.2-slim
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-base-images
- dependency-name: oven/bun
  dependency-version: 1.4.2-slim
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-base-images
- dependency-name: ubuntu
  dependency-version: '26.04'
  dependency-type: direct:production
  dependency-group: docker-base-images
- dependency-name: oven/bun
  dependency-version: 1.4.2-slim
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-base-images
- dependency-name: oven/bun
  dependency-version: 1.4.2-slim
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docker-base-images
...

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

* fix: keep sandbox on ubuntu 24.04 and skip ubuntu major bumps

* chore: ignore rails 8.1.4 in dependabot

---------

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>
…z#1841)

* feat(slackbotv2): select persona from channel defaults

* refactor(sandbox): slim base prompt and move engineering guidance to eng persona

* refactor: move eng persona guidance into observability and PR skills

* revert: restore original eng persona prompt

* feat(slackbotv2): trace persona source and share persona id pattern

* chore(chart): bump version to 0.1.159
…in (paradigmxyz#1842)

* chore: update brakeman to 8.1.0 and skip latest-version check on PRs

* ci: only enforce latest brakeman on pushes to main
…digmxyz#1738)

* fix(sandbox): stop claudecode loading the composed prompt twice

Claude Code >= 2.1.277 reads a bare workspace AGENTS.md as project
instructions whenever no CLAUDE.md exists, so on current images the
composed system prompt loaded twice: once via
--append-system-prompt-file and once as memory (~25k extra tokens per
cold session, measured in the issue). When AGENT_REPO was set, the
composed file also overwrote the repository's own AGENTS.md.

- Bake pluginConfigs.agents-md@builtin instructionFiles=claude-md into
  the shipped claude settings so AGENTS.md is never read as project
  instructions and the prompt arrives exactly once via the flag
- When the workspace repo tracks its own AGENTS.md, compose the Centaur
  prompt to $HOME/.centaur/AGENTS.md instead (also mirrored to
  ~/.codex/AGENTS.md as codex global scope) so the repo file is never
  clobbered and git status stays clean
- claude.rs probes the composed path first and falls back to workspace
  AGENTS.md; the amp AGENT.md symlink follows the real composed path

codex keeps its native workspace AGENTS.md channel in the no-repo case,
so its prompt delivery is unchanged.

Fixes paradigmxyz#1722

Signed-off-by: Delweng <delweng@gmail.com>

* fix(sandbox): limit claudecode prompt fix to settings

Keep only the agents-md instructionFiles=claude-md setting, which stops
Claude Code from reading the composed workspace AGENTS.md as project
instructions. Revert the relocated prompt path, which dropped the
Centaur prompt for nanocodex and amp when the repo ships AGENTS.md.

---------

Signed-off-by: Delweng <delweng@gmail.com>
Co-authored-by: Matthew Slipper <me@matthewslipper.com>
…adigmxyz#1846)

api-rs validates harness_type through HarnessType on every write and
read, so the database allowlist only forced a migration (and merge-order
coordination) for each new harness.
…#1845)

* feat: select firewall CA entries within existing Secrets

* chore(chart): bump version to 0.1.160
@darkmatter darkmatter Bot changed the title Sync upstream main (218adc31) Sync upstream main (ece471a6) Oct 21, 2026
@darkmatter
darkmatter Bot marked this pull request as ready for review October 21, 2026 23:24
…paradigmxyz#2008)

* refactor: share Console credential config building in a console-db crate

Move proxy-sync's credential loading, conflict suppression, and proxy config building into crates/console-db so other Rust services can build a principal's config from Console's schema. proxy-sync keeps its proxy lookup, minted tokens, and config hash.

* feat: read Console principals and effective config directly in api-rs

api-rs reads principals and their redacted effective config from Console's database through read-only sessions when IRON_CONTROL_DATABASE_URL is set, and skips principal and Slack permission upserts that would change nothing. Writes still go through the Console API.

* fix: test console-db only in the Console-schema CI job

* refactor: rename console-db to centaur-console-db

* fix: treat whitespace-only Slack DM emails as blank, like Console

* chore: use workspace settings in centaur-console-db and drop proxy-sync's unused rand

* feat: require the Console database in api-rs

* fix: fail Console database reads fast when the database is unreachable

* docs: note api-rs and proxy-sync read the Console database
)

An interrupted turn completed whenever final-answer text had accumulated,
and that text included commentary-phase agent-message deltas. Map an
interrupted status to cancellation unconditionally, and remove an agent
message's deltas from the final-answer text when it completes as
commentary, in both the live and replay folds.

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

* fix(harness-server): resume Codex after subprocess disconnects

* test(harness-server): use shared fake app-server for Codex recovery tests

---------

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

* feat(console): let admin DM sandboxes create Slack principals

* feat(centaur-console): add admin create-principal command

* refactor(console): inline Slack principal creation in the admin controller
…mxyz#1937)

repo-cache only installed GIT_ASKPASS when the token file was non-empty
on the first git call, and the env is cached for the process. A token
Secret filled after the pod started (External Secrets, a rotator) was
never used until a restart. Always install the askpass script and check
the file inside it.

Co-authored-by: Mike Leung <2996848+mleungdev@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@darkmatter
darkmatter Bot force-pushed the sync/upstream-main branch from f37c2f4 to ddecab1 Compare October 22, 2026 02:03
@darkmatter
darkmatter Bot marked this pull request as draft October 22, 2026 02:03
@darkmatter darkmatter Bot changed the title Sync upstream main (ece471a6) Sync upstream main (ddecab10) Oct 22, 2026
@darkmatter
darkmatter Bot marked this pull request as ready for review October 22, 2026 02:23
…paradigmxyz#2037)

* feat: let admins create and edit static secrets and workflow principals from their DM

* refactor: refuse raw secret values in DM secret writes and support pg_dsn secrets
)

* chore(chart): recreate company-context pods on rollout

* chore(chart): bump chart version to 0.1.185
@darkmatter
darkmatter Bot force-pushed the sync/upstream-main branch from b164fcf to 6a4c7c1 Compare October 22, 2026 20:03
@darkmatter darkmatter Bot changed the title Sync upstream main (ddecab10) Sync upstream main (6a4c7c11) Oct 22, 2026
@darkmatter
darkmatter Bot marked this pull request as draft October 22, 2026 20:03
Merge paradigmxyz/centaur main 6a4c7c1
into darkmatter/centaur main 2492108.

The previous sync (#64) was squash-merged, so conflicts were resolved
against the effective base 05e6ec8: adopt upstream's root Cargo
workspace layout, keep the fork's deployed migration numbering and
core-migration-overrides, renumber upstream 0060 to 0065, keep the
fork OMP stack and deployment customizations.
@darkmatter
darkmatter Bot marked this pull request as ready for review October 22, 2026 20:36
@czxtm
cooper (czxtm) merged commit 5449311 into main Oct 22, 2026
4 of 29 checks passed
darkmatter Bot pushed a commit that referenced this pull request Oct 23, 2026
Records upstream 6a4c7c1 as an ancestor
of product main. Product base 5449311 is the squash of #69, whose tree
(ab9cae5) is byte-identical to the reviewed merge ad9fb9b of this same
upstream tip. Against that effective base the upstream delta is empty, so
all 92 raw conflicts take #69's per-hunk resolutions, and the stale-base
(e54c700) auto-merge resurrections are reverted: upstream-numbered
duplicate migrations 0045/0057-0060 and search 0056, OMP 18
omp_stdio.rs + fixtures, the unused hex dependency, and a duplicated
api-rs AGENTS.md paragraph.
darkmatter Bot pushed a commit that referenced this pull request Oct 23, 2026
Product base 5449311 is the squash of PR #69, whose tree is identical to
that PR's merge commit (parents 2492108 + upstream 6a4c7c1). Because the
squash dropped upstream ancestry, git replays ~100 already-resolved
conflicts from merge-base e54c700. Every replayed conflict keeps the
reviewed #69 resolution; the only new upstream change, 7047bd8
(chore: update deps paradigmxyz#2044), is applied on top:

- Cargo.lock: rustls-webpki 0.103.15 -> 0.103.16 (fork keeps its extra
  0.101.7 entry; versioned dependent refs updated), webpki-root-certs
  1.0.9 -> 1.0.10
- crates/harness-server-conformance/Cargo.lock: same bumps
- services/{discordbot,githubbot,linearbot,slackbotv2,teamsbot}/Dockerfile:
  oven/bun 1.4.3 -> 1.4.4
- e2e/infra/{fake-slack,model-server}.yaml: oven/bun 1.4.2 -> 1.4.4
darkmatter Bot added a commit that referenced this pull request Oct 23, 2026
Merge upstream 12a4c3f into product
main 5449311.

Product main already contains upstream through 6a4c7c1 via the squash
of #69, so conflicts were resolved against 6a4c7c1 as the effective
base: fork-only behavior is preserved and only the upstream delta
6a4c7c1..12a4c3f (paradigmxyz#2044 dep bumps, paradigmxyz#2045 company-context readiness)
is applied.

Manual resolution: Cargo.lock keeps the fork's dependency graph and
applies upstream's rustls-webpki 0.103.16 / webpki-root-certs 1.0.10
bumps.
darkmatter Bot pushed a commit that referenced this pull request Oct 23, 2026
Product base: 5449311
Upstream tip: 0738d09

Product main already contains upstream through 6a4c7c1 via the squashed
sync #69, so git's ancestry merge base (e54c700) is stale and reported
103 spurious conflicts. Resolution applies the 6 new upstream commits
(6a4c7c1..0738d09) on top of product main using 6a4c7c1 as the
effective base; Darkmatter-only content is unchanged.

Resolved: Cargo.lock (keep fork rustls-webpki 0.101.7; take upstream
rustls-webpki 0.103.15 -> 0.103.16 and webpki-root-certs 1.0.10).
darkmatter Bot pushed a commit that referenced this pull request Oct 24, 2026
Merge paradigmxyz/centaur@1afdc0d into
19722ed.

Product main already carries upstream through 6a4c7c1 via squash sync #69,
so conflicts were resolved against that effective base: Darkmatter's
deployed migration numbering, OMP harness, chart, and sandbox customizations
are kept, and the seven newer upstream commits (paradigmxyz#2036, paradigmxyz#2038, paradigmxyz#2044, paradigmxyz#2045,
paradigmxyz#2048, paradigmxyz#2050, paradigmxyz#2053) are applied on top. Cargo.lock keeps the fork's extra
rustls-webpki 0.101.7 entry and takes upstream's 0.103.16 and
webpki-root-certs 1.0.10 bumps.
darkmatter Bot pushed a commit that referenced this pull request Oct 25, 2026
Conflicts resolved against the last synced upstream commit 6a4c7c1 (the
content base of the squash-merged #69 sync), preserving all Darkmatter fork
changes and applying all upstream changes from 6a4c7c1..1afdc0d.
Cargo.lock: kept fork rustls-webpki 0.101.7, bumped 0.103.15 -> 0.103.16.
harness-server-conformance/Cargo.lock: refreshed so --locked resolves the
fork's harness-server sha2 0.11 dependency.
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.