Functional requirements
What the platform must do. Each module is identified with a stable prefix, and individual requirements are tagged with MoSCoW priority.
Priority notation: M Must have · S Should have · C Could have
Module index
The platform is organised into 15 functional modules. Each module has a stable identifier that is referenced from sequence diagrams, data models, and the API catalogue.
| Prefix | Module |
|---|---|
| FR-ED | Write — collaborative editor |
| FR-MM | Mind map canvas |
| FR-RS | Research workspace |
| FR-SC | Source chat and mini-chat |
| FR-CI | Auto-citation engine |
| FR-LB | Library and bibliography |
| FR-PR | PDF reader and annotator |
| FR-PV | Provenance, signing, and verification |
| FR-WR | Writing process recording |
| FR-GD | Google Docs Chrome extension |
| FR-AI | AI features |
| FR-EX | Export |
| FR-AU | Authentication and collaboration |
| FR-RJ | Research journal |
| FR-TK | Tasks tab |
FR-ED — Write (Collaborative editor)
The primary writing surface. Block-based, real-time collaborative, with academic-specific block types and slash commands.
| ID | Requirement | P |
|---|---|---|
| FR-ED-01 | Block-based rich text editor built on Tiptap/ProseMirror (Novel fork) | M |
| FR-ED-02 | Real-time co-editing via Hocuspocus and Yjs with named, colour-coded cursors | M |
| FR-ED-03 | Document state persisted as a Yjs CRDT binary in PostgreSQL | M |
| FR-ED-04 | Offline editing via IndexedDB fallback with automatic sync on reconnect | S |
| FR-ED-05 | Academic block types: Abstract, Section headings (H1–H4), Citation chip, Equation (MathJax), Figure or Table with captions, Footnote, Author affiliation | M |
| FR-ED-07 | Slash command palette with /cite, /research, /ai, /refine, /figure, /table, /equation, /outline | M |
| FR-ED-08 | Document templates: Essay (APA), IMRaD (APA), Literature Review, IEEE Conference Paper, Thesis Chapter, Blank | M |
| FR-ED-12 | AI-generated content inserted into the editor appears as tracked changes, visually distinguishable from human-authored text | M |
| FR-ED-13 | Selection toolbar on any non-empty selection containing Bold, Italic, Underline, heading options, divider, and a mini-chat icon | M |
FR-SC — Source chat and mini-chat New
A persistent chat workspace operating in two modes: My Sources, which performs RAG over the student's uploaded library, and Research New, which discovers papers via external APIs. The mini-chat surfaces this capability inline as a context-aware popover triggered from the selection toolbar.
| ID | Requirement | P |
|---|---|---|
| FR-SC-01 | Persistent Source Chat tab within every document | M |
| FR-SC-02 | Two modes: My Sources (RAG over uploaded sources only) and Research New (open search via Semantic Scholar, Crossref, arXiv, PubMed) | M |
| FR-SC-04 | Each source is chunked, embedded, and stored in a per-document pgvector store | M |
| FR-SC-05 | In My Sources mode, every AI response is grounded exclusively in retrieved chunks; each claim cites the source document and chunk location | M |
| FR-SC-08 | Clicking the mini-chat icon in the selection toolbar opens a panel anchored below the toolbar without dismissing it | M |
| FR-SC-12 | The mini-chat context payload includes selected text, surrounding ~200 words, current section heading, AI-summarised document thesis, and top 3 relevant chunks from the vector store | M |
| FR-SC-15 | Mini-chat output actions: Insert (as tracked change), Save as note, Promote to Source Chat, Dismiss | M |
| FR-SC-17 | The Promote action saves the mini-chat exchange to Source Chat as a named branch, storing the selection text and section heading as branch metadata | M |
FR-PV — Provenance, signing, and verification New
The integrity layer. Every exported document carries an Ed25519
cryptographic signature with a non-binary AI contribution disclosure,
publicly verifiable at verify.ekdoti.co without an account.
| ID | Requirement | P |
|---|---|---|
| FR-PV-01 | Ed25519 cryptographic signature generated for every exported document | M |
| FR-PV-02 | Signature payload: SHA-256 hash, anonymised user ID, ISO 8601 timestamp, AI contribution score (0.0–1.0), AI breakdown JSON, session ID | M |
| FR-PV-03 | AI contribution score is a composite of keystroke vs paste ratio, AI assist invocation count, rewrite ratio, word count velocity, and large paste event count | M |
| FR-PV-04 | Signature embedded as DOCX custom property and PDF XMP metadata | M |
| FR-PV-06 | Free public verification API at verify.ekdoti.co requiring no authentication | M |
| FR-PV-09 | Human-readable web form at verify.ekdoti.co allows document upload or signature ID paste with no account required | M |
| FR-PV-10 | AI disclosure label is non-binary, presented as a human-readable breakdown such as "78% human-originated, 22% AI-assisted (3 rewrite requests, 1 large paste event)" | M |
| FR-PV-11 | Ekdotico's Ed25519 public key published at verify.ekdoti.co/public-key in PEM format | M |
FR-RJ — Research journal New v1.1
An auto-maintained notebook that synthesises all chat activity, sources, and writing sessions into a structured document a student can review at any time. Updated via event-driven delta generation, accessible from any workspace as a slide-in drawer.
| ID | Requirement | P |
|---|---|---|
| FR-RJ-01 | Auto-maintained Research Journal per document via event-driven BullMQ delta generation with 5-minute debounce | M |
| FR-RJ-02 | Five named sections: Overview, By Section, Source Insights, Open Questions, Timeline | M |
| FR-RJ-08 | Accessible via slide-in drawer from any workspace tab via persistent header button | M |
| FR-RJ-13 | Open questions unresolved for >24 hours auto-promote as pending tasks in the Tasks tab | M |
| FR-RJ-15 | Journal exportable as standalone PDF or DOCX for portfolio submission or supervisor review | S |
FR-TK — Tasks tab New v1.1
The single source of truth for all work items in a document. AI-extracted from chat exchanges, auto-completed when system events confirm work was done, with full manual override available at every step.
| ID | Requirement | P |
|---|---|---|
| FR-TK-01 | Tasks tab is the single source of truth for all work items; no other module owns task state | M |
| FR-TK-02 | Tasks organised into Phases — named, ordered batches of semantically related tasks | M |
| FR-TK-04 | Tasks extracted from Source Chat AI responses, Mind Map Question nodes, Journal open questions, red-highlighted PDF annotations, and explicit user phrases | M |
| FR-TK-09 | Completion confidence above 0.85 silently auto-completes the task with [AI] attribution badge and timestamp | M |
| FR-TK-10 | Completion confidence between 0.5 and 0.85 sets the task to amber Needs confirmation state with Accept and Dismiss controls | M |
| FR-TK-13 | Full manual control over all tasks: mark complete, mark incomplete, rename, move to a different phase, set priority, delete | M |
| FR-TK-20 | Other modules display read-only task indicators but never own task state | M |
The full requirements catalogue covers fifteen modules. The remaining ten modules — FR-MM, FR-RS, FR-CI, FR-LB, FR-PR, FR-WR, FR-GD, FR-AI, FR-EX, FR-AU — follow the same structure and are documented in the complete Software Design Documentation v1.1.