feat(blog): add Object Store buckets launch post - #8118
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
WalkthroughUpdates the Object Store bucket article’s frontmatter title to new wording focused on AI agent file storage. ChangesObject Store bucket documentation
Estimated code review effort: 1 (Trivial) | ~2 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
The latest updates on your projects. Learn more about Argos notifications ↗︎
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
apps/blog/content/blog/object-store-buckets/index.mdx (1)
59-158: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winConsider 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
DELETEin 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
⛔ Files ignored due to path filters (2)
apps/blog/public/object-store-buckets/imgs/hero.svgis excluded by!**/*.svgapps/blog/public/object-store-buckets/imgs/meta.pngis excluded by!**/*.png
📒 Files selected for processing (1)
apps/blog/content/blog/object-store-buckets/index.mdx
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
apps/blog/public/object-store-buckets/imgs/hero.svgis excluded by!**/*.svg
📒 Files selected for processing (1)
apps/blog/content/blog/object-store-buckets/index.mdx
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 withread/read_writeroles, 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
GET /v1/projects/{id}/branches,isDefault: true), key minted, 44-byte write, exact read-back, presigned GET HTTP 200, read-only key rejected withAccessDeniedon write, bucket deleted with the object still inside, bucket list restoredapi.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 nameslint:linksclean; rendered page verified on the local dev serverNotes for reviewers
The
prismaCLI has no bucket commands today (platform→statusonly), 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: trueremoved; publish date 2026-07-28Final 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