<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Requirements on Deevnet FileSync</title><link>https://deevnet.github.io/deevnet-filesync/docs/requirements/</link><description>Recent content in Requirements on Deevnet FileSync</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deevnet.github.io/deevnet-filesync/docs/requirements/index.xml" rel="self" type="application/rss+xml"/><item><title>Metadata Matrix</title><link>https://deevnet.github.io/deevnet-filesync/docs/requirements/metadata/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-filesync/docs/requirements/metadata/</guid><description>&lt;h1 id="metadata-matrix">
 Metadata Matrix
 &lt;a class="anchor" href="#metadata-matrix">#&lt;/a>
&lt;/h1>
&lt;p>&lt;strong>Status:&lt;/strong> Decided (2026-10-15). This page backs requirements META-1 to META-7.&lt;/p>
&lt;p>A file is more than its bytes. Each platform keeps a different set of names, timestamps,
permissions, and extra data alongside the bytes. This page sets out what each platform can
represent, and records, for each kind of metadata, whether FileSync:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>syncs&lt;/strong> it,&lt;/li>
&lt;li>&lt;strong>maps&lt;/strong> it to an approximation on platforms that can&amp;rsquo;t represent it exactly,&lt;/li>
&lt;li>keeps it &lt;strong>local-only&lt;/strong> (it never leaves the device), or&lt;/li>
&lt;li>&lt;strong>skips&lt;/strong> the file (refuses to sync it, and tells the user).&lt;/li>
&lt;/ul>
&lt;p>The hub itself is not a constraint. Metadata is stored inside the encrypted file records, so the
hub can carry whatever we decide. The limits come from the &lt;em>receiving&lt;/em> platform.&lt;/p></description></item><item><title>Cloud Hub</title><link>https://deevnet.github.io/deevnet-filesync/docs/requirements/hub/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-filesync/docs/requirements/hub/</guid><description>&lt;h1 id="cloud-hub">
 Cloud Hub
 &lt;a class="anchor" href="#cloud-hub">#&lt;/a>
&lt;/h1>
&lt;p>&lt;strong>Status:&lt;/strong> Draft. Requirements for the storage side of the system: the hub that every device
syncs through. Core requirements are on the 
 &lt;a href="https://deevnet.github.io/deevnet-filesync/deevnet-filesync/docs/">Requirements&lt;/a> page.&lt;/p>
&lt;p>The hub is &lt;strong>storage only&lt;/strong>. It holds encrypted objects and runs no FileSync code. All
intelligence (sync decisions, encryption, conflict handling) lives in the clients. That keeps the
provider replaceable and keeps it from ever needing to understand the data.&lt;/p>
&lt;h2 id="backend-model">
 Backend model
 &lt;a class="anchor" href="#backend-model">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>BE-0 (MVP):&lt;/strong> Only one backend is active at a time. That one backend is the hub.&lt;/li>
&lt;li>&lt;strong>BE-1 (MVP):&lt;/strong> AWS S3 is the MVP backend.&lt;/li>
&lt;li>&lt;strong>BE-2 (MVP):&lt;/strong> The backend interface is narrow and primitive: put, get, list, delete, and a
conditional write (compare-and-swap) for coordination. New backends implement only that
interface.&lt;/li>
&lt;li>&lt;strong>BE-4 (MVP):&lt;/strong> The sync engine, crypto, and hub format do not depend on anything AWS-specific.
Anything AWS-specific (authentication, request signing, provider quirks) stays inside the S3
backend adapter.&lt;/li>
&lt;li>&lt;strong>BE-3 (Later):&lt;/strong> Self-hosted storage, e.g. MinIO on Deevnet infrastructure, SFTP, or a local or
NAS path.&lt;/li>
&lt;li>&lt;strong>BE-5 (Later):&lt;/strong> Other S3-compatible providers (Backblaze B2, Cloudflare R2, Wasabi), and
consumer cloud drives (Google Drive, OneDrive, Dropbox) used as dumb storage.&lt;/li>
&lt;li>&lt;strong>BE-6 (Later):&lt;/strong> A &lt;strong>data migration process&lt;/strong> moves the hub from one backend to another (e.g.
AWS S3 → self-hosted) without re-uploading from every device.&lt;/li>
&lt;li>&lt;strong>BE-7 (Non-goal):&lt;/strong> Mirroring to multiple backends at the same time.&lt;/li>
&lt;/ul>
&lt;h2 id="what-the-hub-holds">
 What the hub holds
 &lt;a class="anchor" href="#what-the-hub-holds">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>HUB-1 (MVP):&lt;/strong> Everything stored in the hub is encrypted before it leaves a device. Object
names are opaque and reveal nothing about file names, paths, or roots (SEC-1, SEC-2).&lt;/li>
&lt;li>&lt;strong>HUB-2 (MVP):&lt;/strong> The hub layout and object formats are a versioned, documented specification
(IND-2). The hub records its format version, and a client refuses to write to a hub whose
format version it does not understand.&lt;/li>
&lt;li>&lt;strong>HUB-3 (MVP, proposed):&lt;/strong> The hub stores no plaintext metadata about the user beyond what the
provider inevitably sees: object count, object sizes, and access times and IP addresses.&lt;/li>
&lt;/ul>
&lt;h2 id="coordination">
 Coordination
 &lt;a class="anchor" href="#coordination">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>HUB-4 (MVP):&lt;/strong> Devices coordinate safely through plain object storage using conditional
writes. Two devices updating at the same time never silently lose one update. (AWS S3 supports
conditional writes; support among other S3-compatible providers varies, which BE-5 has to
check.)&lt;/li>
&lt;li>&lt;strong>HUB-5 (MVP, proposed):&lt;/strong> No server-side compute in the MVP: no Lambda functions, no event
notifications, no provider-specific services. Change detection is client polling (SYNC-3).&lt;/li>
&lt;/ul>
&lt;h2 id="access-control-and-protection">
 Access control and protection
 &lt;a class="anchor" href="#access-control-and-protection">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>HUB-6 (MVP, proposed):&lt;/strong> Every device has its own credential, scoped to only the FileSync
bucket (or prefix). Revoking a device (SEC-5) also removes its storage access. A receive-only
device (ROOT-9), such as an Android phone, gets a read-only credential.&lt;/li>
&lt;li>&lt;strong>HUB-7 (MVP, proposed):&lt;/strong> &lt;strong>A compromised device cannot destroy the hub.&lt;/strong> Day-to-day device
credentials can add data but cannot permanently delete or overwrite history. Permanent
deletion (garbage collection, VER-6) uses a separate, more privileged credential. This
protects against ransomware or a stolen laptop wiping out every version.&lt;/li>
&lt;li>&lt;strong>HUB-8 (MVP, proposed):&lt;/strong> Provider-side encryption at rest (e.g. SSE-S3) is enabled as
defense in depth. It is &lt;em>in addition to&lt;/em> FileSync&amp;rsquo;s end-to-end encryption, never instead of it.&lt;/li>
&lt;/ul>
&lt;h2 id="setup-and-operation">
 Setup and operation
 &lt;a class="anchor" href="#setup-and-operation">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>HUB-9 (MVP, proposed):&lt;/strong> Setting up the hub (bucket, access policies, device credentials) is
documented and scriptable. The CLI can generate the policy documents; clicking through a
provider console is never required.&lt;/li>
&lt;li>&lt;strong>HUB-10 (MVP):&lt;/strong> The user chooses the provider account, region, and bucket. FileSync never
creates or requires an account with anyone else.&lt;/li>
&lt;/ul>
&lt;h2 id="cost">
 Cost
 &lt;a class="anchor" href="#cost">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>PERF-2 (MVP):&lt;/strong> Request counts and polling frequency are kept modest and configurable,
because cloud object storage bills per request as well as per GB.&lt;/li>
&lt;li>&lt;strong>HUB-11 (MVP, proposed):&lt;/strong> The docs include a cost model: expected monthly cost for a typical
workload (e.g. 20 GB, 3 devices, polling every few minutes).&lt;/li>
&lt;li>&lt;strong>HUB-12 (Later, proposed):&lt;/strong> The CLI reports hub usage (stored bytes, retained versions, trash),
so that retention policies can be tuned against cost.&lt;/li>
&lt;/ul>
&lt;h2 id="open-questions">
 Open Questions
 &lt;a class="anchor" href="#open-questions">#&lt;/a>
&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>Device credentials for AWS (HUB-6):&lt;/strong> short-lived credentials via &lt;strong>AWS IAM Roles
Anywhere&lt;/strong> (the device certificate from the FileSync CA is exchanged for temporary AWS
credentials, with no long-lived keys on devices), or a scoped static access key per device?
Roles Anywhere fits the PKI direction well, and is AWS-only, so it would live inside the S3
adapter.&lt;/li>
&lt;li>&lt;strong>Protection mechanism (HUB-7):&lt;/strong> S3 bucket versioning plus a no-delete policy for devices,
S3 Object Lock, or both? What is the privileged credential for garbage collection: the
offline CA, or one designated device?&lt;/li>
&lt;li>&lt;strong>Provisioning tool (HUB-9):&lt;/strong> CLI-generated policy documents applied by hand, or an
infrastructure-as-code definition (Terraform or Ansible, matching Deevnet practice)?&lt;/li>
&lt;/ol></description></item></channel></rss>