traceability.md

Requirements traceability

Phase 6 of PLAN.md. This matrix traces each requirement in the feature specs to the task step that names it and the test that step names. Task names and test names are copied from the task files. Nothing here is merged from those branches.

A requirement that a step lists next to several others takes the tests on that step whose acceptance id uses the same number (F12-REQ-014 takes F12-AC-014a). A step with one requirement takes every test that step names. Where the task file gives a prose title and an acceptance id, both are shown.

Sources

Requirements are the Fnn-REQ-nnn and X-REQ-nnn lines that open a requirement in each spec.md. When two branches carry the same feature, the row uses the branch that holds the full set.

FeatureRequirements read fromTasks read from
F01, F02, F06cursor/file-format-types-validation-3ed9cursor/design-tasks-format-types-validation-279e
F03cursor/spec-rest-of-editing-b39a (same ids as cursor/spec-links-rendering-editing-7df9)cursor/design-tasks-editor-shell-bbc1
F04cursor/spec-links-rendering-editing-7df9 (F04-REQ-017 is not on cursor/spec-rest-of-editing-b39a)cursor/design-tasks-editor-shell-bbc1
F05, F16cursor/spec-charts-metrics-58b3cursor/design-charts-metrics-history-import-home-4ba1
F07cursor/spec-storage-db-f59ccursor/storage-design-tasks-5c9d
F08, F10, F20, F21cursor/reading-shell-specs-6322 (same ids on cursor/spec-invites-public-link-5902 and cursor/spec-rest-of-search-b39a)cursor/design-tasks-editor-shell-bbc1
F09cursor/spec-rest-of-editing-b39a (F09-REQ-017 through F09-REQ-037 are not on cursor/spec-links-rendering-editing-7df9)cursor/design-tasks-editor-shell-bbc1
F11cursor/spec-invites-public-link-5902 (F11-REQ-015 through F11-REQ-037 are not on the earlier sharing specs)cursor/design-tasks-editor-shell-bbc1
F12cursor/spec-proposals-review-a40acursor/design-review-agents-auth-9270
F13cursor/spec-mcp-rest-069ccursor/design-review-agents-auth-9270
F14cursor/spec-oauth-assistants-f1ddcursor/design-review-agents-auth-9270
F15cursor/spec-sign-in-roles-audit-bc2ecursor/design-review-agents-auth-9270
F17cursor/spec-rest-of-search-b39a (F17-REQ-013 through F17-REQ-026 are not on the earlier search specs)cursor/design-tasks-editor-shell-bbc1
F18, F19, F22cursor/spec-history-import-home-08e8cursor/design-charts-metrics-history-import-home-4ba1
Xcursor/spec-cross-cutting-0fcccursor/design-tasks-cross-cutting-fb26

The 18 acceptance criteria are the checklist under <!-- prd:acceptance-criteria --> in specs/source/ledger-prd.md on cursor/rebuild-prd-tables-f4c0. The feature id beside each criterion is the one in specs/requirements-inventory.md on cursor/requirements-inventory-c89c (REQ-465 through REQ-482). The five success metrics are the table under <!-- prd:success-metrics --> on that same PRD branch. Their queries are named in specs/features/X-cross-cutting/design.md on cursor/design-tasks-cross-cutting-fb26.

Requirement to task to test

602 requirements, 617 rows. A requirement named by more than one step has one row per step.

RequirementFeatureTask file and stepTest
F01-REQ-001F01 File formatspecs/features/F01-file-format/tasks.md — F01-T01. UTF-8 documents without a BOMF01-AC-001a
F01-REQ-002F01 File formatspecs/features/F01-file-format/tasks.md — F01-T02. Frontmatter blockF01-AC-002a; F01-AC-002b
F01-REQ-003F01 File formatspecs/features/F01-file-format/tasks.md — F01-T04. type and titleF01-AC-003a; F01-AC-003b
F01-REQ-004F01 File formatspecs/features/F01-file-format/tasks.md — F01-T05. Slug from a titleF01-AC-004a; F01-AC-004b; F01-AC-004c; F01-AC-004d; F01-AC-004e
F01-REQ-005F01 File formatspecs/features/F01-file-format/tasks.md — F01-T06. Unique slugsF01-AC-005a; F01-AC-005b; F01-AC-005c
F01-REQ-006F01 File formatspecs/features/F01-file-format/tasks.md — F01-T08. Path on createF01-AC-006a
F01-REQ-007F01 File formatspecs/features/F01-file-format/tasks.md — F01-T10. Date change moves the fileF01-AC-007a
F01-REQ-008F01 File formatspecs/features/F01-file-format/tasks.md — F01-T11. Occupied path rejects the saveF01-AC-008a
F01-REQ-009F01 File formatspecs/features/F01-file-format/tasks.md — F01-T07. Filename placeholdersF01-AC-009a
F01-REQ-010F01 File formatspecs/features/F01-file-format/tasks.md — F01-T09. Extra doc segmentsF01-AC-010a; F01-AC-010b
F01-REQ-011F01 File formatspecs/features/F01-file-format/tasks.md — F01-T13. Type schema filesF01-AC-011a
F01-REQ-012F01 File formatspecs/features/F01-file-format/tasks.md — F01-T14. space.md and agents.mdF01-AC-012a; F01-AC-012b
F01-REQ-013F01 File formatspecs/features/F01-file-format/tasks.md — F01-T15. AssetsF01-AC-013a
F01-REQ-014F01 File formatspecs/features/F01-file-format/tasks.md — F01-T16. Wiki-link stringsF01-AC-014a
F01-REQ-015F01 File formatspecs/features/F01-file-format/tasks.md — F01-T17. Page URLF01-AC-015a
F01-REQ-016F01 File formatspecs/features/F01-file-format/tasks.md — F01-T18. Keyboard writesF01-AC-016a
F01-REQ-017F01 File formatspecs/features/F01-file-format/tasks.md — F01-T19. Roles after sign-inF01-AC-017a; F01-AC-017b; F01-AC-017c; F01-AC-017d
F01-REQ-018F01 File formatspecs/features/F01-file-format/tasks.md — F01-T20. Human renameF01-AC-018a
F01-REQ-019F01 File formatspecs/features/F01-file-format/tasks.md — F01-T03. CRLF delimitersF01-AC-019a
F01-REQ-020F01 File formatspecs/features/F01-file-format/tasks.md — F01-T12. Recover a slug from a pathF01-AC-020a
F02-REQ-001F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T06. Six seed filesF02-AC-001a; F02-AC-001b
F02-REQ-002F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T01. Field kindsF02-AC-002a
F02-REQ-003F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T07. A custom type loadsF02-AC-003a
F02-REQ-004F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T08. A bad schema saveF02-AC-004a; F02-AC-004b
F02-REQ-005F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T04. required_when shapeF02-AC-005a; F02-AC-005b
F02-REQ-006F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T09. When a field is requiredF02-AC-006a; F02-AC-006b; F02-AC-006c
F02-REQ-007F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T11. Pinned linksF02-AC-007a
F02-REQ-008F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T12. Metrics keysF02-AC-008a
F02-REQ-009F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T13. SectionsF02-AC-009a
F02-REQ-010F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T15. Stored documents stay uncheckedF02-AC-010a
F02-REQ-011F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T14. Writing guidanceF02-AC-011a
F02-REQ-012F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T02. Lists of stringsF02-AC-012a
F02-REQ-013F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T10. Implicit type and titleF02-AC-013a
F02-REQ-014F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T03. Load a schema fileF02-AC-014a; F02-AC-014b; F02-AC-014c
F02-REQ-015F02 Type schemasspecs/features/F02-type-schemas/tasks.md — F02-T05. required_when scalarF02-AC-015a
F03-REQ-001F03 Linksspecs/features/F03-links/tasks.md — F03-T-001 Resolve a wiki targetwiki refs resolve by file name when the path is unique (F03-AC-001a); exact wiki path renders the page title (F03-AC-001b)
F03-REQ-002F03 Linksspecs/features/F03-links/tasks.md — F03-T-003 Render a wiki linkwiki link text is title, heading, or label (F03-AC-002a)
F03-REQ-003F03 Linksspecs/features/F03-links/tasks.md — F03-T-003 Render a wiki linkunresolved wiki text is red and not a link (F03-AC-003a)
F03-REQ-004F03 Linksspecs/features/F03-links/tasks.md — F03-T-004 Render an embedembed shows the headed section and a source link (F03-AC-004a)
F03-REQ-005F03 Linksspecs/features/F03-links/tasks.md — F03-T-004 Render an embedmissing embed names the target (F03-AC-005a)
F03-REQ-006F03 Linksspecs/features/F03-links/tasks.md — F03-T-004 Render an embedsection extract stops at the next heading of the same rank (F03-AC-006a); unknown embed heading falls back to the page body (F03-AC-006b)
F03-REQ-007F03 Linksspecs/features/F03-links/tasks.md — F03-T-004 Render an embedembed depth stops at three levels (F03-AC-007a)
F03-REQ-008F03 Linksspecs/features/F03-links/tasks.md — F03-T-005 List who links herelinked-from lists resolving pages and hides when empty (F03-AC-008a)
F03-REQ-009F03 Linksspecs/features/F03-links/tasks.md — F03-T-006 Rewrite targets on rename and moverenaming a page moves the file and rewrites links to it; moving pages and folders keeps every link resolving (F03-AC-009a)
F03-REQ-010F03 Linksspecs/features/F03-links/tasks.md — F03-T-002 Slug heading idsheadings skip fenced code and slug duplicates (F03-AC-010a)
F03-REQ-011F03 Linksspecs/features/F03-links/tasks.md — F03-T-007 Offer to create a missing pagemissing path offers to create the page (F03-AC-011a)
F04-REQ-001F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-001 Render CommonMark and GFMguide page renders headings, lists, and inline code (F04-AC-001a)
F04-REQ-002F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-001 Render CommonMark and GFMGFM alignment is text-align inside a scroll region (F04-AC-002a)
F04-REQ-003F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-001 Render CommonMark and GFMpreview task checkboxes are disabled (F04-AC-003a)
F04-REQ-004F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-001 Render CommonMark and GFMtildes strike through and bare URLs link (F04-AC-004a)
F04-REQ-005F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-002 Keep safe link schemesexternal links open outward and javascript links lose their address (F04-AC-005a)
F04-REQ-006F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-003 Render footnotesfootnotes link to the note and back (F04-AC-006a)
F04-REQ-007F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-004 Render calloutsonly uppercase alert markers become callouts (F04-AC-007a)
F04-REQ-008F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-005 Highlight code and copy itfenced code is highlighted with Shiki (F04-AC-008a)
F04-REQ-009F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-005 Highlight code and copy itfailed copy leaves the Copy label (F04-AC-009a)
F04-REQ-010F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-006 Render mathKaTeX renders valid math and titles a parse error (F04-AC-010a)
F04-REQ-011F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-007 Draw MermaidMermaid draws a flowchart and shows a parse error (F04-AC-011a)
F04-REQ-012F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-008 Render a CSV or TSV tableCSV header sorts ascending (F04-AC-012a)
F04-REQ-013F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-009 Render a highlight markdouble equals render a mark (F04-AC-013a)
F04-REQ-014F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-010 Strip unsafe HTMLscript tags are stripped without an error (F04-AC-014a)
F04-REQ-015F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-011 Show a bad frontmatter messagebad frontmatter shows the message and the body (F04-AC-015a)
F04-REQ-016F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-012 Keep the reading measurereading column stays 17px and does not overflow at 390px (F04-AC-016a)
F04-REQ-017F04 Renderingspecs/features/F04-rendering/tasks.md — F04-T-013 Render one document the same in view, preview, and reviewone document using every Markdown capability renders the same in view, editor preview, and review (F04-AC-017a)
F05-REQ-001F05 Chartsspecs/features/F05-charts/tasks.md — 1. Draw an inline fenceF05-AC-001a; F05-AC-001b; F05-AC-001c
F05-REQ-002F05 Chartsspecs/features/F05-charts/tasks.md — 1. Draw an inline fenceF05-AC-002a; F05-AC-002b
F05-REQ-003F05 Chartsspecs/features/F05-charts/tasks.md — 1. Draw an inline fenceF05-AC-003a
F05-REQ-004F05 Chartsspecs/features/F05-charts/tasks.md — 2. Apply the themeF05-AC-004a; F05-AC-004b
F05-REQ-005F05 Chartsspecs/features/F05-charts/tasks.md — 3. Load the embedder on intersectionF05-AC-005a; F05-AC-005b
F05-REQ-006F05 Chartsspecs/features/F05-charts/tasks.md — 4. Refuse a remote URL and surface a thrown errorF05-AC-006a; F05-AC-006b
F05-REQ-007F05 Chartsspecs/features/F05-charts/tasks.md — 4. Refuse a remote URL and surface a thrown errorF05-AC-007a; F05-AC-007b
F05-REQ-008F05 Chartsspecs/features/F05-charts/tasks.md — 5. Empty and editing fences in the block editorF05-AC-008a
F05-REQ-009F05 Chartsspecs/features/F05-charts/tasks.md — 5. Empty and editing fences in the block editorF05-AC-009a
F05-REQ-010F05 Chartsspecs/features/F05-charts/tasks.md — 6. Insert the Chart starterF05-AC-010a
F05-REQ-011F05 Chartsspecs/features/F05-charts/tasks.md — 7. Figure chromeF05-AC-011a
F05-REQ-012F05 Chartsspecs/features/F05-charts/tasks.md — 1. Draw an inline fenceF05-AC-012a
F05-REQ-013F05 Chartsspecs/features/F05-charts/tasks.md — 1. Draw an inline fenceF05-AC-013a
F05-REQ-014F05 Chartsspecs/features/F05-charts/tasks.md — 8. Read a CSV in assetsF05-AC-014a; F05-AC-014b; F05-AC-014c
F05-REQ-015F05 Chartsspecs/features/F05-charts/tasks.md — 9. Embed current metric pointsF05-AC-015a; F05-AC-015b; F05-AC-015c
F05-REQ-016F05 Chartsspecs/features/F05-charts/tasks.md — 10. Export PNG and SVGF05-AC-016a; F05-AC-016b
F06-REQ-001F06 Validationspecs/features/F06-validation/tasks.md — F06-T01. One pure function, four callersF06-AC-001a; F06-AC-001b
F06-REQ-002F06 Validationspecs/features/F06-validation/tasks.md — F06-T21. Errors block the writeF06-AC-002a
F06-REQ-003F06 Validationspecs/features/F06-validation/tasks.md — F06-T22. Warnings allow the writeF06-AC-003a
F06-REQ-004F06 Validationspecs/features/F06-validation/tasks.md — F06-T02. Issue fieldsF06-AC-004a
F06-REQ-005F06 Validationspecs/features/F06-validation/tasks.md — F06-T28. A schema change leaves stored filesF06-AC-005a
F06-REQ-006F06 Validationspecs/features/F06-validation/tasks.md — F06-T03. yaml_invalidF06-AC-006a; F06-AC-006b
F06-REQ-007F06 Validationspecs/features/F06-validation/tasks.md — F06-T04. type_unknownF06-AC-007a; F06-AC-007b
F06-REQ-008F06 Validationspecs/features/F06-validation/tasks.md — F06-T05. field_missingF06-AC-008a; F06-AC-008b
F06-REQ-009F06 Validationspecs/features/F06-validation/tasks.md — F06-T06. field_kindF06-AC-009a; F06-AC-009b
F06-REQ-010F06 Validationspecs/features/F06-validation/tasks.md — F06-T07. field_unknownF06-AC-010a
F06-REQ-011F06 Validationspecs/features/F06-validation/tasks.md — F06-T08. link_brokenF06-AC-011a; F06-AC-011b; F06-AC-011c
F06-REQ-012F06 Validationspecs/features/F06-validation/tasks.md — F06-T09. link_unpinnedF06-AC-012a
F06-REQ-013F06 Validationspecs/features/F06-validation/tasks.md — F06-T10. version_missingF06-AC-013a
F06-REQ-014F06 Validationspecs/features/F06-validation/tasks.md — F06-T11. metric_unknownF06-AC-014a
F06-REQ-015F06 Validationspecs/features/F06-validation/tasks.md — F06-T12. metric_missingF06-AC-015a
F06-REQ-016F06 Validationspecs/features/F06-validation/tasks.md — F06-T13. metric_rangeF06-AC-016a; F06-AC-016b
F06-REQ-017F06 Validationspecs/features/F06-validation/tasks.md — F06-T14. path_invalidF06-AC-017a; F06-AC-017b
F06-REQ-018F06 Validationspecs/features/F06-validation/tasks.md — F06-T15. slug_takenF06-AC-018a
F06-REQ-019F06 Validationspecs/features/F06-validation/tasks.md — F06-T16. base_missingF06-AC-019a; F06-AC-019b
F06-REQ-020F06 Validationspecs/features/F06-validation/tasks.md — F06-T17. version_not_bumpedF06-AC-020a
F06-REQ-021F06 Validationspecs/features/F06-validation/tasks.md — F06-T18. section_missingF06-AC-021a
F06-REQ-022F06 Validationspecs/features/F06-validation/tasks.md — F06-T19. no_changeF06-AC-022a
F06-REQ-023F06 Validationspecs/features/F06-validation/tasks.md — F06-T20. too_largeF06-AC-023a; F06-AC-023b
F06-REQ-024F06 Validationspecs/features/F06-validation/tasks.md — F06-T23. chart_invalidF06-AC-024a
F06-REQ-025F06 Validationspecs/features/F06-validation/tasks.md — F06-T24. math_invalidF06-AC-025a
F06-REQ-026F06 Validationspecs/features/F06-validation/tasks.md — F06-T25. embed_brokenF06-AC-026a; F06-AC-026b
F06-REQ-027F06 Validationspecs/features/F06-validation/tasks.md — F06-T26. mermaid_invalidF06-AC-027a; F06-AC-027b
F06-REQ-028F06 Validationspecs/features/F06-validation/tasks.md — F06-T27. schema_invalidF06-AC-028a
F06-REQ-029F06 Validationspecs/features/F06-validation/tasks.md — F06-T29. Access runs firstF06-AC-029a; F06-AC-029b
F07-REQ-001F07 Storagespecs/features/F07-storage/tasks.md — F07-T-001 — Read the file and insert nothingrepository_read_inserts_no_rows (F07-AC-001a)
F07-REQ-002F07 Storagespecs/features/F07-storage/tasks.md — F07-T-002 — Keep the working copy in localStorageshipped_draft_is_local_storage (F07-AC-002a); local_draft_restores (F07-AC-002b)
F07-REQ-003F07 Storagespecs/features/F07-storage/tasks.md — F07-T-003 — Leave browser snapshots out of revisionsbrowser_snapshots_are_not_revisions (F07-AC-003a)
F07-REQ-004F07 Storagespecs/features/F07-storage/tasks.md — F07-T-005 — Install the contract and store a document rowdocument_row_has_ledger_columns (F07-AC-004a)
F07-REQ-005F07 Storagespecs/features/F07-storage/tasks.md — F07-T-005 — Install the contract and store a document rowslug_taken_includes_archived (F07-AC-005a); path_taken_in_space (F07-AC-005b)
F07-REQ-006F07 Storagespecs/features/F07-storage/tasks.md — F07-T-015 — Archive without deleting historyarchive_sets_database_clock (F07-AC-006a)
F07-REQ-007F07 Storagespecs/features/F07-storage/tasks.md — F07-T-016 — Refuse document deletesdelete_document_refused (F07-AC-007a)
F07-REQ-008F07 Storagespecs/features/F07-storage/tasks.md — F07-T-007 — Store the full file and its frontmatter objectrevisions_store_full_markdown (F07-AC-008a); frontmatter_matches_content (F07-AC-008b)
F07-REQ-009F07 Storagespecs/features/F07-storage/tasks.md — F07-T-008 — Refuse revision updates and deletesrevision_update_or_delete_refused (F07-AC-009a)
F07-REQ-010F07 Storagespecs/features/F07-storage/tasks.md — F07-T-010 — Move the head in the save transactionsave_with_warning_appends_head (F07-AC-010a)
F07-REQ-011F07 Storagespecs/features/F07-storage/tasks.md — F07-T-017 — Write the merge in one transactionmerge_writes_revision_head_links_audit (F07-AC-011a); merge_concluded_inserts_metric_point (F07-AC-011b); merge_abandoned_inserts_no_metric_point (F07-AC-011c)
F07-REQ-012F07 Storagespecs/features/F07-storage/tasks.md — F07-T-011 — Stop before insert when validation has an errorrevision_requires_valid_document (F07-AC-012a)
F07-REQ-013F07 Storagespecs/features/F07-storage/tasks.md — F07-T-023 — Insert a revision only for a human save or a mergeonly_human_save_or_merge_inserts_revision (F07-AC-013a)
F07-REQ-014F07 Storagespecs/features/F07-storage/tasks.md — F07-T-012 — Stamp the author, and the proposal on a mergehuman_save_author_nulls_proposal (F07-AC-014a); merge_copies_proposal_fields (F07-AC-014b)
F07-REQ-015F07 Storagespecs/features/F07-storage/tasks.md — F07-T-013 — Keep the save message to one lineomitted_message_is_empty (F07-AC-015a); message_over_120_refused (F07-AC-015b); message_with_line_feed_refused (F07-AC-015c)
F07-REQ-016F07 Storagespecs/features/F07-storage/tasks.md — F07-T-018 — Append restore, tick, and import with their messagesrestore_appends_copy (F07-AC-016a)
F07-REQ-017F07 Storagespecs/features/F07-storage/tasks.md — F07-T-018 — Append restore, tick, and import with their messagestick_task_appends_revision (F07-AC-017a)
F07-REQ-018F07 Storagespecs/features/F07-storage/tasks.md — F07-T-018 — Append restore, tick, and import with their messagesimport_appends_revision (F07-AC-018a); invalid_import_writes_nothing (F07-AC-018b)
F07-REQ-019F07 Storagespecs/features/F07-storage/tasks.md — F07-T-009 — Chain revisions, hash the bytes, and copy versionrevision_chain_one_child (F07-AC-019a)
F07-REQ-020F07 Storagespecs/features/F07-storage/tasks.md — F07-T-009 — Chain revisions, hash the bytes, and copy versioncontent_hash_is_sha256 (F07-AC-020a)
F07-REQ-021F07 Storagespecs/features/F07-storage/tasks.md — F07-T-009 — Chain revisions, hash the bytes, and copy versionversion_from_frontmatter (F07-AC-021a); version_null_without_integer (F07-AC-021b)
F07-REQ-022F07 Storagespecs/features/F07-storage/tasks.md — F07-T-020 — Upsert the server draft on a 2-second intervalserver_draft_interval_is_2_seconds (F07-AC-022a, F07-AC-022b); draft_upsert_stores_invalid_frontmatter (F07-AC-022c)
F07-REQ-023F07 Storagespecs/features/F07-storage/tasks.md — F07-T-019 — Store one private draft per document and usersecond_user_cannot_read_draft (F07-AC-023a); named_draft_is_forbidden (F07-AC-023b)
F07-REQ-024F07 Storagespecs/features/F07-storage/tasks.md — F07-T-019 — Store one private draft per document and useropen_returns_author_draft (F07-AC-024a)
F07-REQ-025F07 Storagespecs/features/F07-storage/tasks.md — F07-T-022 — Delete drafts when the revision commitssave_deletes_author_draft (F07-AC-025a); merge_deletes_both_drafts (F07-AC-025b)
F07-REQ-026F07 Storagespecs/features/F07-storage/tasks.md — F07-T-024 — Rebuild links and metric points from revisionsrebuild_links_and_metric_points (F07-AC-026a)
F07-REQ-027F07 Storagespecs/features/F07-storage/tasks.md — F07-T-025 — Look up the first revision of version Nversion_lookup_earliest (F07-AC-027a); version_lookup_smaller_id (F07-AC-027b); version_lookup_missing_is_empty (F07-AC-027c)
F07-REQ-028F07 Storagespecs/features/F07-storage/tasks.md — F07-T-004 — Skip role checks while sign-in is absentfile_mode_skips_roles (F07-AC-028a)
F07-REQ-029F07 Storagespecs/features/F07-storage/tasks.md — F07-T-026 — Allow a direct save only for Owner and Editorviewer_save_denied (F07-AC-029a); contributor_save_denied (F07-AC-029b); owner_save_inserts_revision (F07-AC-029c); agent_key_save_denied (F07-AC-029d); oauth_grant_save_denied
F07-REQ-030F07 Storagespecs/features/F07-storage/tasks.md — F07-T-027 — Use Neon when Postgres storage is in usepostgres_on_neon_with_pitr (F07-AC-030a)
F07-REQ-031F07 Storagespecs/features/F07-storage/tasks.md — F07-T-014 — Refuse a save when the head movedstale_head_returns_head_moved (F07-AC-031a)
F07-REQ-032F07 Storagespecs/features/F07-storage/tasks.md — F07-T-006 — Create the document and its first revision togethercreate_document_commits_head (F07-AC-032a); document_without_revision_refused (F07-AC-032b)
F07-REQ-033F07 Storagespecs/features/F07-storage/tasks.md — F07-T-006 — Create the document and its first revision togetherhead_copies_title_and_type (F07-AC-033a)
F07-REQ-034F07 Storagespecs/features/F07-storage/tasks.md — F07-T-015 — Archive without deleting historysecond_archive_keeps_timestamp (F07-AC-034a); clear_archived_at_refused (F07-AC-034b)
F07-REQ-035F07 Storagespecs/features/F07-storage/tasks.md — F07-T-021 — Limit who can write a server draftviewer_writes_no_draft (F07-AC-035a); contributor_upserts_draft (F07-AC-035b); agent_key_writes_no_draft; oauth_grant_writes_no_draft
F07-REQ-036F07 Storagespecs/features/F07-storage/tasks.md — F07-T-028 — Leave other documents' link slugs in placerename_leaves_other_to_slug (F07-AC-036a)
F07-REQ-037F07 Storagespecs/features/F07-storage/tasks.md — F07-T-029 — Refuse content past 204800 bytescontent_over_limit_is_too_large (F07-AC-037a); content_at_limit_is_stored (F07-AC-037b)
F08-REQ-001F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-001 Address a page and redirect the old pathspage url is project then page path (F08-AC-001a)
F08-REQ-002F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-001 Address a page and redirect the old pathsbare docs and ledger redirect to guide (F08-AC-002a)
F08-REQ-003F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-001 Address a page and redirect the old pathsnested docs and ledger redirect into guide (F08-AC-003a)
F08-REQ-004F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-001 Address a page and redirect the old pathsproject home opens the home page (F08-AC-004a)
F08-REQ-005F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-002 Lay out the three columnsdesktop shell is three full-height columns (F08-AC-005a)
F08-REQ-006F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-002 Lay out the three columnscolumns use solid fills and no hairline (F08-AC-006a)
F08-REQ-007F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-003 Show and hide the file columnfile column starts open on a wide screen (F08-AC-007a)
F08-REQ-008F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-003 Show and hide the file columnhide sidebar removes the file column (F08-AC-008a)
F08-REQ-009F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-003 Show and hide the file columnshow sidebar restores the file column (F08-AC-009a)
F08-REQ-010F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-004 Open the file column as a phone drawerphone width hides the outline and the file column (F08-AC-010a)
F08-REQ-011F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-004 Open the file column as a phone drawerphone file column opens as a drawer (F08-AC-011a)
F08-REQ-012F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-005 List pages in the file columnfile list marks the open page and opens its folders (F08-AC-012a)
F08-REQ-013F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-005 List pages in the file columnfile column shows search trash and settings (F08-AC-013a)
F08-REQ-014F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-006 Show the title row, the status line, and the document titletitle row shows the page path (F08-AC-014a)
F08-REQ-015F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-006 Show the title row, the status line, and the document titletitle row shows edit share and page actions (F08-AC-015a)
F08-REQ-016F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-006 Show the title row, the status line, and the document titlestatus line names state words and mode (F08-AC-016a)
F08-REQ-017F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-007 Open in viewing and show rendered Markdownunset mode opens in viewing (F08-AC-017a)
F08-REQ-018F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-007 Open in viewing and show rendered Markdownviewing shows rendered markdown (F08-AC-018a)
F08-REQ-019F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-008 Set the reading measure and the phone pagereading text is 17px at 1.7 line height (F08-AC-019a)
F08-REQ-020F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-008 Set the reading measure and the phone pagereading column is capped at 760px (F08-AC-020a); 390px page uses 16px side padding (F08-AC-020b)
F08-REQ-021F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-008 Set the reading measure and the phone page390px page scrolls vertically and can edit (F08-AC-021a)
F08-REQ-022F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlineoutline lists the page headings (F08-AC-022a)
F08-REQ-023F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlineoutline says no headings (F08-AC-023a)
F08-REQ-024F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlineoutline marks the top heading (F08-AC-024a)
F08-REQ-025F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlineoutline row scrolls to the heading (F08-AC-025a)
F08-REQ-026F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlinesource mode and phone width hide the outline (F08-AC-026a)
F08-REQ-027F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-009 Fill and scroll the outlineoutline indents nested headings (F08-AC-027a)
F08-REQ-028F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-010 Show the empty, missing, unknown, and loading screensmissing page offers to create it (F08-AC-028a)
F08-REQ-029F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-010 Show the empty, missing, unknown, and loading screensempty project offers the first page (F08-AC-029a)
F08-REQ-030F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-010 Show the empty, missing, unknown, and loading screensunknown project sends the owner to the project list (F08-AC-030a)
F08-REQ-031F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-010 Show the empty, missing, unknown, and loading screensmissing route is blank before hydration (F08-AC-031a)
F08-REQ-032F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-011 Show who links herebacklinks sit under the page (F08-AC-032a)
F08-REQ-033F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-012 Show a disk changedisk change shows a load control (F08-AC-033a)
F08-REQ-034F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-006 Show the title row, the status line, and the document titledocument title joins page and project (F08-AC-034a)
F08-REQ-035F08 Reading shellspecs/features/F08-reading-shell/tasks.md — F08-T-004 Open the file column as a phone drawerphone scrim closes the file drawer (F08-AC-035a)
F09-REQ-001F09 Editingspecs/features/F09-editing/tasks.md — F09-T-001 Store one mode for the browsera fresh visit opens in preview (F09-AC-001a); mode is shared across pages (F09-AC-001b)
F09-REQ-002F09 Editingspecs/features/F09-editing/tasks.md — F09-T-002 Turn editing on and off from the Edit controlEdit toggles preview and editing (F09-AC-002a)
F09-REQ-003F09 Editingspecs/features/F09-editing/tasks.md — F09-T-003 Switch mode from the keyboard and from the addressControl-slash toggles source and editing (F09-AC-003a)
F09-REQ-004F09 Editingspecs/features/F09-editing/tasks.md — F09-T-003 Switch mode from the keyboard and from the addressE enters editing from preview (F09-AC-004a)
F09-REQ-005F09 Editingspecs/features/F09-editing/tasks.md — F09-T-003 Switch mode from the keyboard and from the addressedit=1 opens editing and leaves the address (F09-AC-005a)
F09-REQ-006F09 Editingspecs/features/F09-editing/tasks.md — F09-T-004 Show preview, blocks, or full-page sourcepreview shows the rendered page only (F09-AC-006a)
F09-REQ-007F09 Editingspecs/features/F09-editing/tasks.md — F09-T-004 Show preview, blocks, or full-page sourceediting does not place source beside preview (F09-AC-007a)
F09-REQ-008F09 Editingspecs/features/F09-editing/tasks.md — F09-T-004 Show preview, blocks, or full-page sourcesource fills the page at 13.5px and 15px (F09-AC-008a)
F09-REQ-009F09 Editingspecs/features/F09-editing/tasks.md — F09-T-005 Keep the typed text in this browsera local edit is marked edited in this browser (F09-AC-009a)
F09-REQ-010F09 Editingspecs/features/F09-editing/tasks.md — F09-T-006 Keep local snapshotsa quiet period of 10 minutes stores Before editing (F09-AC-010a)
F09-REQ-011F09 Editingspecs/features/F09-editing/tasks.md — F09-T-006 Keep local snapshotsControl-S saves a version and reports a repeat (F09-AC-011a)
F09-REQ-012F09 Editingspecs/features/F09-editing/tasks.md — F09-T-007 Write a folder project to disk, and leave repository projects in the browserguide edits are not posted as repository writes (F09-AC-012a)
F09-REQ-013F09 Editingspecs/features/F09-editing/tasks.md — F09-T-008 Edit without a roleediting and saving do not ask for a role (F09-AC-013a)
F09-REQ-014F09 Editingspecs/features/F09-editing/tasks.md — F09-T-009 Count words on the status linestatus word count matches the stored source (F09-AC-014a)
F09-REQ-015F09 Editingspecs/features/F09-editing/tasks.md — F09-T-010 Show scalar frontmatter while editingscalar frontmatter is a text field while editing (F09-AC-015a)
F09-REQ-016F09 Editingspecs/features/F09-editing/tasks.md — F09-T-011 Keep editing usable at 390px390px editing keeps 17px type and a 44px Edit control (F09-AC-016a)
F09-REQ-017F09 Editingspecs/features/F09-editing/tasks.md — F09-T-012 Keep inline live preview out of this editorediting is blocks, not inline live preview (F09-AC-017a); F09-AC-002a
F09-REQ-018F09 Editingspecs/features/F09-editing/tasks.md — F09-T-013 Show a schema form and write one YAML valueschema fields render as dropdown, date, and picker (F09-AC-018a)
F09-REQ-019F09 Editingspecs/features/F09-editing/tasks.md — F09-T-013 Show a schema form and write one YAML valuepinned link stores slug at version (F09-AC-019a)
F09-REQ-020F09 Editingspecs/features/F09-editing/tasks.md — F09-T-013 Show a schema form and write one YAML valueone form edit writes one YAML value (F09-AC-020a)
F09-REQ-021F09 Editingspecs/features/F09-editing/tasks.md — F09-T-014 Narrow the slash menu to structureslash menu inserts structure only (F09-AC-021a)
F09-REQ-022F09 Editingspecs/features/F09-editing/tasks.md — F09-T-015 Insert a document link and a version pindouble bracket inserts a document link (F09-AC-022a)
F09-REQ-023F09 Editingspecs/features/F09-editing/tasks.md — F09-T-015 Insert a document link and a version pinat-sign pins the earliest version (F09-AC-023a)
F09-REQ-024F09 Editingspecs/features/F09-editing/tasks.md — F09-T-016 Store a pasted image under assetspasted image lands in assets (F09-AC-024a)
F09-REQ-025F09 Editingspecs/features/F09-editing/tasks.md — F09-T-017 Write a private server draftdraft writes once within 2 seconds and stays private (F09-AC-025a)
F09-REQ-026F09 Editingspecs/features/F09-editing/tasks.md — F09-T-017 Write a private server draftreturn restores the author's server draft (F09-AC-026a)
F09-REQ-027F09 Editingspecs/features/F09-editing/tasks.md — F09-T-018 Ask for a commit message when validation is cleancommand-s opens an optional commit message (F09-AC-027a)
F09-REQ-028F09 Editingspecs/features/F09-editing/tasks.md — F09-T-018 Ask for a commit message when validation is cleana validation error blocks save (F09-AC-028a)
F09-REQ-029F09 Editingspecs/features/F09-editing/tasks.md — F09-T-018 Ask for a commit message when validation is cleana warning still allows save (F09-AC-029a)
F09-REQ-030F09 Editingspecs/features/F09-editing/tasks.md — F09-T-019 Show Save or Propose from the rolecontributor propose does not write a revision (F09-AC-030a)
F09-REQ-031F09 Editingspecs/features/F09-editing/tasks.md — F09-T-019 Show Save or Propose from the roleowner and editor see save (F09-AC-031a)
F09-REQ-032F09 Editingspecs/features/F09-editing/tasks.md — F09-T-019 Show Save or Propose from the roleviewer has no save or propose (F09-AC-032a)
F09-REQ-033F09 Editingspecs/features/F09-editing/tasks.md — F09-T-020 Merge or stop when the head moveda newer head shows the conflict banner (F09-AC-033a)
F09-REQ-034F09 Editingspecs/features/F09-editing/tasks.md — F09-T-020 Merge or stop when the head movedsave merges the three texts as lines (F09-AC-034a)
F09-REQ-035F09 Editingspecs/features/F09-editing/tasks.md — F09-T-020 Merge or stop when the head moveda clean merge notices rebased onto latest (F09-AC-035a)
F09-REQ-036F09 Editingspecs/features/F09-editing/tasks.md — F09-T-020 Merge or stop when the head moveda conflict opens the three texts and does not save (F09-AC-036a)
F09-REQ-037F09 Editingspecs/features/F09-editing/tasks.md — F09-T-021 Produce an empty diff for an untouched saveediting and saving an untouched document produces an empty diff (F09-AC-037a)
F10-REQ-001F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-001 Open Settings as a dialog with three sectionssettings opens as a dialog (F10-AC-001a)
F10-REQ-002F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-002 Open on Appearance, and toggle without changing the sectionsettings from the file column opens appearance (F10-AC-002a); phone gear opens settings (F10-AC-002b)
F10-REQ-003F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-002 Open on Appearance, and toggle without changing the sectioncontrol comma toggles settings (F10-AC-003a)
F10-REQ-004F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-001 Open Settings as a dialog with three sectionsescape closes settings (F10-AC-004a)
F10-REQ-005F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-001 Open Settings as a dialog with three sectionssettings lists general appearance and mcp (F10-AC-005a)
F10-REQ-006F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-003 Show the General copygeneral section explains local pages (F10-AC-006a)
F10-REQ-007F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-004 Store and paint Light, Dark, and Systemappearance section offers three themes (F10-AC-007a)
F10-REQ-008F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-004 Store and paint Light, Dark, and Systemlight dark and system update the document theme (F10-AC-008a)
F10-REQ-009F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-004 Store and paint Light, Dark, and Systemmissing theme uses dark (F10-AC-009a)
F10-REQ-010F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-004 Store and paint Light, Dark, and Systemsystem theme tracks the color scheme (F10-AC-010a)
F10-REQ-011F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-005 Apply the theme before the first paintstored theme is applied before first paint (F10-AC-011a)
F10-REQ-012F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-006 Show MCP snippets and confirm a copymcp section shows live snippets (F10-AC-012a)
F10-REQ-013F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-006 Show MCP snippets and confirm a copymcp section falls back when the endpoint is down (F10-AC-013a)
F10-REQ-014F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-006 Show MCP snippets and confirm a copycopying a snippet confirms the client name (F10-AC-014a)
F10-REQ-015F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-007 Size the dialog for a wide screen and a phonesettings dialog is 760 by 520 on a wide screen (F10-AC-015a)
F10-REQ-016F10 Settings and themespecs/features/F10-settings/tasks.md — F10-T-007 Size the dialog for a wide screen and a phonesettings dialog fills the phone and stacks the sections (F10-AC-016a)
F11-REQ-001F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-001 Open the share sheet and close itshare dialog names the page (F11-AC-001a)
F11-REQ-002F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-001 Open the share sheet and close itshare sheet says anyone with the link (F11-AC-002a)
F11-REQ-003F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-002 Remember Can view or Can edit for this pagecan view is selected when nothing is stored (F11-AC-003a)
F11-REQ-004F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-002 Remember Can view or Can edit for this pagecan edit is stored for the page (F11-AC-004a)
F11-REQ-005F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-002 Remember Can view or Can edit for this pagecan view and can edit set the edit query (F11-AC-005a)
F11-REQ-006F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-002 Remember Can view or Can edit for this pagecan edit does not create a permission (F11-AC-006a)
F11-REQ-007F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-003 Apply the edit parameter as a starting modeedit query sets the starting mode and is removed (F11-AC-007a)
F11-REQ-008F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-004 Note a browser-only pageedited page warns that the link is the repository copy (F11-AC-008a)
F11-REQ-009F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-004 Note a browser-only pagecreated page warns the link will not show it (F11-AC-009a)
F11-REQ-010F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-004 Note a browser-only pagerepository copy has no extra share note (F11-AC-010a)
F11-REQ-011F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-005 Copy the linkcopy link changes the button to copied (F11-AC-011a)
F11-REQ-012F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-005 Copy the linkfailed copy leaves the button unchanged (F11-AC-012a)
F11-REQ-013F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-001 Open the share sheet and close itescape closes the share sheet (F11-AC-013a)
F11-REQ-014F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-001 Open the share sheet and close itshare dialog uses the phone width (F11-AC-014a)
F11-REQ-015F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-006 Keep invites off this sheetshare sheet has no invite while sign-in is absent (F11-AC-015a)
F11-REQ-016F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-007 Leave the page link as a starting modecan edit stays a starting mode after sign-in (F11-AC-016a); can view stays a starting mode after sign-in (F11-AC-016b)
F11-REQ-017F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-008 Store one unused inviteowner invite stores the role and the expiry (F11-AC-017a)
F11-REQ-018F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-008 Store one unused invitea new invite revokes the older unused invite (F11-AC-018a)
F11-REQ-019F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-008 Store one unused invitean invite email over 254 characters is rejected (F11-AC-019a)
F11-REQ-020F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-008 Store one unused invitean invite role outside the four is rejected (F11-AC-020a)
F11-REQ-021F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-009 Allow only an Owner to invitean owner can store an invite (F11-AC-021a); an editor cannot invite (F11-AC-021b); non-owners cannot invite (F11-AC-021c); an agent key a grant and an endpoint cannot invite (F11-AC-021d)
F11-REQ-022F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-010 Accept an invite into one membershipaccepting an invite sets the invited role (F11-AC-022a); a second accept does not change the membership (F11-AC-022b)
F11-REQ-023F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-010 Accept an invite into one membershipan invite older than 7 days is refused (F11-AC-023a)
F11-REQ-024F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-010 Accept an invite into one membershipa different email cannot accept the invite (F11-AC-024a)
F11-REQ-025F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-010 Accept an invite into one membershipa revoked invite cannot be accepted (F11-AC-025a)
F11-REQ-026F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-011 Keep a new space privatea new space has public read off (F11-AC-026a)
F11-REQ-027F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-011 Keep a new space privatepublic read off refuses a caller with no membership (F11-AC-027a)
F11-REQ-028F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-012 Let an Owner turn the public link on or offan owner can turn the public read-only link on (F11-AC-028a); an editor cannot change the public read-only link (F11-AC-028b); non-owners cannot change the public read-only link (F11-AC-028c)
F11-REQ-029F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-013 Read a public space at the document URLpublic read opens the document url with no secret token (F11-AC-029a); public read still treats can edit as a starting mode (F11-AC-029b)
F11-REQ-030F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-013 Read a public space at the document URLa public view does not show proposals keys or members (F11-AC-030a); a public view does not show audit events (F11-AC-030b)
F11-REQ-031F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-014 Save only as an Owner or an Editorcan edit does not let a contributor save (F11-AC-031a); can edit does not let a viewer save (F11-AC-031b); public read does not grant a save (F11-AC-031c); can view does not remove an editor save (F11-AC-031d); can edit does not let a signed-out caller save (F11-AC-031e); can edit does not let an agent key save (F11-AC-031f); an endpoint cannot save from a page link (F11-AC-031g)
F11-REQ-032F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-015 Show Members to an Owneronly an owner sees the invite form (F11-AC-032a); an editor does not see the invite form (F11-AC-032b)
F11-REQ-033F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-015 Show Members to an Ownera stored invite says it expires in 7 days (F11-AC-033a)
F11-REQ-034F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-015 Show Members to an Ownerthe public link tells the owner it is off (F11-AC-034a); the public link tells the owner it is on (F11-AC-034b)
F11-REQ-035F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-015 Show Members to an Ownerinvite and public link controls meet the coarse target (F11-AC-035a)
F11-REQ-036F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-007 Leave the page link as a starting modesign-in does not replace anyone with the link (F11-AC-036a)
F11-REQ-037F11 Sharingspecs/features/F11-sharing/tasks.md — F11-T-013 Read a public space at the document URLpublic read does not grant a proposal (F11-AC-037a); public read does not grant a merge (F11-AC-037b)
F12-REQ-001F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T01 Keep the review loop offF12-AC-001a
F12-REQ-002F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-002a; F12-AC-002b
F12-REQ-003F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-003a
F12-REQ-004F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-004a; F12-AC-004b; F12-AC-004c
F12-REQ-005F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-005a; F12-AC-005b
F12-REQ-006F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T05 Apply find-and-replace editsF12-AC-006a; F12-AC-006b
F12-REQ-007F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T05 Apply find-and-replace editsF12-AC-007a; F12-AC-007b; F12-AC-007c; F12-AC-007d; F12-AC-007e
F12-REQ-008F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T05 Apply find-and-replace editsF12-AC-008a
F12-REQ-009F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T05 Apply find-and-replace editsF12-AC-009a
F12-REQ-010F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-010a; F12-AC-010b
F12-REQ-011F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T02 Add author clock and grant idF12-AC-011a
F12-REQ-011F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-011a
F12-REQ-012F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-012a
F12-REQ-013F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-013a
F12-REQ-014F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T02 Add author clock and grant idF12-AC-014a
F12-REQ-014F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T10 Record the authorF12-AC-014a; F12-AC-014b
F12-REQ-015F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T20 Query the InboxF12-AC-015a
F12-REQ-016F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T20 Query the InboxF12-AC-016a; F12-AC-016b
F12-REQ-017F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T20 Query the InboxF12-AC-017a
F12-REQ-018F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T20 Query the InboxF12-AC-018a
F12-REQ-019F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T22 Serve Inbox routesF12-AC-019a; F12-AC-019b
F12-REQ-020F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T03 Bind review keysF12-AC-020a; F12-AC-020b
F12-REQ-021F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T25 Build the proposal screenF12-AC-021a
F12-REQ-022F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T04 Align blocks and word-diff pairsF12-AC-022a
F12-REQ-023F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T25 Build the proposal screenF12-AC-023a
F12-REQ-024F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T07 Diff frontmatter and fold sectionsF12-AC-024a; F12-AC-024b
F12-REQ-025F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T21 Render creates, charts, and diagramsF12-AC-025a
F12-REQ-026F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T25 Build the proposal screenF12-AC-026a; F12-AC-026b
F12-REQ-027F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T07 Diff frontmatter and fold sectionsF12-AC-027a; F12-AC-027b
F12-REQ-028F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T04 Align blocks and word-diff pairsF12-AC-028a; F12-AC-028b; F12-AC-028c; F12-AC-028d
F12-REQ-029F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T04 Align blocks and word-diff pairsF12-AC-029a
F12-REQ-030F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T21 Render creates, charts, and diagramsF12-AC-030a; F12-AC-030b
F12-REQ-031F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T02 Add author clock and grant idF12-AC-031d
F12-REQ-031F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T13 Derive stale and conflicted marksF12-AC-031a; F12-AC-031b; F12-AC-031c; F12-AC-031d
F12-REQ-032F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T14 Update a proposalF12-AC-032a
F12-REQ-033F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T17 MergeF12-AC-033a
F12-REQ-034F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T14 Update a proposalF12-AC-034a; F12-AC-034b; F12-AC-034c; F12-AC-034d
F12-REQ-035F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T15 Withdraw a proposalF12-AC-035a; F12-AC-035b; F12-AC-035c
F12-REQ-036F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T17 MergeF12-AC-036a; F12-AC-036b
F12-REQ-037F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T06 Merge lines three waysF12-AC-037a; F12-AC-037b; F12-AC-037c; F12-AC-037d
F12-REQ-038F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T12 Resolve a conflictF12-AC-038a; F12-AC-038b; F12-AC-038c
F12-REQ-039F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T16 Reject and request changesF12-AC-039a; F12-AC-039b
F12-REQ-040F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T16 Reject and request changesF12-AC-040a; F12-AC-040b
F12-REQ-041F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T18 Edit before mergeF12-AC-041a; F12-AC-041b
F12-REQ-042F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T19 Check who may propose and reviewF12-AC-042a; F12-AC-042b
F12-REQ-043F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T19 Check who may propose and reviewF12-AC-043a; F12-AC-043b; F12-AC-043c; F12-AC-043d
F12-REQ-044F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T19 Check who may propose and reviewF12-AC-044a; F12-AC-044b
F12-REQ-045F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T03 Bind review keysF12-AC-045a; F12-AC-045b
F12-REQ-046F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T03 Bind review keysF12-AC-046a; F12-AC-046b; F12-AC-046c
F12-REQ-047F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T26 Show merge and reject before the server returnsF12-AC-047a; F12-AC-047b
F12-REQ-048F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T26 Show merge and reject before the server returnsF12-AC-048a
F12-REQ-049F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T23 Hide proposals on a public read viewF12-AC-049a
F12-REQ-050F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T24 Show a new row within 2 secondsF12-AC-050a
F12-REQ-051F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T13 Derive stale and conflicted marksF12-AC-051a
F12-REQ-052F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T16 Reject and request changesF12-AC-052a; F12-AC-052b
F12-REQ-053F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T11 Read a proposal for its authorF12-AC-053a
F12-REQ-054F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T03 Bind review keysF12-AC-054a; F12-AC-054b
F12-REQ-055F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T25 Build the proposal screenF12-AC-055a
F12-REQ-056F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T25 Build the proposal screenF12-AC-056a
F12-REQ-057F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T14 Update a proposalF12-AC-057a
F12-REQ-058F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T08 Submit a proposalF12-AC-058a
F12-REQ-059F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T11 Read a proposal for its authorF12-AC-059a
F12-REQ-060F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T09 Refuse closed proposalsF12-AC-060a; F12-AC-060b
F12-REQ-061F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T14 Update a proposalF12-AC-061a
F12-REQ-062F12 Proposals and reviewspecs/features/F12-proposals/tasks.md — F12-T15 Withdraw a proposalF12-AC-062a
F13-REQ-001F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T01 Leave the editor server in placeF13-AC-001a; F13-AC-001b; F13-AC-001c
F13-REQ-002F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T19 Bind the ten tool contractsF13-AC-002a
F13-REQ-003F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T05 Refuse an unknown routeF13-AC-003a
F13-REQ-004F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T20 Serve MCP and REST from one implementationF13-AC-004a
F13-REQ-005F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T06 Reject a space argumentF13-AC-005a
F13-REQ-006F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T07 Authenticate a bearerF13-AC-006a; F13-AC-006b; F13-AC-006c; F13-AC-006d
F13-REQ-007F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T07 Authenticate a bearerF13-AC-007a
F13-REQ-008F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T02 Store credential windowsF13-AC-008a
F13-REQ-008F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T08 Create and revoke a keyF13-AC-008a; F13-AC-008b; F13-AC-008c
F13-REQ-009F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T08 Create and revoke a keyF13-AC-009a
F13-REQ-010F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T09 Enforce read and propose scopeF13-AC-010a; F13-AC-010b; F13-AC-010c
F13-REQ-011F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T07 Authenticate a bearerF13-AC-011a
F13-REQ-012F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T02 Store credential windowsF13-AC-012a
F13-REQ-012F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T10 Count the three limitsF13-AC-012a; F13-AC-012b; F13-AC-012c; F13-AC-012d
F13-REQ-013F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T10 Count the three limitsF13-AC-013a; F13-AC-013b
F13-REQ-014F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T11 Build the context packF13-AC-014a; F13-AC-014b
F13-REQ-015F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T11 Build the context packF13-AC-015a; F13-AC-015b
F13-REQ-016F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T12 Search documentsF13-AC-016a; F13-AC-016b; F13-AC-016c
F13-REQ-017F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T13 List documentsF13-AC-017a
F13-REQ-018F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T14 Read a documentF13-AC-018a; F13-AC-018b
F13-REQ-019F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T15 Return a templateF13-AC-019a; F13-AC-019b
F13-REQ-020F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T16 Validate without writingF13-AC-020a; F13-AC-020b
F13-REQ-021F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T17 Propose, update, and read a proposalF13-AC-021a; F13-AC-021b; F13-AC-021c
F13-REQ-022F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T17 Propose, update, and read a proposalF13-AC-022a; F13-AC-022b
F13-REQ-023F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T17 Propose, update, and read a proposalF13-AC-023a; F13-AC-023b
F13-REQ-024F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T18 Return metric pointsF13-AC-024a; F13-AC-024b
F13-REQ-025F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T19 Bind the ten tool contractsF13-AC-025a
F13-REQ-026F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T19 Bind the ten tool contractsF13-AC-026a
F13-REQ-027F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T03 Shape the error objectF13-AC-027a
F13-REQ-028F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T16 Validate without writingF13-AC-028a; F13-AC-028b
F13-REQ-029F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T04 Refuse an oversized bodyF13-AC-029a
F13-REQ-030F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T21 Show Agent keysF13-AC-030a; F13-AC-030b
F13-REQ-031F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T22 Show ConnectF13-AC-031a; F13-AC-031b
F13-REQ-032F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T12 Search documentsF13-AC-032a
F13-REQ-033F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T23 Answer a tool within 2 secondsF13-AC-033a
F13-REQ-034F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T24 Finish the log-an-experiment server pathF13-AC-034a
F13-REQ-035F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T25 Log this experiment with no manual fixeslog this experiment to Ledger needs no manual fixes (F13-AC-035a)
F13-REQ-036F13 Agent accessspecs/features/F13-agent-access/tasks.md — F13-T26 Accept the agent's retrythe agent retries and that retry succeeds (F13-AC-036a)
F14-REQ-001F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T01 Keep OAuth offF14-AC-001a; F14-AC-001b
F14-REQ-002F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T04 Publish protected-resource metadataF14-AC-002a; F14-AC-002b
F14-REQ-003F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T05 Publish authorization-server metadataF14-AC-003a; F14-AC-003b
F14-REQ-004F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T06 Advertise the resource on 401F14-AC-004a
F14-REQ-005F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T02 Add OAuth tablesF14-AC-005a
F14-REQ-005F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T07 Register a public clientF14-AC-005a; F14-AC-005b
F14-REQ-006F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T07 Register a public clientF14-AC-006a; F14-AC-006b; F14-AC-006c
F14-REQ-007F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T03 Accept redirect URIsF14-AC-007a; F14-AC-007b
F14-REQ-008F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T08 Show consent and refuse the wrong methodF14-AC-008a; F14-AC-008b; F14-AC-008c
F14-REQ-009F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T09 Refuse a bad authorization requestF14-AC-009a; F14-AC-009b; F14-AC-009c
F14-REQ-010F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T10 Offer only read and proposeF14-AC-010a; F14-AC-010b; F14-AC-010c
F14-REQ-011F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T02 Add OAuth tablesF14-AC-011a
F14-REQ-011F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T12 Store a grant and a codeF14-AC-011a; F14-AC-011b
F14-REQ-012F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T11 Gate approval by membershipF14-AC-012a; F14-AC-012b; F14-AC-012c; F14-AC-012d; F14-AC-012e
F14-REQ-013F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T13 Deny or approve with no scopeF14-AC-013a; F14-AC-013b
F14-REQ-014F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T14 Exchange a codeF14-AC-014a; F14-AC-014b
F14-REQ-015F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T02 Add OAuth tablesF14-AC-015c
F14-REQ-015F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T15 Expire and hash access tokensF14-AC-015a; F14-AC-015b; F14-AC-015c
F14-REQ-016F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T16 Rotate refresh tokensF14-AC-016a; F14-AC-016b; F14-AC-016c
F14-REQ-017F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T17 Revoke a grant when a refresh token is reusedF14-AC-017a
F14-REQ-018F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T14 Exchange a codeF14-AC-018a; F14-AC-018b; F14-AC-018c
F14-REQ-019F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T18 Call the ten tools with a grantF14-AC-019a; F14-AC-019b; F14-AC-019c; F14-AC-019d; F14-AC-019e
F14-REQ-020F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T19 Keep each grant on its own countersF14-AC-020a; F14-AC-020b; F14-AC-020c; F14-AC-020d
F14-REQ-021F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T21 Revoke a grant from SettingsF14-AC-021a; F14-AC-021b; F14-AC-021c; F14-AC-021d; F14-AC-021e
F14-REQ-022F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T22 List grants in AgentsF14-AC-022a; F14-AC-022b; F14-AC-022c; F14-AC-022d
F14-REQ-023F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T23 Store the grant label on a proposalF14-AC-023a
F14-REQ-024F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T20 Check Origin on browser OAuth postsF14-AC-024a; F14-AC-024b
F14-REQ-025F14 OAuthspecs/features/F14-oauth/tasks.md — F14-T24 Show the three OAuth cardsF14-AC-025a; F14-AC-025b; F14-AC-025c
F15-REQ-001F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T01 Leave sign-in offF15-AC-001a
F15-REQ-002F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T01 Leave sign-in offF15-AC-002a
F15-REQ-003F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T01 Leave sign-in offF15-AC-003a
F15-REQ-004F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T02 Treat the page link as a starting modeF15-AC-004a; F15-AC-004b
F15-REQ-004F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T23 Gate document readF15-AC-004d
F15-REQ-004F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T25 Gate edit directlyF15-AC-004c
F15-REQ-005F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T04 Offer GitHub, Google, and a magic linkF15-AC-005a; F15-AC-005b
F15-REQ-006F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T05 Accept one magic link for 300 secondsF15-AC-006a; F15-AC-006b; F15-AC-006c; F15-AC-006d
F15-REQ-007F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T03 Add sessions and invitesF15-AC-007b
F15-REQ-007F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T06 Set the session cookieF15-AC-007a; F15-AC-007b
F15-REQ-008F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T07 Roll the session expiryF15-AC-008a; F15-AC-008b
F15-REQ-009F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T08 Treat a missing session as signed outF15-AC-009a; F15-AC-009b
F15-REQ-010F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T09 Sign outF15-AC-010a
F15-REQ-011F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T10 Reject a foreign OriginF15-AC-011a; F15-AC-011b
F15-REQ-012F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T11 Confirm the provider callbackF15-AC-012a; F15-AC-012b
F15-REQ-013F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T15 Read the role from the databaseF15-AC-013a
F15-REQ-014F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T12 Write one user per emailF15-AC-014a; F15-AC-014b
F15-REQ-015F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T12 Write one user per emailF15-AC-015a
F15-REQ-016F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T03 Add sessions and invitesF15-AC-016a
F15-REQ-016F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T13 Store one membershipF15-AC-016a; F15-AC-016b
F15-REQ-017F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T14 Make the space creator the ownerF15-AC-017a
F15-REQ-018F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T03 Add sessions and invitesF15-AC-018a
F15-REQ-018F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T16 Invite by emailF15-AC-018a; F15-AC-018b; F15-AC-018c; F15-AC-018d
F15-REQ-019F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T17 Accept an inviteF15-AC-019a
F15-REQ-020F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T18 Refuse a bad inviteF15-AC-020a; F15-AC-020b; F15-AC-020c
F15-REQ-021F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T23 Gate document readF15-AC-021a; F15-AC-021b; F15-AC-021c
F15-REQ-022F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T24 Gate human proposalsF15-AC-022a; F15-AC-022b; F15-AC-022c; F15-AC-022d
F15-REQ-023F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T25 Gate edit directlyF15-AC-023a; F15-AC-023b; F15-AC-023c; F15-AC-023d; F15-AC-023e; F15-AC-023f; F15-AC-023g
F15-REQ-024F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T26 Gate mergeF15-AC-024a; F15-AC-024b; F15-AC-024c; F15-AC-024d
F15-REQ-025F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T27 Gate member managementF15-AC-025a; F15-AC-025b; F15-AC-025c
F15-REQ-026F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T28 Gate keys and typesF15-AC-026a; F15-AC-026b; F15-AC-026c
F15-REQ-027F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T29 Refuse document deleteF15-AC-027a; F15-AC-027b
F15-REQ-028F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T30 Refuse merge and admin on a toolF15-AC-028a; F15-AC-028b; F15-AC-028c
F15-REQ-029F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T31 Refuse direct edit on a toolF15-AC-029a; F15-AC-029b
F15-REQ-030F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T32 Keep keys and grants out of the web appF15-AC-030a; F15-AC-030b
F15-REQ-031F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T33 Set the human proposal authorF15-AC-031a; F15-AC-031b
F15-REQ-032F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T19 Keep one ownerF15-AC-032a; F15-AC-032b
F15-REQ-033F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T20 Audit membership changesF15-AC-033a; F15-AC-033b
F15-REQ-034F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T21 Audit invitesF15-AC-034a; F15-AC-034b
F15-REQ-035F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T03 Add sessions and invitesF15-AC-035a
F15-REQ-035F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T22 Leave audit rows unchangedF15-AC-035a
F15-REQ-036F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T34 Let an Owner read the audit logF15-AC-036a; F15-AC-036b; F15-AC-036c
F15-REQ-037F15 Sign-in and rolesspecs/features/F15-auth/tasks.md — F15-T35 Keep provider secrets on the serverF15-AC-037a
F16-REQ-001F16 Metricsspecs/features/F16-metrics/tasks.md — 1. Build point rows for a concluded mergeF16-AC-001a; F16-AC-001b
F16-REQ-002F16 Metricsspecs/features/F16-metrics/tasks.md — 1. Build point rows for a concluded mergeF16-AC-002a; F16-AC-002b
F16-REQ-003F16 Metricsspecs/features/F16-metrics/tasks.md — 1. Build point rows for a concluded mergeF16-AC-003a
F16-REQ-004F16 Metricsspecs/features/F16-metrics/tasks.md — 2. Treat the head as currentF16-AC-004a; F16-AC-004b
F16-REQ-005F16 Metricsspecs/features/F16-metrics/tasks.md — 3. Serve the Metrics routeF16-AC-005a
F16-REQ-006F16 Metricsspecs/features/F16-metrics/tasks.md — 3. Serve the Metrics routeF16-AC-006a; F16-AC-006b; F16-AC-006c
F16-REQ-007F16 Metricsspecs/features/F16-metrics/tasks.md — 4. Select eval, version, and metricF16-AC-007a; F16-AC-007b; F16-AC-007c
F16-REQ-008F16 Metricsspecs/features/F16-metrics/tasks.md — 5. Draw the line chartF16-AC-008a
F16-REQ-009F16 Metricsspecs/features/F16-metrics/tasks.md — 5. Draw the line chartF16-AC-009a; F16-AC-009b
F16-REQ-010F16 Metricsspecs/features/F16-metrics/tasks.md — 5. Draw the line chartF16-AC-010a
F16-REQ-011F16 Metricsspecs/features/F16-metrics/tasks.md — 6. Baseline, delta, and the eval's unitF16-AC-011a; F16-AC-011b; F16-AC-011c
F16-REQ-012F16 Metricsspecs/features/F16-metrics/tasks.md — 6. Baseline, delta, and the eval's unitF16-AC-012a; F16-AC-012b
F16-REQ-013F16 Metricsspecs/features/F16-metrics/tasks.md — 5. Draw the line chartF16-AC-013a
F16-REQ-014F16 Metricsspecs/features/F16-metrics/tasks.md — 6. Baseline, delta, and the eval's unitF16-AC-014a; F16-AC-014b; F16-AC-014c; F16-AC-014d
F16-REQ-015F16 Metricsspecs/features/F16-metrics/tasks.md — 7. Harness comparison tableF16-AC-015a; F16-AC-015b
F16-REQ-016F16 Metricsspecs/features/F16-metrics/tasks.md — 7. Harness comparison tableF16-AC-016a; F16-AC-016b; F16-AC-016c; F16-AC-016d
F16-REQ-017F16 Metricsspecs/features/F16-metrics/tasks.md — 8. Compare two harness versionsF16-AC-017a; F16-AC-017b
F16-REQ-018F16 Metricsspecs/features/F16-metrics/tasks.md — 9. Hover and open an experimentF16-AC-018a; F16-AC-018b; F16-AC-018c
F16-REQ-019F16 Metricsspecs/features/F16-metrics/tasks.md — 10. Refresh an open screen after mergeF16-AC-019a
F16-REQ-020F16 Metricsspecs/features/F16-metrics/tasks.md — 7. Harness comparison tableF16-AC-020a
F16-REQ-021F16 Metricsspecs/features/F16-metrics/tasks.md — 6. Baseline, delta, and the eval's unitF16-AC-021a
F17-REQ-001F17 Searchspecs/features/F17-search/tasks.md — F17-T-001 Open page search and close itsearch button opens the page dialog (F17-AC-001a); control k opens search (F17-AC-001b)
F17-REQ-002F17 Searchspecs/features/F17-search/tasks.md — F17-T-001 Open page search and close itsearch field is labeled and focused (F17-AC-002a)
F17-REQ-003F17 Searchspecs/features/F17-search/tasks.md — F17-T-002 Filter the loaded pages in project orderempty search lists every page in project order (F17-AC-003a)
F17-REQ-004F17 Searchspecs/features/F17-search/tasks.md — F17-T-002 Filter the loaded pages in project ordersearch matches title path and body text (F17-AC-004a); type colon experiment is not a filter (F17-AC-004b)
F17-REQ-005F17 Searchspecs/features/F17-search/tasks.md — F17-T-002 Filter the loaded pages in project orderresults stay in project order (F17-AC-005a)
F17-REQ-006F17 Searchspecs/features/F17-search/tasks.md — F17-T-003 Show a plain snippeta query shows a plain snippet (F17-AC-006a)
F17-REQ-007F17 Searchspecs/features/F17-search/tasks.md — F17-T-004 Move and open a resultarrow down moves the active result (F17-AC-007a)
F17-REQ-008F17 Searchspecs/features/F17-search/tasks.md — F17-T-004 Move and open a resultenter opens the active page (F17-AC-008a)
F17-REQ-009F17 Searchspecs/features/F17-search/tasks.md — F17-T-004 Move and open a resultunknown query says no matching pages (F17-AC-009a)
F17-REQ-010F17 Searchspecs/features/F17-search/tasks.md — F17-T-001 Open page search and close itescape closes search (F17-AC-010a)
F17-REQ-011F17 Searchspecs/features/F17-search/tasks.md — F17-T-005 Size the dialogsearch dialog fits the viewport (F17-AC-011a)
F17-REQ-012F17 Searchspecs/features/F17-search/tasks.md — F17-T-002 Filter the loaded pages in project ordersearch filters pages already on the page (F17-AC-012a)
F17-REQ-013F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentscommand k opens the search palette (F17-AC-013a)
F17-REQ-014F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentspalette field is labeled search query (F17-AC-014a)
F17-REQ-015F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentspalette lists four commands (F17-AC-015a)
F17-REQ-016F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentsgo to inbox leaves the palette (F17-AC-016a)
F17-REQ-017F17 Searchspecs/features/F17-search/tasks.md — F17-T-007 Parse terms and the five filtersa term matches title body or frontmatter (F17-AC-017a)
F17-REQ-018F17 Searchspecs/features/F17-search/tasks.md — F17-T-007 Parse terms and the five filterstype status harness verdict and after filter together (F17-AC-018a)
F17-REQ-019F17 Searchspecs/features/F17-search/tasks.md — F17-T-008 Rank title matches, then recencytitle matches rank before recency (F17-AC-019a)
F17-REQ-020F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentsa document row shows a type icon and a highlighted snippet (F17-AC-020a)
F17-REQ-021F17 Searchspecs/features/F17-search/tasks.md — F17-T-006 Index documents for full-text searchpalette answers within 100 milliseconds (F17-AC-021a)
F17-REQ-022F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentspalette says no matches (F17-AC-022a)
F17-REQ-023F17 Searchspecs/features/F17-search/tasks.md — F17-T-008 Rank title matches, then recencyempty palette lists commands then recent documents (F17-AC-023a)
F17-REQ-024F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentsarrows move and enter opens a document (F17-AC-024a)
F17-REQ-025F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentspalette dialog uses the search dialog size (F17-AC-025a)
F17-REQ-026F17 Searchspecs/features/F17-search/tasks.md — F17-T-009 Open one palette for commands and documentsescape closes the palette (F17-AC-026a)
F18-REQ-001F18 History and Timelinespecs/features/F18-history/tasks.md — 1. Keep the editor dialogF18-AC-001a
F18-REQ-002F18 History and Timelinespecs/features/F18-history/tasks.md — 1. Keep the editor dialogF18-AC-002a; F18-AC-002b
F18-REQ-003F18 History and Timelinespecs/features/F18-history/tasks.md — 1. Keep the editor dialogF18-AC-003a
F18-REQ-004F18 History and Timelinespecs/features/F18-history/tasks.md — 1. Keep the editor dialogF18-AC-004a; F18-AC-004b
F18-REQ-005F18 History and Timelinespecs/features/F18-history/tasks.md — 1. Keep the editor dialogF18-AC-005a
F18-REQ-006F18 History and Timelinespecs/features/F18-history/tasks.md — 2. Open the history screen on the documentF18-AC-006a
F18-REQ-007F18 History and Timelinespecs/features/F18-history/tasks.md — 2. Open the history screen on the documentF18-AC-007a; F18-AC-007b
F18-REQ-008F18 History and Timelinespecs/features/F18-history/tasks.md — 3. Diff two revisionsF18-AC-008a; F18-AC-008b
F18-REQ-009F18 History and Timelinespecs/features/F18-history/tasks.md — 4. Restore by appending a revisionF18-AC-009a
F18-REQ-010F18 History and Timelinespecs/features/F18-history/tasks.md — 4. Restore by appending a revisionF18-AC-010a
F18-REQ-011F18 History and Timelinespecs/features/F18-history/tasks.md — 4. Restore by appending a revisionF18-AC-011a
F18-REQ-012F18 History and Timelinespecs/features/F18-history/tasks.md — 4. Restore by appending a revisionF18-AC-012a
F18-REQ-013F18 History and Timelinespecs/features/F18-history/tasks.md — 4. Restore by appending a revisionF18-AC-013a
F18-REQ-014F18 History and Timelinespecs/features/F18-history/tasks.md — 5. Allow restore by roleF18-AC-014a
F18-REQ-015F18 History and Timelinespecs/features/F18-history/tasks.md — 5. Allow restore by roleF18-AC-015a; F18-AC-015b; F18-AC-015c; F18-AC-015d
F18-REQ-016F18 History and Timelinespecs/features/F18-history/tasks.md — 6. Group the space on a timelineF18-AC-016a; F18-AC-016b
F18-REQ-017F18 History and Timelinespecs/features/F18-history/tasks.md — 6. Group the space on a timelineF18-AC-017a
F18-REQ-018F18 History and Timelinespecs/features/F18-history/tasks.md — 6. Group the space on a timelineF18-AC-018a; F18-AC-018b
F18-REQ-019F18 History and Timelinespecs/features/F18-history/tasks.md — 6. Group the space on a timelineF18-AC-019a
F18-REQ-020F18 History and Timelinespecs/features/F18-history/tasks.md — 5. Allow restore by roleF18-AC-020a; F18-AC-020b
F18-REQ-021F18 History and Timelinespecs/features/F18-history/tasks.md — 7. Move the list with J and KF18-AC-021a; F18-AC-021b
F19-REQ-001F19 Import and exportspecs/features/F19-import-export/tasks.md — 1. Keep the editor zip and the sidebar dropF19-AC-001a; F19-AC-001b; F19-AC-001c
F19-REQ-002F19 Import and exportspecs/features/F19-import-export/tasks.md — 1. Keep the editor zip and the sidebar dropF19-AC-002a
F19-REQ-003F19 Import and exportspecs/features/F19-import-export/tasks.md — 1. Keep the editor zip and the sidebar dropF19-AC-003a; F19-AC-003b
F19-REQ-004F19 Import and exportspecs/features/F19-import-export/tasks.md — 1. Keep the editor zip and the sidebar dropF19-AC-004a
F19-REQ-005F19 Import and exportspecs/features/F19-import-export/tasks.md — 1. Keep the editor zip and the sidebar dropF19-AC-005a
F19-REQ-006F19 Import and exportspecs/features/F19-import-export/tasks.md — 6. Offer the two import actionsF19-AC-006a
F19-REQ-007F19 Import and exportspecs/features/F19-import-export/tasks.md — 4. Save each valid file and refuse each invalid fileF19-AC-007a; F19-AC-007b
F19-REQ-008F19 Import and exportspecs/features/F19-import-export/tasks.md — 4. Save each valid file and refuse each invalid fileF19-AC-008a; F19-AC-008b
F19-REQ-009F19 Import and exportspecs/features/F19-import-export/tasks.md — 5. Return one result and a reportF19-AC-009a
F19-REQ-010F19 Import and exportspecs/features/F19-import-export/tasks.md — 5. Return one result and a reportF19-AC-010a
F19-REQ-011F19 Import and exportspecs/features/F19-import-export/tasks.md — 4. Save each valid file and refuse each invalid fileF19-AC-011a; F19-AC-011b
F19-REQ-012F19 Import and exportspecs/features/F19-import-export/tasks.md — 4. Save each valid file and refuse each invalid fileF19-AC-012a
F19-REQ-013F19 Import and exportspecs/features/F19-import-export/tasks.md — 7. Export the space and round-trip itF19-AC-013a
F19-REQ-014F19 Import and exportspecs/features/F19-import-export/tasks.md — 7. Export the space and round-trip itF19-AC-014a; F19-AC-014b
F19-REQ-015F19 Import and exportspecs/features/F19-import-export/tasks.md — 8. Import into a space that already has the pathF19-AC-015a; F19-AC-015b
F19-REQ-016F19 Import and exportspecs/features/F19-import-export/tasks.md — 7. Export the space and round-trip itF19-AC-016a; F19-AC-016b
F19-REQ-017F19 Import and exportspecs/features/F19-import-export/tasks.md — 8. Import into a space that already has the pathF19-AC-017a; F19-AC-017b
F19-REQ-018F19 Import and exportspecs/features/F19-import-export/tasks.md — 2. Allow a null author while sign-in is absentF19-AC-018a; F19-AC-018b
F19-REQ-019F19 Import and exportspecs/features/F19-import-export/tasks.md — 9. Allow import and export by roleF19-AC-019a; F19-AC-019b
F19-REQ-020F19 Import and exportspecs/features/F19-import-export/tasks.md — 3. Accept a folder or a zip inside the capsF19-AC-020a; F19-AC-020b
F19-REQ-021F19 Import and exportspecs/features/F19-import-export/tasks.md — 4. Save each valid file and refuse each invalid fileF19-AC-021a; F19-AC-021b
F19-REQ-022F19 Import and exportspecs/features/F19-import-export/tasks.md — 3. Accept a folder or a zip inside the capsF19-AC-022a; F19-AC-022b; F19-AC-022c
F19-REQ-023F19 Import and exportspecs/features/F19-import-export/tasks.md — 10. Name the backupF19-AC-023a; F19-AC-023b
F20-REQ-001F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-001 Bind the modifier chordscontrol k opens page search (F20-AC-001a)
F20-REQ-002F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-001 Bind the modifier chordscontrol slash from viewing opens markdown source (F20-AC-002a); control slash from source returns to editing (F20-AC-002b)
F20-REQ-003F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-001 Bind the modifier chordscontrol backslash toggles the outline (F20-AC-003a)
F20-REQ-004F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-001 Bind the modifier chordscontrol s saves a version (F20-AC-004a)
F20-REQ-005F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-001 Bind the modifier chordscontrol comma opens settings (F20-AC-005a)
F20-REQ-006F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-002 Open shortcut help and list the built keysquestion mark opens shortcut help (F20-AC-006a)
F20-REQ-007F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-002 Open shortcut help and list the built keysshortcut help lists the built keys (F20-AC-007a)
F20-REQ-008F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-003 Start editing or a new page from a plain keye starts editing and does not toggle off (F20-AC-008a)
F20-REQ-009F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-003 Start editing or a new page from a plain keyc starts a new page in the open folder (F20-AC-009a)
F20-REQ-010F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-003 Start editing or a new page from a plain keyc and e do nothing while typing or in a dialog (F20-AC-010a)
F20-REQ-011F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-004 Close search, help, and the phone drawer on Escapeescape closes search and shortcut help (F20-AC-011a)
F20-REQ-012F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-005 Open the block menu and the page pickerslash while editing opens the block menu (F20-AC-012a)
F20-REQ-013F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-005 Open the block menu and the page pickerdouble bracket while editing opens the page picker (F20-AC-013a)
F20-REQ-014F20 Keyboardspecs/features/F20-keyboard/tasks.md — F20-T-006 Leave the review keys unboundshortcut help omits review chords (F20-AC-014a)
F21-REQ-001F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-001 Paint Dark when the theme is missingunset theme paints dark (F21-AC-001a)
F21-REQ-002F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-002 Paint solid surfaces and no column hairlinedark shell uses the page and sidebar fills (F21-AC-002a); light theme paints the page surface (F21-AC-002b)
F21-REQ-003F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-002 Paint solid surfaces and no column hairlineshell columns have no border and no shadow (F21-AC-003a)
F21-REQ-004F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-003 Use one accent and the warning and danger colorslight focus ring uses the light accent (F21-AC-004a)
F21-REQ-005F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-003 Use one accent and the warning and danger colorswarning and danger colors match the theme (F21-AC-005a)
F21-REQ-006F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-004 Apply the radius scalecontrols blocks and dialogs use the radius scale (F21-AC-006a)
F21-REQ-007F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-004 Apply the radius scaleinline code and marks use 8px and 6px (F21-AC-007a)
F21-REQ-008F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-005 Set the type scale, the fonts, and the reading capui text is 13px and reading text is 17px (F21-AC-008a)
F21-REQ-009F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-005 Set the type scale, the fonts, and the reading capthe shell uses geist sans and geist mono (F21-AC-009a)
F21-REQ-010F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-005 Set the type scale, the fonts, and the reading capreading column keeps the 760px cap (F21-AC-010a)
F21-REQ-011F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-006 Animate the disclosure and honor reduced motionfolder disclosure animates in 120ms (F21-AC-011a)
F21-REQ-012F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-006 Animate the disclosure and honor reduced motionreduced motion disables smooth scroll (F21-AC-012a)
F21-REQ-013F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-007 Draw the focus ringfocused control has a 2px accent outline (F21-AC-013a)
F21-REQ-014F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-008 Step the shell, the reading padding, and the phone dialogs390px uses the drawer shell (F21-AC-014a)
F21-REQ-015F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-008 Step the shell, the reading padding, and the phone dialogs390px reading padding is 16px (F21-AC-015a)
F21-REQ-016F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-008 Step the shell, the reading padding, and the phone dialogsphone settings and share use the 16px inset (F21-AC-016a)
F21-REQ-017F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-009 Enlarge coarse-pointer controlscoarse pointer controls are 44px tall (F21-AC-017a)
F21-REQ-018F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-010 Present the four dialogs on a scrim, and keep shadows off the columnssettings share search and help are dialogs (F21-AC-018a)
F21-REQ-019F21 Design languagespecs/features/F21-design-language/tasks.md — F21-T-010 Present the four dialogs on a scrim, and keep shadows off the columnsmenus may shadow and columns do not (F21-AC-019a)
F22-REQ-001F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-001a
F22-REQ-002F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-002a; F22-AC-002b
F22-REQ-003F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-003a
F22-REQ-004F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-004a
F22-REQ-005F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-005a; F22-AC-005b
F22-REQ-006F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-006a
F22-REQ-007F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-007a
F22-REQ-008F22 Space homespecs/features/F22-space-home/tasks.md — 2. Choose redirect or the orientation screenF22-AC-008a; F22-AC-008b
F22-REQ-009F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-009a
F22-REQ-010F22 Space homespecs/features/F22-space-home/tasks.md — 2. Choose redirect or the orientation screenF22-AC-010a
F22-REQ-011F22 Space homespecs/features/F22-space-home/tasks.md — 3. Render the space fileF22-AC-011a
F22-REQ-012F22 Space homespecs/features/F22-space-home/tasks.md — 4. Fill the four regionsF22-AC-012a; F22-AC-012b; F22-AC-012c
F22-REQ-013F22 Space homespecs/features/F22-space-home/tasks.md — 4. Fill the four regionsF22-AC-013a; F22-AC-013b
F22-REQ-014F22 Space homespecs/features/F22-space-home/tasks.md — 4. Fill the four regionsF22-AC-014a; F22-AC-014b
F22-REQ-015F22 Space homespecs/features/F22-space-home/tasks.md — 4. Fill the four regionsF22-AC-015a
F22-REQ-016F22 Space homespecs/features/F22-space-home/tasks.md — 5. Seed a space that was not importedF22-AC-016a; F22-AC-016b; F22-AC-016c
F22-REQ-017F22 Space homespecs/features/F22-space-home/tasks.md — 6. Teach the empty regions in one lineF22-AC-017a; F22-AC-017b
F22-REQ-018F22 Space homespecs/features/F22-space-home/tasks.md — 6. Teach the empty regions in one lineF22-AC-018a; F22-AC-018b
F22-REQ-019F22 Space homespecs/features/F22-space-home/tasks.md — 7. Open the home by roleF22-AC-019a; F22-AC-019b; F22-AC-019c
F22-REQ-020F22 Space homespecs/features/F22-space-home/tasks.md — 1. Keep the project cards and the editor empty pagesF22-AC-020a
X-REQ-001X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-001 — Serve the editor with no sign-inthe deployed editor opens with no sign-in (X-AC-001a)
X-REQ-002X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-002 — Keep the local routes off in a deployfiles and mcp routes are 404 unless KB_LOCAL is 1 (X-AC-002a)
X-REQ-003X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-003 — Read secrets from the environmentclient bundle has no KB_DIR, KB_LOCAL, or key secret (X-AC-003a)
X-REQ-004X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-004 — Sanitize rendered HTMLrendered markdown drops a script and keeps details (X-AC-004a)
X-REQ-005X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-005 — Initialize Mermaid at strictmermaid initializes at security level strict (X-AC-005a)
X-REQ-006X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-006 — Refuse a remote chart URLan https chart url is not fetched (X-AC-006a)
X-REQ-007X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-012 — Allow only listed chart sourcesa chart data source outside inline assets and metrics is refused (X-AC-007a)
X-REQ-008X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-015 — Serve an uploaded asset from a signed URLan uploaded asset is served from a signed url (X-AC-008a)
X-REQ-009X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-021 — Show a stored proposal within 2 secondsa stored proposal is in the inbox within 2 seconds (X-AC-009a)
X-REQ-010X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-022 — Return search under 100 millisecondssearch of 10000 documents returns in under 100 milliseconds (X-AC-010a)
X-REQ-011X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-020 — Finish the agent-log flow within 10 secondsone sentence produces one proposal within 10 seconds (X-AC-011a)
X-REQ-012X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-008 — Run the editor from the keyboardeditor shortcuts run from the keyboard (X-AC-012a)
X-REQ-012X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-023 — Complete Inbox, Timeline, and Metrics from the keyboardinbox timeline and metrics work from the keyboard alone (X-AC-012b)
X-REQ-013X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-013 — Meet the contrast ratiosboth themes meet the WCAG 2.2 AA contrast ratios (X-AC-013a)
X-REQ-014X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-014 — Order focus and trap a dialogfocus walks files then page then outline and a dialog traps it (X-AC-014a)
X-REQ-015X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-009 — Name the editor controlseditor controls expose an accessible name (X-AC-015a)
X-REQ-016X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-010 — Show the status line as a wordthe status line uses a word (X-AC-016a)
X-REQ-017X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-011 — Announce Editing or Previewturning editing on sets the accessible state to Editing (X-AC-017a)
X-REQ-018X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-007 — Keep drafts on the devicea draft is restored from localStorage and is not posted (X-AC-018a)
X-REQ-019X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-016 — Hide review data on a public readpublic read shows documents and hides proposals keys members and audit (X-AC-019a)
X-REQ-020X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-017 — Show a key secret oncean agent key secret is shown once and stored as a hash (X-AC-020a)
X-REQ-021X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-018 — Write one audit event in the action's transactionmerge reject role change and key changes write one audit event (X-AC-021a)
X-REQ-022X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-019 — Record a validation attemptan invalid propose_change stores a validation attempt and no proposal (X-AC-022a)
X-REQ-023X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-024 — Count experiments in the 720-hour windowexperiment documents in the 720 hour window are counted (X-AC-023a)
X-REQ-024X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-025 — Compute the agent-proposal sharethe agent-proposal share of experiments is computed (X-AC-024a)
X-REQ-025X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-026 — Compute the median review durationmedian review duration is reviewed_at minus created_at (X-AC-025a)
X-REQ-026X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-027 — Compute validation failures after the guideinvalid propose_change calls after get_context are under 10 percent at the target (X-AC-026a)
X-REQ-027X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-028 — Count weekly external buildersdistinct non-owners who used a space in 168 hours are counted (X-AC-027a)
X-REQ-028X Cross-cuttingspecs/features/X-cross-cutting/tasks.md — X-T-029 — Keep the later deploy to one appthe ledger store runs on vercel with postgres and a blob store (X-AC-028a)

Requirements with no task

None. Every requirement above is named by at least one task step, and that step names at least one test. No task step lacks a requirement.

PRD acceptance criteria

Eighteen criteria. The Test column uses the test the task file names. Where the criterion is split across features, each feature's test is listed.

CriterionFeatureTest
AC-01. From Cursor, "log this experiment to Ledger" produces a valid proposal with no manual fixes, using only MCP tools.F13 Agent access; X Cross-cuttingF13-AC-021a on F13-T17; F13-AC-002a on F13-T19; one sentence produces one proposal within 10 seconds (X-AC-011a) on X-T-020; log this experiment to Ledger needs no manual fixes (F13-AC-035a) on F13-T25
AC-02. An invalid proposal returns structured errors, and the agent's retry succeeds.F06 Validation; F13 Agent accessF06-AC-001b on F06-T01; F06-AC-004a on F06-T02; the agent retries and that retry succeeds (F13-AC-036a) on F13-T26
AC-03. The proposal appears in the Inbox within 2 seconds.F12 Proposals and review; X Cross-cuttingF12-AC-050a on F12-T24; a stored proposal is in the inbox within 2 seconds (X-AC-009a) on X-T-021
AC-04. Merging creates a revision, updates the document, and marks the proposal merged for get_proposal.F12 Proposals and review; F13 Agent accessF12-AC-036a on F12-T17; F13-AC-023a on F13-T17
AC-05. An agent key cannot merge, and a revoked key is refused immediately.F13 Agent access; F12 Proposals and reviewF13-AC-003a on F13-T05; F13-AC-009a on F13-T08; F12-AC-042a on F12-T19
AC-06. get_context returns under 6k tokens for a space with 100 experiments.F13 Agent accessF13-AC-014b on F13-T11
AC-07. Claude and Muse connect by pasting the MCP URL, signing in, and approving scopes, with no key copied by hand.F14 OAuthF14-AC-025a on F14-T24; F14-AC-008a on F14-T08; F14-AC-011a on F14-T12
AC-08. OAuth grants appear in Settings → Agents, and revoking one blocks its next call.F14 OAuthF14-AC-022a on F14-T22; F14-AC-021a on F14-T21
AC-09. No OAuth scope or tool allows merging, editing directly, or deleting.F13 Agent access; F14 OAuth; F15 Sign-in and rolesF13-AC-003a on F13-T05; F14-AC-010a on F14-T10; F15-AC-028a and F15-AC-028b on F15-T30; F15-AC-029a on F15-T31
AC-10. Merging a concluded experiment adds its points to the chart without a reload.F16 MetricsF16-AC-001a on step 1; F16-AC-019a on step 10
AC-11. Two harness versions on the same eval show as separate colored series with correct deltas.F16 MetricsF16-AC-008a on step 5; F16-AC-014a on step 6
AC-12. Bumping an eval version splits the chart.F16 MetricsF16-AC-009b on step 5
AC-13. Editing and saving an untouched document produces an empty diff.F09 Editingediting and saving an untouched document produces an empty diff (F09-AC-037a) on F09-T-021
AC-14. Exporting and re-importing a space yields identical files.F19 Import and exportF19-AC-014a on step 7
AC-15. Every screen is usable with the keyboard alone.X Cross-cutting; F20 Keyboardeditor shortcuts run from the keyboard (X-AC-012a) on X-T-008; inbox timeline and metrics work from the keyboard alone (X-AC-012b) on X-T-023; F20-AC-001a through F20-AC-014a on F20-T-001 through F20-T-006
AC-16. Review of a typical experiment proposal takes under two minutes.X Cross-cutting; F12 Proposals and reviewmedian review duration is reviewed_at minus created_at (X-AC-025a) on X-T-026
AC-17. A test document using every syntax in Markdown capabilities renders identically in view, editor preview, and review.F04 Renderingone document using every Markdown capability renders the same in view, editor preview, and review (F04-AC-017a) on F04-T-013
AC-18. A metrics-backed chart embedded in a finding updates after a new experiment merges.F05 ChartsF05-AC-015b on step 9

Where a criterion is only partly named by a test:

  • AC-16. F12's Limits table states a median under 2 minutes and says instrumentation of that median is out of scope, so F12 names no test. The measuring test is X-AC-025a.

Success metrics

Each metric is a row under <!-- prd:success-metrics -->. The query is the function group in lib/success/queries.ts from the X design. The test is the one tasks.md names. The caller compares the returned number with the target. The query does not return pass or fail. A day in these windows is 24 hours, so 30 days are 720 hours and a week is 168 hours. "Under" is strict.

MetricTarget after 30 daysQueryTest
New Memento experiments recorded in Ledger100%Experiments recorded. Count of documents with type experiment in the space whose slug is memento, created_at inside the 720-hour window (X-REQ-023). The product returns the count. The denominator outside Ledger is open question X-Q-006.experiment documents in the 720 hour window are counted (X-AC-023a) on X-T-024
Experiments arriving via agent proposals80% or moreAgent-proposal share. Of that same set, the percentage whose creating proposal has agent_key_id or oauth_grant_id set. A human direct save stays in the denominator only (X-REQ-024).the agent-proposal share of experiments is computed (X-AC-024a) on X-T-025
Median time from proposal to merge or rejectUnder 2 minutes of review timeMedian review. Median of reviewed_at minus created_at, in minutes, for proposals whose status became merged or rejected in the window (X-REQ-025).median review duration is reviewed_at minus created_at (X-AC-025a) on X-T-026
Proposals failing validation after agents read the guideUnder 10%Validation failures. Percentage of validation_attempts in the window with had_get_context true and valid false (X-REQ-026). Attempts with no earlier get_context are excluded. The attempt row is X-REQ-022, tested by X-AC-022a on X-T-019.invalid propose_change calls after get_context are under 10 percent at the target (X-AC-026a) on X-T-027
External builders using a space weekly (optional product signal)5External builders. Count of distinct people who are not an Owner and who opened a space or called a tool in a 168-hour window (X-REQ-027).distinct non-owners who used a space in 168 hours are counted (X-AC-027a) on X-T-028

Check

Every requirement has at least one task and one test. No task step lacks a requirement. AC-16 is only partly named by the tests in the table above.