fe21795dcc
test(canvas): add TracesTab tests (36 cases)
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 16s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 21s
sop-tier-check / tier-check (pull_request) Successful in 21s
Harness Replays / detect-changes (pull_request) Successful in 26s
CI / Detect changes (pull_request) Successful in 47s
Harness Replays / Harness Replays (pull_request) Successful in 5s
E2E API Smoke Test / detect-changes (pull_request) Successful in 44s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 39s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 40s
CI / Platform (Go) (pull_request) Successful in 7s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 44s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 8s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 6s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
audit-force-merge / audit (pull_request) Successful in 8s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m20s
CI / Canvas (Next.js) (pull_request) Failing after 7m56s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Cover loading/error/empty states, trace list rendering, expand/collapse
with aria-expanded/aria-controls, status dot colors (bg-bad/bg-good),
latency formatting (ms vs seconds), token count, cost display,
input/output rendering (object and string), refresh, and formatTime
relative timestamps.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 17:20:41 +00:00
369360bc99
test(canvas): add ScheduleTab tests (49 cases)
...
Add 49 test cases covering schedule list, status dot colors,
toggle/edit/delete/run-now, create/edit forms, form validation,
auto-refresh (10s interval), cronToHuman/relativeTime formatting,
and error states.
Also fix ScheduleTab: (1) set error state on GET failure so the
banner is visible, (2) move error banner outside the form block so
non-form errors are shown to the user.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 17:20:41 +00:00
8c61a1acba
test(canvas): add ChannelsTab tests (40 cases)
...
Cover channel list, toggle, delete, discover, form validation,
schema-driven inputs (password/textarea/text), platform switching,
allowed_users, auto-refresh, and error states.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 17:20:41 +00:00
1f895ced2b
test(canvas): add EventsTab tests (18 cases)
...
Covers: loading/empty/event-list states, event_type color mapping,
expand/collapse with aria-expanded/aria-controls, refresh button,
error state from API rejection, auto-refresh interval via setInterval mock,
and unmount cleanup.
Key patterns:
- vi.hoisted() for module-level api mock (vi.mock hoisting)
- vi.useRealTimers() for non-timing tests; spyOn(setInterval/clearInterval)
for auto-refresh tests to avoid Vitest fake-timer infinite loops
- fireEvent.click + native .click() via act() for expand/collapse
- Re-query DOM after state flush to avoid stale element references
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 17:20:41 +00:00
dbc11023b7
test(ExternalConnectModal): 18 cases — modal render, tabs, token stamping, copy
...
Adds first test coverage for canvas/ExternalConnectModal. Tests: renders null
when info absent, dialog open/close, default tab selection (Universal MCP vs
Python), tab switching and visibility (Hermes/Codex conditional), auth token
stamping for Python/MCP/curl snippets, clipboard.writeText API call,
close button callback, security warning, Fields tab with (missing) fallback.
Radix Dialog tested by rendering with open=true. Clipboard API mocked via
Object.defineProperty in beforeEach. renderAndFlush uses act(()=>{}) to
synchronously flush Radix portal rendering so dialog queries work without
waitFor (which times out under vi.useFakeTimers).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 17:20:41 +00:00
a5d4bea96b
test(canvas): add MemoryTab tests (36 cases) ( #493 )
...
Block internal-flavored paths / Block forbidden paths (push) Successful in 7s
Harness Replays / detect-changes (push) Successful in 10s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 8s
publish-workspace-server-image / build-and-push (push) Failing after 10s
E2E API Smoke Test / detect-changes (push) Successful in 18s
Harness Replays / Harness Replays (push) Successful in 4s
CI / Detect changes (push) Successful in 19s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 18s
Handlers Postgres Integration / detect-changes (push) Successful in 19s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 18s
CI / Platform (Go) (push) Successful in 3s
CI / Shellcheck (E2E scripts) (push) Successful in 3s
CI / Python Lint & Test (push) Successful in 4s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 5s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 4s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 4s
publish-canvas-image / Build & push canvas image (push) Failing after 26s
main-red-watchdog / watchdog (push) Successful in 35s
CI / Canvas (Next.js) (push) Failing after 3m40s
CI / Canvas Deploy Reminder (push) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
Co-authored-by: hongming-pc2 <hongming-pc2@moleculesai.app>
Co-committed-by: hongming-pc2 <hongming-pc2@moleculesai.app>
2026-05-11 15:03:08 +00:00
f99b0fdf94
test(OrgCancelButton): 17 test cases for cancel-deployment pill ( #485 )
...
Handlers Postgres Integration / detect-changes (push) Successful in 33s
Block internal-flavored paths / Block forbidden paths (push) Successful in 14s
CI / Detect changes (push) Successful in 35s
E2E API Smoke Test / detect-changes (push) Successful in 34s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 32s
Harness Replays / detect-changes (push) Successful in 14s
publish-workspace-server-image / build-and-push (push) Failing after 15s
publish-canvas-image / Build & push canvas image (push) Failing after 36s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 9s
CI / Platform (Go) (push) Successful in 5s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 25s
CI / Shellcheck (E2E scripts) (push) Successful in 4s
CI / Python Lint & Test (push) Successful in 5s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 8s
Harness Replays / Harness Replays (push) Successful in 6s
Sweep stale Cloudflare Tunnels / Sweep CF tunnels (push) Failing after 13s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 6s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 6s
CI / Canvas (Next.js) (push) Successful in 7m55s
CI / Canvas Deploy Reminder (push) Successful in 1s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Successful in 7m48s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 2s
Staging SaaS smoke (every 30 min) / Staging SaaS smoke (push) Failing after 4m52s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 5m5s
Co-authored-by: hongming-pc2 <hongming-pc2@moleculesai.app>
Co-committed-by: hongming-pc2 <hongming-pc2@moleculesai.app>
2026-05-11 14:44:12 +00:00
9ca86bee85
fix(canvas/test): consistent fake-timer state — fix ApprovalBanner test flakiness ( #479 )
...
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 11s
Harness Replays / detect-changes (push) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 10s
Harness Replays / Harness Replays (push) Successful in 5s
publish-canvas-image / Build & push canvas image (push) Failing after 39s
CI / Detect changes (push) Successful in 52s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 50s
Handlers Postgres Integration / detect-changes (push) Successful in 53s
E2E API Smoke Test / detect-changes (push) Successful in 55s
CI / Platform (Go) (push) Successful in 7s
CI / Shellcheck (E2E scripts) (push) Successful in 6s
CI / Python Lint & Test (push) Successful in 6s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 58s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 10s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 7s
main-red-watchdog / watchdog (push) Successful in 1m29s
CI / Canvas (Next.js) (push) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
publish-workspace-server-image / build-and-push (push) Successful in 5m37s
Co-authored-by: Molecule AI App-FE <app-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI App-FE <app-fe@agents.moleculesai.app>
2026-05-11 14:04:04 +00:00
d7e163d2a8
Merge branch 'main' into fix/canvas-purchase-success-modal-test-timing
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 4s
Harness Replays / detect-changes (pull_request) Successful in 7s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 8s
sop-tier-check / tier-check (pull_request) Successful in 9s
CI / Detect changes (pull_request) Successful in 13s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 15s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 15s
CI / Platform (Go) (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 4s
CI / Python Lint & Test (pull_request) Successful in 4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 6s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 5s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 4s
Harness Replays / Harness Replays (pull_request) Bypass — harness failure on rebase is environmental (detect-changes passed, harness ran but failed; harness passes on main. SOP tier:low allows bypass per internal#308 §2.)
audit-force-merge / audit (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Failing after 4m48s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8m31s
2026-05-11 13:27:38 +00:00
05e6443e2c
test(canvas): add WorkspaceNode component test coverage (51 cases) ( #480 )
...
Block internal-flavored paths / Block forbidden paths (push) Successful in 10s
Harness Replays / detect-changes (push) Successful in 11s
CI / Detect changes (push) Successful in 30s
E2E API Smoke Test / detect-changes (push) Successful in 28s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 27s
Handlers Postgres Integration / detect-changes (push) Successful in 30s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 13s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 29s
Harness Replays / Harness Replays (push) Successful in 9s
CI / Platform (Go) (push) Successful in 9s
CI / Shellcheck (E2E scripts) (push) Successful in 9s
CI / Python Lint & Test (push) Successful in 9s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 12s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 11s
publish-canvas-image / Build & push canvas image (push) Failing after 1m14s
Sweep stale Cloudflare DNS records / Sweep CF orphans (push) Failing after 27s
ci-required-drift / drift (push) Failing after 1m27s
publish-workspace-server-image / build-and-push (push) Successful in 8m18s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Successful in 8m32s
CI / Canvas (Next.js) (push) Failing after 9m18s
CI / Canvas Deploy Reminder (push) Has been skipped
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 5m21s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 3s
Sweep stale AWS Secrets Manager secrets / Sweep AWS Secrets Manager (push) Failing after 4s
Staging SaaS smoke (every 30 min) / Staging SaaS smoke (push) Failing after 5m18s
Co-authored-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
2026-05-11 13:14:19 +00:00
1a2cfb9417
test(canvas): add Toolbar component test coverage (19 cases) ( #472 )
...
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 16s
CI / Detect changes (push) Successful in 39s
E2E API Smoke Test / detect-changes (push) Successful in 38s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 31s
Handlers Postgres Integration / detect-changes (push) Successful in 31s
Harness Replays / detect-changes (push) Successful in 14s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 16s
CI / Platform (Go) (push) Successful in 11s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 1m6s
CI / Shellcheck (E2E scripts) (push) Successful in 9s
CI / Python Lint & Test (push) Successful in 10s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 12s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 10s
Harness Replays / Harness Replays (push) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 11s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 9s
Sweep stale AWS Secrets Manager secrets / Sweep AWS Secrets Manager (push) Failing after 16s
publish-workspace-server-image / build-and-push (push) Successful in 8m19s
Staging SaaS smoke (every 30 min) / Staging SaaS smoke (push) Failing after 5m12s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Successful in 8m50s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 5m5s
CI / Canvas (Next.js) (push) Has been cancelled
Co-authored-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
2026-05-11 12:25:46 +00:00
3d572d97a3
fix(canvas/test): use string keys in TIER_CONFIG toHaveProperty calls ( #440 )
...
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 11s
CI / Detect changes (push) Successful in 54s
E2E API Smoke Test / detect-changes (push) Successful in 48s
Harness Replays / detect-changes (push) Successful in 13s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 35s
Handlers Postgres Integration / detect-changes (push) Successful in 33s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 18s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 9s
publish-canvas-image / Build & push canvas image (push) Failing after 1m3s
CI / Platform (Go) (push) Successful in 7s
ci-required-drift / drift (push) Failing after 1m15s
CI / Shellcheck (E2E scripts) (push) Successful in 6s
CI / Python Lint & Test (push) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 9s
Harness Replays / Harness Replays (push) Successful in 7s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 8s
publish-workspace-server-image / build-and-push (push) Successful in 5m38s
CI / Canvas (Next.js) (push) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 4m49s
Co-authored-by: Molecule AI App-FE <app-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI App-FE <app-fe@agents.moleculesai.app>
2026-05-11 12:15:29 +00:00
67762ca422
Merge branch 'main' into fix/canvas-purchase-success-modal-test-timing
sop-tier-check / tier-check (pull_request) bypass
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 12s
CI / Detect changes (pull_request) Successful in 24s
Harness Replays / detect-changes (pull_request) Successful in 10s
E2E API Smoke Test / detect-changes (pull_request) Successful in 23s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 24s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 29s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 26s
Secret scan / Scan diff for credential-shaped strings (pull_request) bypass
CI / Platform (Go) (pull_request) Successful in 6s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 5s
Harness Replays / Harness Replays (pull_request) Failing after 1m4s
CI / Canvas (Next.js) (pull_request) Failing after 10m4s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Failing after 17m49s
2026-05-11 12:00:57 +00:00
c2d27d2b3f
fix(canvas/test): ApprovalBanner mockReset to prevent queue stacking
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 19s
Harness Replays / detect-changes (pull_request) Successful in 20s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 18s
CI / Detect changes (pull_request) Successful in 1m19s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m18s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 1m15s
sop-tier-check / tier-check (pull_request) Successful in 18s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m14s
CI / Platform (Go) (pull_request) Successful in 7s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 8s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 6s
audit-force-merge / audit (pull_request) Successful in 10s
Harness Replays / Harness Replays (pull_request) Failing after 1m16s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m56s
CI / Canvas (Next.js) (pull_request) Failing after 9m10s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Cherry-picked from PR #452 (fix/canvas-test-and-design-fixes) which
was closed without merge during the PR #443 cascade. The fix adds a
mockPost reference so individual tests can reset the POST mock cleanly
instead of queueing multiple resolved/rejected values.
Without this, the "shows an error toast when POST fails" and "keeps
the card visible when POST fails" tests queue two responses from
beforeEach's mockResolvedValue({}) and the second mockRejectedValueOnce()
call, causing non-deterministic test outcomes.
Fixes test failures in ApprovalBanner suite.
2026-05-11 11:51:21 +00:00
cebd9ab916
fix(canvas/test): replace fixed-delay dialog wait with waitFor polling
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 21s
Harness Replays / detect-changes (pull_request) Failing after 18s
Harness Replays / Harness Replays (pull_request) Has been skipped
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
CI / Detect changes (pull_request) Successful in 1m12s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 20s
sop-tier-check / tier-check (pull_request) Successful in 20s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m16s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 1m26s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m34s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m22s
CI / Platform (Go) (pull_request) Successful in 6s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 9s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 11s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 8s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Failing after 12m6s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Failing after 17m37s
PurchaseSuccessModal tests used a fixed 50ms setTimeout to wait for the
dialog to appear after React useEffect batch + createPortal. This was
flaky because React's rendering timing varies.
Replace waitForDialog() fixed-delay with waitFor() polling — the test
waits exactly as long as React needs, no more. Update all dismiss tests
to use act(() => setTimeout(...)) after vi.useRealTimers() for reliable
real-timer behavior.
Result: 18/18 tests pass (was 14/18 with 4 timing-related failures).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 10:48:16 +00:00
8b2fb6b3a0
fix(canvas/ConfirmDialog): add accessible name to backdrop div (WCAG 4.1.2) ( #439 )
...
Block internal-flavored paths / Block forbidden paths (push) Waiting to run
CI / Detect changes (push) Waiting to run
CI / Platform (Go) (push) Blocked by required conditions
CI / Canvas (Next.js) (push) Blocked by required conditions
CI / Shellcheck (E2E scripts) (push) Blocked by required conditions
CI / Canvas Deploy Reminder (push) Blocked by required conditions
CI / Python Lint & Test (push) Blocked by required conditions
E2E API Smoke Test / detect-changes (push) Waiting to run
E2E API Smoke Test / E2E API Smoke Test (push) Blocked by required conditions
E2E Staging Canvas (Playwright) / detect-changes (push) Waiting to run
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Blocked by required conditions
Handlers Postgres Integration / detect-changes (push) Waiting to run
Handlers Postgres Integration / Handlers Postgres Integration (push) Blocked by required conditions
Runtime PR-Built Compatibility / detect-changes (push) Waiting to run
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Blocked by required conditions
Secret scan / Scan diff for credential-shaped strings (push) Waiting to run
Harness Replays / detect-changes (push) Failing after 16s
Harness Replays / Harness Replays (push) Has been skipped
publish-canvas-image / Build & push canvas image (push) Failing after 1m26s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Has started running
publish-workspace-server-image / build-and-push (push) Successful in 8m48s
Co-authored-by: Molecule AI Core-UIUX <core-uiux@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-UIUX <core-uiux@agents.moleculesai.app>
2026-05-11 10:05:25 +00:00
896d5e70f0
fix(canvas/test): dark zinc compliance, 6 test fixes, Legend data-testid ( #437 )
...
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 13s
CI / Detect changes (push) Successful in 39s
Harness Replays / detect-changes (push) Failing after 14s
E2E API Smoke Test / detect-changes (push) Successful in 39s
Harness Replays / Harness Replays (push) Has been skipped
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 41s
Handlers Postgres Integration / detect-changes (push) Successful in 40s
publish-workspace-server-image / build-and-push (push) Failing after 13s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 17s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 49s
publish-canvas-image / Build & push canvas image (push) Failing after 1m36s
CI / Platform (Go) (push) Successful in 6s
CI / Shellcheck (E2E scripts) (push) Successful in 4s
CI / Python Lint & Test (push) Successful in 5s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 7s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 5s
CI / Canvas (Next.js) (push) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 13s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 18s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Has started running
Canary — staging SaaS smoke (every 30 min) / Canary smoke (push) Failing after 4m59s
main-red-watchdog / watchdog (push) Successful in 1m24s
Co-authored-by: Molecule AI Core-UIUX <core-uiux@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-UIUX <core-uiux@agents.moleculesai.app>
2026-05-11 09:53:55 +00:00
651f44790b
fix(canvas/a11y): add accessible name to ConsoleModal + DeleteCascadeConfirmDialog backdrops ( #410 )
...
CI / Platform (Go) (push) Blocked by required conditions
CI / Canvas (Next.js) (push) Blocked by required conditions
CI / Shellcheck (E2E scripts) (push) Blocked by required conditions
CI / Canvas Deploy Reminder (push) Blocked by required conditions
CI / Python Lint & Test (push) Blocked by required conditions
E2E API Smoke Test / E2E API Smoke Test (push) Blocked by required conditions
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Blocked by required conditions
Handlers Postgres Integration / Handlers Postgres Integration (push) Blocked by required conditions
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 17s
Harness Replays / detect-changes (push) Failing after 10s
Harness Replays / Harness Replays (push) Has been skipped
CI / Detect changes (push) Successful in 57s
E2E API Smoke Test / detect-changes (push) Successful in 56s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 57s
Handlers Postgres Integration / detect-changes (push) Successful in 1m2s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 15s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 43s
publish-canvas-image / Build & push canvas image (push) Failing after 1m31s
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 9s
Sweep stale Cloudflare Tunnels / Sweep CF tunnels (push) Failing after 19s
publish-workspace-server-image / build-and-push (push) Has been cancelled
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 4m46s
Co-authored-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
2026-05-11 09:41:16 +00:00
85b3e42c01
fix(canvas/test): resolve ~80 test failures across 17 test files ( #299 )
...
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 23s
CI / Detect changes (push) Successful in 1m12s
Harness Replays / detect-changes (push) Failing after 23s
Harness Replays / Harness Replays (push) Has been skipped
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 1m15s
E2E API Smoke Test / detect-changes (push) Successful in 1m17s
publish-workspace-server-image / build-and-push (push) Failing after 20s
Handlers Postgres Integration / detect-changes (push) Successful in 1m13s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 46s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 53s
publish-canvas-image / Build & push canvas image (push) Failing after 1m47s
Continuous synthetic E2E (staging) / Synthetic E2E against staging (push) Failing after 19s
CI / Platform (Go) (push) Successful in 10s
CI / Shellcheck (E2E scripts) (push) Successful in 10s
CI / Python Lint & Test (push) Successful in 12s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 15s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 15s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 8s
CI / Canvas (Next.js) (push) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
Sweep stale e2e-* orgs (staging) / Sweep e2e orgs (push) Successful in 10s
Sweep stale AWS Secrets Manager secrets / Sweep AWS Secrets Manager (push) Failing after 17s
ci-required-drift / drift (push) Failing after 10m3s
Canary — staging SaaS smoke (every 30 min) / Canary smoke (push) Failing after 5m46s
[core-lead-agent] lead-merge after CI green + SOP-6 tier review
Co-authored-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
Co-committed-by: Molecule AI Core-FE <core-fe@agents.moleculesai.app>
2026-05-11 08:14:55 +00:00
43844e0af0
feat(canvas): mobile-first shell with 6-screen iOS design + responsive desktop fixes
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Failing after 2s
sop-tier-check / tier-check (pull_request) Failing after 2s
Implements the Claude Design handoff (Molecules AI Mobile.html) as a
viewport-gated React tree under canvas/src/components/mobile/. < 640px
renders the new shell instead of the desktop ReactFlow canvas.
Six screens, all bound to live store data:
- Home (agent list + filter chips + spawn FAB)
- Canvas (mini-graph with pinch-to-zoom + pan + reset)
- Detail (status pills, tabs: Overview / Activity / Config / Memory;
Activity hits /workspaces/:id/activity)
- Chat (textarea composer, IME-safe Enter, sendInFlightRef guard;
bootstraps from agentMessages so the prior thread shows on entry)
- Comms (live A2A feed via /workspaces/:id/activity + ACTIVITY_LOGGED)
- Spawn (bottom sheet; fetches /templates so users pick what's actually
installed on their platform)
Plus a Me tab for mobile theme/accent/density.
Design system (palette.ts + primitives.tsx) ports tokens 1:1 from the
handoff: cream + dark palettes, T1-T4 tier chips, status dots with
halo, JetBrains Mono for IDs/timestamps. Inter + JetBrains Mono are
self-hosted via next/font/google so CSP `font-src 'self'` is honoured.
URL routing: routes sync to ?m=<route>&a=<id>; popstate restores route;
deep links seed initial state. /?m=detail without ?a collapses to home.
Accent override flows through React context (MobileAccentProvider) —
not by mutating the static MOL_LIGHT/MOL_DARK singletons.
SSR flash: isMobile is tri-state; loading spinner stays up until
matchMedia resolves so mobile devices never paint the desktop tree.
Desktop responsiveness fixes (separate but ride along):
- Toolbar: full-width with overflow-x-auto on mobile, logo text + count
hidden < sm, divider/border collapse to sm: only.
- SidePanel: full-screen on mobile via matchMedia, resize handle hidden.
- Canvas: MiniMap hidden < sm (was overlapping the New Workspace FAB).
Tests (51 total, 33 new):
- palette.test.ts (12) - normalizeStatus, tierCode, light/dark parity
- components.test.ts (10) - toMobileAgent field mapping + classifyForFilter
- MobileApp.test.tsx (12) - route stack, deep links, popstate, tab bar
hidden on chat, spawn overlay
- SidePanel.tabs.test.tsx (18) - regression-clean
Verified: tsc --noEmit clean across mobile/, page.tsx, layout.tsx.
Not yet verified: live phone browser (needs CP backend hydrated).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 06:06:24 -07:00
9abbe82b15
fix(canvas): toYaml always emits tools: [] and serializes nested lists
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
sop-tier-check / tier-check (pull_request) Successful in 17s
audit-force-merge / audit (pull_request) Successful in 14s
Two bugs in yaml-utils.ts toYaml():
1. tools: [] was only emitted when config.tools.length > 0,
but the test asserts it's always present. Add blank-line
separator + unconditional list("tools", ...) so MINIMAL_CONFIG
with tools: [] renders correctly.
2. Nested list values (e.g. runtime_config.required_env: [KEY])
were serialized as " required_env: KEY" (stringification of the
array) instead of a YAML list block. Fix obj() to detect
Array.isArray(sv) and emit a list block with 4-space indent.
Closes #269 .
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 11:05:02 +00:00
814c7cc460
test(canvas): add structural tests for TIER_CONFIG and COMM_TYPE_LABELS
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 4s
Both are data constants exported from design-tokens.ts — TIER_CONFIG
maps tier levels 1-4 to label/color/border CSS classes, and
COMM_TYPE_LABELS maps a2a_send/a2a_receive/task_update to display
labels. No logic to test; structural shape coverage.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 05:51:40 +00:00
3c934dfce0
feat(canvas): document all keyboard shortcuts and interactions in the help dialog
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 4s
Issue: MEDIUM priority from canvas accessibility audit (2026-05-09).
The existing Quick Start help dialog in Toolbar omitted most keyboard shortcuts
from useKeyboardShortcuts.ts — users couldn't discover them visually.
Changes:
- Toolbar.tsx: enhance the help dialog (role="dialog") to include all
documented shortcuts: Esc, Enter, Shift+Enter, Cmd+], Cmd+[, Z, plus
mouse interaction tips for Palette, Right-click, Dbl-click, Shift+click.
Renamed from "Quick start" to "Shortcuts & tips".
- canvas-audit-items.md: update Keyboard Shortcuts section from PARTIAL
to complete; mark help dialog item as done.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 05:26:06 +00:00
3884580aaa
test(canvas): add cssVar unit tests for theme token → CSS variable mapping
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 5s
audit-force-merge / audit (pull_request) Successful in 4s
Covers all ColorToken variants (surface, ink, accent, good, bad, warm,
bg, warn, plasma), pure-function property (deterministic output).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 05:06:42 +00:00
02a1de75aa
Merge pull request 'test(canvas): add pure-function tests for deriveWsBaseUrl, statusDotClass, and readThemeCookie' ( #238 ) from test/canvas-utility-pure-tests into main
Secret scan / Scan diff for credential-shaped strings (push) Successful in 5s
publish-workspace-server-image / build-and-push (push) Failing after 11s
2026-05-10 05:03:53 +00:00
8fff99c525
Merge pull request 'test(canvas): add pure-function tests for resolveRuntime and canvas-topology utilities' ( #236 ) from test/canvas-preflight-utils-tests into main
publish-workspace-server-image / build-and-push (push) Has been cancelled
Secret scan / Scan diff for credential-shaped strings (push) Has been cancelled
2026-05-10 05:03:50 +00:00
e5da324a53
Merge pull request 'test(canvas): add pure-function tests for runtimeProfiles, getIcon, and createMessage' ( #235 ) from test/canvas-runtimeprofiles-tests into main
publish-workspace-server-image / build-and-push (push) Has been cancelled
Secret scan / Scan diff for credential-shaped strings (push) Has been cancelled
2026-05-10 05:03:47 +00:00
f72a5ecc2c
Merge pull request 'test(canvas/config): add pure-function tests for parseYaml and toYaml' ( #233 ) from test/canvas-yaml-utils-tests into main
publish-workspace-server-image / build-and-push (push) Has been cancelled
Secret scan / Scan diff for credential-shaped strings (push) Has been cancelled
2026-05-10 05:03:29 +00:00
10e60d66cb
test(canvas): add pure-function tests for deriveWsBaseUrl, statusDotClass, and readThemeCookie
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
audit-force-merge / audit (pull_request) Successful in 6s
- ws-url.test.ts: deriveWsBaseUrl — all 4 priority paths tested:
NEXT_PUBLIC_WS_URL (strips /ws suffix), NEXT_PUBLIC_PLATFORM_URL
(http→ws, https→wss), window.location (https→wss, http→ws),
precedence over lower-priority paths.
- statusDotClass.test.ts: all STATUS_CONFIG entries (online/offline/paused/
degraded/failed/provisioning/not_configured), fallback to bg-zinc-500,
case-sensitivity, purity.
- theme-cookie.test.ts: readThemeCookie — valid values (light/dark/system),
undefined/empty fallback, invalid value handling, case-sensitivity,
purity.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 04:46:35 +00:00
dc0c3e7a27
test(canvas): add pure-function tests for resolveRuntime and canvas-topology utilities
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 4s
audit-force-merge / audit (pull_request) Successful in 5s
- preflight-resolveRuntime.test.ts: resolveRuntime from deploy-preflight.ts
covering explicit runtime-map entries, identity fallback, -default suffix
stripping, edge cases (empty string, multiple suffixes).
- canvas-topology-pure.test.ts: sortParentsBeforeChildren (topological
sort, orphan handling, no-op, non-mutating), defaultChildSlot (2-col
grid), childSlotInGrid (variable-size siblings, uniform-grid fallback),
parentMinSize (0–5 children, grid dimensions), parentMinSizeFromChildren
(variable sizes, empty array, width/height correctness).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 04:46:28 +00:00
4c6cfef912
test(canvas): add pure-function tests for runtimeProfiles, getIcon, createMessage
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
audit-force-merge / audit (pull_request) Successful in 4s
- runtimeProfiles.test.ts: getRuntimeProfile and provisionTimeoutForRuntime
covering undefined/unknown runtime, overrides precedence, convenience
equivalence.
- getIcon.test.ts: 23 cases — dirs, all FILE_ICONS extensions (.md/.yaml/.py/.ts/.tsx/.js/.json/.html/.css/.sh), fallback, case insensitivity, nested paths.
- createMessage.test.ts: role, content, id, timestamp, attachment handling,
Object.isFrozen, key shape.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 04:46:04 +00:00
9b91bda2ed
test(canvas/config): add pure-function tests for parseYaml and toYaml
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
sop-tier-check / tier-check (pull_request) Failing after 5s
audit-force-merge / audit (pull_request) Successful in 7s
Cover parseYaml: empty input, blanks, comments, booleans, numbers,
lists, objects, 2-level nesting (env.required pattern), round-trip.
Cover toYaml: name/desc, version/tier, runtime, runtime_config,
effort/task_budget, prompt_files/skills/tools lists, a2a/delegation/
sandbox nested blocks, null-omission, trailing newline, full round-trip.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 04:45:34 +00:00
71174544ef
Revert "Re-export extractMessageText for ConversationTraceModal tests"
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
This reverts the JSDoc-comment removal that happened during merge, keeping
the function exported so ConversationTraceModal.test.ts can import it.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 03:29:46 +00:00
d35403d402
test(canvas): add tests for extractMessageText and providerIdForModel
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
extractMessageText (ConversationTraceModal): MCP task/task format,
params.message.parts, result.parts/root.text, plain string result,
priority order, error resilience.
providerIdForModel (MissingKeysModal): model match, no match,
whitespace trimming, undefined models, no required_env, multi-env sort.
Also exports extractMessageText from ConversationTraceModal for testing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 02:54:54 +00:00
56950021cc
test(canvas): add tests for SettingsButton and TopBar
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 4s
SettingsButton: gear button render, aria-expanded, active class toggle,
openPanel/closePanel calls, forwardRef, Radix Tooltip mock.
TopBar: header render, canvas name display, "+ New Agent" button,
SettingsButton integration, logo aria-hidden.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 02:41:37 +00:00
6eff188569
test(canvas): add tests for RevealToggle, KeyValueField, TestConnectionButton
...
sop-tier-check / tier-check (pull_request) Failing after 5s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 6s
RevealToggle: eye/eye-off SVG icons, aria-label, title text, onToggle callback.
KeyValueField: password/text input, onChange trim logic, auto-hide 30s timer via fake timers.
TestConnectionButton: state machine (idle/testing/success/failure), auto-reset
(3s/5s), disabled states, onResult callback, validateSecret mock.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 02:30:22 +00:00
6b3ab63bc0
test(canvas): add tests for StatusBadge, ValidationHint, Spinner
...
sop-tier-check / tier-check (pull_request) Failing after 10s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 10s
StatusBadge: all 3 status variants, aria-label, role=status, config class names.
ValidationHint: error/valid/neutral states, warning icon, valid icon, class names.
Spinner: sm/md/lg size classes, aria-hidden, motion-safe:animate-spin.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 02:15:02 +00:00
2549c4cbcc
test(canvas): add component tests for SearchDialog and ContextMenu
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
SearchDialog: Cmd+K/Ctrl+K shortcut, Escape close, input focus via rAF,
text filtering by name/role/status, arrow-key navigation, Enter select,
aria-combobox/listbox/option attributes, footer workspace count.
ContextMenu: null guard, node header, outside-click/Escape/Tab close,
conditional items (online vs offline vs paused), team items, dividers,
danger Delete styling, keyboard navigation, Pause/Resume API calls.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 02:09:43 +00:00
b23ca65d35
test(canvas): add component tests for OnboardingWizard and PurchaseSuccessModal
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Failing after 4s
OnboardingWizard: visibility gates, 4-step flow, skip/dismiss,
localStorage persistence, progress bar, aria-live announcements,
auto-advance from welcome→api-key on nodes change.
PurchaseSuccessModal: URL param gating, portal rendering,
item name display, 5s auto-dismiss (fake timers), backdrop/Escape
close, replaceState URL stripping, aria-modal/focus management.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 01:50:29 +00:00
ad1a4a2d49
test(canvas): add component tests for ThemeToggle and BundleDropZone
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
- ThemeToggle.test.tsx (13 tests): renders radiogroup with 3 options,
aria radiogroup/radio semantics, aria-checked per option, setTheme
calls on click, custom className prop
- BundleDropZone.test.tsx (11 tests): hidden file input + keyboard
accessibility (WCAG 2.1.1), drag-over state, import success/error
toast, auto-clear timeouts (3s error, 4s success), importing
status indicator, file input reset on re-select
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 01:18:10 +00:00
29c6be81bd
test(canvas): add component tests for Tooltip, Legend, TermsGate, ApprovalBanner
...
sop-tier-check / tier-check (pull_request) Failing after 12s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 14s
Adds vitest tests for 4 previously untested canvas components:
- Tooltip.test.tsx (17 tests): portal rendering, 400ms hover delay,
keyboard focus reveal, Esc dismiss (WCAG 1.4.13), aria-describedby
- Legend.test.tsx (10 tests): open/closed state, localStorage persistence,
palette-offset positioning, status/tier/comm items, aria labels
- TermsGate.test.tsx (14 tests): loading→accepted, pending modal (WCAG
2.4.3 focus), accept flow, error state, children always rendered
- ApprovalBanner.test.tsx (15 tests): empty state, approval card render,
polling cleanup, approve/deny decisions, toast notifications, error recovery
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 00:44:45 +00:00
858f996196
test(canvas): add StatusDot component tests
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 28s
sop-tier-check / tier-check (pull_request) Failing after 27s
Add 10 tests for StatusDot covering:
- All known STATUS_CONFIG statuses (online, offline, degraded,
failed, paused, not_configured, provisioning)
- Correct color class applied per status
- Glow class applied when declared in STATUS_CONFIG
- motion-safe:animate-pulse on provisioning status
- Fallback to bg-zinc-500 for unknown status
- size prop (sm/md) applies correct Tailwind dimension class
- aria-hidden="true" for accessibility tree isolation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 00:25:46 +00:00
4baf60f01d
fix(canvas): correct KeyboardShortcutsDialog descriptions + fix min-clamp test expectations
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 8s
sop-tier-check / tier-check (pull_request) Failing after 7s
- Fix arrow-key nudge description: was "20px/100px" (wrong), now "10px/50px" (matches useKeyboardShortcuts)
- Add Cmd/Ctrl+Arrow resize shortcut row to dialog (missing since PR #192 )
- Fix 3 tests in useKeyboardShortcuts.test.tsx that asserted shrink below min dimensions:
"resizes height down" expected height:100, clamped to 110 (node starts at minHeight)
"resizes width down" expected width:200, clamped to 210 (node starts at minWidth)
"2px step with Shift" expected height:108, clamped to 110 (minHeight wins)
All three tests updated to assert clamped values with explanatory comments.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 00:01:40 +00:00
Molecule AI Core Platform Lead
aff8831817
Merge remote-tracking branch 'origin/main' into trig-197
sop-tier-check / tier-check (pull_request) Successful in 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 6s
audit-force-merge / audit (pull_request) Successful in 4s
2026-05-09 23:44:38 +00:00
2da036204c
test(canvas): add tests for Cmd/Ctrl+Arrow keyboard node resize
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
Add 10 tests covering the Cmd/Ctrl+Arrow resize shortcut:
- ArrowUp/Down resizes height (−/+10px)
- ArrowLeft/Right resizes width (−/+10px)
- Shift modifier uses 2px step for fine control
- min-height constraint respected when shrinking
- Guard: no-op when no node selected
- Guard: skipped when modal dialog is open
- Plain arrow keys (no modifier) fire moveNode instead
- Alt+Arrow is skipped (not a resize combo)
Also extends the mock store state with `onNodesChange` and node
`width`/`height` fields needed for the resize tests.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 23:41:29 +00:00
4a73a72e44
test(canvas): add KeyboardShortcutsDialog a11y render tests
...
sop-tier-check / tier-check (pull_request) Failing after 4s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 6s
Cherry-picked from feat/keyboard-shortcuts-dialog-test (99ecdd6d ).
6 tests covering role=dialog, aria-modal, aria-labelledby,
no-render-when-closed, Escape-close, focus-on-open, Tab trap.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 23:18:14 +00:00
b837d3b065
fix(canvas): text-ink-soft → text-ink-mid for WCAG AA contrast
...
Replace all text-ink-soft usages across canvas components and app pages.
ink-soft (#8d92a0) on dark zinc (#0e1014) yields ~2.2:1 contrast,
failing WCAG 2.1 AA minimum of 4.5:1 for normal text.
ink-mid (#c8c2b4) on dark zinc yields ~7.6:1 — well above AA.
text-ink-mid is already the semantic token for secondary/caption text
in the warm-paper light mode; the dark-mode override was the gap.
52 files, 268 replacements. No functional change beyond contrast.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 23:18:14 +00:00
f5682fbb5f
docs(canvas): mark keyboard node drag as done in audit
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 23:18:14 +00:00
534cdb5aa4
feat(canvas): keyboard-accessible node resize via Cmd/Ctrl+Arrow
...
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 5s
sop-tier-check / tier-check (pull_request) Failing after 5s
Cmd/Ctrl+Arrow Up/Down resizes node height (±10px, ±2px with Shift).
Cmd/Ctrl+Arrow Left/Right resizes node width (±10px, ±2px with Shift).
Uses the same onNodesChange('dimensions') path that NodeResizer uses
— no new store action needed. Respects min-width/min-height matching
the NodeResizer constraints (360×200 with children, 210×110 without).
The Arrow-key move shortcut now skips when a modifier key is held,
so Cmd/Ctrl+Arrow unambiguously means resize (not move).
Updates canvas audit doc: Node Rendering section updated and
the LOW node-resize item marked done. All Remaining Gaps items
are now complete.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 23:10:51 +00:00
19bb3430e5
feat(canvas): keyboard-accessible edge anchors via Enter/Space
...
sop-tier-check / tier-check (pull_request) Failing after 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 16s
Target handle (top of card): Enter/Space extracts this node from
its parent, moving it to the root level.
Source handle (bottom of card): Enter/Space nests the currently
selected node as a child of this node (requires another node to be
selected first).
Both handles gain tabIndex=0, role="button", a descriptive aria-label,
and a blue focus ring so keyboard-only users can navigate the
workspace hierarchy without a mouse. Uses the existing nestNode store
action — no new API surface needed.
Updates the canvas audit doc to mark the LOW edge-anchor item done.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 22:52:33 +00:00