Product · Requirement specifications
Living specifications with embedded requirements, review, and baselines
ReqSpec uses TipTap-based editing per section with JSON content: paragraphs, RequirementNode, KravomradeNode, FunktionNode etc. Documents are versioned; you can review, finalize, export to Word/PDF, and freeze baselines with diff.

Overview
RequirementSpecDocument, container with metadata (export header/footer JSON).
ReqSpecDocumentVersion, contentJson with sections (id, parentId, order, title, content). Status: draft (0), in review (1), approved (2), approved with actions (3).
Reviewers stored as users and/or user groups.
Comments can be anchored to document, section, or requirement with resolution status (open/resolved/dismissed/noted).
Workflow, baselines, and export
Workflow (API-supported steps)
Edit draft (PUT .../content, only in draft). Send for review (POST .../send-for-review), content materializes (stakeholder/system snapshots). Withdraw/refresh during review. Finalize with outcome: approved, approved_with_action, rejected + protocol text. Export Word/PDF; review protocol PDF when version is in status 2 or 3.
Baselines and diff
POST /reqspec-baseline creates a named baseline with {documentId, versionId} entries; draft versions are materialized in the snapshot. Compare two baselines, or baseline vs live to see what moved since the milestone. UI: BaselineCompareTab with summary and field-level diff.
Exports and templates
Word/PDF uses the document's exportHeaderJson / exportFooterJson and project logo/name. Template tokens include document name, version, status, export date, project name, page number, total pages. Export log shows past exports.
