Requirements Gap Analysis¶
- Status: working document (not part of the released requirements baseline).
- Created: 2026-06-17, against baseline
requirements-v1.0.
This document captures areas the current requirements baseline does not yet cover or
specifies ambiguously. It is the input to change-control rounds, not a requirement
itself: an accepted gap is resolved by adding/amending STR/REQ documents (and ADRs where
a decision is architecturally significant), re-reviewing, and cutting a new baseline
(requirements-v1.1, …) per the
configuration management plan.
Each gap has a stable ID for tracking. The Status column records triage outcome:
open → accepted (will become requirements) / rejected (with rationale) /
resolved (requirements added, names the baseline).
What is already well covered (for context)¶
Mandator/scope separation (RLS), the document life-cycle and review model, audit reproducibility of released versions, and content/blob storage are specified and internally consistent. The gaps below are mostly whole areas not yet addressed, not defects in the above.
Tier 1 — shapes the core data model & security; resolve before building much further¶
| ID | Gap | Why it matters | Likely artifact | Status |
|---|---|---|---|---|
| GAP-01 | Authentication & session management. REQ-API-002 assumes authenticated requests but nothing defines login, SSO/OIDC, session lifetime, or logout. | Cross-cutting; also unblocks RISK-002 (runtime can only connect as lqms_app with a real per-user scope set once identity exists). |
ADR-0011 + STR-016, REQ-AUTH-001..011 | resolved (v1.1) |
| GAP-02 | User account lifecycle. Creating users, deactivating leavers, and preserving a deactivated user's historical approvals/attribution. | User is referenced by every approval and audit event but never specified. |
ADR-0013 + STR-018, REQ-USR-001..011 | resolved (v1.1) |
| GAP-03 | Administration & onboarding. Who creates mandators/scopes/projects, bootstraps the first admin, and maintains catalogs; project setup flow (activate roles → staff → choose policies). | Core daily/admin work; REQ-CAT-001's "authorized users" has no defined admin authorization model. | ADR-0012 + STR-017, REQ-ADM-001..009 | resolved (v1.1) |
| GAP-04 | Electronic signatures. Signing intent/meaning, re-authentication at signing, signature manifestation on the document. | Regulated QMS expectation (ISO 13485; 21 CFR Part 11 / EU Annex 11 if ever in scope). Approvals (REQ-LC-008) record user/role/time but not signature semantics. | ADR-0014 + STR-019, REQ-SIG-001..009 | resolved (v1.1) |
| GAP-05 | Periodic review, effective date & validity. Scheduled re-review (e.g. every N years), effective date distinct from release date, validity/expiry. | ISO 13485 §4.2.4. The life cycle currently has no time-based review or effectivity concept. | ADR-0015 + STR-020, REQ-EFF-001..008 | resolved (v1.1) |
| GAP-06 | Retention & deletion, incl. GDPR. Defined record retention periods; whether anything can ever be deleted; legal hold; right-to-erasure vs. the immutable audit trail. | ISO 13485 §4.2.5 + explicit CH/EU data-protection context. A genuine design tension needing a documented stance (e.g. pseudonymization). | ADR-0016 + STR-021, REQ-DPR-001..010 | resolved (v1.1) |
| GAP-23 | Model the organization's own QMS operations as a first-class internal scope/"product". Represent the operating company as an internal mandator and "QMS Operations" as a scope under it, deriving masters from the global base like any product project — so one process master (e.g. one feedback SOP) serves both product and QMS operations instead of parallel SOP trees. | Removes a major real-world pain (duplicated QMS-vs-product processes); leverages ADR-0002 with little/no schema change (perhaps an internal scope marker). Interacts with GAP-03 (onboarding bootstraps this scope) and GAP-01 (identity). Caveat: regulation may still force conditional handling within a unified process. |
ADR-0010 + STR-015, REQ-SEP-008/009, REQ-REP-004 | resolved (v1.1) |
Tier 2 — needed soon; shape features, not the foundation¶
| ID | Gap | Why it matters | Likely artifact | Status |
|---|---|---|---|---|
| GAP-07 | Notifications & tasks. Review/approval requests, reminders, escalation. | STR-007 (intuitive daily work) depends on it; only base-update notification (REQ-DOC-012) exists. | ADR-0019 + STR-023, REQ-NOT-001..009 | resolved (v1.2) |
| GAP-08 | Performance & capacity targets. Expected #documents/#users/#concurrent, search latency, response times. | Needed to validate architecture (e.g. pgvector scale) and as testable NFRs; arc42 §10 scenarios still TBD. | ADR-0018 + STR-022, REQ-NFR-001/002 | resolved (v1.2) |
| GAP-09 | Availability, backup scheduling, RPO/RTO. REQ-BAK specifies backup capability only — no schedule, frequency, retention, or recovery objectives. | Operational fitness; restore is part of CSV evidence. | ADR-0018 + REQ-NFR-003..006 | resolved (v1.2) |
| GAP-10 | Security NFRs. TLS, encryption at rest (blobs/DB), session timeout, brute-force lockout, secrets management, dependency vulnerability scanning. (Crypto-shredding / per-scope keys from GAP-06 considered here: kept as a documented future option; transparent at-rest encryption adopted instead.) | None specified; security is a stated quality goal. | ADR-0018 + REQ-NFR-007..013 | resolved (v1.2) |
| GAP-11 | i18n completeness. Time zones (audit timestamps across regions), date/number formats, multi-language document content (REQ-UI-002 covers only UI text). | Multi-region CH/EU use. | ADR-0020 + STR-024, REQ-I18N-001..005 | resolved (v1.2) |
| GAP-12 | Ambiguity — REQ-SEP-005 base readability. "Readable for derivation according to configuration" — what governs it (all authenticated users? opt-in scopes?). | Authorization-model gap affecting RLS policy design. | REQ-SEP-010 + REQ-SEP-005 refinement (permission-gated) | resolved (v1.2) |
| GAP-13 | Revoke semantics. Reinstatement of a revoked version? Effect on existing derivations? Does revoke need its own approval? | REQ-LC-002 defines the transition but not its consequences. | REQ-LC-012/013/014 (terminal; notifies derivations; gated/auditable) | resolved (v1.2) |
| GAP-14 | Attachment cardinality. One content blob per version (REQ-DOC-005 implies) vs. records bundling several files. | Affects the version/content data model. | ADR-0017 + REQ-DOC-014/015 + REQ-DOC-005 refinement (multi-part) | resolved (v1.2) |
Tier 3 — record the decision; lower urgency¶
| ID | Gap | Why it matters | Likely artifact | Status |
|---|---|---|---|---|
| GAP-15 | Migration/import from the current Confluence/Jira QMS. | Adoption blocker eventually; not foundational. | ADR-0023 + STR-026, REQ-MIG-001..003 | resolved (v1.2) |
| GAP-16 | Training / read-acknowledgement of controlled documents. | Common QMS capability; may be ruled out of scope. | ADR-0022 + STR-025, REQ-TRN-001..006 (read/ack/questionnaire + role training requirement) | resolved (v1.2) |
| GAP-17 | Document relationships & supersession beyond derive-provenance (WI references SOP; "replaces DOC-X"). | Navigability and audit context. | ADR-0021 + REQ-REL-001..004 | resolved (v1.2) |
| GAP-18 | Search quality acceptance criteria. Measurable bar for search/RAG relevance. | "Good search" is otherwise untestable. | REQ-SRCH-010 (curated benchmark set) | resolved (v1.2) |
| GAP-19 | Accessibility & browser support matrix. WCAG target, supported browsers. | Possible EU obligation; scope clarity. | REQ-UI-005/006 (WCAG 2.2 AA; evergreen) | resolved (v1.2) |
| GAP-20 | Concurrent draft editing/locking. Two users editing one draft: locking vs. optimistic vs. last-write-wins. | Data-loss avoidance. | REQ-DOC-016 (optimistic locking) | resolved (v1.2) |
| GAP-21 | Requirement prioritization (MoSCoW). No priority field; the overview itself defers some scope. | Sequencing a long build / MVP definition. | MoSCoW adopted (README convention); classification at implementation planning | resolved (process) |
| GAP-22 | Validate REQ-REP-001 report content. Its content was AI-drafted, not validated against what auditors actually expect. | Regulatory fitness of the re-evaluation report. | REQ-REP-001 refinement + REQ-REP-005/006 (validated with Nicolas) | resolved (v1.2) |
Triage log¶
Decisions are appended here as gaps are triaged (date, GAP IDs, outcome, resulting STR/REQ/ADR and baseline).
- 2026-06-17 — GAP-23 added & accepted (work first). Decision to model the operating
organization's own QMS operations as a first-class internal scope/"product" so that one
process master serves both product and QMS operations (resolves the duplicated
QMS-vs-product process pain). Detail decisions still open (internal-mandator vs. a
dedicated scope type; the
internalmarker; treatment in re-evaluation report and separation). To be designed as an ADR extending ADR-0002, ahead of GAP-03 (onboarding) and informing GAP-01 (identity). Chosen Tier-1 work order: GAP-23 → GAP-01 → GAP-03 → GAP-02 → GAP-04 → GAP-05 → GAP-06. - 2026-06-17 — GAP-23 resolved (design). Decided: internal-mandator model (mandator
carries an
internalclassification; QMS operations are ordinary PROJECT scopes under it; one master serves product + QMS ops). Captured as ADR-0010 (extends ADR-0002) and STR-015, REQ-SEP-008/009, REQ-REP-004 (pending requirements baseline v1.1). Schema change (mandator.internal) deferred to mandator/admin management (GAP-03). Next: GAP-01 (authentication). - 2026-06-17 — GAP-01 resolved (design). Decided: OIDC-only SSO, pluggable provider
(corporate IdP or bundled Keycloak), no credentials in LQMS; server-side (BFF) sessions
with opaque, revocable, httpOnly/Secure/SameSite cookies + idle/absolute timeouts + CSRF;
OAuth2 bearer for machine/MCP clients; authn≠authz (JIT provisioning, deny-by-default);
per-request scope resolution into the RLS context (closes RISK-002 by design). Captured
as ADR-0011 and STR-016 + REQ-AUTH-001..011 (pending v1.1). Runtime DB wiring to
lqms_appis the implementation follow-up. Next: GAP-03 (administration & onboarding). - 2026-06-17 — GAP-03 resolved (design). Decided: permission-based authorization — fixed closed permission set, configurably mapped to catalog roles; permissions cascade over the scope subtree (global = system admin, mandator = delegated, project = local); admin and content permissions independent (system admin does not implicitly read content → separation preserved); review policies still own life-cycle transitions. Bootstrap: configured break-glass system-admin identity (idempotent, no lock-out); first-run auto-creates global base + internal mandator + QMS-ops scope. Captured as ADR-0012 and STR-017 + REQ-ADM-001..009 (pending v1.1). Rejected: built-in fixed admin roles. Next: GAP-02 (user lifecycle).
- 2026-06-17 — GAP-02 resolved (design). Decided: user identity anchored to a stable OIDC subject; pre-provisioning (invite) + JIT; states invited/active/deactivated; deactivation is a state change never deletion (attribution preserved, prior approvals not invalidated), LQMS-owned status independent of the IdP; reactivation reuses the record; no shared human accounts; pending obligations surfaced for reassignment; erasure deferred to GAP-06. Captured as ADR-0013 and STR-018 + REQ-USR-001..011 (pending v1.1). Remaining Tier 1: GAP-04 (e-signatures), GAP-05 (periodic review/effectivity), GAP-06 (retention/GDPR). Next: GAP-04.
- 2026-06-17 — GAP-04 resolved (design). Decided: electronic signatures as a configurable, Part 11 / Annex 11-capable capability — an approval becomes a signature when the review policy marks the step as signed, with a meaning (authored/reviewed/ approved/released); the signature captures signer + meaning + timestamp + content-hash binding + authentication proof, is immutable, and is manifested (name/date/meaning) in renderings and exports. Re-auth uses a continuous-session step-up model with a configurable window. Captured as ADR-0014 and STR-019 + REQ-SIG-001..009 (pending v1.1). Rejected: lightweight approval-as-signature (not Part 11 defensible). Remaining Tier 1: GAP-05 (periodic review/effectivity), GAP-06 (retention/GDPR). Next: GAP-05.
- 2026-06-17 — GAP-05 resolved (design). Decided: effective date as a derived
attribute (
effective_from, release ≠ effective; currently-effective version derived by date, no new states); per-document-type periodic-review interval with per-document override; periodic review recorded with outcome (confirmed unchanged resets the clock without a new version / revision initiated starts a draft), may require aREVIEWEDsignature; optionalvalid_until; overdue/expiry flagged & escalated, never auto-revoked. Captured as ADR-0015 and STR-020 + REQ-EFF-001..008 (refines REQ-LC-010), pending v1.1. Rejected: effectivity as a new state; automatic hard expiry as default. Last Tier-1 item: GAP-06 (retention / GDPR). - 2026-06-17 — GAP-06 resolved (design). Tier 1 COMPLETE. Reframed after discussion: retention-primary — for regulated records, retention obligations (MDR 10/15y etc.) override the right to erasure during retention; the common response to an erasure request is a documented refusal, not deletion. Decided: data minimization; pseudonymous attribution (PII only in user record, severable); configurable retention per type/scope
- legal hold; deliberate, authorized, audited disposal at end of retention (not automatic); narrow erasure (physical delete or user-record anonymization) for no-retention-basis / non-regulated / end-of-retention data; access + rectification; signature name captured as snapshot (refines REQ-SIG-004). Crypto-shredding / encryption-at-rest deferred to GAP-10. Captured as ADR-0016 and STR-021 + REQ-DPR-001..010 (pending v1.1). All Tier-1 gaps resolved (GAP-23, 01, 03, 02, 04, 05, 06). Next: baseline requirements v1.1 (review the accrued batch), and/or proceed to Tier 2 / implementation.
- 2026-06-17 — requirements baseline v1.1 released. Tier-1 batch reviewed and approved
by Nicolas Burri; pending markers flipped to released, baseline-history recorded in the
requirements README, annotated tag
requirements-v1.1created. Tier ⅔ gaps (GAP-07..22) remain open for future rounds. - 2026-06-18 — GAP-12/13/14 resolved (Tier-2 core clarifications, pending v1.2). GAP-12: base-content readability is permission-gated (global-scope base-read role, or implicit during an authorized DERIVE) — REQ-SEP-010 + REQ-SEP-005 refinement; not "all authenticated". GAP-13: revocation is terminal (re-establish via new version), notifies derivations without changing them, gated by transition permission and optionally approval/signature (REVOKED meaning) — REQ-LC-012/013/014, REQ-SIG-001 refinement. GAP-14: multi-part version content with a manifest hash — ADR-0017, REQ-DOC-014/015 + REQ-DOC-005 refinement. Accruing toward requirements baseline v1.2. Next Tier-2: the NFR block (GAP-08/09/10).
- 2026-06-18 — GAP-08/09/10 resolved (NFR block, pending v1.2). Targets chosen with Nicolas: capacity "small" tier (~100 users/~20 concurrent, ~100k versions, single-node — confirms ADR-0005); performance p95 < 1s, FTS < 1s, RAG a few s; availability ~99.5% business hours, nightly backup (RPO ≤ 24h), RTO ≤ 1 business day; security — TLS, transparent at-rest encryption (crypto-shredding kept as documented future option), secrets management, CI dependency scanning, runtime as lqms_app, security-event audit, brute-force/MFA delegated to IdP. Captured as ADR-0018 and STR-022 + REQ-NFR-001..013; quantified arc42 §10 scenarios. Remaining Tier-2: GAP-07 notifications, GAP-11 i18n.
- 2026-06-18 — GAP-07 resolved (notifications & tasks, pending v1.2). New event-driven
notificationmodule (ADR-0019, extends ADR-0005). Distinct actionable tasks (assigned by role/user, open→done, auto-resolve, reminders + optional escalation) vs. informational notifications; in-app inbox always + pluggable email channel; scope- keyed under RLS; audit trail remains the record of truth. Overdue reviews (REQ-EFF-007) and disposal-due (REQ-DPR-005) surface as tasks. STR-023 + REQ-NOT-001..009; TASK and NOTIFICATION added to arc42 §5/§8.1. Remaining Tier-2: GAP-11 i18n. - 2026-06-18 — GAP-11 resolved (i18n completeness, pending v1.2). Tier 2 COMPLETE.
UTC timestamps stored/displayed-localized and manifested unambiguously on signatures/
audit; locale formatting; document content language per-document with translations
as separate, independently controlled documents linked via
translation-of(one optionally authoritative); language-aware search. ADR-0020 + STR-024 + REQ-I18N-001..005;languageattribute +translation-ofadded to arc42 §8.1. All Tier-2 gaps resolved (GAP-07/08/09/10/11/12/13/14). Next: Tier 3 (GAP-15..22), then baseline v1.2. - 2026-06-18 — Tier 3 triaged (GAP-15..22), pending v1.2. GAP-17 general typed document relationships (ADR-0021, REQ-REL); GAP-16 read-acknowledgement + simple questionnaire + role-training-requirement — middle ground, not full training management (ADR-0022, STR-025, REQ-TRN-001..006); GAP-15 import current released state (ADR-0023, STR-026, REQ-MIG); GAP-18 search-quality benchmark (REQ-SRCH-010); GAP-19 WCAG 2.2 AA + evergreen browsers (REQ-UI-005/006); GAP-20 optimistic locking (REQ-DOC-016); GAP-21 MoSCoW adopted as a requirements convention (classification deferred to implementation planning). GAP-22 remains open — needs QMS-SME input on re-evaluation report content. All gaps resolved except GAP-22. Next: review & baseline requirements v1.2.
- 2026-06-18 — GAP-22 resolved (v1.2). ALL GAPS RESOLVED. Re-evaluation report validated with Nicolas as a management-review template: LQMS auto-fills nine sections it has data for (REQ-REP-005) and provides manual-input placeholders for inputs it doesn't hold — complaints, CAPA, audit findings, supplier/risk, decisions (REQ-REP-006); REQ-REP-001 refined accordingly. No ADR (requirement-content validation). GAP-01..23 all resolved. Next: review & baseline requirements v1.2.