molecule-core/workspace-server/internal/handlers
Hongming Wang 00cfe51df7 test(org_import): tighten sqlmock regex on lookupExistingChild (#2872 PR-B)
The five `mock.ExpectQuery(\`SELECT id FROM workspaces\`)` sites used a
loose substring regex that silent-passed three regression shapes #2872
called out:

  1. `WHERE parent_id = $2` (drops `IS NOT DISTINCT FROM` — breaks
     NULL-parent root matching)
  2. `WHERE name = $1` only (drops parent_id check entirely — hijacks
     siblings of the same name across different parents)
  3. Drops `AND status != 'removed'` (blocks re-import after Collapse)

Extracts a `lookupChildSQLRE` const that anchors all four load-bearing
tokens (the SELECT/FROM, the name predicate, the IS NOT DISTINCT FROM
predicate, and the status filter). All five ExpectQuery sites now use
the same const so a future schema/predicate change fails one place.

Mutation-tested per memory feedback_assert_exact_not_substring.md:
- Replacing `IS NOT DISTINCT FROM` with `=` fails
  TestLookupExistingChild_NilParent_MatchesRoot.
- Dropping `AND status != 'removed'` fails
  TestLookupExistingChild_Found_ReturnsIDAndTrue.

Note: #2872 PR-A (AST gate strengthening) is already addressed inline —
findWorkspacesInsertSQL + TestCreateWorkspaceTree_InsertUsesOnConflictDoNothing
pin the ON CONFLICT DO NOTHING shape, which is a strictly stronger
gate than the original lookup-before-insert ordering check.
2026-05-06 16:43:42 -07:00
..
testdata fix(workspace-server): vendor upstream derive-provider.sh + close 12-prefix drift 2026-05-02 23:51:23 -07:00
a2a_corpus_test.go test(a2a): protocol-shape replay corpus gate (#2345 follow-up) 2026-04-30 01:26:02 -07:00
a2a_proxy_helpers.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
a2a_proxy_test.go refactor(workspace-status): typed constants + AST-based drift gate 2026-04-30 10:41:41 -07:00
a2a_proxy.go fix(a2a): cover CF 521/522/523 in dead-origin status set 2026-04-30 01:39:04 -07:00
a2a_queue_status_test.go feat(a2a): per-queue-id status endpoint + per-message TTL (RFC #2331 Tier 1) 2026-04-29 20:21:17 -07:00
a2a_queue_status.go feat(a2a): per-queue-id status endpoint + per-message TTL (RFC #2331 Tier 1) 2026-04-29 20:21:17 -07:00
a2a_queue_test.go
a2a_queue.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
activity_since_id_test.go feat(activity): since_id cursor on GET /activity (#2339 PR 3) 2026-04-29 22:51:52 -07:00
activity_since_secs_test.go
activity_test.go fix(chat-uploads): activity rows commit atomically with PutBatch 2026-05-05 21:34:28 -07:00
activity.go fix(chat-uploads): activity rows commit atomically with PutBatch 2026-05-05 21:34:28 -07:00
admin_delegations_test.go feat(delegations): operator dashboard endpoint over the durable ledger (RFC #2829 PR-4) 2026-05-04 20:58:17 -07:00
admin_delegations.go feat(delegations): operator dashboard endpoint over the durable ledger (RFC #2829 PR-4) 2026-05-04 20:58:17 -07:00
admin_memories_cutover_test.go fix(admin-memories): include each member's private namespace in export 2026-05-04 09:44:06 -07:00
admin_memories_test.go
admin_memories.go fix(admin-memories): include each member's private namespace in export 2026-05-04 09:44:06 -07:00
admin_queue_test.go
admin_queue.go
admin_schedules_health_test.go
admin_schedules_health.go
admin_test_token_test.go test(admin_test_token): pin ADMIN_TOKEN IDOR-fix (#112) gate behavior 2026-04-30 02:59:08 -07:00
admin_test_token.go
admin_workspace_images_test.go
admin_workspace_images.go feat(provisioner): env-driven RegistryPrefix() for workspace template images (#6) 2026-05-06 14:23:01 -07:00
agent_git_identity_test.go
agent_git_identity.go
agent_message_persistence_gate_test.go test(mcp): comprehensive coverage for send_message_to_user persistence + AST gate (reno-stars followup) 2026-05-05 14:52:32 -07:00
agent_message_writer_test.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
agent_message_writer.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
agent_test.go
agent.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
approvals_test.go
approvals.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
artifacts_test.go
artifacts.go
audit_test.go
audit.go
budget_test.go
budget.go
bundle.go
channels_test.go
channels.go
chat_files_poll_test.go fix(chat-uploads): activity rows commit atomically with PutBatch 2026-05-05 21:34:28 -07:00
chat_files_test.go feat(saas): close 4th default-tier site + lift org_import asymmetry + tests (#2910) 2026-05-05 11:38:22 -07:00
chat_files.go fix(chat-uploads): activity rows commit atomically with PutBatch 2026-05-05 21:34:28 -07:00
chat_history_test.go feat(messagestore): MessageStore interface + Postgres impl (RFC #2945 PR-D) 2026-05-05 23:38:14 -07:00
chat_history.go feat(messagestore): MessageStore interface + Postgres impl (RFC #2945 PR-D) 2026-05-05 23:38:14 -07:00
checkpoints_integration_test.go
checkpoints_test.go
checkpoints.go
class1_ast_gate_test.go test(handlers): generic Class 1 leak AST gate (#2867 PR-A) 2026-05-05 13:01:34 -07:00
config_test.go
config.go
container_files_delete_test.go
container_files_test.go
container_files.go
delegation_inbox_push_test.go feat(delegations): result-push to caller inbox behind feature flag (RFC #2829 PR-2) 2026-05-04 20:50:46 -07:00
delegation_ledger_integration_test.go test(delegations): tighten integration-test assertions + integrationDB doc (#321) 2026-05-05 03:39:22 -07:00
delegation_ledger_test.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
delegation_ledger_writes_test.go feat(delegations): wire ledger Insert+SetStatus from production code paths (RFC #2829 #318) 2026-05-05 02:26:06 -07:00
delegation_ledger_writes.go feat(delegations): wire ledger Insert+SetStatus from production code paths (RFC #2829 #318) 2026-05-05 02:26:06 -07:00
delegation_ledger.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
delegation_sweeper_test.go feat(delegations): stuck-task sweeper with deadline + heartbeat-staleness rules (RFC #2829 PR-3) 2026-05-04 20:55:13 -07:00
delegation_sweeper.go feat(delegations): stuck-task sweeper with deadline + heartbeat-staleness rules (RFC #2829 PR-3) 2026-05-04 20:55:13 -07:00
delegation_test.go
delegation.go fix(textutil): SSOT for rune-safe string truncation, fix 3 audit-gap bugs 2026-05-05 23:01:21 -07:00
derive_provider_drift_test.go fix(workspace-server): vendor upstream derive-provider.sh + close 12-prefix drift 2026-05-02 23:51:23 -07:00
discovery_test.go
discovery.go
events_test.go
events.go
external_connection_test.go fix(external-connect): use molecule-mcp wrapper in Codex/OpenClaw templates (#2957) 2026-05-05 16:06:02 -07:00
external_connection.go fix(external-connect): use molecule-mcp wrapper in Codex/OpenClaw templates (#2957) 2026-05-05 16:06:02 -07:00
external_rotate_test.go feat(external): credential rotation + re-show instruction modal (#319) 2026-05-05 01:55:27 -07:00
external_rotate.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
github_token_test.go
github_token.go
handlers_additional_test.go refactor(workspace-status): typed constants + AST-based drift gate 2026-04-30 10:41:41 -07:00
handlers_extended_test.go refactor(workspace-status): typed constants + AST-based drift gate 2026-04-30 10:41:41 -07:00
handlers_test.go feat: drop shared_context — use memory v2 team namespace instead 2026-05-04 16:30:26 -07:00
hermes_messages_test.go
hermes_messages.go
hibernation_test.go refactor(workspace-status): typed constants + AST-based drift gate 2026-04-30 10:41:41 -07:00
instructions.go
mcp_test.go test(mcp): comprehensive coverage for send_message_to_user persistence + AST gate (reno-stars followup) 2026-05-05 14:52:32 -07:00
mcp_tools_memory_legacy_shim_test.go Memory v2 PR-6: backward-compat shim — legacy tools route to v2 2026-05-04 08:01:41 -07:00
mcp_tools_memory_legacy_shim.go Memory v2 PR-6: backward-compat shim — legacy tools route to v2 2026-05-04 08:01:41 -07:00
mcp_tools_memory_v2_test.go Memory v2 fixup I1+I4: expires_at validation + audit JSON marshal 2026-05-04 08:57:58 -07:00
mcp_tools_memory_v2.go Memory v2 fixup I1+I4: expires_at validation + audit JSON marshal 2026-05-04 08:57:58 -07:00
mcp_tools.go refactor(handlers): consolidate Notify + MCP send_message_to_user through AgentMessageWriter (RFC #2945 PR-A) 2026-05-05 15:29:42 -07:00
mcp.go Memory v2 PR-11: E2E test — flat-plugin swap proves contract works 2026-05-04 08:20:35 -07:00
memories_test.go feat(memories): PATCH /workspaces/:id/memories/:id endpoint for edits 2026-05-04 21:00:47 -07:00
memories_v2_test.go fix(memory-v2): namespace dropdown labels use display names not UUID prefixes (#2988) 2026-05-05 18:46:50 -07:00
memories_v2.go fix(memory-v2): namespace dropdown labels use display names not UUID prefixes (#2988) 2026-05-05 18:46:50 -07:00
memories.go feat(memories): PATCH /workspaces/:id/memories/:id endpoint for edits 2026-05-04 21:00:47 -07:00
memory_test.go
memory.go
native_session_test.go
native_status_mgmt_test.go refactor(workspace-status): typed constants + AST-based drift gate 2026-04-30 10:41:41 -07:00
org_helpers.go
org_import_force_removed_test.go
org_import_idempotency_test.go test(org_import): tighten sqlmock regex on lookupExistingChild (#2872 PR-B) 2026-05-06 16:43:42 -07:00
org_import.go fix(workspace-server): close TOCTOU race on workspaces(parent_id, name) (#2872 Critical 1) 2026-05-05 21:43:49 -07:00
org_include_test.go
org_include.go
org_path_test.go
org_plugin_allowlist_test.go
org_plugin_allowlist.go
org_prompt_ref_test.go
org_provision_concurrency_test.go feat(org-import): make provision concurrency configurable via env 2026-05-04 16:33:49 -07:00
org_test.go
org_tokens_test.go
org_tokens.go
org.go feat(org-import): make provision concurrency configurable via env 2026-05-04 16:33:49 -07:00
pending_uploads_integration_test.go test(chat-uploads): integration test for cross-table atomicity (#149 follow-up) 2026-05-05 21:57:56 -07:00
pending_uploads_test.go fix(chat-uploads): activity rows commit atomically with PutBatch 2026-05-05 21:34:28 -07:00
pending_uploads.go feat(rfc): poll-mode chat upload — phase 1 platform staging layer 2026-05-05 04:22:24 -07:00
plugins_install_pipeline_test.go
plugins_install_pipeline.go
plugins_install.go
plugins_listing.go
plugins_sources.go
plugins_test.go
plugins.go
provlog_emit_test.go feat(workspace-server): structured logging at provisioning boundaries 2026-05-05 12:30:11 -07:00
registry_test.go fix(workspace): deliver platform_inbound_secret on every heartbeat 2026-04-30 17:36:33 -07:00
registry.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
restart_context_test.go
restart_context.go
restart_template_test.go chore(manifest): prune to 4 actively-supported runtimes 2026-05-02 19:21:47 -07:00
restart_template.go
runtime_image_pin_test.go feat(provisioner): digest-pin workspace images via runtime_image_pins (#2272 layer 1) 2026-05-03 02:30:00 -07:00
runtime_image_pin.go feat(provisioner): digest-pin workspace images via runtime_image_pins (#2272 layer 1) 2026-05-03 02:30:00 -07:00
runtime_overrides_test.go
runtime_overrides.go
runtime_provision_timeouts_test.go
runtime_provision_timeouts.go
runtime_registry_test.go
runtime_registry.go chore(manifest): prune to 4 actively-supported runtimes 2026-05-02 19:21:47 -07:00
saas_default_tier_test.go feat(saas): close 4th default-tier site + lift org_import asymmetry + tests (#2910) 2026-05-05 11:38:22 -07:00
sanitize_filename_test.go feat(rfc): poll-mode chat upload — phase 1 platform staging layer 2026-05-05 04:22:24 -07:00
schedules_test.go
schedules.go
secrets_test.go feat(workspace-server): PUT /provider endpoint for explicit LLM provider (#196) 2026-04-30 22:25:48 -07:00
secrets.go fix(workspace-server): persist canvas-selected model + provider on first deploy 2026-05-02 19:21:01 -07:00
security_regression_685_686_687_688_test.go feat(saas): close 4th default-tier site + lift org_import asymmetry + tests (#2910) 2026-05-05 11:38:22 -07:00
socket.go
sse_test.go
sse.go
ssrf_test.go
ssrf.go
template_files_eic_dispatch_test.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
template_files_eic_shells_test.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
template_files_eic_test.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
template_files_eic.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
template_import_test.go feat(saas): close 4th default-tier site + lift org_import asymmetry + tests (#2910) 2026-05-05 11:38:22 -07:00
template_import.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
templates_test.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
templates.go fix(workspace files API): EIC parity for ListFiles + DeleteFile (closes #2999 PR-A) 2026-05-05 20:18:05 -07:00
terminal_diagnose_test.go fix(terminal-diagnose): KI-005 hierarchy check + race-free stderr capture 2026-04-30 21:19:18 -07:00
terminal_diagnose.go fix(terminal-diagnose): KI-005 hierarchy check + race-free stderr capture 2026-04-30 21:19:18 -07:00
terminal_test.go test(terminal): update exact-argv snapshot to include ConnectTimeout 2026-04-30 20:23:48 -07:00
terminal.go fix(terminal): cap ssh handshake at 10s so hung sshd surfaces fast 2026-04-30 20:16:41 -07:00
tokens_sqlmock_test.go
tokens_test.go
tokens.go
traces_test.go
traces.go
transcript_test.go
transcript.go
viewport_test.go
viewport.go
webhooks_test.go
webhooks_workflow_test.go
webhooks.go
workspace_bootstrap_test.go refactor(workspace-status): catch missed literal in workspace_bootstrap.go + add literal-drift gate 2026-04-30 10:51:01 -07:00
workspace_bootstrap.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
workspace_budget_test.go feat(workspaces): delivery_mode column + poll-mode register flow (#2339 PR 1) 2026-04-29 21:47:14 -07:00
workspace_crud.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
workspace_dispatchers.go feat(workspace-server): structured logging at provisioning boundaries 2026-05-05 12:30:11 -07:00
workspace_metrics_test.go
workspace_metrics.go
workspace_namespace_cleanup_test.go Memory v2 fixup I5: workspace purge cleans up plugin namespace 2026-05-04 09:20:37 -07:00
workspace_preflight_test.go
workspace_preflight.go
workspace_provision_auto_test.go Merge pull request #2856 from Molecule-AI/chore/remove-team-expand-handler 2026-05-05 09:42:51 +00:00
workspace_provision_concurrent_repro_test.go test(provision): tighten Assertion 4 message to name both failure modes 2026-05-01 20:14:39 -07:00
workspace_provision_panic_test.go test(provision): harden panic tests with re-raise guard + assert broadcast count 2026-05-01 20:11:11 -07:00
workspace_provision_shared_test.go fix(workspace-server): vendor upstream derive-provider.sh + close 12-prefix drift 2026-05-02 23:51:23 -07:00
workspace_provision_shared.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
workspace_provision_test.go feat(provisioner): digest-pin workspace images via runtime_image_pins (#2272 layer 1) 2026-05-03 02:30:00 -07:00
workspace_provision.go refactor(models): consolidate per-runtime model defaults to SSOT (RFC #2873 iter 1) 2026-05-05 04:12:37 -07:00
workspace_restart_async_test.go Move /restart Stop into the async goroutine 2026-04-30 19:35:29 -07:00
workspace_restart_coalesce_test.go
workspace_restart_stop_retry_test.go fix(restart): retry cpProv.Stop with backoff + flag exhaustion as LEAK-SUSPECT 2026-05-01 23:36:38 -07:00
workspace_restart_test.go fix(workspace-server): skip provision pipeline on Restart for runtime=external 2026-04-30 15:08:48 -07:00
workspace_restart.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
workspace_test.go fix(workspace-server): emit null removed_at when timestamp fetch fails 2026-04-30 22:24:59 -07:00
workspace.go refactor(events): migrate 18 files to typed EventType constants (RFC #2945 PR-B-1) 2026-05-05 19:05:03 -07:00
workspaces_insert_allowlist_test.go test(handlers): allowlist INSERT INTO workspaces sites — close bulk-create regression class (#2867 class 1) 2026-05-05 11:15:16 -07:00