06 / 15 · Verification
Prove that it works
These scenarios are instructions for the new build. They have not already been run against a generated app. Record results for each scope and environment. The test plan in 08 Security complements these functional scenarios. 15 Acceptance & Fixtures supplies A01–A12, fixed datasets, numerical budgets and the evidence template.
Test with safe data of your own
Use synthetic notes, two test accounts and your own empty Drive test folder. Do not send real user content to test services. Use unit and integration tests with fakes to reproduce failures. Then check real OAuth and Drive storage separately. A passing fake does not prove a live integration works.
bun install --frozen-lockfile
bun run test
bun run dev
Run browser checks with BrowserOS Neo. First check whether it is running with pgrep -f "BrowserOS neo"; if needed, start it with open -a "BrowserOS neo". The configured connections are CDP 9110, MCP 9010 and server 9210. If the browser is unavailable, report the missing browser evidence. Do not use another browser as though it meets this requirement.
Reference maintenance checks · 28 October 2026
The maintained reference app passed 1,843 Bun tests and seven BrowserOS Neo checks after the dependency update. The Neo fixture uses a temporary server, signed synthetic Google sessions and separate browser contexts. It checks current theme tokens, desktop/mobile layouts, rejection of password login, the initial Google authorization redirect, API failures and offline note/folder persistence. See Setup & Operations for the fixture contract and bun run test:browser.
These checks do not complete this chapter's scenarios for a new app. They do not prove real OAuth token exchange, live Drive behavior, account-isolation acceptance budgets or deployment. Keep those evidence layers separate.
V01 · Startup, login and isolation
P00/P01
Steps
Start clean with your own .env. Sign in with Google. Test a state mismatch, denied access, signup without consent, session rotation and logout. Test two accounts against the same note/media ID and a restricted admin route.
Expected result
Redirects/401 responses and error messages are correct; OAuth state is checked and account data stays separate. No secrets are stored in Git.
V02 · Local writing and transfer
P01/P02
Steps
Create a note without Drive using a unique test sentence. Save, reload and reopen it with the offline shell already loaded. Export app-preserving Markdown/ZIP, import it and compare; also verify the explicit lossy plain-Markdown path from chapter 13. Search server data and logs for the test sentence.
Expected result
Text exists in account-specific IndexedDB and the export, with no new readable server copy. There is no promise that a first visit while offline will work.
V03 · Editor and keyboard
P02
Steps
Test formatting, an app-preserving Markdown round trip and a separately labelled plain exchange, a GFM table, lists/task lists, a nested quote and double Enter. Use the slash menu, @, Cmd/Ctrl+K and Markdown help. Test Escape, Tab and focus restoration.
Expected result
Supported rich content is preserved in the app-preserving format; plain exchange matches the explicit loss/fallback matrix. A menu handles only its own keys, with no unintended note switch. No duplicate editor appears.
V04 · Folders and multi-select
P02
Steps
Create empty root and nested folders; root children use folder-notes as their parent. Rename and reload a locally created folder while offline, reconnect, and delete it. Select with Shift and Cmd/Ctrl, move items through the menu and by dragging, and inject a failure for one item. Switch to another folder while waiting.
Expected result
Feedback is immediate; only the failed item is restored. No stale folder is used as a destination. The active note and destination folder stay consistent.
V05 · Search scope and correct selection
P02
Steps
Create a note, folder and media file with the same search term, and delete another match. Run a global search, then search in Files. Open the second note result while an earlier detail request is slow.
Expected result
Global search returns only non-deleted notes/folders; Files uses its own scope. The selected note takes priority over an old response and remains editable.
V06 · Delete and late responses
P02/P04
Steps
Select several notes, cancel Delete, then confirm it once. Delay detail/list/push responses and let them arrive after deletion. Also check a folder with contents and existing Trash.
Expected result
Canceling preserves everything; confirming permanently deletes the selection. Deleted items do not reappear and no new editor is mounted. Existing Trash can be managed separately.
V07 · Queue, status and real Drive
P04
Steps
Create, edit, rename and move several notes, including during a push. Force 429/503 errors and a lost response. Reload and restore the network. Check the actual content in your own Drive test folder.
Expected result
Retries are automatic, with no duplicate items. A ticket does not yet mean success. Only confirmed revisions leave the queue; new text is preserved. Record fake and live results separately.
V08 · Cache and incremental listings
P04
Steps
Use more than 40 synthetic notes. Slow down Drive, omit one page, and simulate a 503 response and an unreadable document. Measure opening with a populated cache and count downloads after one change.
Expected result
The cache opens without waiting for Drive; all hasMore pages are processed. Only changed or missing content is fetched. An error is not treated as an empty list and valid local text is preserved.
V09 · Merging and two tabs
P04
Steps
Starting from base B, edit different sections in two tabs, then change the same words differently. Change the etag between reading and writing. Type more text while an old acknowledgment arrives.
Expected result
Independent text changes are merged; genuine conflicts are safely preserved. The new local revision stays pending, and another tab cannot silently clear the shared error state.
V10 · Encryption, restart and migration
P04
Steps
Push a unique test sentence, interrupt Drive, inspect ticket files/logs and restart the server. Try a ticket from another test account. Retrieve the result later. If migration is needed, simulate a crash before and after the receipt is acknowledged.
Expected result
Only an encrypted packet is stored on disk, with no plaintext content or cross-account leak. Retries and deduplication preserve work. Completed tickets are cleaned up; old sources are deleted only after proven receipt.
V11 · Media and uploads
P03/P04
Steps
Test byte range 0–99, open-ended ranges, suffix ranges and invalid ranges. Seek in video, resume audio and open PDF/EPUB files. Test with ffmpeg missing. Upload two files with the same name at once and interrupt a chunk or finalization.
Expected result
206/416 responses and headers are correct. Seeking works. A placeholder appears without ffmpeg. Uploads do not overwrite files and can be retried safely. Status is honest when no storage source is available.
V12 · Extensions
P05
Steps
For each chosen integration: recheck the mandatory V16 source flow, then save and reopen a canvas; request AI explicitly and cancel it; test YouTube and a Whisper failure.
Expected result
Every chosen feature has a working flow, with no lost context or late insertion. The core keeps working without configuration; no unsolicited AI request is made. Separate fake and live results.
V13 · Settings and administration
P01/P02/P04/P07 core; P05 advanced account controls
Steps
Switch themes, log out and connect/disconnect a test Drive account. If optional FR-21 is selected, test an unauthorized admin action and run reset/deletion only on a synthetic test account. Check the production configuration example.
Expected result
Permissions, confirmation and focus are correct. Only the specified data is deleted. Google OAuth, HTTPS and secure cookies are documented.
V15 · Delivery and mobile web
P07
Steps
Check every chosen ID against evidence. Compare the interface with 09 Design. Test the browser on desktop and at 390px width, including keyboard, focus, themes and dialogs. Repeat the README installation/startup steps in a clean environment when available.
Expected result
No horizontal page overflow, readable text and touch targets ≥44px. Outstanding criteria are visible. Do not claim a live integration or deployment without evidence.
V16 · Existing large source → annotated note
P03/P04 · FR-09, FR-11, FR-17 · US-09, US-11 · A01/A10
| Steps | Use a synthetic 1GiB Drive source. Connect, open /drive, browse/search all types and load another page. Choose exactly one source at the saved cursor, write annotations, sync and reopen. Cancel a pending search and switch notes. Rename/move the remote source, then simulate lost permission. Finally remove the note reference. |
|---|---|
| Expected result | The same original ID is linked without insertion upload or full-source read. Annotations survive reopen. No late insertion into another note. Rename/move keeps the reference; unavailable sources keep note text and offer Retry. Removing the reference never deletes the original. Fake provider and real Drive evidence are separate. |
Report format
Scope: web core / full web app
Environment and date:
Version / commit:
Requirement | Story | Scenario | Evidence | Status | Limitation
FR-02 | US-01 | V02 | test name + actual output / browser observation | ... | ...
Unit/integration tests with fakes:
BrowserOS Neo desktop/mobile:
Real Google OAuth/Drive:
Deployment: not performed / evidence of the exact version
Outstanding criteria and next step: