Skip to content

deliverables: a Deliverables tab on the project, each file with its own public link - #106

Merged
a-trautman merged 1 commit into
mainfrom
deliverables
Oct 21, 2026
Merged

a-trautman merged 1 commit into
mainfrom
deliverables

Conversation

@a-trautman

Copy link
Copy Markdown
Collaborator

What

  • A deliverables folder type under a project, created by the first upload from the new Deliverables tab (second after Efforts; every group reads it).
  • Upload from the tab (markdown only, stored as content), replace in place through the existing replace route so the link never changes.
  • A per-file share switch, file_refs.shared_at, written only by setDeliverableShared: a Guide on the project or staff. Not is_public, which would open the folder-browsing routes too.
  • Public page /public/deliverable/<fileId>: rendered like a website page (WebsitePageContent + the website directive registry), no Vault chrome, no login; serves only the file ids the body names (/api/deliverable/<fileId>/view|rendition/<id>); markdown source at /api/deliverable/<fileId>/download. 404 when off or the project is trashed.
  • publicBody.ts: the one definition of "a file URL in a body", used by the shared Efforts page and the deliverable page.
  • ShareLinkControl extracted so the Efforts share and a deliverable share are one element.

Why ids, not tokens

The record ids are 20 random lowercase alphanumerics (about 103 bits). A token table would have bought only link rotation, which the seed said is not wanted. public-link-rule is composted on the board with that note.

Tests

  • fruits/app/tests/deliverables.test.tsx (14), deliverablesResolve.test.ts (3), a mediaUrls case; webapp features/dashboard tab lists updated.
  • fruits 27 files / 226 tests green, webapp 39 / 595 green, tsc clean.
  • Walked live on the dev stack: upload, 404 before share, share, public page, download, replace keeps the URL, off → 404, /public/file/<id> stays 404, non-markdown refused, second upload reuses the folder.

Not in this PR

The server-rendered PDF (next round on the same seed).

🤖 Generated with Claude Code

…wn public link

A deliverable is one markdown file a guide uploads into the project's
`Deliverables` folder (a new `deliverables` folder type, made on first
upload with a deterministic id). The tab lists them for everyone on the
project; a Guide or staff uploads, replaces in place (same id, same
link) and flips each file's share switch (`file_refs.shared_at`, never
`is_public`). The public page at `/public/deliverable/<fileId>` renders
the file like a website page with no login, serves only the file ids the
body names, and offers the markdown source to download. The link is the
file's own id: the ids are 20 random characters, already unguessable, so
no token table (`public-link-rule` composted). The Efforts share is
untouched; its control is now the shared `ShareLinkControl`. The PDF is
the next round.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Janitor

Text a model or an agent reads changed in this branch (against 30ce60c). Nothing here is a verdict on the change. It is here so the change is seen: read the diff of each file below before this merges.

  • vault/SKILL.md: 191 -> 192 lines, 5227 -> 5354 words

@a-trautman
a-trautman added this pull request to stack #108 October 21, 2026 17:20
@a-trautman
a-trautman merged commit a2e6931 into main Oct 21, 2026
6 checks passed
@a-trautman
a-trautman deleted the deliverables branch October 21, 2026 17:21
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