Skip to content

chore(release): back-merge release/v0.18.0 into main - #6490

Closed
lefarcen wants to merge 16 commits into
mainfrom
release/v0.18.0
Closed

chore(release): back-merge release/v0.18.0 into main#6490
lefarcen wants to merge 16 commits into
mainfrom
release/v0.18.0

Conversation

@lefarcen

@lefarcen lefarcen commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Back-merge after 0.18.0 shipped (open-design-v0.18.0, R2 stable/latest = 0.18.0, promoted from 0.18.0-prerelease.9).

🚨 Merge with a MERGE COMMIT β€” never squash, never rebase. Squashing collapses the shared history and makes every future releaseβ†’main back-merge conflict.

What comes back

Most commits on the branch are backports whose content already sits on main. These landed directly on the release branch and exist nowhere else:

Commit
30c427ce0a #6480 β€” guard the windows e2e report download so win_x64_smoke_mode: skip is usable on the stable lane
8e458f5168 #6452 β€” retry NSIS install; fail the setup step loudly instead of dying mid-build
40281395fa #6440 β€” default release/v0.18.0 auto builds to skip the win packaged smoke
649bf1c536 #6437 β€” default release/v0.18.0 auto prereleases to amr_profile=test
45745db8b0 #6435 β€” add the amr_profile input that enables the Workspace Team transport
f62c3425c6, a95cf4205b release-cut chores (baked preview manifest, version bump)

The three release/v0.18.0-specific defaults (#6437, #6440) are branch-scoped by their own github.ref_name conditions, so carrying them to main changes nothing for other branches.

Known follow-up

#6481 (open, targets main) fixes the stale Windows smoke expectation that forced this release onto win_x64_smoke_mode: skip. Once it lands, the guard from #6480 stops being load-bearing and Windows regains real smoke coverage.

open-design-release-bot Bot and others added 16 commits August 4, 2026 01:33
…red resources, workspace-scoped billing, and the #5517 redesign (#6430)

* BACKPORT-CONFLICT

* fix(backport): resolve #6142 conflicts for release/v0.18.0

- apps/packaged/package.json: keep release 0.18.0 (release version line)
- NewProjectPanel.tsx: keep release variant (hardcoded copy, size 13) to
  avoid referencing newproj.openFolder/openingFolder i18n keys that the
  backport did not carry over (only used at this one call site)

web typecheck + guard both green.

---------

Co-authored-by: lefarcen <935902669@qq.com>
…port (#6435)

Packaged prerelease builds shipped with the workspace-team transport dormant
because release-prerelease.yml never injected OPEN_DESIGN_AMR_PROFILE or
OD_VELA_WEB_URL (apps/packaged/src/workspace-team.ts requires both). Ports the
beta workflow mechanism: new amr_profile input (dispatch + call) drives a
top-level OD_VELA_WEB_URL/OPEN_DESIGN_AMR_PROFILE pair. Empty default keeps the
push-driven prod pipeline unchanged; a test/feature-test dispatch enables the
transport against that profile Vela backend.
…ile=test (#6437)

notify-release-feishu forwards amr_profile to release-prerelease so the
push-driven prerelease on the workspace-team release branch ships with the
vela-cli transports enabled and posts a Feishu card for the real build.
Manual dispatch can still override; other release branches stay on prod.
…packaged smoke (#6447)

The packaged win smoke deterministically fails under amr_profile=test (CI is
unattended, the cloud profile lands on onboarding), and publish hard-gates on
build_win success β€” so every auto push-built prerelease on the workspace-team
branch died before publishing any platform. Forward win_x64_smoke_mode from
notify-release-feishu (manual dispatch overrides; release/v0.18.0 defaults to
skip, every other branch keeps release-prerelease defaults). TEMPORARY until
the smoke learns the cloud sign-in shell; the win package itself still builds.
…eet kills 12min+ jobs (#6448) (#6449)

The project-collab shard is the only UI P0 job still running past ~12
minutes, where the current nexu-runners-large (rn44m) fleet hard-kills the
pod: two unrelated PRs (#6414, #6446) both lost this shard at exactly 12.0
minutes with zero test output, while every completed run of these specs
passes (run 30946194081: 4 passed in 6.5m). This blocks every merge. Skip
the two heavy multi-client specs (the keyboard-flow specs stay); TODO in
the file header records the evidence and the re-enable conditions (fleet
fix, or splitting the suite under the kill line).

(cherry picked from commit c5cfd9d)

Co-authored-by: lefarcen <935902669@qq.com>
Rediscover the active daemon before local MCP calls, retry only safe reads after unreachable targets, and expose durable artifact references while marking preview and studio URLs as session-scoped.

Validated with focused MCP tests, daemon typecheck/build, workspace typecheck, guard, and a live daemon port-switch smoke.


(cherry picked from commit fe1231e)

Co-authored-by: open-design-crew[bot] <299007234+open-design-crew[bot]@users.noreply.github.com>
Co-authored-by: Cheems <94773058+itscheems@users.noreply.github.com>
…6452)

prerelease.4 win build died on makensis half an hour after a green Setup
NSIS step: the Chocolatey feed flaked (Unable to find package nsis,
0/0 installed) and pwsh -command swallowed choco exit code, so the step
passed with nothing installed. Retry up to 4 times with backoff and hard-
fail the setup step with a clear message when makensis is still absent.
…nsport (#6446) (#6454)

The packaged client's first open of an unmaterialized team project fires a
burst of od:// requests; when that burst hits transient transport failures
the proxy answers with synthetic 502s, and the billing read's retry loop
made it worse: every mounted consumer armed its own fixed 5s timer, each
timer's retry event fanned out to every consumer, and each listener
force-refetched past the coalescing cache β€” one failure became a standing
5s-cadence request storm that fed the very burst it was waiting out
(observed by QA as hundreds of repeated billing requests while the left
panel span).

- Replace the per-hook fixed 5s retry timer with one module-level schedule
  per requestKey whose delay grows 5s β†’ 10s β†’ 20s β†’ 40s β†’ 60s cap while
  failures are consecutive; a success resets the count but deliberately
  leaves a pending timer armed so stale consumers still re-sync.
- Stop forcing the retry read. Failures are never cached, so the plain
  coalesced path is a genuine refetch, and a retry that lands just after a
  concurrent consumer's success now joins that fresh result instead of
  evicting it and issuing another request.
- Hard-expiry revalidation keeps its forced read via an explicit
  force flag on the retry event β€” its cached answer is void by definition,
  which the plain path cannot know.

Red tests first: both new specs fail on the previous implementation
(fixed-cadence retry fires at t=10s; retry stampedes a third request past a
0.5s-old success) and pass with the fix. 403 stays fail-closed with no
retry; the 83 web test files touching workspace context/billing all pass.

(cherry picked from commit 125f373)

Co-authored-by: lefarcen <935902669@qq.com>
…6460)

The public pricing surface linked subscription checkout at the internal test
console (vela.powerformer.net) β€” every visitor who clicked through to buy
landed on a non-production environment. Point CLOUD_BASE_URL and the
machine-readable pricing.md contract at https://open-design.ai/cloud/dashboard
instead; the `?billing=plan` deep link is unchanged and is consumed by the
dashboard route (vela apps/web team-dashboard.tsx reads billing=plan to open
the plan dialog).

The header's console link moves from /cloud/wallet to /cloud/dashboard:
wallet is the pre-workspace surface being retired, and vela already rewrites
/wallet to /dashboard on workspace selection (workspace-selector.ts).

Contract tests updated to lock the production URLs.

(cherry picked from commit b8d7dd2)

Co-authored-by: lefarcen <935902669@qq.com>
Production was deliberately held outside the workspace-team profile allowlist
until its Vela backend could actually serve the feature. It can now:
WORKSPACE_TEAM_ENABLED and the three billing-scope flags are true on prod
amr-api, and the resource hub it needs for team file sharing is configured
(S3-backed blob store instead of the chart's mock default, which would have
failed every push with 'unsupported protocol scheme mock' while comments kept
syncing through Postgres).

- Add prod to WORKSPACE_TEAM_AMR_PROFILES.
- Resolve OD_VELA_WEB_URL for prod from secrets.VELA_WEB_URL_PROD, so release
  builds bake the production console origin.
- Drop the temporary amr_profile=test default on release/v0.18.0; release
  builds now ship prod, with manual dispatch still able to target test or
  feature-test.

The origin half of the gate is unchanged and still load-bearing: a build
without an injected origin stays dormant on every profile rather than pointing
at an unknown backend. Tests updated to lock the new prod behaviour and to keep
local/profile-less builds dormant.

(cherry picked from commit 5f5a589)

Co-authored-by: lefarcen <935902669@qq.com>
…ilds (#6468) (#6471)

release-stable.yml and release-preview.yml never set OPEN_DESIGN_AMR_PROFILE
or OD_VELA_WEB_URL. Neither has a default in tools-pack, so velaWebUrl reached
the packaged config as undefined, workspaceTeamTransportEnv returned an empty
record, and the four vela transports were never injected into the daemon spawn
env. Both channels therefore shipped clients with Workspace Team silently
dormant β€” the build succeeds, the app installs and starts, and the absence only
surfaces once a package is in a user's hands.

beta and prerelease already inject the pair from their amr_profile input, which
is why prerelease validation looked correct: the artifact under test had the
feature and the stable artifact promoted from it would not have.

Stable and preview are production channels, so the pair is pinned instead of
dispatched β€” there is no legitimate stable build aimed at the test backend.
Naming prod explicitly is a no-op for AMR itself (the daemon already defaults to
prod in integrations/vela-profile.ts); it exists to satisfy the profile half of
the gate. A fork or PR build without the secret leaves the origin empty, so the
transports stay dormant rather than half-enabled.

(cherry picked from commit 3371ce4)

Co-authored-by: lefarcen <935902669@qq.com>
* docs(release): add 0.18.0 release notes

* docs(release): adopt final 0.18.0 product copy for title and intro

(cherry picked from commit ae2a0b0)

Co-authored-by: lefarcen <935902669@qq.com>
(cherry picked from commit e6aeb38)

Co-authored-by: open-design-crew[bot] <299007234+open-design-crew[bot]@users.noreply.github.com>
Co-authored-by: bone3deep1962-collab <bone3deep1962@gmail.com>
release-stable.yml offers win_x64_smoke_mode: skip, but choosing it makes the
release impossible to finish. The windows smoke uploads its e2e report with
if-no-files-found: warn, so a skipped smoke leaves the report directory empty
and publishes no artifact; finalize then downloads that artifact
unconditionally and fails β€” after every platform has already built, signed and
notarized, and after the pre-flight tag check has passed. Twenty-five minutes
of work is thrown away for a report nothing downstream reads.

Guard the download on the same condition that gates the smoke itself, matching
how the linux report is guarded by its build result. The mac report stays
unconditional because the mac smoke has no skip switch.
@lefarcen
lefarcen requested a review from a team as a code owner August 5, 2026 22:14
@PerishCode

Copy link
Copy Markdown
Contributor

@lefarcen I'm holding off on generating review comments for #6490 because this pull request has merge conflicts right now.

Please resolve the conflicts with main and push the updated branch. Once that's done, request or wait for the review to run again and I'll take another look.

πŸ” Powered by Looper Β· runner=reviewer Β· agent=codex Β· An autonomous AI dev team for your GitHub repos.

@lefarcen

lefarcen commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

Superseded β€” the back-merge is going in as a real two-parent merge commit via a dedicated branch, since release/v0.18.0 β†’ main conflicts on apps/packaged/package.json and the merge button cannot resolve it.

@lefarcen lefarcen closed this Aug 5, 2026
@lefarcen lefarcen added size/XXL PR changes 1500+ lines risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps labels Aug 5, 2026
@lefarcen
lefarcen requested a review from mrcfps August 5, 2026 22:18
@lefarcen lefarcen added type/chore CI / build / config / tooling needs-validation Runtime change detected; needs human or /explore agent validation. labels Aug 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-validation Runtime change detected; needs human or /explore agent validation. risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps size/XXL PR changes 1500+ lines type/chore CI / build / config / tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants