03 / 15 · Requirements
What the new app must do
A requirement is complete only when its behavior demonstrably works. IDs connect specifications, user stories, build prompts, and tests.
FR-01 through FR-17 form the web core. FR-18 through FR-21 are optional full-web extensions. Basic settings/theme, logout and Drive connection controls remain mandatory in FR-01, FR-08 and FR-11. All NFRs apply where relevant. An extension that has not been built must not be presented as complete.
Functional requirements
| ID | Component | Required behavior | Build step | Verification |
|---|---|---|---|---|
| FR-01 | Accounts | Google OAuth only. Validate state and profile, rotate the session on sign-in, and require consent at sign-up. This requirement means that:
| P01 | V01 |
| FR-02 | Local notes | Create, select, edit, and reload through account-scoped IndexedDB; without Drive, no server note. This requirement means that:
| P01 | V02 |
| FR-03 | Editor | Headings, lists, task lists, quotes, code, links, bold/italic/underline/highlight, undo/redo, and an app-preserving Markdown round trip; plain exchange follows the explicit loss matrix. This requirement means that:
| P02 | V03 |
| FR-04 | Tables and menus | Edit tables; use the slash menu with the keyboard; @ references; leave a quote with Enter on an empty line. This requirement means that:
| P02 | V03 |
| FR-05 | Folders and selection | Create, nest, and rename; move one or more items through menus or dragging. Immediate feedback with recovery on failure. This requirement means that:
| P02 | V04 |
| FR-06 | Search and open | Global search in note titles/text and folder names; exclude direct files and deleted items. The chosen result opens the correct note. This requirement means that:
| P02 | V05 |
| FR-07 | Permanent deletion | Delete asks for one confirmation and permanently removes the selection. Late responses cannot revive items. Restore or purge old trash separately. Distinguish deleting a note/reference from deleting an original source; apply the deletion scope table. This requirement means that:
| P02 | V06 |
| FR-08 | Workspace | Simple default view; core settings for appearance, logout and connection status; light/dark; Cmd/Ctrl+K for actions; Markdown help, Escape, and correct focus restoration. This requirement means that:
| P02 | V03 |
| FR-09 | Files and playback | Audio, video, images, PDF, and EPUB; list, preview, download, file-browser search, playback progress, and annotations. This requirement means that:
| P03 | V11 |
| FR-10 | Uploads and thumbnails | Upload to Google Drive; resumable chunks, unique names for parallel uploads, and a placeholder when ffmpeg is missing. This requirement means that:
| P03 | V11 |
| FR-11 | Activate Drive | OAuth separate from sign-in; account address visible; distinguish connected from active; FileLoveNote app folder, with FilesandNotes only as a migration alias. This requirement means that:
| P04 | V07 |
| FR-12 | Automatic synchronization | Durable note and folder queue, batched push, per-item status, and retention of new edits during a push; a button forces the queue. This requirement means that:
| P04 | V07 |
| FR-13 | Incremental pull | Cache first; revisions/hasMore in batches of at most 40. Fetch only changed content; an error is not an empty list. This requirement means that:
| P04 | V08 |
| FR-14 | Conflicts and tabs | Three-way merge using the base/etag; a controlled conflict copy where needed; account lock and BroadcastChannel. This requirement means that:
| P04 | V09 |
| FR-15 | Temporary sync station | AES-256-GCM, receipt ticket, background processing, result retrieval, and cleanup. A ticket is not Drive confirmation. This requirement means that:
| P04 | V10 |
| FR-16 | Markdown and transfer | Import, single-note export, and ZIP export; repeatable migration with a receipt when legacy data exists. This requirement means that:
| P02/P04 | V02/V10 |
| FR-17 | Sources in notes | Local/external media and @ notes; /drive shows all file types and inserts one choice at the cursor; Drive source link. This requirement means that:
| P03/P04 | V16 |
| FR-18 | Canvas | Create, move, edit, connect, zoom, and reopen text, note, and media cards. This requirement means that:
| P05 | V12 |
| FR-19 | AI and discovery | AI only on explicit request; answers/synthesis from selected context; YouTube search; no saved forced language or automatic paste translation. This requirement means that:
| P05 | V12 |
| FR-20 | Transcripts | Optional local Whisper transcription with status and errors. This requirement means that:
| P05 | V12 |
| FR-21 | Advanced account management | Optional account reset/deletion and administrator controls through configuration, with no hardcoded personal address. Basic theme, sign-out and connections belong to the core. This requirement means that:
| P05 | V13 |
Quality requirements
| ID | Topic | Required behavior | Build step | Verification |
|---|---|---|---|---|
| NFR-01 | Privacy | No readable note titles, text, editor content, questions, references, or base versions in server files, caches, or logs. A temporary encrypted package is allowed. This rule concerns editor-note copies; separate canvas/media-annotation storage is documented in Data Structure. This requirement means that:
| P01/P04 | V02/V10 |
| NFR-02 | Account isolation | All stores, ID resolution, media, tickets, and request context are account-scoped. Unauthorized requests receive a sign-in redirect or 401; no other account data. This requirement means that:
| P01/P04 | V01/V10 |
| NFR-03 | Retention on failure | Persistent local queue, exact revision acknowledgment, and no loss caused by timeout/429/503/lost responses. Clearing the browser may remove unsent data. This requirement means that:
| P01/P04 | V07–V10 |
| NFR-04 | Speed | An available local note opens without waiting for Drive. No full serialization or network round trip per keystroke. Measure with a cache and slow Drive. This requirement means that:
| P02/P04 | V08 |
| NFR-05 | Scalable requests | Bounded read/write concurrency; pagination; correct 206/416. Do not load large files entirely into RAM. This requirement means that:
| P03/P04 | V08/V11 |
| NFR-06 | Accessibility | Clear plain English, visible focus, keyboard menus, Escape, focus restoration, touch targets ≥44px, and no horizontal page overflow on mobile. This requirement means that:
| P02 | V03/V15 |
| NFR-07 | Calm design | Use the golden ratio as a guide; simple default, light/dark, and readable mobile view. This requirement means that:
| P02 | V15 |
| NFR-08 | Maintenance | Bun/CommonJS server, modular routes/services, no-build TS/ProseMirror; small focused changes and reproducible scripts/lockfile. This requirement means that:
| P00 | V01 |
| NFR-09 | Secure configuration | No secrets in the repository; your own Google OAuth; HTTPS and secure cookies in production. This requirement means that:
| P01/P07 | V01/V13 |
| NFR-10 | Honest evidence | Every selected requirement has test evidence or an explicit open status. Local tests, live integration, and deployment are separate facts. This requirement means that:
| P07 | V15 |
Definition of Done
Apply A01–A12 from 15 Acceptance & Fixtures, API schemas/examples, the failure decision table and Markdown matrix. A passing fixture validator is not a passing generated application.
- The selected scope is stated. Unselected extensions are listed separately; no enabled button leads to a dead or unfinished flow.
- The required unit and integration tests have actually run. BrowserOS Neo demonstrates the main user flows at desktop and mobile sizes.
- External APIs have been checked with test doubles; your own Drive/OAuth integration has separate evidence or is explicitly marked as not yet tested.
- The privacy check finds no readable note content on the server after writing, search, AI, synchronization, and restart.
- A new builder can install dependencies, configure, start, and test the app using the supplied instructions.
- Do not claim identical behavior or a complete reconstruction while selected criteria remain open.