test(e2e): gate fresh-provision peer-visibility via literal MCP list_peers #1298

Merged
devops-engineer merged 2 commits from e2e/peer-visibility-mcp-gate-v2 into main 2026-05-16 07:32:42 +00:00
Member

Summary

Codifies the literal user-facing peer-visibility path as an automated staging-E2E gate so it can never silently regress.

Hermes and OpenClaw were repeatedly reported "fleet-verified / cascade-complete" because the proxy signals were green — registry registration + heartbeat (Hermes), model round-trip 200 (OpenClaw). But a freshly-provisioned workspace asked on canvas "can you see your peers" actually FAILS:

  • Hermes: 401 on the molecule MCP list_peers call
  • OpenClaw: native sessions_list fallback, sees no platform peers

Tasks #142/#159 were even marked "completed" under this same proxy-verification flaw. This PR makes the literal call an objective, non-bypassable gate.

(Reopened from #1297 — that PR was based on staging; molecule-core is trunk-based per feedback_agents_target_staging_default so base is main. Identical 2-file diff, cherry-picked onto origin/main.)

What the assertion actually drives (proof it is NOT a proxy)

tests/e2e/test_peer_visibility_mcp_staging.sh:

  1. Provisions a brand-new throwaway org via the real CP path (POST /cp/admin/orgs) — the same path a user's "deploy a workspace" click takes.
  2. Provisions one sibling workspace per runtime under test (hermes, openclaw, claude-code) under a shared parent.
  3. For each runtime, issues the byte-for-byte JSON-RPC envelope
    {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_peers","arguments":{}}}
    to POST /workspaces/:id/mcp using that workspace's own bearer token, through the real WorkspaceAuth + MCPRateLimiter middleware chain (workspace-server/internal/router/router.go:446, mcp.go dispatch → toolListPeers). This is the exact call mcp_molecule_list_peers makes from a canvas agent.
  4. Asserts: HTTP 200 (a 401 — the Hermes symptom — fails here) AND a JSON-RPC result (not an error object) AND the returned peer text literally contains the other provisioned sibling workspace IDs — not an empty list, not a native-sessions_list fallback (the OpenClaw symptom is explicitly pattern-detected and failed).

It does not read a registry row, /health, the heartbeat table, or GET /registry/:id/peers. (For contrast: the pre-existing tests/e2e/test_2307_peer_visibility_staging.sh and test_staging_full_saas.sh step 9b only check GET /registry/:id/peers HTTP code — that registry-row proxy is exactly what made the broken runtimes look "verified".)

Design decision — new workflow vs extend

New dedicated e2e-peer-visibility.yml rather than folding into e2e-staging-saas.yml, because:

  • It must provision multiple distinct runtimes in one org and cross-assert each sees the others. e2e-staging-saas.yml is single-runtime-per-run (E2E_RUNTIME); a multi-runtime matrix would conflate concerns and bloat its already-45-min run.
  • Independent concurrency group (doesn't fight full-saas / canvas for the staging org-creation quota).
  • Independent, non-required status context so it can be RED today without wedging unrelated merges, and flipped to required in one branch-protection edit later.

Teardown scoping

Scoped to only the e2e-pv-<run_id> org this run createdDELETE /cp/admin/tenants/$SLUG with the {"confirm":$SLUG} fat-finger guard. Three nested nets, none cluster-wide (honors feedback_cleanup_after_each_test, feedback_never_run_cluster_cleanup_tests_on_live_platform):

  1. Script EXIT/INT/TERM trap.
  2. Workflow always() step, filtered to this run's e2e-pv-<date>-<run_id>- prefix (today + yesterday UTC for midnight-crossing runs).
  3. sweep-stale-e2e-orgs final net (slug starts with e2e-).

Required-vs-not + flip tracking

Landed NON-required (not added to branch_protections/main status_check_contexts; verified locally via lint-required-no-paths.py — only CI / all-required + sop-checklist / all-items-acked are required). Rationale:

  • It is RED on today's broken behavior by design — the Hermes-401 and OpenClaw-MCP-wiring root-cause fixes are in flight in parallel (other agents — not touched here). Making it required now would wedge unrelated merges before those fixes ship.
  • It is NOT a fake-green continue-on-error mask — that would defeat its entire purpose long-term (feedback_fix_root_not_symptom). It is an honest, visible, red, non-required signal that goes green only when the fixes actually land.
  • Flip-to-required checklist tracked in #1296 (includes the load-bearing step: resolve the paths: filter per feedback_path_filtered_workflow_cant_be_required before flipping).

The pr-validate job shares the E2E Peer Visibility check name (proven e2e-staging-saas.yml shape) so the context is already flip-to-required-ready and a workflow-only PR is never silently statusless.

Gitea-1.22.6 / act_runner hardening

  • Mirrored actions/checkout SHA de0fac2e... — the one e2e-staging-canvas.yml uses successfully (feedback_gitea_cross_repo_uses_blocked; re #1277/PR#1292 unmirrored-SHA root-cause).
  • Per-SHA concurrency, not global (feedback_concurrency_group_per_sha).
  • Workflow-level GITHUB_SERVER_URL (feedback_act_runner_github_server_url).
  • No cross-repo uses:.
  • Passes lint-workflow-yaml (0 warnings), lint-continue-on-error-tracking, lint-required-no-paths locally on the main tree.

Test plan

  • bash -n on the driving script
  • lint-workflow-yaml.py --workflow-dir — 54 files, 0 fatal, 0 warnings
  • lint-continue-on-error-tracking.py — pass (zero continue-on-error in the new file by design)
  • lint-required-no-paths.py (with token, BRANCH=main) — pass; confirms new context is NOT required so the paths: filter is safe to land
  • First peer-visibility run on main after merge is expected RED (Hermes-401 / OpenClaw-MCP-wiring not yet fixed) — this is the gate working as designed
  • Goes green only post-fix; then flip to required per #1296

Refs: #1296

🤖 Generated with Claude Code

## Summary Codifies the **literal user-facing peer-visibility path** as an automated staging-E2E gate so it can never silently regress. Hermes and OpenClaw were repeatedly reported "fleet-verified / cascade-complete" because the *proxy* signals were green — registry registration + heartbeat (Hermes), model round-trip 200 (OpenClaw). But a freshly-provisioned workspace asked on canvas "can you see your peers" actually FAILS: - Hermes: 401 on the molecule MCP `list_peers` call - OpenClaw: native `sessions_list` fallback, sees no platform peers Tasks #142/#159 were even marked "completed" under this same proxy-verification flaw. This PR makes the literal call an objective, non-bypassable gate. (Reopened from #1297 — that PR was based on `staging`; molecule-core is trunk-based per `feedback_agents_target_staging_default` so base is `main`. Identical 2-file diff, cherry-picked onto `origin/main`.) ## What the assertion actually drives (proof it is NOT a proxy) `tests/e2e/test_peer_visibility_mcp_staging.sh`: 1. Provisions a brand-new throwaway org via the real CP path (`POST /cp/admin/orgs`) — the same path a user's "deploy a workspace" click takes. 2. Provisions one sibling workspace per runtime under test (`hermes`, `openclaw`, `claude-code`) under a shared parent. 3. For each runtime, issues the **byte-for-byte JSON-RPC envelope** `{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_peers","arguments":{}}}` to **`POST /workspaces/:id/mcp`** using **that workspace's own bearer token**, through the real `WorkspaceAuth` + `MCPRateLimiter` middleware chain (`workspace-server/internal/router/router.go:446`, `mcp.go` dispatch → `toolListPeers`). This is the exact call `mcp_molecule_list_peers` makes from a canvas agent. 4. Asserts: **HTTP 200** (a 401 — the Hermes symptom — fails here) AND a JSON-RPC `result` (not an `error` object) AND the returned peer text **literally contains the other provisioned sibling workspace IDs** — not an empty list, not a native-`sessions_list` fallback (the OpenClaw symptom is explicitly pattern-detected and failed). It does **not** read a registry row, `/health`, the heartbeat table, or `GET /registry/:id/peers`. (For contrast: the pre-existing `tests/e2e/test_2307_peer_visibility_staging.sh` and `test_staging_full_saas.sh` step 9b only check `GET /registry/:id/peers` HTTP code — that registry-row proxy is exactly what made the broken runtimes look "verified".) ## Design decision — new workflow vs extend **New dedicated `e2e-peer-visibility.yml`** rather than folding into `e2e-staging-saas.yml`, because: - It must provision **multiple distinct runtimes in one org** and cross-assert each sees the others. `e2e-staging-saas.yml` is single-runtime-per-run (`E2E_RUNTIME`); a multi-runtime matrix would conflate concerns and bloat its already-45-min run. - Independent concurrency group (doesn't fight full-saas / canvas for the staging org-creation quota). - Independent, non-required status context so it can be RED today without wedging unrelated merges, and flipped to required in one branch-protection edit later. ## Teardown scoping Scoped to **only the `e2e-pv-<run_id>` org this run created** — `DELETE /cp/admin/tenants/$SLUG` with the `{"confirm":$SLUG}` fat-finger guard. Three nested nets, none cluster-wide (honors `feedback_cleanup_after_each_test`, `feedback_never_run_cluster_cleanup_tests_on_live_platform`): 1. Script `EXIT/INT/TERM` trap. 2. Workflow `always()` step, filtered to this run's `e2e-pv-<date>-<run_id>-` prefix (today + yesterday UTC for midnight-crossing runs). 3. `sweep-stale-e2e-orgs` final net (slug starts with `e2e-`). ## Required-vs-not + flip tracking **Landed NON-required** (not added to `branch_protections/main` `status_check_contexts`; verified locally via `lint-required-no-paths.py` — only `CI / all-required` + `sop-checklist / all-items-acked` are required). Rationale: - It is **RED on today's broken behavior by design** — the Hermes-401 and OpenClaw-MCP-wiring root-cause fixes are in flight in parallel (other agents — not touched here). Making it required *now* would wedge unrelated merges before those fixes ship. - It is **NOT a fake-green `continue-on-error` mask** — that would defeat its entire purpose long-term (`feedback_fix_root_not_symptom`). It is an honest, visible, red, non-required signal that goes green only when the fixes actually land. - Flip-to-required checklist tracked in **#1296** (includes the load-bearing step: resolve the `paths:` filter per `feedback_path_filtered_workflow_cant_be_required` before flipping). The `pr-validate` job shares the `E2E Peer Visibility` check name (proven `e2e-staging-saas.yml` shape) so the context is already flip-to-required-ready and a workflow-only PR is never silently statusless. ## Gitea-1.22.6 / act_runner hardening - Mirrored `actions/checkout` SHA `de0fac2e...` — the one `e2e-staging-canvas.yml` uses successfully (`feedback_gitea_cross_repo_uses_blocked`; re #1277/PR#1292 unmirrored-SHA root-cause). - Per-SHA concurrency, not global (`feedback_concurrency_group_per_sha`). - Workflow-level `GITHUB_SERVER_URL` (`feedback_act_runner_github_server_url`). - No cross-repo `uses:`. - Passes `lint-workflow-yaml` (0 warnings), `lint-continue-on-error-tracking`, `lint-required-no-paths` locally on the `main` tree. ## Test plan - [x] `bash -n` on the driving script - [x] `lint-workflow-yaml.py --workflow-dir` — 54 files, 0 fatal, 0 warnings - [x] `lint-continue-on-error-tracking.py` — pass (zero `continue-on-error` in the new file by design) - [x] `lint-required-no-paths.py` (with token, BRANCH=main) — pass; confirms new context is NOT required so the `paths:` filter is safe to land - [ ] First `peer-visibility` run on `main` after merge is expected **RED** (Hermes-401 / OpenClaw-MCP-wiring not yet fixed) — this is the gate working as designed - [ ] Goes **green** only post-fix; then flip to required per #1296 Refs: #1296 🤖 Generated with [Claude Code](https://claude.com/claude-code)
core-devops added 1 commit 2026-05-16 06:10:42 +00:00
test(e2e): gate fresh-provision peer-visibility via the literal MCP list_peers call
qa-review / approved (pull_request) Waiting to run
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 30s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 22s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 35s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 20s
CI / Detect changes (pull_request) Successful in 49s
E2E API Smoke Test / detect-changes (pull_request) Successful in 50s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 49s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 40s
security-review / approved (pull_request) Failing after 41s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m33s
gate-check-v3 / gate-check (pull_request) Successful in 1m4s
sop-checklist / all-items-acked (pull_request) Successful in 25s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m30s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 10s
sop-tier-check / tier-check (pull_request) Successful in 25s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m50s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 11s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 7s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 2m51s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 2m48s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Failing after 2m50s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 1m46s
CI / Python Lint & Test (pull_request) Successful in 7m36s
CI / Canvas (Next.js) (pull_request) Successful in 19m17s
CI / Canvas Deploy Reminder (pull_request) Successful in 14s
CI / Platform (Go) (pull_request) Failing after 31m20s
CI / all-required (pull_request) Failing after 41m2s
2e8603f940
Hermes and OpenClaw were reported "fleet-verified / cascade-complete" off
proxy signals (registry registration + heartbeat; model round-trip 200)
while a freshly-provisioned workspace asked "can you see your peers" on
canvas actually FAILS (Hermes: 401 on the molecule MCP list_peers call;
OpenClaw: native sessions_list fallback, no platform peers). Tasks
#142/#159 were even marked "completed" under this proxy-verification flaw.

This adds a dedicated staging-E2E gate that codifies the LITERAL
user-facing path so it can never silently regress:

- New e2e-peer-visibility.yml + tests/e2e/test_peer_visibility_mcp_staging.sh.
- Provisions a brand-new throwaway org via the real CP provisioning path
  + one sibling workspace per runtime under test (hermes, openclaw,
  claude-code) under a shared parent.
- For each runtime, drives the byte-for-byte JSON-RPC tools/call
  name=list_peers envelope to POST /workspaces/:id/mcp using that
  workspace's OWN bearer token, through the real WorkspaceAuth +
  MCPRateLimiter chain. NOT a proxy: not GET /registry/:id/peers, not
  /health, not the heartbeat table.
- Asserts HTTP 200 + JSON-RPC result (not error) + the returned peer set
  literally contains the other provisioned sibling IDs (not empty, not a
  native-sessions fallback).
- Scoped teardown only of the e2e-pv-<run_id> org this run created
  (script EXIT trap + workflow always() net + sweep-stale-e2e-orgs as the
  final 'e2e-' prefix net) — never a cluster-wide cleanup.

Honest gate, NO continue-on-error: it is RED on today's broken behavior
by design and goes green only when the in-flight Hermes-401 +
OpenClaw-MCP-wiring root-cause fixes actually land. Landed NON-required
(not in branch_protections) so it does not wedge unrelated merges while
red; flip-to-required checklist tracked in molecule-core#1296.

Gitea-1.22.6 / act_runner hardening honored: mirrored actions/checkout
SHA (the one e2e-staging-canvas.yml uses successfully), per-SHA
concurrency, workflow-level GITHUB_SERVER_URL, no cross-repo uses.
Passes lint-workflow-yaml, lint-continue-on-error-tracking,
lint-required-no-paths locally.

Refs: molecule-core#1296

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
core-qa approved these changes 2026-05-16 06:25:31 +00:00
core-qa left a comment
Member

Five-axis review (genuine non-author, qa-team).

Correctness: driving script issues the byte-for-byte JSON-RPC tools/call name=list_peers envelope to POST /workspaces/:id/mcp with each workspace OWN bearer through the real WorkspaceAuth+MCPRateLimiter chain; asserts HTTP 200 + JSON-RPC result + expected sibling peer-ID set; correctly distinguishes 401 (Hermes), native sessions_list fallback (OpenClaw), missing/empty peer set. Exit 10 = designed regression. Not a proxy (no registry row/health/heartbeat read).

Safety/teardown: scoped DELETE of only e2e-pv-- slug with {confirm} fat-finger guard + EXIT/INT/TERM trap; workflow always() safety-net sweeps only this run slug (today+yesterday for midnight crossing); sweep-stale-e2e-orgs outer net. Honors never-run-cluster-cleanup-on-live-platform.

CI design: intentionally non-required (RED on todays broken Hermes/OpenClaw = gate working; flip-to-required tracked in #1296); honest gate, no continue-on-error mask; per-SHA concurrency; mirrored checkout SHA; no cross-repo uses; GITHUB_SERVER_URL pinned; pr-validate posts status under the check name so a workflow-only PR is not silently statusless.

Scope: exactly 2 new files, zero deletions, branch protection untouched.

Approved.

Five-axis review (genuine non-author, qa-team). Correctness: driving script issues the byte-for-byte JSON-RPC tools/call name=list_peers envelope to POST /workspaces/:id/mcp with each workspace OWN bearer through the real WorkspaceAuth+MCPRateLimiter chain; asserts HTTP 200 + JSON-RPC result + expected sibling peer-ID set; correctly distinguishes 401 (Hermes), native sessions_list fallback (OpenClaw), missing/empty peer set. Exit 10 = designed regression. Not a proxy (no registry row/health/heartbeat read). Safety/teardown: scoped DELETE of only e2e-pv-<date>-<runid> slug with {confirm} fat-finger guard + EXIT/INT/TERM trap; workflow always() safety-net sweeps only this run slug (today+yesterday for midnight crossing); sweep-stale-e2e-orgs outer net. Honors never-run-cluster-cleanup-on-live-platform. CI design: intentionally non-required (RED on todays broken Hermes/OpenClaw = gate working; flip-to-required tracked in #1296); honest gate, no continue-on-error mask; per-SHA concurrency; mirrored checkout SHA; no cross-repo uses; GITHUB_SERVER_URL pinned; pr-validate posts status under the check name so a workflow-only PR is not silently statusless. Scope: exactly 2 new files, zero deletions, branch protection untouched. Approved.
Member

[core-security-agent] N/A — E2E infrastructure. New e2e-peer-visibility.yml workflow + test_peer_visibility_mcp_staging.sh. Tests literal MCP list_peers against real staging endpoints using each workspace's own bearer token. All curl calls: hardcoded staging-api.moleculesai.app URLs, RPC_BODY is hardcoded JSON ({"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_peers"}}), tokens from platform API response. No exec from user input. No security surface.

[core-security-agent] N/A — E2E infrastructure. New e2e-peer-visibility.yml workflow + test_peer_visibility_mcp_staging.sh. Tests literal MCP list_peers against real staging endpoints using each workspace's own bearer token. All curl calls: hardcoded staging-api.moleculesai.app URLs, RPC_BODY is hardcoded JSON ({"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_peers"}}), tokens from platform API response. No exec from user input. No security surface.
core-devops added 1 commit 2026-05-16 06:59:24 +00:00
ci: re-trigger (prior run infra-failed: act_runner<->Gitea API read-timeout storm starved all-required aggregator + go test -race 10m budget blown on contended runner; PR touches zero Go) [no-op]
CI / Canvas Deploy Reminder (pull_request) Blocked by required conditions
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Waiting to run
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Waiting to run
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Waiting to run
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 25s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 40s
CI / Detect changes (pull_request) Successful in 1m40s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 28s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 35s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 29s
E2E API Smoke Test / detect-changes (pull_request) Successful in 2m18s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 2m19s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m54s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 30s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m49s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 4m38s
gate-check-v3 / gate-check (pull_request) Successful in 51s
qa-review / approved (pull_request) Successful in 30s
CI / Python Lint & Test (pull_request) Successful in 8m26s
sop-checklist / all-items-acked (pull_request) Successful in 28s
sop-tier-check / tier-check (pull_request) Successful in 27s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 19s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 10s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 5m31s
CI / Canvas (Next.js) (pull_request) Successful in 19m49s
CI / Platform (Go) (pull_request) Successful in 21m39s
CI / all-required (pull_request) Successful in 21m34s
audit-force-merge / audit (pull_request) Successful in 36s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Has been cancelled
c7eeec1607
core-qa approved these changes 2026-05-16 06:59:47 +00:00
core-qa left a comment
Member

Re-approve after empty-commit CI re-trigger. Prior run did NOT real-red this PR: all-required aggregator (task 107802) was starved by 29+ consecutive act_runner->Gitea API read-timeouts during the workflow storm and never observed any required context as failure; CI/Platform(Go) status never propagated to the API in any successful poll; Platform(Go) go test -race -timeout 10m blew its budget on a contention-starved shared runner (log-stream died 06:29:35, job ran to 06:42:08). PR adds ZERO Go code (only the 2 new files), so a Platform(Go) timeout cannot be caused by this PR — it is infra/runner+API saturation. Empty no-op commit; tree unchanged; diff still exactly .gitea/workflows/e2e-peer-visibility.yml + tests/e2e/test_peer_visibility_mcp_staging.sh. Five-axis review unchanged from review 4014 (genuine non-author core-qa; honest non-required gate; scoped teardown; branch protection untouched, flip tracked in #1296). Approved.

Re-approve after empty-commit CI re-trigger. Prior run did NOT real-red this PR: all-required aggregator (task 107802) was starved by 29+ consecutive act_runner->Gitea API read-timeouts during the workflow storm and never observed any required context as failure; CI/Platform(Go) status never propagated to the API in any successful poll; Platform(Go) go test -race -timeout 10m blew its budget on a contention-starved shared runner (log-stream died 06:29:35, job ran to 06:42:08). PR adds ZERO Go code (only the 2 new files), so a Platform(Go) timeout cannot be caused by this PR — it is infra/runner+API saturation. Empty no-op commit; tree unchanged; diff still exactly .gitea/workflows/e2e-peer-visibility.yml + tests/e2e/test_peer_visibility_mcp_staging.sh. Five-axis review unchanged from review 4014 (genuine non-author core-qa; honest non-required gate; scoped teardown; branch protection untouched, flip tracked in #1296). Approved.
devops-engineer merged commit 43a77ccfbc into main 2026-05-16 07:32:42 +00:00
Sign in to join this conversation.
No Reviewers
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#1298