Skip to content

feat(blog): add Object Store buckets launch post - #8118

Merged
nurul3101 merged 5 commits into
mainfrom
blog/object-store-buckets
Jul 31, 2026
Merged

feat(blog): add Object Store buckets launch post#8118
nurul3101 merged 5 commits into
mainfrom
blog/object-store-buckets

Conversation

@nurul3101

@nurul3101 nurul3101 commented Jul 30, 2026

Copy link
Copy Markdown
Member

Summary

Adds the Object Store buckets launch post: "Give Your Agent File Storage: Object Store Buckets" (/blog/object-store-buckets).

Announcement of the July 24 Object Store launch with an agent-provisioning spine: the full lifecycle (create bucket via POST /v1/buckets, mint keys with read/read_write roles, write/read/serve objects with Bun's built-in S3 client via presigned URL, contents-included teardown) as one runnable script with real captured output, plus an honest security section on service-token blast radius for agent workflows.

Also included: hero + meta images in the Eclipse house style (apps/blog/public/object-store-buckets/imgs/).

Validation

  • The full agent flow ran repeatedly against the live Management API (July 2026, Bun 1.3) in an authorized sandbox project, including by independent reviewer agents scaffolding from the draft alone: bucket ready + default-branch association (confirmed via GET /v1/projects/{id}/branches, isDefault: true), key minted, 44-byte write, exact read-back, presigned GET HTTP 200, read-only key rejected with AccessDenied on write, bucket deleted with the object still inside, bucket list restored
  • API shapes verified against the live OpenAPI spec at api.prisma.io/v1/doc (repo's cached spec predates buckets); launch claims verified against the 2026-07-24 changelog; Bun S3 API verified against Bun's docs down to constructor option names
  • Adversarial review per the blog skill: four independent lenses (fact, code, reader, positioning) per round, ten rounds to a clean final round (findings per round: 18 → 12 → 6 → 4 → 4 → 3 → 5 → 3 → 1 → 0). Highlights fixed along the way: the backing-vendor endpoint removed from shown output (undisclosed vendor), service-token blast radius treated honestly (workspace-scoped, never expires, per the auth docs), presigned-URL serving and read-key enforcement added to the demo so every promise is exercised, branch-default attachment verified by a named API call instead of asserted, and demonstrated evidence kept strictly distinguished from documented claims throughout
  • Live code verification ran clean through round 4; the round 5-6 code lens confirmed the published script is byte-identical to the live-verified copy after credentials were retired (static parse/bundle checks passing)
  • lint:links clean; rendered page verified on the local dev server

Notes for reviewers

  • The prisma CLI has no bucket commands today (platformstatus only), so the agent story routes through the Management API; MCP tool mentions are omitted for now at the author's call (tooling not yet in the MCP server docs)

  • No pricing/billing claims: no documented Object Store pricing surface existed at time of writing (the post says so explicitly)

  • draft: true removed; publish date 2026-07-28

  • Final revision: an operator voice pass moved the post to first-party launch register (no changelog-as-source phrasing, no lab-report hedging, MCP mentions removed, shorter title); the facts and the byte-locked verified script are unchanged

Summary by CodeRabbit

  • Documentation
    • Updated the “Object Store buckets” blog post frontmatter title to “Your AI Agent Needs File Storage. Now It Can Get Its Own,” improving the post’s opening framing and making the value proposition clearer at a glance.
    • This also refreshes how the article is labeled in listings and previews.

@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview Jul 30, 2026 3:10pm
docs Ready Ready Preview Jul 30, 2026 3:10pm
eclipse Ready Ready Preview Jul 30, 2026 3:10pm
site Ready Ready Preview Jul 30, 2026 3:10pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0c261941-180e-4c4e-aa43-ce158af47415

📥 Commits

Reviewing files that changed from the base of the PR and between 00dd3f0 and 5926f21.

⛔ Files ignored due to path filters (1)
  • apps/blog/public/object-store-buckets/imgs/hero.svg is excluded by !**/*.svg
📒 Files selected for processing (1)
  • apps/blog/content/blog/object-store-buckets/index.mdx

Walkthrough

Updates the Object Store bucket article’s frontmatter title to new wording focused on AI agent file storage.

Changes

Object Store bucket documentation

Layer / File(s) Summary
Article title metadata
apps/blog/content/blog/object-store-buckets/index.mdx
Changes the MDX frontmatter title from “Give Your Agent File Storage: Object Store Buckets” to “Your AI Agent Needs File Storage. Now It Can Get Its Own”.

Estimated code review effort: 1 (Trivial) | ~2 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding the Object Store buckets launch blog post.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch blog/object-store-buckets

Comment @coderabbitai help to get the list of available commands.

@argos-ci

argos-ci Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - Jul 30, 2026, 3:17 PM

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/blog/content/blog/object-store-buckets/index.mdx (1)

59-158: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Consider wrapping the lifecycle in try/finally so the bucket is cleaned up even on failure.

The script creates a bucket and keys (steps 1-2), then does several operations that can throw (S3 write/read/presign/fetch, the read-only-key check) before reaching the DELETE in step 6. If any of those steps throw for a reason other than the expected "read-only write" case, main()'s top-level catch logs and exits without ever deleting the bucket, leaking it. Since this script is presented as a pattern for agents to run repeatedly, a leaked bucket per failed run is a realistic outcome worth guarding against in the reference implementation.

♻️ Proposed fix
 async function main() {
   // 1. Create the bucket
   const bucket = await api<any>("POST", "/v1/buckets", {
     projectId,
     name: "uploads",
   });
   const bucketId = bucket.data.id;
   console.log(
     `Created bucket ${bucketId} (name: ${bucket.data.name}, status: ${bucket.data.status}, branchId: ${bucket.data.branchId})`,
   );

-  // 2. Mint a read-write key: the response carries everything this client needs
-  const key = await api<any>("POST", `/v1/buckets/${bucketId}/keys`, {
-    name: "demo-key",
-    role: "read_write",
-  });
-  ...
-  // 6. Teardown: delete the bucket with the object still inside
-  await api("DELETE", `/v1/buckets/${bucketId}`);
-  console.log(`Deleted bucket ${bucketId} (object still inside went with it)`);
+  try {
+    // 2. Mint a read-write key: the response carries everything this client needs
+    const key = await api<any>("POST", `/v1/buckets/${bucketId}/keys`, {
+      name: "demo-key",
+      role: "read_write",
+    });
+    ...
+  } finally {
+    // 6. Teardown: delete the bucket with the object still inside, even on failure
+    await api("DELETE", `/v1/buckets/${bucketId}`);
+    console.log(`Deleted bucket ${bucketId} (object still inside went with it)`);
+  }
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/blog/content/blog/object-store-buckets/index.mdx` around lines 59 - 158,
Wrap the bucket lifecycle in main with try/finally so cleanup runs after bucket
creation even when later S3 or API operations throw. Track the created bucketId
before entering the operational steps, move the DELETE call into the finally
block, and guard it so cleanup is attempted only when a bucket was successfully
created while preserving the existing top-level error handling.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/blog/content/blog/object-store-buckets/index.mdx`:
- Around line 21-23: In the prose section “The step where an agent had to stop,”
add a comma after “For a human” in the sentence beginning “For a human that is
an afternoon of setup” to clarify that “that” refers to the setup process.

---

Nitpick comments:
In `@apps/blog/content/blog/object-store-buckets/index.mdx`:
- Around line 59-158: Wrap the bucket lifecycle in main with try/finally so
cleanup runs after bucket creation even when later S3 or API operations throw.
Track the created bucketId before entering the operational steps, move the
DELETE call into the finally block, and guard it so cleanup is attempted only
when a bucket was successfully created while preserving the existing top-level
error handling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c2e2e187-864c-471f-9b0b-89513255855e

📥 Commits

Reviewing files that changed from the base of the PR and between 002cbf6 and 10b9332.

⛔ Files ignored due to path filters (2)
  • apps/blog/public/object-store-buckets/imgs/hero.svg is excluded by !**/*.svg
  • apps/blog/public/object-store-buckets/imgs/meta.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • apps/blog/content/blog/object-store-buckets/index.mdx

Comment thread apps/blog/content/blog/object-store-buckets/index.mdx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/blog/content/blog/object-store-buckets/index.mdx`:
- Around line 191-194: Update the credential-handling guidance near the
service-token discussion to explicitly prohibit printing service tokens or
one-time secretAccessKey values, including them in agent transcripts, or
committing them to .env files. Direct users to store credentials in a secret
store or ephemeral environment, and state when to revoke them: immediately after
exposure or when no longer needed, with extra care for non-expiring service
tokens.
- Line 185: Update the read-only key demonstration so unexpected write success
throws instead of logging success, and validate that the caught failure has the
expected AccessDenied error code or status before treating the permission check
as successful. Preserve the existing read-key write attempt and ensure unrelated
or transient errors are rethrown.
- Line 53: Update the lifecycle script’s main execution flow so bucket, key, and
object cleanup runs in a best-effort finally block even when an earlier API or
S3 operation fails; preserve the existing teardown operations and ensure cleanup
errors do not mask the original failure. Do not describe the script as a
complete lifecycle unless this failure-path cleanup is implemented.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 5401b9e5-f205-4e0b-a386-1b9089277c20

📥 Commits

Reviewing files that changed from the base of the PR and between 10b9332 and 364c294.

⛔ Files ignored due to path filters (1)
  • apps/blog/public/object-store-buckets/imgs/hero.svg is excluded by !**/*.svg
📒 Files selected for processing (1)
  • apps/blog/content/blog/object-store-buckets/index.mdx

Comment thread apps/blog/content/blog/object-store-buckets/index.mdx
Comment thread apps/blog/content/blog/object-store-buckets/index.mdx
Comment thread apps/blog/content/blog/object-store-buckets/index.mdx
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 30, 2026
@nurul3101
nurul3101 merged commit d030b43 into main Jul 31, 2026
17 checks passed
@nurul3101
nurul3101 deleted the blog/object-store-buckets branch July 31, 2026 10:00
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.

1 participant