Repository navigation
fix(spec): describe CompleteUploadRequest.eTag as stored, not compared - #24695
Conversation
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
…ag describe Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
📓 Docs Drift CheckThis PR changes 1 package(s): 3 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 143 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 2a913ab8d88826ecfba88bd227ed19b23bd09ee6 && git checkout 2a913ab8d88826ecfba88bd227ed19b23bd09ee6
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 5018fc303d3c36f973d0cce4866d69530ddfeb64 57b0e5a1979df1d13f3504bf03ef55ad6338086e && git checkout -B drift-repro 5018fc303d3c36f973d0cce4866d69530ddfeb64 && git merge --no-ff 57b0e5a1979df1d13f3504bf03ef55ad6338086e
node scripts/docs-audit/affected-docs.mjs --json 5018fc303d3c36f973d0cce4866d69530ddfeb64
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 39349100593 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Closes #24648
Clause-②: no
What changes
CompleteUploadRequestSchema.eTag(packages/spec/src/api/storage.zod.ts) described itself asS3 ETag verification. No runtime path verifies it. The description now says what runs:Route: amend the describe, per the triage lean and the claim. No shape change, no new check, no retirement. The key keeps the same type and optionality.
Evidence the new sentence is accurate (read on
origin/main3a931fc)packages/services/service-storage/src/storage-routes.ts,POST /storage/upload/complete: the body'seTaggoes intostore.updateFile(fileId, { status: 'committed', etag: eTag ?? undefined }). It is stored verbatim and never read before that write.heldBytesRefusal(added with PR fix(service-storage): the upload commit door refuses a file whose bytes the storage backend does not hold #24643) runs before the write. It refuses whenstorage.exists(file.key)is false. When the row declares a size, it also refuses whenstorage.getInfo(file.key).sizediffers from that size. Its own docblock says the eTag is not compared, because no adapter'sgetInforeports the stored object's ETag.StorageFileInfo(packages/spec/src/contracts/storage-service.ts) has noetagmember.Files
packages/spec/src/api/storage.zod.ts: the describe.content/docs/references/api/storage.mdx: regenerated bypnpm --filter @objectstack/spec check:generated --fix, which proved onlycheck:docsstale and rangen:docs. Not edited by hand..changeset/24648-etag-describe.md:@objectstack/specpatch.No test pins the old sentence. The only occurrences of
S3 ETag verificationwere the schema and the generated reference page. The key is not in anypackages/spec/liveness/*.jsonledger. The one hit inqa.jsonis the substring insideparseTagsFlag. No other open PR touchesstorage.zod.tsorreferences/api/storage.mdx; I read the file lists of all open PRs before opening this one.Verification (head 57b0e5a, after merging origin/main)
pnpm --filter @objectstack/spec build: exit 0.pnpm --filter @objectstack/spec typecheck: exit 0, including thecheck:test-typechecklayer.pnpm --filter @objectstack/spec test: 702 files passed, 21349 tests passed, 1 todo.pnpm --filter @objectstack/spec check:generated: red before the regeneration (1 of 14 stale:content/docs/references/**). Green after--fix.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: derived 104 commands. All 104 ran. 103 exit 0 (6 of them were re-run after building their declared prerequisites:@objectstack/lintand its closure,@objectstack/formula,@objectstack/client-react,@objectstack/objectql).pnpm check:dual-build-cjs-loads. Reason: it needs a whole-workspacepnpm build(29 or more packages have nodist/), and that build does not fit the local budget. The diff changes one describe string and no package entry point. Declared to CI.Acceptance notes
etagonStorageFileInfo, the S3 adapter reportingHeadObject'sETag, and a compare at the commit door. Retiring the key would be a protocol change. Both are left out, per triage.Generated by Claude Code