Skip to content

Sync Production with Main#714

Merged
EmilFattakhov merged 11 commits into
productionfrom
main
May 27, 2026
Merged

Sync Production with Main#714
EmilFattakhov merged 11 commits into
productionfrom
main

Conversation

@EmilFattakhov
Copy link
Copy Markdown
Member

Auto Drive Release, May 26, 2026

jim-counter and others added 2 commits May 22, 2026 15:15
When buildListResult exhausts the DB batch with every row folding into a
single CommonPrefix, the truncation fallback set the continuation token to
the last raw key scanned. That key lives *inside* the folded virtual
directory, so the next page's `key > token` query returned the remaining
keys in the same directory and re-emitted the same CommonPrefixes entry.

Detect when the last scanned key folded into a CommonPrefix and advance the
token to `<foldedPrefix>+ï¿¿` so the next page resumes after the entire
virtual directory. Non-delimiter and non-folded cases keep the previous
last-key fallback.

Includes three unit tests covering the duplicate-prefix regression, the
non-folded last-key case, and the no-delimiter case.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(backend): guard against NULL encoded_node in publishing pipeline
@netlify
Copy link
Copy Markdown

netlify Bot commented May 26, 2026

Deploy Preview for auto-drive-storage ready!

Name Link
🔨 Latest commit 182f9d7
🔍 Latest deploy log https://app.netlify.com/projects/auto-drive-storage/deploys/6a16feec0da0fc0008b51990
😎 Deploy Preview https://deploy-preview-714--auto-drive-storage.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Comment thread apps/backend/src/infrastructure/repositories/objects/nodes.ts
…t is already archived

After onObjectArchived runs, removeNodeDataByRootCid only strips
encoded_node for nodes already published (block_published_on IS NOT NULL).
Nodes published later via recovery get block_published_on set but never
lose encoded_node, causing indefinite local payload retention.

Fix updateNodePublishedOn to conditionally clear encoded_node when
the node's metadata is already marked archived. This is safe because at
that point the data is confirmed on-chain and the archival cleanup won't
fire again.

Co-authored-by: Cursor <cursoragent@cursor.com>
jim-counter and others added 6 commits May 27, 2026 12:20
…t is already archived (#715)

After onObjectArchived runs, removeNodeDataByRootCid only strips
encoded_node for nodes already published (block_published_on IS NOT NULL).
Nodes published later via recovery get block_published_on set but never
lose encoded_node, causing indefinite local payload retention.

Fix updateNodePublishedOn to conditionally clear encoded_node when
the node's metadata is already marked archived. This is safe because at
that point the data is confirmed on-chain and the archival cleanup won't
fire again.

Co-authored-by: Cursor <cursoragent@cursor.com>
…pagination

fix(s3): advance ListObjectsV2 continuation token past folded prefix
The S3 API only worked with clients that send the `x-id` query param and a
Content-Type header (e.g. the AWS JS SDK). The AWS CLI / botocore omits both,
which broke GetObject/PutObject/HeadObject and multipart uploads:

- getS3Method had no GET->GetObject or PUT->PutObject fallback, so plain
  object requests without `x-id` returned "Method not found".
- The S3 raw body parser used `type: '*/*'`, but type-is returns false when no
  Content-Type header is present, so the request body was never read and
  req.body was left as {} (planted by the global express.json() parser),
  causing a Buffer.concat TypeError deep in the upload path.

Fixes:
- Add GET->GetObject and PUT->PutObject method fallbacks (after the existing
  multipart/list-type query-param checks so they are not misrouted).
- Read the S3 request body unconditionally (`type: () => true`) — object
  bodies are opaque binary regardless of Content-Type.
- Mount the S3 controller ahead of the global JSON/urlencoded parsers in the
  download API so those never run for /s3.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
feat(frontend): wire up bulk download for selected files
Adds raw-HTTP integration cases alongside the SDK suite that reproduce the
AWS CLI / botocore behaviour the SDK masks: no `x-id` query param and object
bodies sent without a Content-Type header. Covers single PutObject/GetObject
round-trip and a full multipart round-trip.

These fail on the prior code (GetObject/PutObject -> "Method not found";
UploadPart -> Buffer.concat on a {} body) and pass with the dispatch + raw
body fixes. They live in the s3-sdk spec to share its server/auth harness.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@EmilFattakhov
Copy link
Copy Markdown
Member Author

bugbot run

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 7019cfa. Configure here.

@EmilFattakhov EmilFattakhov requested a review from jim-counter May 27, 2026 14:26
@EmilFattakhov EmilFattakhov merged commit e97fa7b into production May 27, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants