Chest

Contract

What Chest is being built to do

Every clause of the product Chest is building toward, and how much of it the code does today. Judged from the code and tests, not from plans.

43 of 96 clauses done

  • 43 done
  • 31 partial
  • 22 missing

Judged at commit 27ee65a ·

How statuses are judged

Published clauses

23 done · 1 partial · 0 missing

of 24

Target and push further

20 done · 30 partial · 22 missing

of 72

Product target

Category
Business cloud file storage, sync and sharing
Replaces
Google Drive (Google Workspace), Dropbox Business, Box, Microsoft OneDrive / SharePoint
Must also beat
Egnyte, LucidLink, Nextcloud
First buyer
A US operations lead at a 10–100 person business replacing its everyday file store, sync and sharing; costs in USD

Progress by area

8 areas

Published · 2 areas

Target and push further · 6 areas

All clauses

ClauseTitleStatusEvidence or gap
Identity, original custody and governed records 13 done · 0 partial · 0 missing
CHEST-01publishedOwner and ordinary staff identityDonesrc/chest/identity.tssrc/chest/invitation-mail.tssrc/chest/names.tstests/chest/flows.mjstests/chest/journey.mjs
CHEST-02publishedTyped filing without lost valuesDonesrc/chest/metadata.tssrc/chest/fields.tstests/chest/flows.mjs
CHEST-03publishedValidate before publishing originalsDonesrc/chest/blobs.tssrc/chest/documents.tstests/chest/flows.mjs
CHEST-04publishedAccountable filing and safe movesDonesrc/chest/metadata.tstests/chest/flows.mjs
CHEST-05publishedSafe basic previewsDonesrc/chest/blobs.tstests/chest/flows.mjstests/chest/browser-flow.mjs
CHEST-06publishedCurrent access governs every private doorDonesrc/chest/access.tssrc/chest/api.tssrc/chest/blobs.tstests/chest/flows.mjstests/chest/browser-flow.mjs
CHEST-07publishedImmutable versions and precise approved pointersDonesrc/chest/documents.tssrc/chest/reviews.tstests/chest/flows.mjstests/chest/journey.mjs
CHEST-08publishedExact-version human decisionsDonesrc/chest/reviews.tstests/chest/flows.mjstests/chest/journey.mjs
CHEST-09publishedReview and expiry work retain evidenceDonesrc/chest/documents.tssrc/chest/ui-library.tstests/chest/flows.mjstests/chest/browser-flow.mjs
CHEST-10publishedPeople and group grantsDonesrc/chest/access.tssrc/chest/metadata.tstests/chest/flows.mjstests/chest/restore.mjs
CHEST-11publishedReviewed reversible archive admissionDonesrc/chest/archive.tssrc/chest/archive-target.tstests/chest/flows.mjstests/chest/journey.mjs
CHEST-12publishedComplete independent local recoveryDonescripts/installer/local.mjsscripts/check-public-assets.mjstests/chest/restore.mjstests/chest/journey.mjs
CHEST-13publishedSelf-service reversible trash and mutation auditDonesrc/chest/files/trash.tssrc/chest/documents.tstests/chest/files.mjstests/chest/browser-files.mjs
Everyday files, sharing and hosted operation (0.2.0) 10 done · 1 partial · 0 missing
CHEST-14publishedTeam spaces, nested folders and phone uploadsDonesrc/chest/files/spaces.tssrc/chest/files/items.tssrc/chest/files/ui-item.tspublic/chest-upload.jstests/chest/files.mjstests/chest/browser-files.mjs
CHEST-15publishedLarge uploads resume where they stoppedDonesrc/chest/files/uploads.tssrc/chest/blobs.tspublic/chest-upload.jstests/chest/files.mjs
CHEST-16publishedRestore a file to an earlier versionDonesrc/chest/files/items.tssrc/chest/files/ui-item.tstests/chest/files.mjstests/chest/browser-files.mjs
CHEST-17publishedRestore a folder to a date, and undo itDonesrc/chest/files/rewind.tssrc/chest/files/ui-item.tstests/chest/files.mjstests/chest/browser-files.mjs
CHEST-18publishedLinks for anyone with a password, expiry and download limit, and revokeDonesrc/chest/files/public-links.tssrc/chest/files/capability.tssrc/chest/files/public.tssrc/chest/files/ui-public.tstests/chest/files.mjs
CHEST-19publishedShared too widely, and Make privateDonesrc/chest/files/exposure.tssrc/chest/files/ui-links.tstests/chest/files.mjs
CHEST-20publishedFile requests from anyoneDonesrc/chest/files/file-requests.tssrc/chest/files/ui-public.tssrc/chest/files/notify.tstests/chest/files.mjs
CHEST-21publishedSearch finds words inside PDFs, only where you have accessDonesrc/chest/files/views.tssrc/chest/read/pdf.tssrc/chest/read/jobs.tstests/chest/reading.mjstests/chest/files.mjs
CHEST-22publishedSpace viewers read and download onlyDonesrc/chest/files/access.tssrc/chest/files/api.tstests/chest/files.mjstests/chest/browser-files.mjs
CHEST-23publishedHosted Chest on your own Cloudflare account, with email sign-in, backup, restore and removalPartialdeploy.jsonscripts/hosted-backup.mjsscripts/hosted-restore.mjsscripts/hosted/account.mjsscripts/hosted/r2.mjsdocs/hosting.mdtests/chest/flows.mjstests/chest/organisation.mjsGap: Email sign-in and invitations are tested against the built Worker; no repository test deploys to Cloudflare or runs a hosted backup, restore or removal. The 0.2.0 release gate ran them by hand.
CHEST-24publishedUpgrading from 0.1.0 keeps every record and originalDonemigrations/core/0016_owner_signin.sqlmigrations/core/0017_files.sqlmigrations/core/0018_reading.sqlmigrations/core/0019_organisation.sqlmigrations/core/0020_scim.sqltests/chest/upgrade.mjstests/chest/upgrade-local.mjstests/chest/upgrade-runtime-loader.mjs.github/workflows/verify.yml
The everyday business file system 1 done · 9 partial · 4 missing
SPACE-001targetTeam spaces and ordinary filesPartialsrc/chest/files/spaces.tssrc/chest/files/items.tssrc/chest/files/uploads.tssrc/chest/files/ui-item.tssrc/chest/files/ownership.tssrc/chest/files/ui-ownership.tssrc/chest/files/access-explanation.tstests/chest/ownership.mjstests/chest/browser-ownership.mjstests/chest/files.mjstests/chest/browser-files.mjssrc/chest/office/create-service.tssrc/chest/office/create-templates.tssrc/chest/office/create-settings.tssrc/chest/office/new-ui.tssrc/chest/files/governance.tssrc/chest/files/ui-governance.tstests/chest/new-files.mjstests/chest/governance.mjstests/chest/browser-new-files.mjssrc/chest/files/folder-metadata.tssrc/chest/files/ui-folder-metadata.tstests/chest/browser-governance.mjsGap: Team spaces, personal areas, nested folders with inherited grants and a breadcrumb, create/rename/move/copy/trash, untyped upload by drop, picker or phone camera, stable IDs, restricted subfolders, star, recent, shortcuts and offboarding to a successor exist; Personal-file and folder ownership offers now require recipient acceptance, preserve IDs, original versions, links and grants, support decline/cancel and optional sender editor access, and notify both parties by email and in-app. Acceptance hands existing public links and upload requests to the recipient without changing their tokens or original authorship, even if the sender relinquishes direct access; arrivals notify the new custodian. Changed content, identities or destination collisions cannot silently complete an old offer. The file page explains current inherited, direct, group and organization-link access. The browser New menu creates valid blank Office/OpenDocument files and independent copies from built-in or audience-scoped published templates, with caller-key idempotency, quota admission, creator attribution, search and recent visibility. Selected folders require exact-version review of new originals, inherited through subfolders and retained on moved files; approved A stays current while B/C await review, and restore, editor saves, sync and file-request arrivals enter as new submissions. Reviewer assignment grants no access. Governed folders now select a managed type inherited by subfolders: uploads and creation require valid typed values and an accountable person; schema edits preserve stored values, diagnose only accessible items, and refuse stale replacements/restores. Resumable uploads retain filing values; corrections are audited. Moves retain governance and typed values. Missing: the full EDIT-004 Collabora/provider/native experience and a SCALE-001 reference-size run.
SPACE-002targetSpace creation control and new-space defaultsDonesrc/chest/files/space-policy.tssrc/chest/files/space-settings.tssrc/chest/files/space-sharing.tssrc/chest/files/spaces.tssrc/chest/files/access.tssrc/chest/files/shares.tssrc/chest/files/link-policy.tssrc/chest/files/ui-space-policy.tssrc/chest/files/ui-pages.tssrc/chest/files/ui.tstests/chest/space-policy.mjstests/chest/browser-space-policy.mjs
ROLE-001targetFive-level roles and delegated sharingPartialsrc/chest/files/access.tstests/chest/files.mjsGap: Viewer, commenter, contributor, content manager and manager on spaces, file-level viewer/commenter/editor, restricted inheritance, per-space and per-item no-download and the editor sharing switch exist; EDIT-001 comment-and-suggest sessions, a per-role browser matrix and the BULK-001 archive door do not.
VERSION-001targetFile version history and restore by editorsPartialsrc/chest/files/items.tssrc/chest/documents.tssrc/chest/files/views.tstests/chest/files.mjstests/chest/browser-files.mjsGap: Staff version history, download, naming, replacement and attributed restore with retained later bytes, stable links and governed approval pointers are implemented and exercised through HTTP and browser journeys. Missing: restores delivered to open EDIT-001 sessions as a remote change (public/chest-office.js refreshes comments and presence only), and migration/signature arrival provenance in version history; those arrival workflows are not implemented.
TRANSFER-001targetResumable files and whole-folder uploadsPartialsrc/chest/files/uploads.tssrc/chest/blobs.tspublic/chest-upload.jstests/chest/files.mjstests/chest/browser-files.mjsGap: Resumable multipart upload (browser and API) of several files at once, up to 4 GB per file, exists: per-file percentage, pause, cancel, automatic retry after a lost connection, resume after a reload or restart from the parts already received (choosing the same file in the same place), every byte SHA-256 verified (and checked against a stated checksum) before the file appears, with the check's elapsed time and an estimate shown, a resumed upload showing only its live progress, completion that never makes a second file, and actionable per-file refusals (name taken, too large, no access). QUOTA-001 refusals are enforced on direct and resumable uploads with an actionable per-file message. Whole-folder uploads, the 5 TB limit, 100,000-item per-item results and desktop/mobile clients remain.
BULK-001targetMulti-select actions and archive downloadPartialsrc/chest/bulk/src/chest/files/repo.tspublic/chest-bulk.jstests/chest/bulk.mjstests/chest/browser-bulk.mjsdocs/bulk.mdGap: Browser selections persist across folders and search. Private durable jobs move, copy, share, trash and restore with atomic per-item receipts, live source/destination ACL and policy checks, partial results, cancellation and restart-safe explicit continuation. Streaming ZIP64 captures exact selected versions, retains names/tree and includes a manifest with hashes and exclusions; each original chunk rechecks live access and affected-source upload-protection pauses. The public-door flow exercises 200-file archives with five exclusions, 197/3 move/share results, restart and concurrent copying. Browser selection, ZIP, trash/restore and stored outcomes are exercised at 1440 and 390. Missing: signed desktop/mobile selection, guest and request-recipient archive grants, the 6 GB guest exercise, unbounded trees and autonomous server-side execution.
SYNC-001targetWindows and macOS filesystem clientsPartialsrc/chest/files/sync.tssrc/chest/files/devices.tstests/chest/files.mjsGap: The server protocol a client needs exists (device keys, tree, change journal with cursors, ranged hydration, create/upload with base version, rename/move/delete); the signed macOS File Provider and Windows Cloud Files clients do not. A restore is present in the tested server change feed, but receipt of restored bytes/version IDs in the native clients remains unimplemented and untested.
SYNC-002targetOffline edits and lossless conflict reconciliationPartialsrc/chest/files/sync.tstests/chest/files.mjsGap: A save from an outdated base keeps the remote version current and files the client bytes as a named conflict copy, and revoked access refuses the upload; the client side (offline queue, cutover, private recovery copy) does not exist.
SYNC-003targetVisible sync operations and device controlPartialsrc/chest/files/devices.tstests/chest/files.mjsGap: Device list with last contact, revoke and deactivation-stops-devices exist; client states, proxy and bandwidth settings and wipe do not.
SYNC-004targetCreative assets stream and lock safelyMissingGap: No delivered product workflow.
SYNC-005targetHybrid local cache and storageMissingGap: No delivered product workflow.
SYNC-006targetComputer folder backupMissingGap: No delivered product workflow.
SYNC-007targetOffice desktop presence, newer-version alerts and locksMissingGap: No delivered product workflow.
MOBILE-001targetNative iOS and Android file accessPartialsrc/chest/ui-library.tssrc/chest/files/ui-item.tspublic/chest-upload.jstests/chest/journey.mjstests/chest/browser-files.mjsGap: Responsive browser browse and resumable upload with the phone's camera or file picker exist; native apps, background/offline sync and mobile sharing do not.
External exchange, previews and collaboration 3 done · 8 partial · 3 missing
SHARE-001targetPolicy-controlled external linksPartialsrc/chest/files/links.tssrc/chest/files/public-links.tssrc/chest/files/link-versions.tssrc/chest/files/link-policy.tssrc/chest/files/public.tssrc/chest/files/ui-link-form.tssrc/chest/files/ui-links.tstests/chest/files.mjstests/chest/link-versions.mjstests/chest/link-policy.mjstests/chest/browser-links.mjssrc/chest/files/governance.tstests/chest/browser-approved-links.mjssrc/chest/files/guest-links.tstests/chest/guest-links.mjstests/chest/browser-guest-links.mjssrc/chest/files/link-snapshots.tssrc/chest/files/link-comments.tstests/chest/link-discussions.mjstests/chest/browser-link-discussions.mjsGap: Organization links (viewer/commenter/editor, discoverable or not), restricted links that grant no new access, and public file/folder links exist. Public links support salted password hashes with throttling, expiry, atomic download limits, current, a retained pinned version or the authoritative approved version of a reviewed file, rendered previews of readable Office/plain-text files with original downloads refused, and one-click revocation. Folder links exclude restricted descendants. The item and Links pages show expiry, used downloads, version mode and policy suspension. Organization/space/creator-group link switches are enforced live; new-link audience defaults and organization-link role defaults do not change old links. Browser journeys at 1440 and 390 cover creation, password refusal, exact original bytes, preview, usage, revoke and policy suspension. Approved-only links follow exact decisions: approving B never selects pending C; pending originals stay hidden from landing, preview, download and query overrides, and revocation ends old URLs. Named-guest and exact-domain links now require a one-use email confirmation, issue a link-scoped 12-hour cookie, and recheck audience, custodian, expiry, policy, password and download limits for every page, preview and original. No staff account or library access is created; restricted descendants remain excluded. Verified recipients are attributed in audit, with visitor identities hidden from non-manager file activity. External commenter links now add version-bound discussions with provider mail/in-app notices, isolated from internal comments and other links. Pinned folder links retain the original membership, paths, names and exact versions; newly arrived files are excluded, while current restrictions, moves, trash and revocation still win. Snapshot creation currently admits at most 500 descendants and 100 folder levels with explicit refusal above either. Guest editor/contributor roles, larger folder snapshots, organization-link password/download-limit/version controls and the full POLICY-001 sharing policy remain.
SHARE-002targetUpload-only file requestsDonesrc/chest/files/file-requests.tssrc/chest/files/request-model.tssrc/chest/files/request-identity.tssrc/chest/files/request-uploads.tssrc/chest/files/request-submissions.tssrc/chest/files/request-public.tssrc/chest/files/request-panel.tssrc/chest/files/ui-public.tspublic/chest-request.jssrc/chest/quota/storage.tstests/chest/file-requests.mjstests/chest/browser-file-requests.mjstests/chest/request-browser-flow.mjs
SHARE-003targetDelivery receipts and large-file transfersDonesrc/chest/transfers/model.tssrc/chest/transfers/service.tssrc/chest/transfers/public.tssrc/chest/transfers/ui.tssrc/chest/files/public.tstests/chest/transfers.mjstests/chest/browser-transfers.mjsdocs/deliveries.md
SHARE-004targetItem sharing, Shared with me and access requestsDonesrc/chest/files/shares.tssrc/chest/files/notify.tssrc/chest/files/people.tstests/chest/files.mjstests/chest/browser-files.mjs
SHARE-005targetExternal collaborators who edit, comment and uploadMissingGap: No delivered product workflow. Guest editors and contributors cannot restore, replace or name versions with verified-email attribution.
POLICY-001targetOrganization sharing policyPartialsrc/chest/files/link-policy.tssrc/chest/files/access.tssrc/chest/files/links.tssrc/chest/files/public-links.tssrc/chest/files/ui-link-policy.tstests/chest/link-policy.mjstests/chest/browser-links.mjssrc/chest/files/sharing-policy.tssrc/chest/files/policy-suspensions.tstests/chest/browser-sharing-policy.mjsGap: Organization, space and creator-group rules now control external sharing, exact trusted domains, anonymous links, non-member access, editor sharing, recipient confirmation, new-link defaults and discovery. Browser confirmation names recipients before any grant or mail is created. Tightening filters existing named grants and guest/public/organization links at the next access request; definitions survive for reallowing, and scoped sharing-policy admins see and remove suspended grants without file-content access. Every save audits before/after values. HTTP and browser flows at 1440/390 exercise refusal, trusted guests, confirmation, live suspension, reallow/removal and member/editor restrictions. Missing: acceptance through the unimplemented Slack/Teams, mail add-in, automation and Google companion connectors (CONNECT-001/002/008/009/010), which need their provider applications.
PREVIEW-001targetOffice, Google, video and design previewsPartialsrc/chest/office/codec.tssrc/chest/office/word.tssrc/chest/office/sheets.tssrc/chest/office/slides.tssrc/chest/office/service.tstests/chest/office.mjsdocs/office.mdsrc/chest/blobs.tstests/chest/browser-preview.mjsGap: In-install DOCX text/tables/basic formatting/raster images, XLSX sheets and saved values, and PPTX slides in relationship order now preview at phone and desktop widths; current access and public-link restrictions gate previews. Advanced Office layouts/themes/charts, Google formats, video and design rendering remain incomplete.
SEARCH-001targetFull-text and scanned-content searchPartialsrc/chest/read/jobs.tssrc/chest/read/pdf.tssrc/chest/read/office.tssrc/chest/read/heic.tssrc/chest/read/provider.tssrc/chest/files/views.tssrc/chest/api.tstests/chest/reading.mjstests/chest/files.mjssrc/chest/files/search.tssrc/chest/files/search-filters.tssrc/chest/files/ui-search.tstests/chest/search.mjstests/chest/browser-search.mjsGap: Names, typed fields and the text of every current version are searched with snippets under current access: UTF-8 text, PDF text layers, DOCX/XLSX/PPTX/ODT/ODS/ODP text, and OCR of image-only PDF pages and JPEG, PNG, WebP, GIF and HEIC images with the installation's own AI model key (language and confidence recorded per page, truncation shown with its offset, encrypted PDFs shown as unread). Browser and named API filters combine type, owner, creator, sharer, timezone-aware modification dates, recursive space/folder location, personal/shared/starred/trash and retained versions. Search ranks names and current content ahead of earlier-version hits; earlier matches show their exact version and snippet. Counts and people/folder choices follow current access. PDF signatures override misleading extensions; Office categories use the extracted package format and text tables are detected from their contents. HTTP and browser journeys at 1440 and 390 exercise combined filters, earlier versions and revocation. Missing: TIFF OCR, legacy Office, RTF, Apple iWork, Google export, EML/MSG, audio/video transcripts, native iOS/Android search and the SCALE-001 search target; OCR is unavailable on RER Managed until an egress relay exists.
SEARCH-002targetTyped fields read from scans and shown where they were foundPartialsrc/chest/read/jobs.tssrc/chest/read/decide.tssrc/chest/read/provider.tssrc/chest/read/ui.tssrc/chest/ui-document.tstests/chest/reading.mjssrc/chest/read/field-values.tssrc/chest/read/item-fields.tssrc/chest/files/folder-metadata.tssrc/chest/files/views.tssrc/chest/files/ui-item.tstests/chest/scan-fields.mjstests/chest/browser-scan-fields.mjssrc/chest/files/governance.tssrc/chest/files/ui-governance.tssrc/chest/files/ui-folder-metadata.tstests/chest/governance.mjssrc/chest/files/uploads.tstests/chest/files.mjsGap: On a scanned Library record or everyday file in a typed folder, typed fields are proposed with page, source box and confidence. Contributors/editors confirm, correct or reject each proposal; viewers are refused. Saved values are never overwritten; confirmations become searchable typed metadata and audit provenance names the exact version, page, box and model. W-9 TIN proposals and corrected decisions retain only a masked last four digits, with sensitive model notes discarded. New versions propose changed or still-undecided fields while prior decisions remain on their versions. Decisions fence current access, file version and type revision; a changed type cannot accept a stale reading. HTTP and browser journeys exercise typed-folder reading, corrections, saved-value preservation and read-only viewers at 1440 and 390. An explicit folder scan-intake setting admits PDF/photo arrivals with required values empty; approval refuses them until a person confirms or enters every required field. Ordinary uploads retain required-value admission. Missing: TIFF OCR, native iOS/Android apps, owner-selected spend and retention under AGENT-007,.
EDIT-001targetOffice and independent browser co-authoringPartialsrc/chest/office/service.tssrc/chest/office/codec.tssrc/chest/office/presence.tssrc/chest/office/ui.tssrc/chest/files/items.tstests/chest/office.mjsdocs/office.mdGap: Built-in DOCX text and XLSX value editing saves attributed immutable versions of the same file, preserves untouched package parts, supports restoration, refuses conflicting saves and merges structurally unchanged independent fields. Current-session presence and viewer/editor gates exist. Live shared typing, full layout/formula editing, PPTX editing, shipped Collabora, tracked suggestions and the full review loop remain unimplemented.
EDIT-002targetGoogle-format collaboration without hidden lossMissingGap: No delivered product workflow.
EDIT-003targetContextual comments and collaborative tasksPartialsrc/chest/files/comments.tssrc/chest/files/notify.tssrc/chest/office/presence.tssrc/chest/reviews.tstests/chest/office.mjstests/chest/files.mjsdocs/office.mdGap: Version-bound file comments notify the file owner by in-app notice and the installation mail provider; presence rechecks live sessions and access. Managed email reports one unavailable line pending outbound support. In-document anchors, mentions, threads, assignments, tasks, tracked suggestions and email replies/resolution remain unimplemented.
EDIT-004targetNew documents, spreadsheets and presentations from blank or templatesPartialsrc/chest/office/create-service.tssrc/chest/office/create-templates.tssrc/chest/office/create-settings.tssrc/chest/office/create-office.tssrc/chest/office/create-odf.tssrc/chest/office/create-presentation.tssrc/chest/office/create-gallery.tssrc/chest/office/new-ui.tstests/chest/new-files.mjstests/chest/browser-new-files.mjsdocs/office.mdGap: Contributors create blank DOCX/XLSX/PPTX or ODT/ODS/ODP in any writable browser folder, or use ten built-in templates. Organization and group format defaults, organization/group/space template audiences, thumbnails, publish/unpublish, independent bytes, source-version provenance, current ACL, quota, audit, recent/search/sync visibility and atomic caller-key idempotency exist. Office documents and spreadsheets open directly in Chest’s text/cell editor; presentations and ODF are download-to-edit. Missing: shipped Collabora and Microsoft/Google provider creation, native apps and guests, delegated service-settings admin, desktop Office/LibreOffice repair-free proof and templates above the existing 8 MB Office limit.
SIGN-001targetBuilt-in eSignature on PDF and DOCX filesMissingGap: No delivered product workflow.
Recovery, administration and operational trust 9 done · 6 partial · 3 missing
RECOVER-001targetFolder and account point-in-time recoveryDonesrc/chest/files/rewind.tssrc/chest/files/ui-item.tstests/chest/files.mjstests/chest/browser-files.mjs
RECOVER-002targetScheduled independent backups and upgrade recoveryDonescripts/backup/hosted.mjsscripts/backup/archive.mjsscripts/backup/crypto.mjsscripts/backup/database.mjsscripts/backup/schedule.mjssrc/chest/backups/service.tssrc/chest/backups/ui.tstests/chest/backup-archive.mjstests/chest/browser-backups.mjsdocs/independent-backups.mdtests/chest/upgrade.mjstests/chest/upgrade-local.mjs
ADMIN-001targetFederation and lifecycle provisioningDonesrc/chest/organisation/domains.tssrc/chest/organisation/domains-ui.tssrc/chest/organisation/group-review.tssrc/chest/organisation/group-review-ui.tssrc/chest/organisation/offboarding.tssrc/chest/organisation/revoke-authority.tssrc/chest/organisation/offboarding-ui.tssrc/chest/organisation/oidc.tssrc/chest/organisation/saml.tssrc/chest/organisation/scim.tssrc/chest/organisation/scim-resources.tssrc/chest/administration/people.tsmigrations/core/0024_lifecycle.sqltests/chest/organisation.mjstests/chest/organisation-lifecycle.mjstests/chest/organisation-deprovision.mjstests/chest/organisation-recovery.mjstests/chest/browser-link-repairs.mjsdocs/organisation.md
ADMIN-002targetAdmin reporting and legible USD costsPartialsrc/chest/administration/reports.tssrc/chest/administration/report-scope.tssrc/chest/administration/report-storage.tssrc/chest/administration/report-ui.tssrc/chest/administration/costs.tssrc/chest/administration/cost-ui.tstests/chest/administration.mjstests/chest/administration-report-flow.mjssrc/chest/quota/storage.tstests/chest/quota.mjsdocs/administration.mdGap: Permission-scoped metadata activity filters, cursor pagination and complete CSV exports now include in-scope guest events and honor existing view-hiding policy; retained-original storage reports reconcile live/previous/trash/quarantined bytes across areas with effective limits. Organization service-settings admins explicitly confirm named provider/quote USD rates, and reports label current monthly storage estimates. ADMIN-002 is exercised within the existing administrative HTTP/browser journey at 1440/390, including a 305-download CSV, content refusal and live role revocation. Remaining: complete transfer/egress metering and dated provider/AI cost attribution, external-guest inventory, and real Collabora edition/enablement, capacity and every-refusal reporting. Historical audit events and cumulative reader tokens are not treated as billed egress or AI spend.
ADMIN-003targetSeveral admins, delegated admin roles and owner transferDonesrc/chest/administration/migrations/core/0022_admin_roles.sqlsrc/chest/files/rewind.tstests/chest/administration.mjsdocs/administration.md
ADMIN-004targetEnforced multi-factor sign-in without an identity providerDonesrc/chest/security/policy.tssrc/chest/security/session.tssrc/chest/security/service.tssrc/chest/security/factors.tssrc/chest/security/reset.tssrc/chest/security/routes.tssrc/chest/security/ui.tspublic/chest-security.jsmigrations/core/0021_mfa.sqltests/chest/security.mjstests/chest/administration.mjs
QUOTA-001targetStorage limits for users and spacesDonesrc/chest/quota/src/chest/files/repo.tssrc/chest/files/space-settings.tssrc/chest/files/views.tssrc/chest/files/ui-item.tssrc/chest/store.tssrc/chest/ui.tssrc/chest/api.tspublic/chest-upload.jstests/chest/quota.mjstests/chest/browser-quota.mjstests/chest/space-policy.mjstests/chest/new-files.mjsdocs/organisation.md
SECURITY-001targetScoped encryption and secret custodyPartialsrc/chest/api.tssrc/chest/access.tssrc/chest/files/devices.tssrc/chest/files/links.tsscripts/installer/local.mjstests/chest/files.mjstests/chest/restore.mjsGap: Private HTTP/ACL, hash-only device keys and link tokens and archive exclusions exist; complete device/provider encryption and key rotation coverage does not.
SECURITY-002targetContent threats and classification policyMissingGap: No delivered product workflow.
SECURITY-003targetRansomware and mass-corruption protectionPartialsrc/chest/upload-protection/src/chest/files/items.tssrc/chest/files/notify.tstests/chest/browser-upload-protection.mjsdocs/upload-protection.mdGap: Browser/API and device-protocol replacements are sampled before publication for entropy jumps and lost signatures; ransom-note names are held too. Durable session/device pauses retain exact suspect bytes privately, alert the uploader and scoped security admins, and refuse affected-source original downloads. Keep originals, stale-safe replacement release and explicit resume survive restart; other sources and intervening legitimate versions remain independent. Browser journeys exercise these states at 1440 and 390. Missing: signed clients and client-side pre-upload signals/tray, mass rewrite/rename detection, complete ordinary-version quarantine history, large-original release and the 500-file native incident exercise.
GOVERN-001targetRetention, legal hold and discovery integrationsMissingGap: No delivered product workflow.
AUDIT-001targetDurable complete action historyDonesrc/chest/audit/journal.tssrc/chest/audit/history.tssrc/chest/audit/privacy.tssrc/chest/audit/public.tssrc/chest/audit/ui.tssrc/chest/store.tssrc/chest/files/repo.tssrc/chest/files/views.tssrc/chest/read/jobs.tssrc/chest/files/notify.tssrc/mail.server.mjstests/chest/audit.mjstests/chest/browser-audit.mjs
ERASE-001targetDeliberate erasure separate from trashDonesrc/chest/erasure/src/chest/files/trash.tssrc/chest/archive-target.tsscripts/erasure/scripts/backup/hosted.mjsscripts/hosted-restore.mjstests/chest/erasure.mjstests/chest/erasure-archive.mjstests/chest/browser-erasure.mjstests/chest/backup-archive.mjsdocs/erasure.md
OPS-001targetResponsive accessible and observable operationPartialsrc/chest/ui-shell.tssrc/chest/ui.tstests/chest/browser-flow.mjstests/chest/journey.mjsGap: Responsive journeys exist, and a hosted install is documented (docs/hosting.md) with mail chosen by deploy settings (scripts/installer/deploy.mjs) and a real hosted backup and restore (scripts/hosted-backup.mjs, scripts/hosted-restore.mjs); native/admin expansion and accessibility conformance are unproven.
SCALE-001targetStated operating scale and responsivenessMissingGap: No delivered product workflow.
OPS-002targetAvailability target, durability of originals and incident statusPartialsrc/server.tssrc/chest/blobs.tstests/chest/journey.mjstests/chest/flows.mjsGap: A health endpoint and admission checksums exist; external probes, availability measurement, second copies, scrubs and incident notices do not.
OPEN-001targetFree MIT-licensed source with no seat or feature chargesDoneLICENSETHIRD-PARTY-LICENSES.mdscripts/third-party-licenses.mjstests/chest/open-source.mjsdocs/open-source.md
OWN-001targetOwner-run installation on a computer, a server or the owner's cloud accountPartialdocs/run.mddocs/hosting.mdscripts/installer/local.mjsscripts/installer/deploy.mjsscripts/hosted-backup.mjsscripts/hosted-restore.mjsdeploy.jsontests/chest/first-run.mjsGap: A fresh-clone rer dev on the owner's computer is tested, and deployment to the owner's Cloudflare account is documented (docs/hosting.md) with mail chosen by deploy settings (scripts/installer/deploy.mjs) and a hosted backup and restore (rer run hosted-backup / hosted-restore: scripts/hosted-backup.mjs, scripts/hosted-restore.mjs) that run with rer's own Node after the install.sh install; the restore clears company sign-in sealed by the old deployment so everyone signs in by email (scripts/hosted-restore.mjs, tests/chest/organisation.mjs); a documented install on the owner's own server, serving staff over HTTPS with the owner's mail and storage, and a tested move between targets do not exist.
Move-in from incumbents and challenger filespaces 0 done · 4 partial · 3 missing
MIGRATE-001targetReconciled migration and controlled cutoverPartialsrc/chest/archive.tssrc/chest/archive-target.tstests/chest/flows.mjsGap: Reviewed bounded synthetic archive import exists; vendor discovery, complete histories, migrated open review work and delta/cutover do not.
MIGRATE-002targetGoogle Drive and Shared Drives migrationPartialsrc/chest/files/ui-movein.tspublic/chest-zip.jspublic/chest-movein.jstests/chest/browser-files.mjsGap: Move in imports Google Takeout Drive zips (several parts, zip64, CRC-checked) into any space or folder with their folder tree through the resumable upload, and a rerun skips what arrived; a direct Drive connection, Shared Drives, permissions, shared links, comments, versions, delta passes and per-file reconciliation do not.
MIGRATE-003targetDropbox Business migrationPartialsrc/chest/files/ui-movein.tspublic/chest-zip.jspublic/chest-movein.jstests/chest/browser-files.mjsGap: Move in imports Dropbox folder-download zips or a synced Dropbox folder with the folder tree; a direct Dropbox connection, team folders, permissions, shared links, versions and delta passes do not.
MIGRATE-004targetBox migrationPartialsrc/chest/files/ui-movein.tspublic/chest-zip.jspublic/chest-movein.jstests/chest/browser-files.mjsGap: Move in imports Box download zips or a Box Drive folder with the folder tree; a direct Box connection, collaborations, shared links, versions, metadata and delta passes do not.
MIGRATE-005targetOneDrive and SharePoint migrationMissingGap: No delivered product workflow.
MIGRATE-006targetEgnyte, LucidLink, Nextcloud and file sharesMissingGap: No delivered product workflow.
MIGRATE-007targetEmbedded link rewriting and old-URL resolutionMissingGap: No delivered product workflow.
Integrations, rules and follow-up 2 done · 2 partial · 8 missing
CONNECT-001targetSlack file collaborationMissingGap: No delivered product workflow.
CONNECT-002targetMicrosoft Teams file collaborationMissingGap: No delivered product workflow.
CONNECT-003targetSalesforce and HubSpot record-linked filesMissingGap: No delivered product workflow.
CONNECT-004targetDocusign execution and return custodyMissingGap: No delivered product workflow.
CONNECT-005targetZoom meeting file exchangeMissingGap: No delivered product workflow.
CONNECT-006targetEmail and app intakePartialsrc/chest/filing/intake.tssrc/chest/filing/ui.tssrc/chest/filing/ui-intake.tstests/chest/filing.mjsGap: Cloudflare Email Routing intake addresses per space deliver attachments into a chosen folder with message/sender/date provenance, replay protection and revocation by pausing intake or losing manager access. The setup page says what it needs (Chest on Cloudflare Workers and a domain on Cloudflare with Email Routing, or a subdomain when the domain already gets mail), gives the Cloudflare steps screen by screen, and points people without such a domain to file requests. The built Worker email-event flow is exercised locally. Hosted native delivery through Cloudflare Email Routing and the real-model filing notice were exercised with the installation’s verified SendGrid sender. Missing: Gmail/Outlook and app connectors, source policy scopes and durable queue reconciliation.
CONNECT-007targetPublic API, webhooks and scoped agentsDonesrc/chest/integrations/public/chest-picker.jsmigrations/core/0023_integrations.sqltests/chest/integrations.mjstests/chest/browser-integrations.mjstests/chest/integration-client.mjsdocs/integrations.md
CONNECT-008targetGmail and Outlook compose and save add-insMissingGap: No delivered product workflow.
CONNECT-009targetZapier and Make automation appsMissingGap: No delivered product workflow.
CONNECT-010targetGoogle Meet, Calendar, Chat and Forms file companionMissingGap: No delivered product workflow.
RULE-001targetReversible arrival rulesDonesrc/chest/filing/rules.tssrc/chest/filing/batch-model.tssrc/chest/filing/batch-plan.tssrc/chest/filing/batch-apply.tssrc/chest/filing/batches.tssrc/chest/filing/transforms.tssrc/chest/filing/ui-batches.tssrc/chest/filing/shared.tstests/chest/filing.mjstests/chest/arrival-rules.mjstests/chest/browser-arrival-rules.mjs
FOLLOW-001targetPersistent collaboration follow-upPartialsrc/chest/ui-library.tssrc/chest/documents.tssrc/chest/files/notify.tstests/chest/flows.mjstests/chest/files.mjsGap: Due/upcoming work, evidence completion and share, request and expiry notices by in-app notice and email exist; background reminders, mobile push, provider outcomes, replies by email and personal notification settings do not.
Push further: agents that maintain the file system 5 done · 1 partial · 1 missing
AGENT-001push furtherFile and classify authorized arrivalsDonesrc/chest/filing/agent.tssrc/chest/filing/agent-plan.tssrc/chest/filing/agent-scope.tssrc/chest/filing/agent-arrivals.tssrc/chest/filing/agent-notify.tssrc/chest/filing/provider.tssrc/chest/filing/shared.tssrc/chest/filing/ui-agent.tssrc/chest/files/notify.tssrc/chest/files/shares.tssrc/chest/files/ui-pages.tssrc/server.tstests/chest/filing.mjstests/chest/agent-filing.mjstests/chest/browser-agent-filing.mjs
AGENT-002push furtherReconcile duplicates and superseded versionsDonesrc/chest/filing/duplicates.tssrc/chest/filing/duplicate-authority.tssrc/chest/filing/duplicate-evidence.tssrc/chest/filing/duplicate-proposals.tssrc/chest/filing/duplicate-references.tssrc/chest/filing/duplicate-repair.tssrc/chest/filing/duplicate-view.tssrc/chest/filing/ui-duplicates.tstests/chest/filing.mjstests/chest/duplicate-reconciliation.mjstests/chest/browser-duplicates.mjs
AGENT-003push furtherRepair permitted synchronization and verify bytesDonesrc/chest/sync-repair/model.tssrc/chest/sync-repair/service.tssrc/chest/sync-repair/ui.tssrc/chest/files/sync-api.tsscripts/sync-companion/run.mjsscripts/sync-companion/disk.mjsscripts/sync-companion/transfer.mjstests/chest/browser-sync-repair.mjsdocs/sync-repair.md
AGENT-004push furtherFinish collection and prove the right version arrivedDonesrc/chest/collection/model.tssrc/chest/collection/api.tssrc/chest/collection/evidence.tssrc/chest/collection/reminders.tssrc/chest/collection/ui.tssrc/server.tstests/chest/collection.mjstests/chest/browser-collection.mjsdocs/collections.md
AGENT-005push furtherContinuously repair broken and over-shared linksDonesrc/chest/filing/link-model.tssrc/chest/filing/link-scan.tssrc/chest/filing/link-repair-actions.tssrc/chest/filing/link-repairs.tssrc/chest/filing/ui-link-repairs.tssrc/chest/files/exposure.tssrc/chest/files/ui-links.tssrc/chest/files/notify.tssrc/server.tsdeploy.jsontests/chest/link-repairs.mjstests/chest/browser-link-repairs.mjs
AGENT-006push furtherBuild and validate a trustworthy move-inPartialsrc/chest/archive.tstests/chest/flows.mjsGap: Manual hash/gap reconciliation and reversible staging exist; agent/provider mappings and collaborator validation do not.
AGENT-007push furtherEvidence-grounded questions and custom jobsMissingGap: No delivered product workflow.

How statuses are judged

Done
It ships in the default install, and a cited test or journey exercises it.
Partial
Some of it ships, it ships only behind an opt-in, or there is code with no requirement-level test.
Missing
There is no implementation.

Read CONTRACT.md on GitHub