Skip to content

Roll the Base create back when the owner network resolve fails - #15358

Merged
teamleaderleo merged 3 commits into
manaflow-ai:mainfrom
teamleaderleo:fix/base-network-credit-rollback
Sep 28, 2026
Merged

teamleaderleo merged 3 commits into
manaflow-ai:mainfrom
teamleaderleo:fix/base-network-credit-rollback

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

When a Base create cannot resolve the owner's private network, the customer was charged for a machine that was never created and the Base was left unusable for half an hour. After this change the credit goes back, the Base and its generation are released immediately, and the next open or reset works.

finishBaseCreate reserves the create credit and records vm.create.requested, and only then resolves the owner network. That resolve step had no failure handler, unlike every step around it. Three things followed from a failure there:

  • The reserved credit was never refunded.
  • vm.create.requested had no terminal event after it.
  • The base row stayed in state resetting with its generation still creating. markBaseCreateFailed is the only mark that calls restoreBaseAfterCreateFailure, which fails the generation and promotes the previous retained generation back onto the base. Without it, the existingOperationInFlight guard in beginBaseOpen refused every later open and reset with VmCreateInProgressError.

The step now gets the same rollback the model_plane_provision step immediately below it already has: refund the reservation, mark with markBaseCreateFailed carrying the base id, generation, vm id and user id, and record a vm.base.create.failed event whose metadata.operation names the step. The failure code is PROVIDER_CREATE_UNAVAILABLE_FAILURE_CODE, matching the network handler in createVm. The Effect.catchAll(() => Effect.void) tail keeps a failing rollback from masking the network error, so the caller still sees the network failure rather than a mark-path error.

openBaseVm, resetBaseVm and the reopen-after-provider-deletion retry all funnel through finishBaseCreate, so all three entrypoints are covered by the one change.

How long the Base stayed stuck

The wedge was temporary, not permanent. markCreateAbandoned looks up the creating generation by vm id and does call restoreBaseAfterCreateFailure, so the abandonment sweeper released the base on its own. The stuck row still matched the sweeper's predicate, because nothing had marked it: status stayed provisioning, provider_vm_id and failure_code stayed null. Recovery therefore took up to VM_CREATE_ABANDONED_AFTER_MS, two provider create deadlines, which is 30 minutes today. The credit loss was permanent either way, since the sweeper refunds nothing.

Why add the rollback instead of reordering

resolveOwnerNetwork takes only a user id, provider, billing team id and team directory, so it does not depend on the reservation or the requested events and could run before them, the way createVm orders it. Reordering alone would not fix this, though: beginBaseOpen has already created the base and generation rows by the time finishBaseCreate runs, so a network failure needs markBaseCreateFailed whichever order the two steps take. Reordering would additionally avoid reserving a credit that is about to be released, which is worth doing, but it changes the timing of a hot create path and is better as its own change than folded into a fix. Left as a follow-up.

Steps audited

Every step in finishBaseCreate, and the third reserveCreateCredit caller:

Step On failure
begin_base_open (in the callers) Nothing to unwind; no credit or rows yet
reserveCreateCredit Marks the row failed, but with the ad-hoc markCreateFailed, so the base and generation are not released. Same family of defect, already owned by #15343; left alone to avoid a conflicting duplicate fix
recordCreateRequestedEvents Swallows its own error; nothing to unwind
resolve_network No handler at all. Fixed here
model_plane_provision Refund, markBaseCreateFailed, vm.base.create.failed
provider_create Refund, model-plane revoke, markBaseCreateFailed with cleanup-pending handling
mark_base_running Provider rollback, model-plane revoke, refund, markBaseCreateFailed
recordCreateSuccessEvents, schedulePromptIdentityPush, base usage event All after the machine is running, all already swallow their errors
nativeForkOperation, the third reserveCreateCredit caller Fully protected. Its rows own no base, so markCreateFailed is correct there, and it has no network resolve step

So resolve_network was the only step in a Base flow with no rollback at all.

Expected conflicts

Testing

bun test tests/vm-workflows.test.ts from web/, on the two commits in this PR. The regression is a plain test, not a dbTest, so it runs without a database.

Red, on the test-only commit 45c644e57bf:

$ bun test tests/vm-workflows.test.ts -t "network resolve fails"
bun test v1.4.0 (34cbb9a40)

tests/vm-workflows.test.ts:
3962 | 
3963 |     // The caller still sees the network failure, not an error from the rollback.
3964 |     expect(error).toBeInstanceOf(VmProviderOperationError);
3965 |     expect(error).toMatchObject({ operation: "ensureNetwork" });
3966 |     // The reserved credit goes back to the customer.
3967 |     expect(refunds).toHaveLength(1);
                           ^
error: expect(received).toHaveLength(expected)

Expected length: 1
Received length: 0

      at <anonymous> (/web/tests/vm-workflows.test.ts:3967:21)
(fail) VM Effect workflows > a Base create whose network resolve fails refunds the credit and releases the Base generation [11.92ms]

 0 pass
 142 filtered out
 1 fail
 3 expect() calls
Ran 1 test across 1 file. [1030.00ms]

The two assertions before the failure already pass, which is the point: the caller does see the network error, but nothing was refunded.

Green, on the fix commit ebaf25945ab:

$ bun test tests/vm-workflows.test.ts -t "network resolve fails"
bun test v1.4.0 (34cbb9a40)

 1 pass
 142 filtered out
 0 fail
 9 expect() calls
Ran 1 test across 1 file. [854.00ms]

Whole file on the fix commit: 68 pass, 75 skip, 0 fail, 252 expect() calls. The 75 skips are the dbTest cases, which need CMUX_DB_TEST=1 and a Postgres this run did not have, so this establishes nothing about the database-backed paths.

Also on the fix commit: bun x tsc --noEmit clean, bun run lint:complexity reports 42 findings matched the grandfathered baseline with no baseline edit, and bun x eslint services/vms/workflows.ts tests/vm-workflows.test.ts exits 0 with two pre-existing unused-import warnings in the test file that this change did not introduce.

Not verified: no live Cloud run. The behavior is covered at the workflow level with a stub repository, billing gateway and provider gateway.

Changelog

Fixed: A Cloud Base machine whose private network could not be resolved now refunds the create credit and frees the Base right away, instead of charging for the machine and refusing to open or reset it for the next half hour

🤖 Generated with Claude Code


Summary by cubic

Fixes a Base create so a failure to resolve the owner's private network refunds the reserved create credit and releases the Base immediately, instead of charging for a machine that was never created and leaving the Base unable to open or reset for up to about forty minutes.

  • finishBaseCreate reserves the credit before resolving the owner network, and that step had no failure handler; it now refunds the reservation, marks via markBaseCreateFailed, and records a vm.base.create.failed event naming the step.
  • The rollback's catchAll tail keeps a failing rollback from masking the network error, so the caller still sees that error.
  • openBaseVm, resetBaseVm, and the reopen-after-provider-deletion retry all funnel through finishBaseCreate, so all three entrypoints are covered.
  • Adds a regression test covering the refund, the Base release, and the failure event.

Written for commit 3ab0574. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Bug Fixes
    • Base creation now handles owner-network resolution failures by refunding the reserved credit and recording the creation as failed. The network error continues to be reported.

@coderabbitai

coderabbitai Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 941f2b64-723e-4906-ae7b-f09a0855cc0a

📥 Commits

Reviewing files that changed from the base of the PR and between 2f6716c and 3ab0574.

📒 Files selected for processing (2)
  • web/services/vms/workflows.ts
  • web/tests/vm-workflows.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

When owner-network resolution fails during Base creation, the workflow refunds the reserved credit, marks the Base generation failed with the provider-unavailable code, and records a failure event. A test checks the returned error and cleanup behavior.

Changes

Base create failure handling

Layer / File(s) Summary
Network resolution failure cleanup
web/services/vms/workflows.ts, web/tests/vm-workflows.test.ts
The workflow refunds reserved credit, marks the Base generation failed, and records a vm.base.create.failed event when network resolution fails. The test checks the propagated error, refund, failure mark, and event. A comment describes related Base cleanup behavior.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: lawrencecchen

Merge Risk: ⚪ Minimal · up to 3ab05

No actionable merge-blocking issue is established; the change is mergeable after normal checks.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to 3ab05

The normal network-failure path now refunds the reserved credit and releases the Base. If the refund fails, however, the Base can still be released for another attempt, leaving a customer exposed to repeated charges during an outage.

Retained concerns

  • Medium · reliability · inferred: A failed refund does not prevent Base release. Subsequent attempts during a continuing network failure can reserve further credits without resolving earlier charges.
Security review details

Security Blast Radius

  • inferred — The identified compensation risk concerns the billing customer and Base involved in each attempt; repeated attempts can extend that customer's credit exposure. No new public entrypoint or cross-service authority is evidenced.

Security Findings and Attack Paths

  • inferred — During concurrent network-resolution and refund-service failures, repeated Base attempts can consume additional create credits because refund errors are suppressed while successful Base failure marks release the state for another attempt. This is a conditional billing-integrity risk, not a demonstrated authorization bypass.

Trust Boundaries and Controls

  • observed — The failure handler delegates refunds to the billing gateway and state changes to the repository. The repository's conditional update and active-Base identity checks constrain duplicate or stale lifecycle transitions.

Resilience and Maintainability Implications

  • observed — Billing refund failures are caught without a workflow-visible failure. The failure usage event also depends on a successful guarded mark, so cleanup and event completion are not guaranteed by the network-error handler.

Hardening Proposals

  • proposed — Track an unresolved refund by reservation identity and reconcile it independently of Base release; exercise refund, mark, and interruption failures so recovery does not depend on the request finishing successfully.
🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (24 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Cloud Persistent Session And Early Input ✅ Passed PASS. The pull request changes Base VM creation rollback in finishBaseCreate and adds a regression test. The changed hunks do not create or manage cmux-tui clients, physical transports, manual ren…
Cmux Swift Actor Isolation ✅ Passed The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. The diff contains no Swift files or Swift project changes. Therefore, it does not introduce or worse…
Cmux Swift Blocking Runtime ✅ Passed The review-scoped diff changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. It introduces no production Swift changes, so the Swift blocking-runtime check is not applicab…
Cmux Browser Automation Off-Main ✅ Passed PASS. The PR changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. The rule applies to browser socket automation changes in two Swift files. The diff contains no browser comma…
Cmux Expensive Synchronous Load ✅ Passed The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. The review-scoped diff contains no Swift files, so it does not add or move an expensive synchronous …
Cmux Cache Substitution Correctness ✅ Passed The production diff only adds rollback handling around resolveOwnerNetwork and expands a comment. It does not replace any fresh authoritative read with a cached or opportunistic value, and it does n…
Cmux No Hacky Sleeps ✅ Passed The production diff adds rollback effects around resolveOwnerNetwork; it adds no sleep, timer, polling loop, fixed delay, or wall-clock wait. Existing Effect.sleep and polling code in `workflows.t…
Cmux Algorithmic Complexity ✅ Passed The production change adds rollback composition around resolveOwnerNetwork in web/services/vms/workflows.ts. It uses fixed-size Effect.all operations and does not add collection scans, sorting, …
Cmux Swift Concurrency ✅ Passed PASS: The pull request changes only TypeScript files (web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts). It introduces no cmux-owned Swift code or Swift concurrency patterns covere…
Cmux Swift @Concurrent ✅ Passed PASS: The pull request changes only two TypeScript files (web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts). The authoritative diff contains no Swift changes, so the @concurrent …
Cmux Swift Package Boundaries ✅ Passed The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. It introduces no Swift production changes, so the Swift package-boundary rule does not apply.
Cmux Swiftpm Lockfiles ✅ Passed The pull-request diff changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. It contains no SwiftPM package, Xcode project, .gitignore, workflow, or dependency changes, s…
Cmux Swift Logging ✅ Passed PASS: The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. The authoritative diff contains no Swift files and adds no print, debugPrint, dump, `NSL…
Cmux User-Facing Error Privacy ✅ Passed The production diff adds rollback and records the network error in the VM failure row and internal usage-event metadata. It does not add user-facing copy or expose that metadata through the Base API. …
Cmux Full Internationalization ✅ Passed PASS. The PR changes only VM workflow rollback logic, usage-event metadata, and developer comments, plus a test. It adds no Swift text, string-catalog entry, web UI copy, API response copy, rendered m…
Cmux Swiftui State Layout ✅ Passed PASS: The pull request changes only TypeScript files (web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts). The diff contains no Swift or SwiftUI code, so the SwiftUI state-layout rul…
Cmux Architecture Rethink ✅ Passed The review-scoped diff changes only TypeScript workflow code and its test. It contains no Swift files or Swift architecture changes, so the Swift architectural-rethink failure conditions do not apply.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. It adds no Swift or standalone cmux-owned window changes, so the auxiliary-window close-shortcut rul…
Cmux Source Artifacts ✅ Passed The PR changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. Both are ordinary tracked TypeScript source/test files. The diff adds rollback logic and a regression test, no…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS: The pull request changes only web/services/vms/workflows.ts and web/tests/vm-workflows.test.ts. It contains no changed Swift file under a production Sources/ path, so this check is not app…
Title check ✅ Passed The title clearly and concisely describes the primary change: rolling back Base creation when owner-network resolution fails.
Description check ✅ Passed The description provides a detailed summary, failure behavior, rollback design, affected entry points, testing results, limitations, and a changelog entry. The missing checklist and demo video section…
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

teamleaderleo and others added 2 commits September 28, 2026 07:40
…ails

finishBaseCreate reserves the create credit and records vm.create.requested
before it resolves the owner network, and the resolve step has no failure
handler. The credit stays spent for a machine that was never created, the
requested event never gets a terminal event, and the base and its generation
are left claimed.

Red before the fix.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…fails

The resolve_network step in finishBaseCreate had no failure handler, unlike
every step around it. A failure there left the create credit spent, left
vm.create.requested with no terminal event, and left the base at state
"resetting" with its generation at "creating".

Reset then tripped the existingOperationInFlight guard in beginBaseReset.
Open has no such guard, but could not finish either: finishBaseCreate
returns the same 409 when the existing row has no providerVmId. Both
cleared only when markCreateAbandoned reclaimed the row, which takes
VM_CREATE_ABANDONED_AFTER_MS plus a run of the ten-minutely vm-reconcile
cron, so up to about forty minutes. The credit was never refunded, because
the sweeper refunds nothing.

Give the step the same rollback the model_plane_provision step below it
already has: refund, markBaseCreateFailed with the base, generation, vm and
user ids, and a vm.base.create.failed event naming the step. The
catchAll tail keeps a failing rollback from masking the network error.

openBaseVm, resetBaseVm and reopenBaseIfProviderDeleted all funnel through
finishBaseCreate, so all three entrypoints are covered.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@teamleaderleo
teamleaderleo force-pushed the fix/base-network-credit-rollback branch from ebaf259 to faaf5bb Compare September 28, 2026 14:41
markCreateAbandoned and resolveCreateCleanup also call
restoreBaseAfterCreateFailure. What is true is that it is the mark on this
code path that does, and that neither of the other two can reach a row the
ad-hoc mark has already stamped with a failure code.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review: a review subagent went over ebaf25945ab against main, with a real
Postgres. Its verdict was "approve the code, block the merge only until the PR
body is corrected", and it was right about every claim it refuted. The code is
unchanged from what it reviewed, except for the comment corrections below and a
rebase.

Fixed

  1. (blocking) The headline claim "the next open or reset works" was false.
    Open worked; reset did not, before or after, because
    restoreBaseAfterCreateFailure left the failed row holding its
    base:...:g<N> idempotency key and beginBaseReset has no 23505 catch. The
    reviewer proved it at HEAD: reset#2 -> VmDatabaseError, reset#3 -> same,
    permanently.

    It also proved this is not this PR's fault. main already reached the
    byte-identical end state through the abandonment sweeper 40 minutes later,
    and reaches it today for provider_create and model_plane_provision
    failures, so blocking this PR would have fixed nothing and cost a correct
    refund and a working open path. I took its recommendation and fixed the trap
    separately, in Release the Base generation when a create is refused for credits #15343, which is now merged. This branch is rebased on top of
    it, so the claim now holds. The body says so and says it did not hold before.

  2. (should-fix) "the existingOperationInFlight guard in beginBaseOpen" was
    the wrong function. That guard exists only in beginBaseReset
    (repository.ts:1953). Open's 409 comes from finishBaseCreate's
    !existing.providerVmId branch. Corrected in the body and in the test
    comment.

  3. (should-fix) "markBaseCreateFailed is the only mark that calls
    restoreBaseAfterCreateFailure" is false three times over:
    markCreateAbandoned and resolveCreateCleanup call it too, and the body
    contradicted itself four paragraphs later. Corrected in the body, in the
    shipped code comment, and in the test comment. The same wording had already
    shipped in Release the Base generation when a create is refused for credits #15343, so 3ab05741a58 corrects it there too.

  4. (should-fix) "30 minutes" was the staleness threshold, not the recovery
    time. vm-reconcile runs 7,17,27,37,47,57 * * * *, so worst case is about
    forty minutes. Corrected everywhere it appeared, including the changelog.

  5. (should-fix) The "Expected conflicts" section had it backwards. The
    reviewer's git merge-tree said workflows.ts auto-merges cleanly and the
    conflict is in tests/vm-workflows.test.ts, which the body did not mention.
    Confirmed exactly on the rebase: the patch applied to workflows.ts cleanly
    and the test file was the only conflict, both PRs having appended a test at
    the same spot. Section rewritten as a dependency on Release the Base generation when a create is refused for credits #15343 rather than a
    conflict prediction.

  6. (nit) "The network itself is an account-level resource" was wrong:
    resolveOwnerNetwork resolves a team network first and falls back to the
    account's own. Reworded to say what actually matters, which is that it
    resolves rather than creates, so there is nothing to unwind.

Left, disclosed

  1. (should-fix) The regression test is stub-based, so it never executes
    restoreBaseAfterCreateFailure, which is why the reset trap was invisible to
    it. Left as a stub test: what this PR changes is whether the rollback runs at
    all, and the stub pins that directly. The database-level behaviour it does
    not reach is unchanged here and is now covered by Release the Base generation when a create is refused for credits #15343's dbTest. Added to
    the body under "Disclosed".

  2. (nit) The new event's metadata omits baseName. It matches the
    model_plane_provision handler it is modelled on, so adding it would create
    a third shape rather than remove an inconsistency. Disclosed in the body.

  3. (should-fix, separate) The reviewer also found that
    reopenBaseIfProviderDeleted hand-rolls the same provider-404 transition
    outside the shared path. That is a finding against Finish the destroy work where a Cloud machine is first found gone #15359, not this PR, and
    is being handled there.

Verification after the rebase, all from web/ with DATABASE_URL pointed
at a local postgres:16-alpine migrated with bunx drizzle-kit migrate:

  • red commit e877eb1c1e8: bun x tsc --noEmit clean, and
    bun test tests/vm-workflows.test.ts -t "network resolve fails" is
    0 pass / 1 fail on expect(refunds).toHaveLength(1).
  • green: 1 pass / 0 fail.
  • CMUX_DB_TEST=1 bun test tests/vm-workflows.test.ts: 145 pass, 0 fail,
    zero skips.
  • bun run lint:complexity: 42 findings, all baseline, no new entries.
  • bun x eslint services/vms/workflows.ts tests/vm-workflows.test.ts: 0 errors,
    2 pre-existing warnings.

No fleet dogfood: this is a web/ change and #8029 disabled Vercel branch
previews, so an unmerged change to the deployed web app has no preview URL a
fleet build could talk to. A fleet build would exercise main, not this branch.

@teamleaderleo
teamleaderleo merged commit 2890f0b into manaflow-ai:main Sep 28, 2026
69 of 70 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for 3ab05741a5: every check was green at merge (20 verified; 17 skipped by policy). Full suite runs on main after merge.

rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 28, 2026
1028a08 test: isolate background workspace git probe fixture (manaflow-ai#15388)
41ad40d fix: keep the terminal area when the window is too narrow for the side panels (manaflow-ai#15369)
2890f0b Roll the Base create back when the owner network resolve fails (manaflow-ai#15358)
7b0a15f Keep agent- and script-opened workspaces and panes in the background (manaflow-ai#15281)
4f14fa3 ci: move CLI regressions to CLI product tests and rebalance the seven app-host shards (manaflow-ai#15177)
906926a ci: dogfood builds are opt-in with the dev-build label (manaflow-ai#15380)
2f6716c PR media: classify app changes by CI's build inputs; a reuse error is no refusal (manaflow-ai#15386)
bc28bc4 Release the Base generation when a create is refused for credits (manaflow-ai#15343)
6760c93 iOS: Add Computer never disturbs the active Mac (manaflow-ai#15102)
0f2d3d3 Show Claude sessions that stop on an API error instead of leaving them Running (manaflow-ai#15232)
20ef7c9 Keep the main window floor on the animating setFrame path (manaflow-ai#15368)
b4f5dc5 ci: move UI runs pinned to Blacksmith macOS 26 onto owned Macs (manaflow-ai#15383)
e02c385 PR media: compile once when CI's build cannot load, and say why a tour skipped (manaflow-ai#15378)
ebd1f4f fix(iroh-v2): commit delivery accounting only after the frame is sent (manaflow-ai#15344)

# Conflicts:
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci-macos.yml
#	.github/workflows/ci.yml
#	.github/workflows/pr-media.yml
#	.github/workflows/test-e2e.yml
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.

1 participant