fix(files): stop saving fetched URLs to Files and look names up by the unique index

Merged
WA
1mo ago
+318-273

Summary

  • The File block's URL fetch no longer saves every fetched URL into workspace Files. Nothing ever read the saved copy: the parser keeps its own execution file, and the reuse the save once served was removed earlier. Repeated fetches were piling up name (N).html copies in the Files root
  • Renamed fetchExternalUrlToWorkspace to fetchExternalUrl and removed its save, permission, and upload branch
  • Name existence checks (fileNameExistsInWorkspaceFolder, getWorkspaceFileByName) now spell the folder predicate as coalesce(folder_id, '') = $folder, matching the unique (workspace_id, coalesce(folder_id, ''), original_name) index, so each check is a point lookup. The old folder_id IS NULL form made root lookups scan the folder-id index
  • allocateUniqueWorkspaceFileName probes the base name plus (1)…(20), then falls back to a short-id suffix instead of probing up to 1,000 candidates and then failing. The unique index and the existing conflict retry remain the authority

Type of Change

  • Bug fix

Testing

  • New file-names.integration.ts (real Postgres). All three tests fail on the pre-change code:
    • parsing a URL creates no workspace_files row
    • root/folder scoping, with an EXPLAIN assertion that both lookups use the unique index
    • the 21st copy of a name gets a short-id suffix, and concurrent uploads of one name all succeed with distinct names
  • Existing file-versions, provenance, revision, storage-cleanup, and workspace-import integration suites pass
  • Type-check, lint, and check:audits pass

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)