Skip to content

upstream-sync: v0.7.32 → stack tip (2026-08-06-4) - #688

Draft
utcarshsrivastava-collab wants to merge 78 commits into
upstream-sync/2026-08-06T11-28-59from
upstream-sync/2026-08-06T11-45-10
Draft

upstream-sync: v0.7.32 → stack tip (2026-08-06-4)#688
utcarshsrivastava-collab wants to merge 78 commits into
upstream-sync/2026-08-06T11-28-59from
upstream-sync/2026-08-06T11-45-10

Conversation

@utcarshsrivastava-collab

@utcarshsrivastava-collab utcarshsrivastava-collab commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Upstream sync — 2026-08-06-4

Merges simstudioai/sim@9d23e25c into upstream-sync/2026-08-06T11-28-59.

Sync range: 63 commit(s) since e01bfb14 (lastSyncedUpstreamSha).

Stack

# Release PR Branch Status
1 unknown #681 upstream-sync/2026-08-05T10-46-19 open
2 v0.7.30 #685 upstream-sync/2026-08-06T10-38-40 open
3 v0.7.31 #687 upstream-sync/2026-08-06T11-28-59 open
4 v0.7.32 #688 ← tip upstream-sync/2026-08-06T11-45-10 open

Tip-only landing: merge the tip PR into the target branch, then close lower stack PRs as superseded.

Ledger

Verification

bun run check · ⚠️ bun run lint

Check / lint are advisory. Test and full build are left to CI.

Advisory verification failed (check/lint). These do not block the sync. bun run test and full bun run build are left to CI. Review and fix on the draft PR as needed.

bun run check

✅ passed

$ turbo run format:check

   • Packages in scope: @sim/audit, @sim/auth, @sim/db, @sim/emcn, @sim/logger, @sim/pii, @sim/platform-authz, @sim/realtime, @sim/realtime-protocol, @sim/runtime-secrets, @sim/security, @sim/testing, @sim/tsconfig, @sim/utils, @sim/workflow-persistence, @sim/workflow-renderer, @sim/workflow-types, docs, sim, simstudio, simstudio-ts-sdk
   • Running format:check in 21 packages
   • Remote caching disabled

::group::@sim/auth:format:check
cache miss, executing 7b95f933c974b740
$ biome format .
Checked 3 files in 20ms. No fixes applied.
::endgroup::
::group::@sim/runtime-secrets:format:check
cache miss, executing 54427b0fcf80d46c
$ biome format .
Checked 5 files in 26ms. No fixes applied.
::endgroup::
::group::@sim/workflow-types:format:check
cache miss, executing d343ec897a7b120b
$ biome format .
Checked 4 files in 28ms. No fixes applied.
::endgroup::
::group::@sim/logger:format:check
cache miss, executing d07801b30193037f
$ biome format .
Checked 6 files in 79ms. No fixes applied.
::endgroup::
::group::simstudio-ts-sdk:format:check
cache miss, executing e723f477a2f513f3
$ biome format .
Checked 6 files in 85ms. No fixes applied.
::endgroup::
::group::@sim/utils:format:check
cache miss, executing 251fb15243601532
$ biome format .
Checked 22 files in 145ms. No fixes applied.
::endgroup::
::group::@sim/workflow-renderer:format:check
cache miss, executing 1549899c6299c617
$ biome format .
Checked 13 files in 92ms. No fixes applied.
::endgroup::
::group::@sim/security:format:check
cache miss, executing fc2410243714aad2
$ biome format .
Checked 13 files in 80ms. No fixes applied.
::endgroup::
::group::@sim/realtime-protocol:format:check
cache miss, executing 11ef7410ee5e5d5c
$ biome format .
Checked 5 files in 50ms. No fixes applied.
::endgroup::
::group::@sim/audit:format:check
cache miss, executing 435b10fd6837457b
$ biome format .
Checked 7 files in 63ms. No fixes applied.
::endgroup::
::group::simstudio:format:check
cache miss, executing db88

bun run lint

❌ failed (advisory)

$ turbo run lint

   • Packages in scope: @sim/audit, @sim/auth, @sim/db, @sim/emcn, @sim/logger, @sim/pii, @sim/platform-authz, @sim/realtime, @sim/realtime-protocol, @sim/runtime-secrets, @sim/security, @sim/testing, @sim/tsconfig, @sim/utils, @sim/workflow-persistence, @sim/workflow-renderer, @sim/workflow-types, docs, sim, simstudio, simstudio-ts-sdk
   • Running lint in 21 packages
   • Remote caching disabled

::group::@sim/realtime-protocol:lint
cache miss, executing 0122da9ed0cc036d
$ biome check --write --unsafe .
Checked 5 files in 120ms. No fixes applied.
::endgroup::
::group::@sim/logger:lint
cache miss, executing 101959f903fffb42
$ biome check --write --unsafe .
Checked 6 files in 112ms. No fixes applied.
::endgroup::
::group::@sim/workflow-types:lint
cache miss, executing c5a2ba3ebbfce6a3
$ biome check --write --unsafe .
Checked 4 files in 163ms. No fixes applied.
::endgroup::
::group::@sim/security:lint
cache miss, executing f0d899d639617b3d
$ biome check --write --unsafe .
Checked 13 files in 176ms. No fixes applied.
::endgroup::
::group::simstudio-ts-sdk:lint
cache miss, executing c86521201f82f1d8
$ biome check --write --unsafe .
Checked 6 files in 192ms. No fixes applied.
::endgroup::
::group::simstudio:lint
cache miss, executing 3b3448794fd8d67a
$ biome check --write --unsafe .
Checked 3 files in 92ms. No fixes applied.
::endgroup::
::group::@sim/workflow-renderer:lint
cache miss, executing 3895d439ec117e5e
$ biome check --write --unsafe .
Checked 13 files in 244ms. No fixes applied.
::endgroup::
::group::@sim/utils:lint
cache miss, executing 07ed1635ff1bad02
$ biome check --write --unsafe .
Checked 22 files in 380ms. No fixes applied.
::endgroup::
::group::@sim/runtime-secrets:lint
cache miss, executing 0affd3cfd3a3ca22
$ biome check --write --unsafe .
Checked 5 files in 61ms. No fixes applied.
::endgroup::
::group::@sim/audit:lint
cache miss, executing 0e25910844616bd8
$ biome check --write --unsafe .
Checked 7 files in 93ms. No fixes applied.
::endgroup::
::group::@sim/workflow-persistence:lint
cache miss, executing f3730e51f89e45a6
$ biome check --write --unsafe .
Checked 8 files in 139ms. No fixes applied.
::endgroup::
::group::@sim/auth:lint
cache miss, executing 02df1474afbb34a0
$ biome check --write --unsafe .
Checked 3 files in 20ms. No fixes applied.
::endgroup::
::group::@sim/platform-authz:lint
cache miss, executing 4f39de7b3ecdf1da
$ biome check --write --unsafe .
Checked 5 files in 161ms. No fixes applied.
::endgroup::
::group::@sim/testing:lint
cache miss, executing 6cdddbcf81d19fe6
$ biome check --write --unsafe .
Checked 66 files in 757ms. No fixes applied.
::endgroup::
::group::@sim/realtime:lint
cache miss, executing f53f222c15364560
$ biome check --write --unsafe .
Checked 32 files in 728ms. No fixes applied.
::endgroup::
::group::@sim/emcn:lint
cache miss, executing 8506276f7e575b4b
$ biome check --write --unsafe .
Checked 189 files in 1672ms. No fixes applied.
::endgroup::
::group::docs:lint
cache miss, executing cff3443f10c469da
$ biome check --write --unsafe .
Checked 102 files in 1758ms. No fixes applied.
::endgroup::
::group::@sim/db:lint
cache miss, executing bc281dada2b3f06d
$ biome check --write --unsafe .
Checked 289 files in 7s. No fixes applied.
::endgroup::
�[;31msim:lint�[;0m
cache miss, executing b0d35d5814deac49
$ biome check --write --unsafe .
app/workspace/[workspaceId]/home/components/message-content/components/special-tags/choice-blocks.ts:56:7 lint/suspicious/noShadowRestrictedNames ━━━━━━━━━━

  × Do not shadow the global "escape" property.
  
    54 │   let depth = 0
    55 │   let inString = false
  > 56 │   let escape = false
       │       ^^^^^^
    57 │ 
    58 │   for (let i = startIdx; i < text.length; i++) {
  
  i Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.
  

Checked 11755 files in 38s. Fixed 10 files.
Found 1 error.
check ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Some errors were emitted while running checks.
  

error: script "lint" exited with code 1
::error::sim#lint: command (/home/runner/work/p2-sim/p2-sim/apps/sim) /home/runner/.bun/bin/bun run lint exited (1)
 ERROR  sim#lint: command (/home/runner/work/p2-sim/p2-sim/apps/sim) /home/runner/.bun/bin/bun run lint exited (1)

 Tasks:    18 successful, 19 total
Cached:    0 cached, 19 total
  Time:    39.467s 
Failed:    sim#lint

 ERROR  run failed: command  exited (1)
error: script "lint" exited with code 1

Agent usage

Usage (stack rollup)

  • This slice: $7.2304 · 158,243,949 in / 567,986 out · 13 agent(s)
  • Prior stack: $11.0784 · 29,099,908 in / 219,744 out · 11 agent(s)
  • Whole stack: $18.3088 · 187,343,857 in / 787,730 out · 24 agent(s)

parent-finalize-plan

  • Model: claude-opus-5
  • Iterations: 1
  • Input tokens (direct): 11,885
  • Input tokens (cache read): 2,187,212
  • Input tokens (cache create): 124,597
  • Input tokens (total): 2,323,694
  • Output tokens: 34,427
  • Cost: $2.796648 (provider-reported)

child-schema-migrations

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 104,455
  • Input tokens (cache read): 1,744,633
  • Input tokens (cache create): 0
  • Input tokens (total): 1,849,088
  • Output tokens: 12,559
  • Cost: $0.070854 (estimated fallback)

child-billing-attribution-core

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 944,780
  • Input tokens (cache read): 46,396,034
  • Input tokens (cache create): 0
  • Input tokens (total): 47,340,814
  • Output tokens: 117,837
  • Cost: $1.258281 (estimated fallback)

child-copilot-mothership-billing

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 268,715
  • Input tokens (cache read): 15,187,247
  • Input tokens (cache create): 0
  • Input tokens (total): 15,455,962
  • Output tokens: 48,301
  • Cost: $0.415449 (estimated fallback)

child-settings-ia

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 408,553
  • Input tokens (cache read): 16,071,433
  • Input tokens (cache create): 0
  • Input tokens (total): 16,479,986
  • Output tokens: 74,965
  • Cost: $0.493097 (estimated fallback)

child-chat-ui-arena

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 405,439
  • Input tokens (cache read): 13,999,511
  • Input tokens (cache create): 0
  • Input tokens (total): 14,404,950
  • Output tokens: 53,271
  • Cost: $0.425003 (estimated fallback)

child-oauth-credentials

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 144,142
  • Input tokens (cache read): 5,270,913
  • Input tokens (cache create): 0
  • Input tokens (total): 5,415,055
  • Output tokens: 23,109
  • Cost: $0.161977 (estimated fallback)

child-integrations-registry

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 136,242
  • Input tokens (cache read): 3,231,774
  • Input tokens (cache create): 0
  • Input tokens (total): 3,368,016
  • Output tokens: 25,631
  • Cost: $0.122641 (estimated fallback)

child-landing-branding

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 215,285
  • Input tokens (cache read): 8,457,778
  • Input tokens (cache create): 0
  • Input tokens (total): 8,673,063
  • Output tokens: 33,200
  • Cost: $0.252053 (estimated fallback)

child-config-env

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 104,391
  • Input tokens (cache read): 2,190,689
  • Input tokens (cache create): 0
  • Input tokens (total): 2,295,080
  • Output tokens: 14,527
  • Cost: $0.082124 (estimated fallback)

child-uploads-editor

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 253,439
  • Input tokens (cache read): 12,517,285
  • Input tokens (cache create): 0
  • Input tokens (total): 12,770,724
  • Output tokens: 42,085
  • Cost: $0.351536 (estimated fallback)

child-workspace-views-urlstate

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 164,018
  • Input tokens (cache read): 4,552,389
  • Input tokens (cache create): 0
  • Input tokens (total): 4,716,407
  • Output tokens: 24,013
  • Cost: $0.152667 (estimated fallback)

child-finalize-merge

  • Model: gpt-5.6-luna
  • Iterations: 1
  • Input tokens (direct): 601,064
  • Input tokens (cache read): 22,550,046
  • Input tokens (cache create): 0
  • Input tokens (total): 23,151,110
  • Output tokens: 64,061
  • Cost: $0.648087 (estimated fallback)

Totals

  • Total input tokens: 158,243,949
  • Total output tokens: 567,986
  • Primary models: claude-opus-5, gpt-5.6-luna
  • Total cost: $7.230417
  • Provider-reported cost: $2.796648
  • Estimated cost (fallback): $4.433769

Cost by agent

  • parent-finalize-plan: $2.796648 (provider-reported)
  • child-schema-migrations: $0.070854 (estimated fallback)
  • child-billing-attribution-core: $1.258281 (estimated fallback)
  • child-copilot-mothership-billing: $0.415449 (estimated fallback)
  • child-settings-ia: $0.493097 (estimated fallback)
  • child-chat-ui-arena: $0.425003 (estimated fallback)
  • child-oauth-credentials: $0.161977 (estimated fallback)
  • child-integrations-registry: $0.122641 (estimated fallback)
  • child-landing-branding: $0.252053 (estimated fallback)
  • child-config-env: $0.082124 (estimated fallback)
  • child-uploads-editor: $0.351536 (estimated fallback)
  • child-workspace-views-urlstate: $0.152667 (estimated fallback)
  • child-finalize-merge: $0.648087 (estimated fallback)

Draft — tip-only landing: merge this tip into the target branch, then close lower stack PRs as superseded.

waleedlatif1 and others added 30 commits July 12, 2026 12:42
…oads all skills (simstudioai#5627)

* v0.6.29: login improvements, posthog telemetry (simstudioai#4026)

* feat(posthog): Add tracking on mothership abort (simstudioai#4023)

Co-authored-by: Theodore Li <theo@sim.ai>

* fix(login): fix captcha headers for manual login  (simstudioai#4025)

* fix(signup): fix turnstile key loading

* fix(login): fix captcha header passing

* Catch user already exists, remove login form captcha

* fix: quote argument-hint YAML values so Copilot CLI ≥1.0.65 loads all skills

`argument-hint: [foo]` YAML-parses as a flow sequence (array), not a
string. Downstream slash-command loaders that validate `argument-hint`
as a string — notably GitHub Copilot CLI ≥ 1.0.65 — silently reject
the skill on load, and the command disappears from the CLI menu.

Wrap the value in double quotes so it parses as a string. No behaviour
change on Claude Code.

---------

Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: Theodore Li <theodoreqili@gmail.com>
Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Theodore Li <theo@sim.ai>
…studioai#5545)

* fix(invites): preserve active organization for external access

Keep organization activation server-owned so failed membership checks cannot clear a valid session context.

* feat(admin, billing, settings): cleanup settings visibility, billing actor resolution, new admin routes

* address comments

* chore(db): reset pending migrations before staging merge

Remove locally generated migrations so they can be regenerated against the latest staging schema without preserving stale snapshots or numbering.

* regen migrations

* address comments

* chore(db): reset generated migrations before staging merge

Remove this branch's generated migrations so they can be regenerated against the latest staging schema with fresh numbering.

* upgrade global work

* fix lint

* address comments

* legacy callbacks correctness

* address comments

* update

* guardrail attribution
…i#5630)

* fix(docs): fix Core Web Vitals regressions on docs.sim.ai

Empirically measured under real trace-based (devtools) CPU/network
throttling against the live site: mobile Performance 59, LCP 9.2s
(TTFB 745ms + 8.4s element render delay).

- sidebar-components.tsx / [lang]/layout.tsx: the docs sidebar renders
  every page in the doc tree as a link at once. Next's default
  viewport-prefetch fired an RSC payload fetch for every one of them on
  initial load - dozens of concurrent requests competing with the page's
  own content for bandwidth. Wired fumadocs' documented `sidebar.prefetch`
  option through to the custom SidebarItem/SidebarFolder components (which
  were bypassing it entirely, using next/link directly with no prefetch
  prop) via the `useSidebar()` context hook.
- video.tsx: `autoPlay` forces browsers to fetch the full video file
  immediately on mount regardless of `preload`. Gated actual src loading
  behind an IntersectionObserver so a page with several of these doesn't
  pull down every video up front (5MB across 3 requests, in this case).
  Single shared component - fixes every doc page that embeds one.
- proxy.ts: the i18n middleware matcher excluded favicon/robots.txt/etc
  but not `icon.svg`, so every request for it got routed through i18n
  negotiation instead of served as a static file, 404ing in production.
- next.config.ts: enable productionBrowserSourceMaps - safe since this
  repo's source is already fully public, real debuggability benefit,
  zero performance cost.
- shiki 4.0.0 -> 4.3.1 (verified: syntax highlighting still renders
  correctly). Attempted a coordinated fumadocs-core/ui/mdx/openapi
  upgrade to latest; fumadocs-openapi's v11 factory function became
  client-only (breaking change beyond its declared peer deps, requiring
  a component-boundary restructure), so only the safe, verified,
  docs-exclusive bumps (fumadocs-core/ui/mdx, shiki) are included here -
  the openapi major bump needs its own dedicated migration PR.

Verified via a real production build (dummy env, all 3974 pages
including API reference render/build cleanly) and a clean (non-stale)
local server: Performance 59 -> 71 measured under real devtools
throttling, RSC prefetch requests 63 -> 11, video requests/bytes 3/5MB
-> 0. A pre-existing React hydration warning (#418) was found and
confirmed present on live production before any of these changes,
unrelated to this diff - documented, not blocking.

* fix(docs): fall back to eager video loading without IntersectionObserver

The lazy-load gate from the previous commit threw before isInView could
ever become true in environments lacking IntersectionObserver (older
browsers, some embedded webviews), leaving videos permanently
source-less instead of falling back to eager loading.

* chore(docs): drop non-TSDoc inline comments

Repo convention is TSDoc-only, no plain // comments.

* fix(docs): accessibility and SEO defects across the docs app

Audited with parallel subagents against the accessibility and SEO skill
checklists, each fix verified by reading the actual code (not assumed):

Accessibility:
- lightbox.tsx: focus was never captured/restored on close, and Tab
  escaped the modal to the page behind it (no focus trap on the single
  focusable element)
- heading.tsx: the per-heading copy-link icon only appeared on hover,
  invisible to keyboard-only navigation (added peer-focus-visible)
- navbar.tsx: active nav tab had no aria-current
- response-section.tsx: the status-code dropdown had no
  aria-haspopup/aria-expanded/role, and no Escape-to-close
- workflow-preview.tsx: same focus-trap gap as lightbox.tsx on the
  expanded-canvas modal

SEO:
- page.tsx: generateMetadata's hreflang/canonical URLs used a naive
  String.replace to strip the locale prefix, which also matched "/en"
  inside unrelated slugs (platform/enterprise, integrations/enrich,
  platform/self-hosting/environment-variables), corrupting those pages'
  canonical and alternate-language URLs. Replaced with a prefix-only strip.
- structured-data.tsx: the SoftwareApplication JSON-LD block compared
  url === baseUrl (no trailing slash) against the homepage's actual url
  (always has a trailing slash), so the condition was always false and
  this structured data never rendered anywhere, including the homepage.
- structured-data.tsx: "Mothership" in the indexed featureList violated
  the constitution's required language (the agent is "Sim", the surface
  is "Chat") - this ships in JSON-LD search engines parse.

* fix(docs): defer the Ask Sim chat widget's heavy deps until opened

The chat panel (useChat from @ai-sdk/react, Streamdown + its CSS) was
mounted unconditionally in the root layout on every single page, so
its full weight loaded and executed even though the widget starts
closed on every page view.

Traced via the LCP breakdown insight under real devtools CPU/network
throttling: the LCP text element (the intro paragraph) had a ~8s
element render delay despite a ~13ms TTFB, and bootup-time attributed
~4.3s of scripting time to a single chunk containing React/ReactDOM's
own runtime plus this widget's eagerly-bundled dependencies.

Split into a lightweight ask-ai.tsx (just the toggle button + open
state) and ask-ai-panel.tsx (the actual chat UI, useChat, Streamdown),
loaded via next/dynamic(..., { ssr: false }) only when the user opens
the widget. Verified: the panel's chunk now has zero network requests
on initial page load.

Measured (mobile, devtools throttling, /introduction):
- Performance: 69 -> 75
- LCP: 8.0s -> 6.4s
- TBT: 260ms -> 130ms

The remaining ~6.4s LCP delay traces to the same shared chunk, now
identified as core React/ReactDOM hydration cost for this page's
sidebar/TOC/breadcrumb tree rather than an isolated bug - a real,
larger initiative (hydration architecture, not a surgical fix),
documented here rather than rushed.

* fix(docs): preserve Ask Sim chat state across close/reopen

The panel split unmounted AskAIPanel entirely on close, discarding
useChat's message state - reopening always started an empty
conversation, unlike the original single-component layout where
useChat lived in a component that never unmounted.

Fixed by keeping the panel mounted (via a hasOpened flag that never
resets) once first opened, and having the panel itself return null
when closed rather than being conditionally removed from the tree by
its parent - hooks still run every render, so useChat's state persists
across visibility toggles. The dynamic import still only fires on the
first open, so the initial-load win is unchanged.

Verified via a real click-through (open, type, close, reopen): input
persists correctly, and the panel chunk still has zero network
requests on initial page load. Performance unchanged at 75.

* chore(docs): lint fixes (import order, formatting)

* fix(docs): fill the Ask Sim UI gap while the panel chunk loads

handleOpen set open=true synchronously, hiding the trigger button
before the dynamically imported panel had a chance to render anything
(next/dynamic renders null by default with no loading option) - on a
slow connection neither the button nor the panel was visible.

Added a loading fallback in the same fixed position so there's no gap
between the button disappearing and the real panel appearing.
…ge (simstudioai#5636)

Google Search Console flagged every /models/{provider}/{model}/opengraph-image
and /integrations/{slug}/opengraph-image URL as 404 (~230 pages total: 5
sample model pages plus ~130 more models, plus every integration).

Root cause: the sibling page.tsx for each of these routes sets
`dynamicParams = false`, a segment-level restriction that also blocks
the metadata route (opengraph-image.tsx) from rendering any param
combination it wasn't statically told about - but Next does not share
generateStaticParams between a page and its sibling metadata routes.
Since none of the three opengraph-image.tsx files exported their own
generateStaticParams, every param was "unknown" to that restriction and
404d, for every single model and integration.

Added a matching generateStaticParams to all three files, mirroring
each route's own page.tsx.

Note: the exact URLs in the audit report (bare /opengraph-image, no
suffix) aren't the real ones - Next serves these at a build-generated
hash suffix (e.g. /opengraph-image-15dal5?<hash>), which is what's
actually embedded in each page's <meta property="og:image"> tag. The
underlying bug the report surfaced is real regardless; verified by
requesting the actual hash-suffixed URL each page embeds (previously
404, now 200) for both a model and an integration page, on a real
production build.
…ison pages (simstudioai#5634)

* fix(landing): fix oversized HTML and severe LCP on integration/comparison pages

Google Search Console flagged /integrations, /integrations/slack, and
several others for exceeding Googlebot's 2MB uncompressed-HTML crawl
limit, plus severe LCP on /integrations, /integrations/slack,
/integrations/hubspot, /comparison/flowise, and /integrations/hugging-face.

Root cause 1 - /integrations/slack was 5.2MB (measured on production).
The "Agent templates" section renders every template matching
getTemplatesForBlock(type) with no cap - Slack is referenced as
alsoIntegrations in 445 templates (vs 52-126 for Salesforce/Gmail/
HubSpot), so its detail page embedded hundreds of full template cards
in the initial HTML/RSC payload. Capped to 12, consistent with the
same file's existing related-integrations cap of 4.

Root cause 2 - /integrations was 1.83MB, right at the limit. The client
IntegrationGrid component receives the full Integration[] as props
(needed for instant client-side search), which serializes every
integration's complete operations/triggers arrays - including full
per-operation description sentences - into the initial payload purely
to build a search index. Added IntegrationSummary + toIntegrationSummary
(lib/integrations): the same searchable surface (name, description,
operation names, trigger names) precomputed server-side into one
lowercased string, dropping the full operations/triggers data the
client never actually renders. Measured: 627KB -> 142KB of embedded
integration data (77% reduction).

Verified via a real production build + curl:
- /integrations: 1.83MB -> 1.31MB
- /integrations/slack: 5.2MB -> 355KB (93% reduction)
- /integrations/hubspot: 901KB -> 452KB

Verified via Lighthouse (mobile, devtools throttling, matching what
real users on a typical device experience) against both live production
and the fixed local build:
- /integrations: 47 -> 96 (LCP unmeasured->2.1s, TBT 2,770ms->110ms)
- /integrations/slack: 47 -> 96 (LCP 9.7s -> 1.9s)
- /integrations/hubspot: 72 -> 97 (LCP 9.1s -> 1.9s)
- /integrations/hugging-face: 72 -> 95 (LCP 9.2s -> 2.3s, reproduced
  twice on production before fixing - not a fluke)
- /comparison/flowise: 71 -> 95 (LCP 9.8s -> 2.1s)

The last two aren't Slack-style template-count outliers (4 and 0
alsoIntegrations references respectively) - shrinking the shared
IntegrationGrid client bundle appears to have reduced a shared chunk
loaded broadly across landing pages, benefiting pages beyond the ones
directly touched.

Also checked and confirmed already healthy, no action needed:
/integrations/salesforce, /integrations/gmail, /integrations/amazon-dynamodb,
/comparison/tines, /models/xai/grok-4-20-multi-agent-0309.

* fix(landing): restore full-fidelity search and template priority

Two real regressions from the previous commit, both confirmed by
Greptile and Cursor Bugbot independently:

- lib/integrations: IntegrationSummary.searchText joined every field
  into one string, so (a) it dropped operation/trigger descriptions
  entirely (a search for API-specific terms that only appear in an
  operation's description, not its name, silently stopped matching),
  and (b) a single joined string lets a query span a field boundary
  (e.g. matching across the tail of a name and the head of the next
  field) that the original per-field search never allowed. Reverted to
  a searchFields array - same content as the original per-field index
  (name, description, every operation's name+description, every
  trigger's name), just precomputed server-side instead of shipping
  the full Integration objects. Grid filtering goes back to
  `.some(field => field.includes(q))`, matching the exact original
  matching semantics.
- blocks/registry.ts + integrations/[slug]/page.tsx: capping
  getTemplatesForBlock's result with a plain .slice(0, 12) kept
  whatever 12 templates happened to iterate first in registry
  insertion order - for a high-connectivity integration like Slack,
  that can be entirely alsoIntegrations matches from unrelated blocks,
  silently dropping the integration's own owned templates and any
  marked featured. Added an explicit isOwner flag to
  ScopedBlockTemplate (the registry function already computes this
  internally, just wasn't surfacing it) and sort owner-first,
  featured-second before slicing.

* fix(landing): sort featured templates ahead of owned, not just as a tiebreaker

The previous sort (owner-first, featured as a tiebreaker within each
owner tier) meant an integration with 12+ owned templates filled the
entire cap with non-featured owned templates before any featured
related template (reached via alsoIntegrations) was ever considered -
Slack hits this case. Swapped the sort so featured (owned or related)
ranks first, then owned-but-not-featured, so a curated featured
template can no longer be sliced away by a pile of ordinary owned ones.
…-source AI agent platform listings (simstudioai#5633)

* feat(library): add n8n alternatives, LangGraph alternatives, and open-source AI agent platform listings

* fix(content): declare actual OG image dimensions instead of hardcoded 1200x630
…ioai#5632)

* feat(gong): align tools with official API spec, add ask-anything, brief, unassign, and logs tools

- fix gong_list_flows: query param was flowEmailOwner (typo copied from Gong's endpoint prose); the API requires flowOwnerEmail, so every call failed
- create_call: drop phantom url output (API returns only requestId/callId) and make downloadMediaUrl optional per spec
- list_scorecards: refresh to current spec (numeric IDs, questionType/answerGuide/minRange/maxRange/answerOptions, reviewMethod)
- answered_scorecards: map selectedOptions on answers, correct score range description (1-50)
- surface requestId uniformly across all read tools; totalRecords no longer fabricated from page size
- normalize includeAvatars to a strict boolean param, uppercase aggregationPeriod, encode userId path param
- validate email/phone format before irreversible GDPR purge calls
- new tools: gong_ask_anything, gong_get_brief (AI entity Q&A/briefs), gong_unassign_flow_prospects, gong_get_logs

* fix(gong): require custom-range dates and gate param remapping by operation

- ask_anything/get_brief: entityFromDateTime/entityToDateTime now conditionally required (UI) and validated tool-side when timePeriod is CUSTOM_RANGE
- block params mapper: remaps are gated by the selected operation so stale values from previously configured operations can no longer overwrite fromDateTime/fromDate/workspaceId

* fix(gong): final spec-alignment pass, review fixes, and regenerated docs

- ask_anything/get_brief: send fromDateTime/toDateTime only for CUSTOM_RANGE; declare mcpResult brief section field
- unassign: dedicated optional unassignFlowId subblock so a stale assign-flow ID can never silently narrow an unassign to one flow
- get_logs: logType is a closed enum (AccessLog, UserActivityLog, UserCallPlay, ExternallySharedCallAccess, ExternallySharedCallPlay) - dropdown in block, enumerated in tool description
- get_folder_content: folderId optional per spec; get_call: encode callId path param
- list_trackers: drop saidInCallParts (absent from the spec's KeywordTracker schema)
- get_extensive_calls: correct declared interactionStats item shape to {name, value}
- block inputs: list all remapped subblock params; optional flags on nullable outputs; absolute types re-export
- regenerate Gong integration docs and integrations.json entries (29 operations)
…sting JSON-LD, fix TechArticle rich-result eligibility (simstudioai#5638)

* fix(landing): complete Organization schema, add CollectionPage/BlogPosting JSON-LD, fix TechArticle rich-result eligibility

- Organization schema (site-structured-data.tsx): add brand and
  contactPoint.url (verified against the real /contact route); all other
  fields were already correct and verified against the Footer's sameAs
  links. foundingDate/legalName/address omitted — not verifiable from
  anything in this repo.
- CollectionPage (blog + library index): buildCollectionPageJsonLd now
  takes the real posts list (same getAllPostMeta() the index page already
  renders from) and emits a mainEntity ItemList of BlogPosting stubs
  instead of omitting mainEntity entirely.
- BlogPosting + TechArticle (post detail template): Google's Article
  rich-result eligibility only recognizes Article/NewsArticle/BlogPosting
  — a bare TechArticle type isn't in that allowlist. buildArticleJsonLd
  now emits a multi-type @type array (["BlogPosting","TechArticle"]) for
  genuinely technical posts, and "BlogPosting" alone for posts that are
  general announcements, via a new `technical` frontmatter flag (defaults
  true; set to false on the series-a funding-announcement post, the one
  post with no technical content). Also fixed a real markup/schema
  mismatch: the article's `speakable.cssSelector` referenced
  `[itemprop="description"]`, but no element carried that itemProp —
  added it to the description paragraph. TechArticle/BlogPosting image
  URLs are now made absolute (previously relative paths, invalid for
  crawlers).
- FAQPage: audited every LandingFAQ usage (/models, /models/[provider],
  /models/[provider]/[model], /integrations, /integrations/[slug],
  /comparison, /comparison/[provider]) — all already emit matching
  FAQPage JSON-LD sourced from the same data passed to LandingFAQ; no
  gaps found, no changes needed.

* fix(landing): match microdata itemType and scope collection JSON-LD to visible posts

Address Greptile/Cursor review on PR simstudioai#5638:
- itemType now always resolves to BlogPosting (matching Greptile's exact
  suggested fix), since the JSON-LD graph already carries the richer
  TechArticle type via a multi-type array and the microdata path doesn't
  need to duplicate that distinction
- buildCollectionPageJsonLd now receives the same tag-filtered/paginated
  post subset ContentIndexPage actually renders, instead of the full
  unfiltered catalog, via a new shared selectVisiblePosts/paginateContentPosts
  helper in lib/content/index-list.ts (also de-duplicates the pagination
  logic that previously lived only in ContentIndexPage)

* fix(landing): match CollectionPage ItemList order and url to the visible filtered/paginated variant

Address round-2 Cursor Bugbot findings on PR simstudioai#5638:
- buildCollectionPageJsonLd no longer re-sorts the given posts by date -
  ordering is now solely owned by the caller (selectVisiblePosts), so
  featured-row-first render order matches ItemList position order
- buildCollectionPageJsonLd now takes an optional {tag, page} filter
  descriptor and reflects it in the emitted url, instead of always
  pointing at the bare section index regardless of which filtered/
  paginated variant's posts are actually listed in mainEntity
…imstudioai#5637)

* feat(buffer): add Buffer integration with posts, channels, and ideas

* fix(buffer): return clear tool error when account lookup yields no account

* fix(buffer): default schedulingType server-side so basic-mode blocks never fail validation

* fix(buffer): probe Content-Type for extensionless media URLs so videos are not sent as images

* feat(buffer): add get_ideas and get_idea_groups tools, harden media URL classification

* fix(buffer): guard missing post on PostActionSuccess responses
…docs (simstudioai#5641)

* feat(flint): add Flint integration with agent task tools, block, and docs

* fix(flint): forward explicit publish=false, guard missing taskId, align default params branch with tool fallback

* docs(flint): add manual intro section to integration docs page

* fix(flint): fail get_task on OK responses without a task ID

* fix(flint): drop json-object generation type so the wand emits the pages array
…oai#5640)

* improvement(concurrency): limits configurable, docs updates

* remove dead tests

* limits self hosted vars
…on ambiguous media (simstudioai#5642)

* improvement(buffer): explicit mediaType override; error instead of guessing on ambiguous media

* fix(buffer): forward validated mediaType from routes into the media resolver

* fix(buffer): presign uploaded media for 7 days — Buffer fetches assets at publish time

* docs(buffer): document presign lifetime bound by signing credentials

* fix(buffer): always mint fresh presigned URLs from verified storage keys for media
…te, and address (simstudioai#5644)

Adds the three fields intentionally omitted from simstudioai#5638 pending real values:
- legalName: 'Sim, Inc' - matches the entity named throughout the Terms of
  Service (apps/sim/app/(landing)/terms)
- foundingDate: '2025'
- address: real registered office (80 Langton St, San Francisco, CA 94103)
…eaming (simstudioai#5639)

* fix(mothership): keep scroll position when user scrolls up during streaming

* chore(mothership): trim scroll fix comments
…l prefix (simstudioai#5607)

* feat(byok): migrate agent/router/evaluator LLM keys to BYOK by model prefix

* fix(script): address review — cover translate/guardrails, trim provider ids, reject mixed mapping, add key-prefix guard

* fix(script): include pi block in LLM-family set, trim key-prefix value

* fix(script): add router_v2 to LLM-family set, canonicalize provider ids to lowercase

* fix(script): resolve overlapping model prefixes deterministically (longest match wins)
…claude/.cursor projections (simstudioai#5609)

* improvement(cleanup-skill): parallelize analysis, apply fixes sequentially

* improvement(cleanup-skill): add comment-reduction pass; mirror 6 missing skills into .claude/commands

* fix(cleanup-skill): substitute parsed scope into analysis passes instead of literal <scope>

* fix(cleanup-skill): parse fix token anywhere; preserve pass labels through convergence for ordered apply

* fix(cleanup-skill): apply Step 1 proposals content-anchored, re-derive when a prior pass invalidated the snippet

* fix(babysit-skill): correct garbled --reverse explanation across all three copies

* fix(skills): propagate parallel cleanup to cursor/agents copies; disambiguate babysit /ship refs in claude copy

* fix(skills): port url-state + comment passes to cursor/agents; clarify converge pass-label ordering

* feat(skills): canonicalize skills under .agents/skills with generated .claude/.cursor projections

Establish .agents/skills/<name>/SKILL.md as the single source of truth (latest
content reconciled per skill from the three drifted copies), and generate the
.claude/commands and .cursor/commands projections from it via scripts/sync-skills.ts.
Adds skills:sync/skills:check, a CI gate, a pre-commit regen hook, and CONTRIBUTING docs.
Structurally fixes prior drift (e.g. abbreviated .claude ship -> full ship).

* fix(skills): strip leaked XML tags from skill tails; clarify lint:check has no per-file target

Removes stray </content>/</invoke> markup that leaked into add-block,
add-connector, add-hosted-key canonical skills, and reword the cleanup
skill's lint step to note bun run lint:check runs repo-wide via turbo
(no per-path API). Projections regenerated via skills:sync.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QjefwescJoHZ6zcc3C17FR

* fix(add-block-skill): restore unknown-output stop in Final Validation

Re-add the "if any tool outputs are still unknown, tell the user instead
of guessing block outputs" step that was dropped when Final Validation
step 5 became the BlockMeta template check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QjefwescJoHZ6zcc3C17FR

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…sistency (simstudioai#5651)

Aligns with the /integrations/[slug] convention (plural category, singular
item). Adds a 301 redirect (both the bare hub page and every competitor
detail page) so previously indexed URLs keep working, and updates every
internal reference: footer nav, sitemap generation, and all import
specifiers/canonical URLs/breadcrumb JSON-LD within the route itself.
… nuqs (simstudioai#5648)

* improvement(url-state): migrate list search/sort/filter view-state to nuqs

* fix(url-state): clear mcpServerId selection when the selected workflow MCP server is deleted

* fix(url-state): resolve-gated MCP server detail view + replace-on-close for detail back navigation

* fix(url-state): explicit Suspense boundary for account settings sections
waleedlatif1 and others added 12 commits July 14, 2026 23:35
…ious providers, library updates, platform and solutions pages
…fter impersonation (simstudioai#5688)

* fix(workspace): recover from stale sessions instead of blank loader after impersonation

* fix(workspace): gate stale-session recovery on auth state and surface failed sign-out

* fix(workspace): proceed with redirect when session query errors but cached identity exists
…pages (simstudioai#5689)

* improvement(landing): SEO copy and metadata rewrite across marketing pages

* improvement(landing): remove em dashes from marketing copy

* fix(landing): name Sim in the knowledge base H1
* feat(instagram): add Instagram Login OAuth, tools, and block

* feat(instagram): add Gmail-style media uploads for publish ops

Resolve UserFiles to Meta-fetchable presigned HTTPS URLs (600s TTL) via
internal publish routes, and fix OAuth scope storage plus connect-draft
wiring so Instagram Login publishing is testable end-to-end.

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

* refactor(instagram): simplify messaging tools to direct requests, clean up types

* fix(instagram): parallelize carousel child polling, enforce 2-10 items, extend poll window and insights periods, use canonical user_id in OAuth callback

* fix(instagram): resolve user id from user_id only, accept numeric user_id

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

* fix(instagram): use form/query params for publish and comment endpoints, request message timestamps explicitly

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

* fix(instagram): normalize Graph ID outputs to strings so downstream .trim() calls are safe

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

* style(instagram): use brand gradient tile for the block icon

Match the official Instagram look by filling the tile with the orange–pink–purple radial gradient so the white camera glyph sits on a full-bleed brand background.

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

* fix(instagram): tighten publish defaults and cloud-storage upload UX

Default Reel share-to-feed to Yes, drop unused media fields params, share publish transform helpers, and warn when cloud storage is missing for Meta-fetchable uploads.

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

* fix(instagram): fail closed when cloud storage status is unknown

Treat loading/error as blocked for requiresCloudStorage uploads, show the warning once the check finishes, and disable selecting local workspace files Meta cannot fetch.

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

* fix(instagram): proactively refresh long-lived tokens before expiry

Meta only allows refreshing still-valid Instagram tokens, so refresh within 14 days of expiry (after the 24h age gate) instead of waiting until after accessTokenExpiresAt.

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

* fix(oauth): restore TikTok clientIdParamName JSDoc after merge

The staging merge dropped the opening /** on ProviderAuthConfig.clientIdParamName, which broke TypeScript parse in CI.

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

* fix(api): Zod-contract storage-status and ratchet validation baseline

Wire /api/files/storage-status through a shared route contract so the
strict API validation audit stays at zero non-Zod routes after the new
Instagram cloud-storage check.

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

* fix(instagram): match Gmail advanced media placeholders

Drop public-URL paste hints from advanced fields and the cloud-storage banner so the UI mirrors Gmail attachments.

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

* code review + hide from toolbar

* address comments

* fix(instagram): drop hidden Instagram from OAuth catalog pin test

Instagram is hideFromToolbar so it is excluded from integrations.json;
the pinned slug map must not expect it until the block is visible again.

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

* fix(instagram): validate client ID before creating connect draft

Avoid orphan pending credential drafts when INSTAGRAM_CLIENT_ID is missing,
matching the Shopify authorize ordering.

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

---------

Co-authored-by: Bill Leoutsakos <billleoutsakos@Bills-MacBook-Pro.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai>
…studioai#5692)

* fix(auth): recover cleanly when an impersonation session expires

* fix(auth): share stale-session recovery and bypass cookie cache in impersonation poll
* fix(agent): pass through billing attribution to tools

* tests

* fix formatting

* address comments
@utcarshsrivastava-collab

Copy link
Copy Markdown
Collaborator Author

Open questions — upstream sync 2026-08-06-4 (v0.7.32 → v0.7.37, 63 commits)

Predicted merge: 93 conflicted files (git merge-tree tree 92ae4f94). I self-resolved
83 of them from merge-policy.json + the ledger (see ## Parent plan in run.md). The two
questions below are the only genuine fork-vs-upstream product calls — both are cases where
the fork and upstream independently built the same feature, so neither --ours nor
--theirs is obviously right and picking wrong silently changes who gets billed or
throttled on Arena.

Please answer with /upstream-sync resume plus Q1: <A|B|C> and Q2: <A|B|C> on this PR.


Q1 — Workflow-execution billing attribution: whose model wins?

Upstream #5545 / #5657 / #5698 rebuilt execution billing attribution
(BillingAttributionSnapshot, deriveBillingContext, ValidatedPreprocessContext,
workspace.billedAccountUserId, changeWorkspaceStoragePayerInTx).

The fork built its own attribution model over the same files, independently:
ExecutionActor / extractExecutionActor, billingUserId threading, and the
workflow_execution_logs_workspace_actor_user_idx index. These are fork-authored — zero
occurrences at the merge base and zero at upstream's tip.

Measured collision on the five core files (lib/logs/execution/logger.ts,
lib/billing/core/usage-log.ts, lib/billing/calculations/usage-monitor.ts,
lib/execution/preprocessing.ts, app/api/copilot/api-keys/validate/route.ts):

  • fork vs base: +1096 / −142
  • upstream vs base: +797 / −495

This decision governs roughly 22 conflicted files across lib/billing/**,
lib/logs/execution/**, background/*-execution.ts, executor/handlers/workflow/,
lib/workflows/executor/execute-workflow.ts and the execute/billing API routes.

Option What it means
A Fork-first Keep the fork's ExecutionActor attribution as the source of truth. Take upstream's new modules additively (so the tree compiles and the 0264 schema columns land) but do not rewire the logger/usage-log call sites. Lowest regression risk for existing Arena usage reporting; the fork keeps diverging and this cluster re-conflicts every sync.
B Upstream-first Adopt upstream's BillingAttributionSnapshot model end-to-end and retire ExecutionActor / extractExecutionActor / billingUserId. Cheapest future syncs. Risk: any Arena reporting that reads actorType / apiKeyId per-execution changes shape, and the workspace_actor_user_idx index loses its consumer.
C Hybrid Take upstream's attribution as the billing path and keep ExecutionActor purely as an observability field written alongside it (index retained, no billing decisions read from it). More work now, keeps both signals.

Please confirm alongside your answer: does anything outside this repo (a dashboard,
export, or client invoice job) read workflow_execution_logs.actor_user_id /
actor_type / api_key_id? If yes, B is off the table.


Q2 — Copilot / Mothership usage limits: fork gate or upstream attributed gate?

apps/sim/app/api/copilot/api-keys/validate/route.ts is the callback the Copilot/Mothership
backend hits before serving a request. Today the fork gates it with two fork-only
helpers in lib/billing/calculations/usage-monitor.ts:

  • checkSelfHostedMothershipUsageLimits(userId) — the !isHosted branch
  • checkMothershipUsageLimits(userId, workspaceId) — the hosted branch

Neither exists at the merge base or at upstream's tip. Upstream #5545 replaced its
equivalent with checkAttributedUsageLimits plus a header handshake
(billing-protocol-v1: x-billing-attribution, x-billing-request-id,
x-copilot-billing-protocol) and two new env flags:
COPILOT_BILLING_ATTRIBUTION_V1_ENABLED and COPILOT_BILLING_PROTOCOL_REQUIRED.

Governs ~10 conflicted files (app/api/copilot/api-keys/validate/**,
lib/copilot/request/**, lib/copilot/tools/handlers/**, app/api/mothership/execute/,
lib/billing/calculations/usage-monitor.*).

Note: the fork redefines isHosted (*.thearena.ai + localhost:3000), so the fork's
isHosted branch — not its self-hosted branch — is what actually runs on Arena production.

Option What it means
A Fork-first checkSelfHostedMothershipUsageLimits / checkMothershipUsageLimits stay as the governing check. Upstream's attribution modules are taken additively so everything compiles. No behaviour change on Arena.
B Upstream-first Adopt checkAttributedUsageLimits; delete both fork helpers and their tests. Arena copilot limits then follow upstream's workspace-payer pool semantics.
C Hybrid Fork check runs first, upstream's attributed check runs as a second gate. Strictest; double-gates.

Regardless of A/B/C I plan to leave COPILOT_BILLING_ATTRIBUTION_V1_ENABLED and
COPILOT_BILLING_PROTOCOL_REQUIRED unset
— the flags are default-off upstream and Arena's
copilot backend does not send the v1 markers. Say so if Arena's copilot deployment already
speaks billing-protocol-v1 and you want them on.


Context — what I did not ask about

For the record, these looked like questions and resolved cleanly from the codebase/ledger:

  • HubSpot (#5635) — additive on both sides; upstream's edits to shared tools are 2-line
    touch-ups. Union. Only the associations response type needs reconciling.
  • Landing / SEO rewrite — the fork already ships /comparison and /library, so
    Sim-branded marketing pages are an accepted class here. Fork-first on the four rebranded
    files only.
  • Settings IA refactor (#5545) — URLs are unchanged, upstream's unified navigation
    already declares mothership and recently-deleted, and the fork's own settings
    components don't conflict. Adopting it, re-applying the fork's suppressions.
  • Migration 0260 collision — mechanical: renumber upstream to 0264, keep the fork's
    journal and snapshot.
  • Execution timeouts / free-tier limits (#5640) — preserving the fork's 60000
    timeouts and rate-limit defaults as status quo. Flagged as a follow-up in run.md.
  • Email social links (#5653) — keeping the fork's suppression; upstream's
    !isWhitelabeled gate does not protect Arena.

@utcarshsrivastava-collab

Copy link
Copy Markdown
Collaborator Author

/upstream-sync resume

  1. Let us go with B - if all the features of A are already included there. If not, then lets go ahead with A only. workflow_execution_logs.actor_user_id / actor_type / api_key_id is not being called anywhere else.
  2. A - we'll go with this

@utcarshsrivastava-collab utcarshsrivastava-collab changed the title upstream-sync: v0.7.32…v0.7.37 → stack tip (2026-08-06-4) upstream-sync: v0.7.32 → stack tip (2026-08-06-4) Aug 6, 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.

7 participants