Skip to content

Say in ADR 0014 that the attachment store is built end to end - #790

Merged
JSdotNet merged 1 commit into
mainfrom
claude/adr-0014-status-built-end-to-end
Sep 28, 2026
Merged

JSdotNet merged 1 commit into
mainfrom
claude/adr-0014-status-built-end-to-end

Conversation

@JSdotNet

Copy link
Copy Markdown
Owner

Summary

Local ADR 0014 told a reader the attachment store was half-implemented. Its Status section still read "Not yet built: the phone's upload and the desktop's intake, which are later items of the same plan" — both landed and merged weeks ago, in #702 and #698.

This rewrites that one section so the record matches the system. Nothing decided changes.

Found while checking whether the +mobile-inbox-slice plan was fully implemented: it is, apart from its sign-off, and this was the first of the stale-documentation findings its review filed.

Changes

One file, one section — .devbook/arc42/adr/0014-attachments-travel-through-a-blob-store-beside-the-replica.md, ## Status.

  • The section now says the decision is built end to end and names all three sides. The service inventory it already carried is kept as it was; the phone and the desktop are new.
  • Phone: the /note talk-note screen in Backlog.Mobile.UI, IAttachmentPicker with an Android and a web registration, TalkNoteOutboxKind and AttachmentRules, and files staged through the device outbox so every PUT /api/sync/attachments/{id} completes before the POST that names them.
  • Desktop: an inbox_item_attachments table behind SqliteInboxRepository, download through GET /api/sync/attachments/{id} into the workspace folder, thumbnails and file rows in InboxItemDetail.razor, and the item's folder handed to the task when the item is routed to Tasks.
  • Unchanged and byte-identical: the accepted date, the 25 MB cap, the allowlist, upload and download through the service rather than by SAS, the X-Attachment-Sha256 and sizeBytes paragraph, and the local-numbering paragraph. Task attachments stay out of scope and machine-local.
  • The meta block is untouched. status stays absent, which is arc42/'s resting active.

Two judgement calls worth a reviewer's eye:

  • inbox_item_attachments is attributed to SqliteInboxRepository rather than to Backlog.Modules.Inbox, because that is where the table actually lives.
  • No PR numbers in the record — no other paragraph in it cites one.

Testing

Documentation only; no code, no runtime, so no automated suite applies.

  • node .devbook/_tools/devbook-meta/build.mjs --check — exits 0.
  • node tools/devbook/check-metadata.mjs — 0 blocking across all 148 files. The advisory count is unchanged and pre-existing (every ADR section carries a "heading has no meta block" note).
  • No heading was renamed or moved, so no cross-reference elsewhere needed updating.
  • _meta/ was not regenerated; that is the repository's own refresh path.

Related

No issue. Refs local ADR 0014, and the pull requests whose work it now describes: #702 (the phone's upload) and #698 (the desktop's intake).

Known remaining, deliberately not in this PR. ADR 0005 carries the other half of the same staleness — it still calls local ADR 0014 "(proposed)" when it is Accepted, and still says attachments are deferred with no blob storage provisioned. That is covered by the devbook catch-up follow-up the +mobile-inbox-slice plan review filed, and folding it in here was offered and left unanswered.

Checklist

  • Scope is focused and excludes unrelated changes
  • Documentation or instruction files were updated when governance or behavior changed
  • Running Aspire instances for this checkout were stopped before PR creation — none were started; this change has no runtime
  • Follow-up work is captured when the implementation is intentionally partial — the ADR 0005 half is named above and already filed
  • Issues this PR closes are linked with a closing keyword, or there are none — there are none

🤖 Generated with Claude Code

The Status section still read "Not yet built: the phone's upload and the
desktop's intake, which are later items of the same plan". Both landed and
merged weeks ago, so a reader arriving at the record was told the decision was
half-implemented when it is not.

It now names all three sides: the service inventory it already carried, the
phone (the /note talk-note screen, IAttachmentPicker, TalkNoteOutboxKind and
AttachmentRules, and files staged through the device outbox so every PUT
completes before the POST that names them), and the desktop (an
inbox_item_attachments table behind SqliteInboxRepository, download through
GET /api/sync/attachments/{id}, thumbnails and file rows in
InboxItemDetail.razor, and the item's folder handed to the task on routing).

Everything decided stays as it was: the accepted date, the 25 MB cap, the
allowlist, upload and download through the service rather than by SAS, the
X-Attachment-Sha256 and sizeBytes paragraph, and the local-numbering note.
Task attachments remain out of scope and machine-local.

ADR 0005 carries the other half of this staleness - it still calls local ADR
0014 "(proposed)" and still says attachments are deferred with no blob storage
provisioned. That is left to the devbook follow-up the mobile-inbox-slice plan
review filed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JSdotNet
JSdotNet merged commit d72ea54 into main Sep 28, 2026
8 checks passed
@JSdotNet
JSdotNet deleted the claude/adr-0014-status-built-end-to-end branch September 28, 2026 21:31
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