upstream-sync: v0.7.44…v0.7.49 → stack tip (2026-08-07) - #690
upstream-sync: v0.7.44…v0.7.49 → stack tip (2026-08-07)#690utcarshsrivastava-collab wants to merge 8 commits into
Conversation
Open questions — upstream sync 2026-08-07 (v0.7.44 → v0.7.49, 142 commits)Predicted merge: 89 conflicted files ( Please answer with Q1 — Workspace-creation policy: the fork's
|
| Option | What it means | |
|---|---|---|
| A | Fork-first | Keep the fork's is_personal policy verbatim, including the one-workspace-per-member cap. Take upstream's new modules additively so the tree compiles. No behaviour change on Arena; this cluster re-conflicts every sync. |
| B | Upstream-first | Adopt simstudioai#5918's policy end-to-end and retire the is_personal branch from the policy function. Plain Arena members can then create additional organization workspaces, which they currently cannot. Cheapest future syncs. The is_personal column stays in the schema (its other consumers keep working) but stops driving creation decisions. |
| C | Hybrid | Take upstream's policy structure (observedOrganizationId, the lock, the new return shape) but keep the fork's !isOrgAdmin && !isPersonal → 403 cap on top. Most work now; preserves the current member restriction while ending the structural divergence. |
Please confirm alongside your answer: is the one-workspace-per-plain-member cap a
deliberate Arena rule, or a side effect of the "personal workspace attaching to org" work?
If it is deliberate, B is off the table and C is the real choice.
Q2 — Upstream's join-time workspace sweep: keep it, or turn it off?
apps/sim/lib/invitations/ has never been touched by the fork, so #5918's sweep lands
whole through a clean auto-merge — no conflict markers, so no child agent would ever look at
it. It is a live behaviour change delivered by a merge that git reports as clean.
What it does: when a user accepts an organization invitation, every workspace they own is
swept into that organization — organizationId and billedAccountUserId are reassigned
inside the acceptance transaction. The invite page gains a disclosure notice listing the
workspaces that will move (lib/invitations/disclosure-copy.ts), and acceptance hard-fails
with disclosure-outdated if the set changed since the preview.
Why this needs a decision on Arena specifically: the fork already forces every workspace to
workspaceMode: ORGANIZATION, and Arena has a client-user model
(lib/users/is-client-user.ts, lib/workspaces/is-admin-workspace.ts,
app/api/client-channel-mapping/). A sweep that reassigns billedAccountUserId on a client's
workspaces changes who is billed and who can see them.
| Option | What it means | |
|---|---|---|
| A | Keep the sweep (recommended default) | Adopt simstudioai#5918 as upstream shipped it, disclosure notice included. Consistent with the fork already treating everything as an org workspace. Accepting an org invite will move an Arena user's existing workspaces under that org. |
| B | Disable the sweep | Take simstudioai#5918's invitation refactor for everything else but neutralise the workspace-migration step at accept time, so joining an org leaves existing workspaces where they are. Keeps today's Arena behaviour; a fork carve-out inside an actively developed upstream module, so it will need re-applying each sync. |
Please confirm alongside your answer: does anything outside this repo read
workspace.organization_id or workspace.billed_account_user_id for a client-facing report or
invoice? If yes, A moves rows those consumers depend on.
Context — what I did not ask about
For the record, these looked like questions and resolved cleanly from the codebase/ledger:
- Exa
exa_researchremoval (#6074) — upstream validated against the live API:
/research/v1returns HTTP 410 RESEARCH_RETIRED, so the fork's Research operation is
already hard-broken in production. Upstream routes savedexa_researchworkflows to the new
Agent operation and preserves the research output shape, and its block already carries all
four of the fork's crawl/published-date fields. Upstream-first; only the fork's
hidden/optionalapiKeysubBlock is re-applied. - Router/Evaluator cost basis — the merged tree applies the cost policy centrally in
providers/index.ts, so keeping the fork'sresolveBlockModelCostat those two call sites
would apply the margin twice. Upstream'scost-policy.tscontains both of the fork helper's
concerns, which is the condition you set on run 2026-08-06-4 Q1. Adopting upstream; the fork
export stays forhistorical-workflow-reconciliation.ts. - Copilot
delete_file/delete_file_folderretirement — upstream deleted the tools with
no replacement, and the deletion arrives silently (delete-file.tsvanishes, schemas
auto-merge to zero). The fork-onlylocal-copilot/still delegates both names, so restoring
additively per the run 2026-08-06-5 precedent. - Enterprise self-host flags (
#6028) — audited:enterprise-entitlements.tsresolves an
unset flag to a per-feature legacy default that reproduces prior behaviour exactly, and the
mergedisOrganizationsEnabled/isAccessControlEnabledexpressions are semantically
identical to the baseline. Nothing flips on or off for Arena. - Desktop app (
#5998) — additive; the new settings sections self-hide behind
requiresDesktopSurface, so no fork suppression is needed. - Migration collision
0266–0269— mechanical: keep the fork's indices, renumber upstream's
eleven migrations to0270–0280, rebuild the journal (which auto-merged into duplicateidx
values again). next16.2.6 vs 16.2.12 — taking upstream's version perpackageJson.sharedDependencyVersions;
both bumps are security advisories and the fork's split pin lives in a fork-only
apps/sim/package.jsonoverrides block.- Landing brand strings, CI workflows,
socket-tokenrestore path, Turbopack build cache —
fork-first as status quo, all logged as follow-ups inrun.md.
|
/upstream-sync resume
|
Upstream sync awaiting answers (2026-08-07)
Grill analysis found product decisions that need a human call before merge starts.
See .upstream-sync/ledger/2026-08-07/open-questions.md.
Reply with
/upstream-sync resumeand your answers on this PR.Agent usage
Usage (stack rollup)
parent-grill-analysis
claude-opus-5Totals
Cost by agent
Stack
upstream-sync/2026-08-05T10-46-19upstream-sync/2026-08-06T10-38-40upstream-sync/2026-08-06T11-28-59upstream-sync/2026-08-06T11-45-10upstream-sync/2026-08-06T13-57-59upstream-sync/2026-08-07T06-21-59Tip-only landing: merge the tip PR into the target branch, then close lower stack PRs as superseded.