de21d4a482
test(FilesTab): add FilesToolbar + NotAvailablePanel coverage
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 13s
CI / Detect changes (pull_request) Successful in 24s
E2E API Smoke Test / detect-changes (pull_request) Successful in 29s
Harness Replays / detect-changes (pull_request) Successful in 20s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 36s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 35s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 17s
CI / Platform (Go) (pull_request) Successful in 7s
sop-checklist-gate / gate (pull_request) Successful in 17s
qa-review / approved (pull_request) Successful in 20s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 29s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 7s
sop-tier-check / tier-check (pull_request) Successful in 23s
gate-check-v3 / gate-check (pull_request) Successful in 34s
Harness Replays / Harness Replays (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 6s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m15s
sop-checklist / all-items-acked (pull_request) [info tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, l
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m43s
CI / Canvas (Next.js) (pull_request) Successful in 12m8s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 2s
security-review / approved (pull_request) bootstrap-ok: test-only PR, no security-sensitive changes
audit-force-merge / audit (pull_request) Successful in 4s
Cherry-picked from test/settings-tab-coverage.
- FilesToolbar.test.tsx: 349 lines
- NotAvailablePanel.test.tsx: 101 lines
Total: 197 test files, 3076 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
d0ad8c76fa
test(FilesTab): add useFilesApi coverage — 7 cases
...
Cherry-picked from test/settings-tab-coverage (commit 46086ef6 ).
Covers file entry walking and API interactions.
Total: 195 test files, 3047 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
5c2238265f
test: add components-pure + TestConnectionButton coverage
...
Cherry-picked from test/settings-tab-coverage (commit 226b7679 ).
- components-pure.test.ts: 184 lines, toMobileAgent + classifyForFilter
- TestConnectionButton.test.tsx: 245 lines, 29 test cases
Total: 194 test files, 3040 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
9378720c96
test(canvas): add TopBar + FileEditor + AttachmentLightbox coverage
...
Cherry-picked from test/settings-tab-coverage (commit 36d93f21 ).
- canvas/TopBar.test.tsx: 97 lines, canvas header scaffold rendering
- FileEditor.test.tsx: 312 lines, file editor rendering + interactions
- AttachmentLightbox.test.tsx: 247 lines, image lightbox rendering
Total: 192 test files, 3006 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
2eb3f3eade
test(mobile): add MobileHome + MobileMe + MobileChat + MobileDetail coverage
...
Cherry-picked from test/settings-tab-coverage (commit fd424dba ).
- MobileHome.test.tsx: 245 lines, agent list + filter chips
- MobileMe.test.tsx: 212 lines, Me screen rendering
- MobileChat.test.tsx: 323 lines, chat thread + composer
- MobileDetail.test.tsx: 367 lines, agent detail view
Makes #727 a complete superset of all mobile screen test coverage.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
0e9709b2bf
test(canvas): add SidePanel + TemplatePalette coverage
...
Cherry-picked from test/settings-tab-coverage (PRs #708/#726).
- SidePanel.general.test.tsx: 390 lines
- TemplatePalette.test.tsx: 260 lines
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
2ca269fec0
test(settings): add AddKeyForm + OrgTokensTab + SecretRow + SecretsTab coverage
...
Cherry-picked from test/settings-tab-coverage (PRs #708/#726).
- AddKeyForm: 340 lines, form validation + submission tests
- OrgTokensTab: 407 lines, org token CRUD + display tests
- SecretRow: 291 lines, secret display + reveal/copy/delete actions
- SecretsTab: 308 lines, secrets list + empty state + add form
Makes #704 a true superset of all settings test coverage.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
ec51e5f381
test(settings): add SettingsPanel coverage — 14 cases
...
Covers: closed-by-default, open/close, tab navigation (Secrets/Tokens/Org API Keys),
unsaved guard integration (keep editing, discard), fetchSecrets on open,
aria-label accessibility.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
be6ca035a8
test(canvas/tabs): add tree.test.ts — 29 cases for FilesTab getIcon + buildTree
...
Cherry-picked from test/settings-tab-coverage (PR #726 ).
Covers: getIcon extension matching (upper/lowercase, no-ext), buildTree
node-counting (file/folder/total), root-vs-nested classification.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:15:14 +00:00
c993a98d04
fix(canvas/settings): UnsavedChangesGuard — add aria-description + fix overlay test assertion
...
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 8s
qa-review / approved (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 22s
security-review / approved (pull_request) Successful in 15s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m31s
CI / Platform (Go) (pull_request) Successful in 13s
gate-check-v3 / gate-check (pull_request) Successful in 29s
sop-checklist-gate / gate (pull_request) Successful in 20s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
CI / Detect changes (pull_request) Successful in 56s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 34s
CI / Python Lint & Test (pull_request) Successful in 6s
sop-tier-check / tier-check (pull_request) Successful in 16s
Harness Replays / Harness Replays (pull_request) Successful in 4s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 6s
CI / Canvas (Next.js) (pull_request) Successful in 9m27s
Harness Replays / detect-changes (pull_request) Successful in 16s
E2E API Smoke Test / detect-changes (pull_request) Successful in 48s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 5s
CI / all-required (pull_request) Successful in 2s
audit-force-merge / audit (pull_request) Successful in 25s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m21s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 50s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 56s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 21s
- Add AlertDialog.Description with sr-only text to satisfy Radix
aria-describedby requirement (fixes Radix console warning).
- Add eslint-disable for Discard button (AlertDialog.Action wires
keyboard events internally; no duplicate onKeyDown needed).
- Add explicit expect() assertion to overlay/ESC dismiss test (was
missing — test always passed regardless of behavior).
- Remove unnecessary vi.resetModules() from afterEach.
- Rewrite overlay test to click Keep editing button (Cancel) to
trigger onOpenChange(false) in jsdom, matching PR #708 's pragmatic
pattern for asChild composite components.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
80a0ff9e34
test(canvas/mobile): add RemoteBadge + WorkspacePill render coverage (14 cases)
...
Cover RemoteBadge and WorkspacePill — the last two rendering components in
components.tsx that were missing direct tests.
- RemoteBadge: ★ REMOTE badge rendering, span element, border-radius 4px,
palette color/background application, dark/light difference
- WorkspacePill: brand text, count display, LIVE indicator, string count,
border-radius pill shape, dark/light background variants
Total mobile test count now: 104 passing (was 90).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
e867c8053b
fix(canvas/SearchDialog): split backdrop from dialog for WCAG 4.1.2 compliance
...
Restructure SearchDialog so the backdrop div is separate from the dialog
container. The outer div previously served as both backdrop and centering
wrapper, which made it impossible to add accessibility attributes
(aria-hidden="true") without hiding the dialog content from screen
readers.
New structure mirrors ConfirmDialog and KeyboardShortcutsDialog:
- Backdrop: aria-hidden="true", cursor-pointer, click-to-dismiss
- Dialog: role="dialog", aria-modal, aria-label, relative z-[71]
Also removes the now-unnecessary stopPropagation() on the dialog div.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
07d5110410
fix(canvas): modal dialog guard on Esc/Enter/Cmd+[/]/Z shortcuts
...
Discovered during WCAG audit: useKeyboardShortcuts.ts had an
isModalOpen() guard for Arrow-key move/resize shortcuts but NOT for
Escape, Enter, Cmd+]/[, or Z. When a modal dialog (role="dialog",
aria-modal="true") is open, pressing Escape cleared the canvas
selection (because the canvas handler fired before the dialog's own
Escape handler), and Enter/Cmd+[/]/Z could interfere with dialog
interactions.
Fix: add isModalOpen() guard to all four shortcut groups, extracted
as a shared helper. Also added 4 new test cases covering the
modal-dialog guard for Esc, Enter, Cmd+[/], and Z.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
d5a0ffa196
test(canvas/mobile): add primitives.test.tsx coverage (19 cases)
...
Cover StatusDot (size, circle, halo, flexShrink), TierChip (tiers,
size variants, flexShrink), Chip (value, label+value, pill shape,
soft/accent mode), SectionLabel (text, right slot, uppercase).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
6c0c482823
feat(mobile): FilterChips + AgentCard WCAG 2.1 AA accessibility
...
FilterChips:
- Add role=toolbar + aria-label="Filter agents" on container
- Add role=radio + aria-checked on each button
- Add aria-hidden on count spans
- FilterChips.test.tsx: 9 cases
AgentCard:
- Add aria-label composing name, status, tier, remote flag
- AgentCard.test.tsx: 8 cases
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-05-12 18:19:54 +00:00
3cb1e6cbbf
feat(mobile): TabBar WCAG 2.1 AA accessibility — ARIA tab pattern + keyboard nav
...
- Adds role=tablist + aria-label to outer container
- Adds role=tab, aria-selected, aria-label, aria-hidden(icon) to each tab button
- tabIndex: active=0, others=-1 (standard tab pattern)
- Keyboard: Arrow keys cycle tabs, Home/End jump to first/last
- TabBar.test.tsx: 12 cases covering render states and keyboard interaction
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-05-12 18:19:54 +00:00
261385e43b
test(canvas): add form-inputs coverage (35 cases) + Section accessibility fix
...
+ form-inputs.test.tsx: 35 cases across TextInput, NumberInput, Toggle,
TagList, and Section — pure presentational components in the Config tab.
Uses vi.hoisted() patterns from established suite; no jest-dom matchers.
+ form-inputs.tsx (Section): add aria-expanded + aria-controls to the
collapsible toggle button for WCAG 2.1 AA compliance. The content div
gets a stable id derived from the title; aria-controls links button to
region. Indicator span gains aria-hidden="true" (decorative only).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
61f7bbe53f
test(canvas/settings,chat): add coverage for EmptyState, SearchBar, UnsavedChangesGuard, AttachmentVideo
...
- EmptyState: 6 cases — icon aria-hidden, title, body text, CTA button
- SearchBar: 14 cases — store binding, onChange, Escape, Ctrl/Cmd+F focus
- UnsavedChangesGuard: 7 cases — dialog states, Keep/Discard actions, backdrop
FIX: UnsavedChangesGuard now wires onDiscard via pendingDiscard ref so
clicking Discard correctly calls the callback on dialog close
- AttachmentVideo: 8 cases — loading/ready/error states, tone borders,
blob URL cleanup, external URI direct href
No breaking changes. 2387 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
71f2556c4d
test(canvas/settings): add DeleteConfirmDialog + SettingsButton coverage (26 cases)
...
- DeleteConfirmDialog (15 cases): dialog open via secret:delete-request event,
title/body text, Cancel closes, dependents loading/list/none states,
deleteSecret call, confirm 1s delay, disabled→enabled button transition
- SettingsButton (11 cases): aria-label, aria-expanded, gear SVG aria-hidden,
toggle openPanel/closePanel, active class, tooltip Mac/Ctrl shortcut
ResizeObserver polyfill for Radix Tooltip
No breaking changes. 2413 tests passing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
2df80503b4
test(canvas/settings): add ServiceGroup coverage (10 cases)
...
- role=group with aria-label containing service label
- Service icon aria-hidden, correct emoji per service name
- Count label: "1 key" vs "N keys"
- Renders SecretRow for each secret
- Header and rows div structure
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
c18b8f9f00
test(canvas/chat): add AttachmentImage coverage (10 cases)
...
Adds Vitest coverage for AttachmentImage — inline image thumbnail with
click-to-fullscreen lightbox. Covers: loading skeleton (240×180),
ready state with blob URL, tone=user/agent border classes, lightbox
open/close on click and Escape, AttachmentChip error fallback, img
onError transition to chip, external URI direct href (no fetch), and
blob URL cleanup on unmount.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
2b99103c8c
test(canvas/chat): add AttachmentAudio + AttachmentPDF coverage (18 cases)
...
Adds Vitest coverage for two missing attachment renderers:
AttachmentAudio (9 cases):
- Loading skeleton (280x40) with aria-label
- <audio controls> with blob src when ready
- Filename label in ready state
- tone=user -> blue/accent border
- tone=agent -> neutral border
- Error -> AttachmentChip fallback
- audio onError -> chip transition
- External URI -> direct href, no fetch
- Blob URL cleanup on unmount
AttachmentPDF (9 cases):
- Loading skeleton with PdfGlyph + filename
- Preview button with glyph, filename, "PDF" label
- Lightbox opens with <embed> on click
- Lightbox closes on Escape
- tone=user -> blue/accent classes on button
- tone=agent -> neutral border
- Error -> AttachmentChip fallback
- External URI -> direct href, no fetch
- Blob URL cleanup on unmount
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
b24195b2ee
test(canvas/chat): add AttachmentTextPreview coverage (12 cases)
...
Adds Vitest coverage for AttachmentTextPreview — inline text/code
preview with streaming fetch and expand/truncate.
Covers:
- Loading skeleton (320x80) with aria-label
- Ready state with correct text content
- Filename shown in header
- Expand button appears when lines > 10
- Expand button hidden when all lines shown
- Expand button updates display to full content
- Download button calls onDownload
- tone=user -> blue/accent border
- tone=agent -> neutral border
- Truncated notice when file exceeds 256 KB
- Error -> AttachmentChip fallback
- Cleanup on unmount
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
43f02ebde5
test(settings): add TokensTab coverage (12 cases)
...
12 passing: loading spinner, empty state, token list rendering,
each token's prefix/age/Revoke button, API URL correctness, revoke
confirm + cancel dialogs, new-token creation + dismiss, create error,
network error banner.
Root bug fixed: confirm button search was unscoped — when the dialog
opened, two "Revoke" buttons existed (tok2's row + dialog confirm);
find() returned tok2's button first. Scoped the search to
document.querySelector('[role="dialog"]') to hit the correct target.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:19:54 +00:00
2e0007e713
test(mobile): add MobileCanvas + MobileComms + MobileSpawn test coverage
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
Harness Replays / detect-changes (pull_request) Successful in 10s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: 7
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 11s
qa-review / approved (pull_request) Failing after 12s
CI / Detect changes (pull_request) Successful in 17s
security-review / approved (pull_request) Failing after 12s
sop-checklist-gate / gate (pull_request) Successful in 12s
E2E API Smoke Test / detect-changes (pull_request) Successful in 19s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 20s
Harness Replays / Harness Replays (pull_request) Successful in 6s
gate-check-v3 / gate-check (pull_request) Successful in 19s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 22s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 21s
sop-tier-check / tier-check (pull_request) Successful in 12s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Python Lint & Test (pull_request) Successful in 6s
CI / Platform (Go) (pull_request) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 6s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 3s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m9s
CI / Canvas (Next.js) (pull_request) Successful in 4m6s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 0s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9m39s
32 cases across 3 files:
- MobileCanvas: render (FAB, legend, nodes, reset button, empty), interaction (onOpen, onSpawn)
- MobileComms: render (header, loading, empty, filter buttons, event count), interaction (rows, All/Errors filter, live socket event)
- MobileSpawn: render (dialog, loading, templates, tiers, spawn button, close), interaction (onClose, backdrop, POST /workspaces, error, tier selection)
Uses vi.hoisted() for API mocks to avoid TDZ per earlier lessons.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 11:52:24 +00:00
56945ffd49
fix(canvas/mobile): remove ?? [] from Zustand selector to prevent infinite render loop
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 17s
CI / Detect changes (pull_request) Successful in 54s
E2E API Smoke Test / detect-changes (pull_request) Successful in 49s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 39s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 39s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 18s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 42s
qa-review / approved (pull_request) Failing after 24s
security-review / approved (pull_request) Failing after 23s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 9s
CI / Platform (Go) (pull_request) Successful in 12s
CI / Python Lint & Test (pull_request) Successful in 14s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 12s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 10s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 17s
sop-tier-check / tier-check (pull_request) Successful in 19s
gate-check-v3 / gate-check (pull_request) Successful in 33s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10m16s
CI / Canvas (Next.js) (pull_request) Successful in 11m57s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 3s
audit-force-merge / audit (pull_request) Successful in 19s
React error #185 (Maximum update depth exceeded) on mobile chat tab.
Root cause: useCanvasStore((s) => s.agentMessages[agentId] ?? []) used
a `?? []` fallback in the selector. Zustand uses Object.is for selector
equality. When agentMessages[agentId] is undefined (initial state), the
fallback creates a NEW [] reference on every store update. Zustand sees
this as a state change and re-renders the component. The component reads
from the store again, gets another new [] reference, and the cycle
repeats until React hits the depth cap.
Fix: remove `?? []` from the selector (returns undefined when no messages)
and move the fallback to the useState initializer:
storedMessages = useCanvasStore(selector) // returns undefined | T[]
[messages] = useState(() => (storedMessages ?? []).map(...))
The useState initializer only runs once on mount, so the `?? []`
there is safe — it creates the initial state once, then messages are
managed via setMessages.
Fixes issue #651 .
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 04:56:49 +00:00
0caafb85bc
test(canvas): ActivityTab + DetailsTab + DropTargetBadge (65 cases) ( #647 )
...
CI / all-required (push) Blocked by required conditions
CI / Canvas Deploy Reminder (push) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (push) Successful in 10s
CI / Detect changes (push) Successful in 23s
Harness Replays / detect-changes (push) Successful in 10s
E2E API Smoke Test / detect-changes (push) Successful in 24s
E2E Staging Canvas (Playwright) / detect-changes (push) Successful in 23s
Handlers Postgres Integration / detect-changes (push) Successful in 23s
Secret scan / Scan diff for credential-shaped strings (push) Successful in 11s
Runtime PR-Built Compatibility / detect-changes (push) Successful in 26s
publish-canvas-image / Build & push canvas image (push) Failing after 1m2s
CI / Platform (Go) (push) Successful in 5s
CI / Shellcheck (E2E scripts) (push) Successful in 5s
CI / Python Lint & Test (push) Successful in 6s
Harness Replays / Harness Replays (push) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (push) Successful in 10s
Handlers Postgres Integration / Handlers Postgres Integration (push) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (push) Successful in 11s
CI / Canvas (Next.js) (push) Has been cancelled
E2E Staging Canvas (Playwright) / Canvas tabs E2E (push) Has been cancelled
status-reaper / reap (push) Successful in 2m40s
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-12 03:45:48 +00:00
4d2636f31a
test(tabs): export and unit-test getSkills + extractSkills pure helpers (28 cases)
...
getSkills (DetailsTab): null/undefined/empty inputs, id+name priority,
description truthy-guard edge cases, id-name precedence, falsy coercion.
extractSkills (SkillsTab): same inputs plus tags/examples coercion,
"undefined" id vs "Unnamed skill" name distinction, mixed valid/invalid.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 01:34:45 +00:00
f6275dd6c0
test(ui): add KeyValueField, RevealToggle, ValidationHint coverage (29 cases)
...
- ValidationHint (6 cases): null/valid/error render, role=alert a11y
- RevealToggle (9 cases): eye-icon toggle, aria-label, onToggle callback, SVG icons
- KeyValueField (14 cases): password type, aria-label forwarding, onChange
with whitespace trim, disabled state, auto-hide timer setup + cleanup
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 01:29:04 +00:00
6bf7df1f3f
test(tabs): add BudgetSection coverage (17 cases)
...
Handlers Postgres Integration / detect-changes (pull_request) Successful in 35s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 11s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 20s
E2E API Smoke Test / detect-changes (pull_request) Successful in 56s
CI / Detect changes (pull_request) Successful in 57s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 49s
Harness Replays / detect-changes (pull_request) Successful in 18s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 19s
qa-review / approved (pull_request) Failing after 22s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 38s
security-review / approved (pull_request) Failing after 15s
gate-check-v3 / gate-check (pull_request) Successful in 30s
sop-tier-check / tier-check (pull_request) Successful in 26s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 10s
CI / Platform (Go) (pull_request) Successful in 9s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
CI / Python Lint & Test (pull_request) Successful in 10s
Harness Replays / Harness Replays (pull_request) Successful in 7s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 10s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 8m24s
CI / Canvas (Next.js) (pull_request) Successful in 10m17s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 1s
audit-force-merge / audit (pull_request) Successful in 2s
Covers all render states: loading, fetch error, 402 exceeded banner,
budget loaded (with/without limit, over-limit cap), progress bar
visibility, save success, save error, saving-in-flight button state,
and the isApiError402 helper's regex branches.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 00:17:18 +00:00
caeff4bf80
test(canvas/FilesTab): add NotAvailablePanel + FilesToolbar coverage (22 cases)
...
NotAvailablePanel: renders heading, runtime name in monospace, Chat hint,
SVG aria-hidden, flex layout.
FilesToolbar: directory selector options + aria-label, setRoot on change,
file count display, New/Upload/Clear visible only for /configs,
Export/Refresh always visible, aria-labels on all buttons,
onNewFile/onDownloadAll/onClearAll/onRefresh called on click,
focus-visible ring on all buttons.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 00:17:18 +00:00
e09425ba81
test(canvas/chat): add AttachmentViews coverage (16 cases)
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 11s
Harness Replays / detect-changes (pull_request) Successful in 10s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 12s
E2E API Smoke Test / detect-changes (pull_request) Successful in 22s
CI / Detect changes (pull_request) Successful in 23s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 24s
qa-review / approved (pull_request) Failing after 13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 22s
gate-check-v3 / gate-check (pull_request) Failing after 22s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 24s
sop-tier-check / tier-check (pull_request) Successful in 16s
Harness Replays / Harness Replays (pull_request) Successful in 6s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 8s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 5s
CI / Platform (Go) (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 5s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 8s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m36s
CI / Canvas (Next.js) (pull_request) Successful in 10m14s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 3s
PendingAttachmentPill: renders name, formatted size (B/KB/MB), aria-label,
exactly one button, calls onRemove on click.
AttachmentChip: renders name and download glyph, renders size when provided,
omits size span when size is undefined, title attribute for tooltip,
calls onDownload(attachment) on click, tone=user applies blue-400 class,
tone=agent omits blue-400 class, exactly one button.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 23:22:14 +00:00
5b2298e56f
test(canvas/ui): add StatusBadge coverage (11 cases)
...
publish-runtime-autobump / bump-and-tag (pull_request) Has been skipped
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 15s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 15s
Harness Replays / detect-changes (pull_request) Successful in 19s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 17s
CI / Detect changes (pull_request) Successful in 41s
qa-review / approved (pull_request) Failing after 14s
security-review / approved (pull_request) Failing after 15s
E2E API Smoke Test / detect-changes (pull_request) Successful in 41s
gate-check-v3 / gate-check (pull_request) Successful in 20s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 43s
Harness Replays / Harness Replays (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 46s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 38s
sop-tier-check / tier-check (pull_request) Successful in 13s
publish-runtime-autobump / pr-validate (pull_request) Successful in 47s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 10s
CI / Platform (Go) (pull_request) Successful in 9s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 1m57s
CI / Python Lint & Test (pull_request) Successful in 7m17s
CI / Canvas (Next.js) (pull_request) Successful in 9m18s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10m20s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 10s
Covers StatusBadge — secret key connection status indicator:
- ✓ / ✗ / ○ icon per status
- aria-label per status
- className per status (--valid, --invalid, --unverified)
- role="status" set correctly
- Exactly one status element rendered
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-05-11 21:23:03 +00:00
6916ae32c3
test(canvas/mobile): add palette-context coverage (9 cases)
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 20s
CI / Detect changes (pull_request) Successful in 43s
E2E API Smoke Test / detect-changes (pull_request) Successful in 36s
Harness Replays / detect-changes (pull_request) Successful in 11s
publish-runtime-autobump / bump-and-tag (pull_request) Has been skipped
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 11s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 37s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 34s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 15s
qa-review / approved (pull_request) Failing after 15s
gate-check-v3 / gate-check (pull_request) Successful in 24s
security-review / approved (pull_request) Failing after 17s
sop-tier-check / tier-check (pull_request) Successful in 19s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 40s
publish-runtime-autobump / pr-validate (pull_request) Successful in 56s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 8s
Harness Replays / Harness Replays (pull_request) Successful in 9s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 3m7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Failing after 5m48s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 6m51s
CI / Python Lint & Test (pull_request) Successful in 8m5s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 9m3s
CI / Platform (Go) (pull_request) Failing after 15m15s
CI / Canvas (Next.js) (pull_request) Successful in 15m39s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Failing after 6s
audit-force-merge / audit (pull_request) Has been skipped
Covers MobileAccentProvider + usePalette hook:
- Renders children
- usePalette(dark=false) → MOL_LIGHT
- usePalette(dark=true) → MOL_DARK
- accent=null returns base palette unchanged
- accent=base.accent returns base palette unchanged (identity guard)
- accent=#custom → accent + online overridden
- MOL_LIGHT/MOL_DARK singletons never mutated
The pure functions (getPalette, normalizeStatus, tierCode) are already
covered by palette.test.ts — only the React context/hook is new here.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
2026-05-11 21:11:04 +00:00
0c5eec5081
test(canvas): add EmptyState component tests (22 cases)
...
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
Harness Replays / detect-changes (pull_request) Successful in 10s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 13s
qa-review / approved (pull_request) Failing after 12s
security-review / approved (pull_request) Failing after 13s
Harness Replays / Harness Replays (pull_request) Successful in 4s
sop-tier-check / tier-check (pull_request) Successful in 11s
gate-check-v3 / gate-check (pull_request) Failing after 17s
E2E API Smoke Test / detect-changes (pull_request) Successful in 23s
CI / Detect changes (pull_request) Successful in 23s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 23s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 22s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 21s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 2s
CI / Platform (Go) (pull_request) Successful in 2s
CI / Python Lint & Test (pull_request) Successful in 2s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 3s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 7m28s
CI / Canvas (Next.js) (pull_request) Successful in 12m6s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 6s
audit-force-merge / audit (pull_request) Has been skipped
Adds 22-case coverage for EmptyState — the full-canvas welcome card:
- Loading state (GET /templates pending)
- Template grid renders with correct name, tier badge, description, skill count, model
- Template button calls deploy on click
- "Deploying..." label on the deploying template button
- Buttons disabled while any deploy is in-flight
- "Create blank" button POSTs /workspaces with correct payload
- "Creating..." label while POST is pending
- selectNode + setPanelTab("chat") called after 500ms on success
- Error banner with role=alert on POST failure
- Fetch failure / empty templates → only "create blank" button shown
Uses vi.hoisted + vi.mock to fully isolate api.get, api.post, useTemplateDeploy,
useCanvasStore, and all child components.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:18:10 +00:00
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
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
sop-tier-check / tier-check (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