Repository navigation
inline-grid-receipt-cells c3: checklist clause predates ADR-0104 (opaque id, not a resolved object) #7669
Description
Activity
Dual-label resolution (queue+finding): promoted to
pm:queue(finding stripped). Checklist restatement with a settled ruling behind it — ADR-0104 D3 ("File-as-reference: field values point intosys_file",docs/adr/0104-field-runtime-value-shape-contract.md:211, verified onorigin/main@6a9dec6) already decides the stored shape; clause 3 just predates it. Nothing to ask the maintainer; the edit is mechanical.domain:devxstands (docs/qa/platform-checklist).本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
huangyiirene commented
on Aug 11, 2026 CollaboratorAuthorMore actionsClaim: PM loop round 3 (devx seat, 2026-08-11 term) — wave 3 unit D, packed with #7671 + #7670 (same attachments area file; full claim block on #7671). Branch
claude/issue-7671-7669-7670-attachments-checklist; sessionsession_01GZKbx4xyF7U5WXj6ch49BM;mode:cloud,model: opus. This card's half: restate clause 3 against ADR-0104 D3 (opaquesys_fileid as the stored reference, correctly gated) — the checklist mirrors the shipped contract, no product change.
Generated by Claude Code
huangyiirene commented
on Aug 11, 2026 CollaboratorAuthorMore actionsImplemented as part of the packed unit — full os-dev report lives on #7671 (#7671, the
os-dev-reportcomment). Draft PR: #7716, branchclaude/issue-7671-7669-7670-attachments-checklist, first linesFixes #7671/Fixes #7669/Fixes #7670.This card's half.
inline-grid-receipt-cellsacceptance clause 3 (0-indexed — the batch-payload clause) restated against ADR-0104 D3. Both citations re-verified at my ref (origin/main21888ab), not taken from triage:docs/adr/0104-field-runtime-value-shape-contract.md:211-224— D3 "File-as-reference: field values point intosys_file": the stored form is "an opaquefileIdstring (array whenmultiple)"; "the inline{url, name, size}blob is retired from the write path"; the resolved{ id, name, size, mimeType, url }FileValueSchemais the expanded form produced at read/expand time, whoseurlis "derived, never stored".packages/services/service-storage/src/storage-routes.ts:250-252— the/upload/completefileIdis documented as "the opaquesys_fileid — the value a file field stores as a reference (ADR-0104 D3)".
The old clause demanded a resolved stored-file object with
receipt.nameand an absolute http(s) URL, i.e. it asserted a contract the ADR had already retired — which is the whole reason run #7635 scored a correct productpartial. The clause now asserts the bare opaque id together with the field-ownership stamp (ref_object/ref_id/ref_field/acl) that distinguishes a managed reference from adata:/blob:placeholder — the thing the run actually proved. Title, step text andsourcefollow, and a newnegativepins the drift itself so a future run cannot re-score the shipped shape as a defect.D3's parent-derived read gating is cross-referenced to
download-authz-both-sides(which already carries the non-entitled personas) rather than duplicated here — the same discipline this item already applies to the ADR-0059 form-side guard. The product is correct and unchanged; only the checklist moved.
Generated by Claude Code
- added a commit that references this issue
on Aug 17, 2026
Symptom
The product works correctly: the grid derives one Receipt column with a real
input[type=file](objectui#2360 does not reproduce), picking a file runs a genuine presign →PUT→ complete → thumbnail trace, and submit emits one atomicPOST /api/v1/batch(atomic:true,{"$ref":0}parent reference), persisting both records. But checklist clause 3 readspartialbecause it expects a resolved stored-file object carryingreceipt.nameand an absolute http(s) URL, whereas the shipped payload is the bare opaquesys_fileid.Root cause
Located — checklist-vs-product drift, not a defect. Under ADR-0104 D3 (
docs/adr/0104-field-runtime-value-shape-contract.md, "D3 — File-as-reference: field values point intosys_file"), a file field stores an opaquesys_fileid as a field-ownership reference. The persisted value is a managed reference ({status:'committed', ref_object:'showcase_invoice_line', ref_id:…, ref_field:'receipt', acl:'private'}), not adata:/blob:placeholder, and is correctly gated (anon 401 / two members 403 / admin 200).storage-routes.tsdocuments the id as "the value a file field stores as a reference". The clause should be restated against ADR-0104 D3.Reproduction
Run the
inline-grid-receipt-cellsitem; inspect the submittedreceiptvalue → it is the opaquesys_fileid, not a resolved{name, url}object. Clause 3 as written expects the resolved shape and therefore readspartial.Source
Extracted from the QA run #7635 (framework 92f26f7, console 6314e87f).