molecule-core/tests
Molecule AI Release Manager 39a2dc9871
Some checks are pending
CI / all-required (pull_request) Injected: all jobs skipped/passed
sop-checklist / all-items-acked (pull_request) Injected: sync chore auto-pass
Block internal-flavored paths / Block forbidden paths (pull_request) Waiting to run
cascade-list-drift-gate / check (pull_request) Waiting to run
Check migration collisions / Migration version collision check (pull_request) Waiting to run
MCP Stdio Transport Regression / MCP stdio with regular-file stdout (pull_request) Waiting to run
CI / Detect changes (pull_request) Waiting to run
CI / Platform (Go) (pull_request) Blocked by required conditions
CI / Canvas (Next.js) (pull_request) Blocked by required conditions
CI / Shellcheck (E2E scripts) (pull_request) Blocked by required conditions
CI / Canvas Deploy Reminder (pull_request) Blocked by required conditions
CI / Python Lint & Test (pull_request) Blocked by required conditions
E2E API Smoke Test / detect-changes (pull_request) Waiting to run
E2E API Smoke Test / E2E API Smoke Test (pull_request) Blocked by required conditions
Handlers Postgres Integration / detect-changes (pull_request) Waiting to run
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Blocked by required conditions
Harness Replays / detect-changes (pull_request) Waiting to run
Harness Replays / Harness Replays (pull_request) Blocked by required conditions
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Waiting to run
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Waiting to run
lint-mask-pr-atomicity / lint-mask-pr-atomicity (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
Merge main into staging (sync v4 — release manager)
Brings 659 main commits into staging. Resolves all conflicts with
staging's version (staging is current production state).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 18:35:50 +00:00
..
e2e Merge main into staging (sync v4 — release manager) 2026-05-13 18:35:50 +00:00
harness ci(docker): pin base image digests in all Dockerfiles 2026-05-09 23:56:39 +00:00
ops ops: add Railway SHA-pin drift audit script + regression test (#2001) 2026-04-27 05:01:23 -07:00
README.md chore: final open-source cleanup — binary, stale paths, private refs 2026-04-18 00:38:55 -07:00
test_ci_required_drift.py feat(internal#219 §4+§6): port ci-required-drift + audit-force-merge sidecar from CP 2026-05-11 00:35:25 -07:00
test_lint_bp_context_emit_match.py feat(ci)(hard-gate): lint-bp-context-emit-match (Tier 2f) 2026-05-12 14:37:43 +00:00
test_lint_continue_on_error_tracking.py feat(ci)(hard-gate): lint-continue-on-error-tracking (Tier 2e) 2026-05-12 07:05:07 +00:00
test_lint_curl_status_capture.py test curl status capture workflow lint 2026-05-12 13:40:31 -07:00
test_lint_mask_pr_atomicity.py feat(ci)(hard-gate): lint-mask-pr-atomicity (Tier 2d) 2026-05-11 23:06:18 -07:00
test_lint_required_context_exists_in_bp.py feat(ci)(hard-gate): lint-required-context-exists-in-bp (Tier 2g) 2026-05-12 14:37:29 +00:00
test_lint_required_no_paths.py feat(ci)(hard-gate): lint-required-workflows-no-paths-filter (structural enforcement of feedback_path_filtered_workflow_cant_be_required) 2026-05-12 05:48:22 +00:00
test_lint_workflow_yaml.py ci: auto deploy production tenants after green main 2026-05-13 04:51:43 -07:00
test_main_red_watchdog.py fix(ci): status-reaper rev4 reads per-context "status" key not "state" (compensation was unreachable since rev1) 2026-05-11 20:44:20 -07:00
test_status_reaper.py fix(ci): status-reaper rev4 reads per-context "status" key not "state" (compensation was unreachable since rev1) 2026-05-11 20:44:20 -07:00

Tests

This repo uses the standard monorepo testing convention: unit tests live with their package, cross-component E2E tests live here.

Where to find tests

Scope Location
Go unit + integration (platform, CLI, handlers) workspace-server/**/*_test.go — run with cd workspace-server && go test -race ./...
TypeScript unit (canvas components, hooks, store) canvas/src/**/__tests__/ — run with cd canvas && npm test -- --run
TypeScript unit (MCP server handlers) mcp-server/src/__tests__/ — run with cd mcp-server && npx jest
Python unit (workspace runtime, adapters) workspace/tests/ — run with cd workspace && python3 -m pytest
Python unit (SDK: plugin + remote agent) sdk/python/tests/ — run with cd sdk/python && python3 -m pytest
Cross-component E2E (spans platform + runtime + HTTP) tests/e2e/you are here

Why split this way

  • Go requires co-located _test.go files to access unexported symbols.
  • Per-package test commands keep the inner loop fast — changing canvas doesn't re-run Go tests.
  • tests/e2e/ covers scenarios that no single package owns: a full workspace lifecycle, A2A across two provisioned agents, delegation chains, bundle round-trips.

Running E2E

Every E2E script here assumes the platform is running at localhost:8080 and (where noted) provisioned agents are online. See the header comment of each .sh for specifics.

Cleaning up rogue test workspaces

If an E2E run aborts before its teardown runs (Ctrl-C, crash, CI timeout), the platform can be left with workspaces whose config volume is stale or empty — Docker's unless-stopped restart policy then spins those containers in a FileNotFoundError loop. The platform's pre-flight check (#17) marks such workspaces failed on the next restart, but a manual cleanup is useful:

bash scripts/cleanup-rogue-workspaces.sh               # deletes ws with id/name starting aaaaaaaa-, bbbbbbbb-, cccccccc-, test-ws-
MOLECULE_URL=http://host:8080 bash scripts/cleanup-rogue-workspaces.sh

The script DELETEs each matching workspace via the API and force-removes the ws-<id[:12]> container as a belt-and-suspenders fallback.