Requirements Traceability Matrix¶
Generated from commit 0a6fc8f6.
299 requirements across 29 groups.
Status counts¶
| Status | Count |
|---|---|
| verified | 212 |
| future | 48 |
| not-applicable | 4 |
| accepted-gap | 22 |
| superseded | 1 |
| GAP | 12 |
| total | 299 |
GAP — untraced requirements (12)¶
No test or implementation citation and no override. These are the actionable traceability gaps.
- REQ-ADM-011 — A freshly installed system shall be fully operable from its bootstrap administrator without out-of-band data manipulati…
- REQ-CAT-008 — Where a guided setup requires catalog entries that do not exist, a caller holding catalog administration shall be offer…
- REQ-MEM-001 — Membership in a mandator shall be a first-class recorded state (invited → accepted / declined / removed); invitation, a…
- REQ-MEM-002 — Membership shall begin only upon the invitee's acceptance; an invitation may carry named responsibilities (scope, role)…
- REQ-MEM-003 — Membership alone shall grant no content access; a member without roles sees nothing, and a non-member cannot observe th…
- REQ-MEM-004 — Invitation by email shall not disclose to the inviter whether the address is already known to the installation, and sha…
- REQ-MEM-005 — Email invitation links shall be single-use, unguessable, stored only as a digest, and expire; expired or unknown links…
- REQ-MEM-006 — Ending a membership shall unassign the person's roles in that mandator and close the membership without affecting the p…
- REQ-TD-001 — A dossier shall assemble released document versions by frozen reference (pins); issuing shall render the merged deliver…
- REQ-TD-002 — A reader who cannot see every pinned element shall receive a freshly rendered partial copy visibly marked as not the re…
- REQ-TD-003 — An issued dossier shall not be deletable; correction is forward-only (clone to a new draft, re-issue as a new version);…
- REQ-UI-027 — The user manual shall ship inside the application, versioned with it; help affordances on a surface shall open the topi…
Implemented but untested (0)¶
Cited in implementation sources but not (yet) referenced by any test — candidates for verification coverage.
None.
PQ — the executable validation journey (ADR-0101)¶
One walk through the intended use, performed against a running installation, contributes PERFORMANCE-qualification evidence beside the isolated tests: where a requirement's Test evidence cell names the tests that check it in isolation, its PQ evidence cell names the station of the walk in which the same requirement was exercised as part of the whole workflow.
| Evidence bundle | v0.9.54-1-g9dc234a7-20260908T150135Z (the latest local run, not promoted) |
| Walk performed at | 2026-09-08T15:01:35Z |
| Product version under test | v0.9.54-1-g9dc234a7 |
| Source revision | 9dc234a7 |
| Stations | 14 of 14 reached their expected result |
| Overall verdict | PASS |
| Requirements carrying PQ evidence | 39 |
| Protocol | backend/api/build/validation-journey/v0.9.54-1-g9dc234a7-20260908T150135Z/journey.md |
1 station of the walk declares NO requirement id — station 10 (Reading who holds which function, and exporting it) — because no requirement in the baseline covers what it exercises. That evidence stands in the protocol; the missing thing is a requirement to carry it.
The bundle above lives in the build output, which is not committed: it is the run this matrix was generated after. The durable reference for a release is the promoted copy under docs/validation/journeys/<version>/.
Matrix¶
REQ-ADM¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-ADM-001 | verified | The system shall define a fixed, closed set of named permissions covering content/functional and administrative capabil… | STR-017; ADR-0012 | catalog/catalog/CatalogSchemaTest.kt catalog/catalog/DocumentTypeAdminServiceTest.kt |
— | persistence/V004__catalog_and_permissions.sql | d23c3fe9 feat(catalog): authorization catalogs + permission model (P…95dc75c7 docs(arch): accept ADR-0012 permission-based authorization… |
| REQ-ADM-002 | verified | Each catalog role shall be configurably associated with a set of permissions; changing the mapping shall require the MA… | STR-006, STR-017; ADR-0012, ADR-0004 | api/api/AdminRoleResourceTest.kt api/e2e/admin-roles.spec.ts api/e2e/screenshots.spec.ts catalog/catalog/DocumentTypeAdminServiceTest.kt catalog/catalog/RoleAdminServiceTest.kt |
— | api/src/app/core/lqms-api.ts api/src/app/core/models.ts api/src/app/features/admin/role-editor-dialog.ts api/src/app/features/admin/roles-page.ts catalog/catalog/person/repository/RoleRepository.kt catalog/catalog/person/service/RoleAdminService.kt persistence/V004__catalog_and_permissions.sql |
2fd0769c feat(catalog,api,webui): roles admin page — catalog CRUD, p…d23c3fe9 feat(catalog): authorization catalogs + permission model (P… |
| REQ-ADM-003 | verified | Holding a role in a scope shall grant that role's permissions within the scope and its descendant scopes; a role held a… | STR-017; ADR-0012 | catalog/catalog/AuthzResolutionTest.kt catalog/catalog/UserAdminServiceTest.kt |
— | catalog/catalog/person/service/UserAdminService.kt persistence/V005__role_assignment_and_resolution.sql |
83201d00 feat(catalog): role assignments + authorization resolution… |
| REQ-ADM-004 | verified | Administrative and content permissions shall be independent; system-administration permissions shall not implicitly gra… | STR-003, STR-017; ADR-0012 | api/api/BlindGovernanceReadResourceTest.kt api/api/FreshInstallReflectionTest.kt api/api/PermissionClassificationTest.kt api/api/ProjectDissolutionFullStackTest.kt api/api/ScopeActivityResourceTest.kt api/api/VirginCatalogBirthFullStackTest.kt api/e2e/admin-scopes.spec.ts api/e2e/scope-config.spec.ts catalog/catalog/AuthzResolutionTest.kt catalog/catalog/DocumentTypeAdminServiceTest.kt catalog/catalog/ScopeProvisioningServiceTest.kt catalog/catalog/UserAdminServiceTest.kt document/document/BlindGovernanceActTest.kt document/document/ImportServiceTest.kt document/document/KeyRuleServiceTest.kt document/document/PortabilityExportServiceTest.kt document/document/ReviewPolicyServiceTest.kt scope/scope/RlsPolicyInventoryTest.kt |
— | api/api/auth/SystemBootstrap.kt api/src/app/core/scope-config-access.ts api/src/app/features/admin/setup-wizard/setup-wizard.ts api/src/app/features/scope-config/scope-config.ts catalog/catalog/person/repository/RoleRepository.kt catalog/catalog/person/service/RoleAdminService.kt catalog/catalog/person/service/UserAdminService.kt catalog/catalog/provisioning/repository/DirectoryRepository.kt catalog/catalog/provisioning/service/DirectoryService.kt catalog/catalog/provisioning/service/ScopeProvisioningService.kt catalog/catalog/types/repository/ActivationRepository.kt catalog/catalog/types/service/DocumentTypeAdminService.kt catalog/catalog/types/service/DocumentTypeDefaultsService.kt document/document/arrival/service/ImportService.kt document/document/core/repository/DocumentRepository.kt document/document/core/service/FolderService.kt document/document/export/service/PortabilityExportService.kt document/document/lifecycle/service/ReviewPolicyService.kt document/document/records/repository/AcknowledgementPolicyRepository.kt document/document/records/service/AcknowledgementPolicyService.kt document/document/setup/service/ScopeSetupReflectionService.kt document/document/setup/service/SetupStatusService.kt document/document/trace/repository/CoverageRuleRepository.kt document/document/trace/repository/DesignKindRepository.kt document/document/trace/service/CoverageRuleService.kt document/document/trace/service/DesignKindService.kt persistence/V005__role_assignment_and_resolution.sql persistence/V078__retire_reserved_permissions.sql persistence/V080__audit_append_assignment_reach.sql persistence/V081__mandator_membership.sql persistence/V085__key_usage_count_on_true_state.sql persistence/V086__blind_governance_acts_on_true_state.sql persistence/V087__manage_mandators_permission.sql persistence/V094__project_arrival_import.sql persistence/V097__role_reference_oracle.sql persistence/V103__type_document_count_on_true_state.sql persistence/V113__project_dissolution.sql persistence/V115__portability_export_permission.sql persistence/V116__dissolution_working_record_line.sql persistence/V121__global_cascade_classification.sql persistence/V126__review_policy_surface_on_true_state.sql scope/scope/EffectiveAuthzRepository.kt scope/scope/ScopeRepository.kt |
dde92cf8 feat(api): idempotent system bootstrap (admin grant, base h…83201d00 feat(catalog): role assignments + authorization resolution… |
| REQ-ADM-005 | accepted-gap | Document life-cycle transitions shall remain governed by review policies (ADR-0003); the permission model shall govern… (Dual-governance umbrella: life-cycle transitions are governed by review policies (tested under REQ-LC-003/006) and everything else by the permission model (REQ-ADM-004 and the resource 403 tests); no single code point carries this umbrella id (ADR-0012/0003).) | STR-002, STR-017; ADR-0012, ADR-0003 | — | — | — | — |
| REQ-ADM-006 | verified | A deployment-configured bootstrap identity shall be granted system administration idempotently on startup (initial setu… | STR-017; ADR-0012 | api/api/BootstrapRunnerTest.kt api/api/FreshInstallReflectionTest.kt api/api/SystemBootstrapTest.kt |
— | — | — |
| REQ-ADM-007 | verified | On first initialization the system shall create the global base scope and an internal mandator with a QMS-operations sc… | STR-015, STR-017; ADR-0012, ADR-0010 | scope/scope/GlobalScopeUniquenessTest.kt | — | persistence/V016__released_base_readability.sql persistence/V018__single_global_scope.sql persistence/V117__base_reader_role.sql persistence/V120__base_library_folder_readability.sql |
— |
| REQ-ADM-008 | future | Onboarding a project/scope shall consist of creating the scope, activating the required catalog roles and document type… (Each constituent onboarding operation (catalog activation, role staffing, review-policy config) exists, is permission-gated and tested (REQ-ADM-001..004, REQ-LC rows); the composed onboarding flow does not yet have one end-to-end verification. The scope/mandator-creation surface itself now EXISTS (ADR-0097: the MANAGE_SCOPES-gated provisioning endpoints; the never-enforced CREATE_SCOPE/CREATE_MANDATOR vocabulary that used to stand in for it was retired by V073). Trigger: the first external/standalone installation. Decision 2026-07-22: defer.) | STR-006, STR-017; ADR-0012, ADR-0004, ADR-0003 | api/api/ValidationJourneyTest.kt | PQ: station 1 (Registering a customer and a project) | persistence/V073__retire_dead_letter_permissions.sql | d5c22c74 docs(user-guide): follow-along tutorial — from zero to a re… |
| REQ-ADM-009 | verified | All administrative actions (scope/mandator/user/catalog/policy changes and role assignments) shall produce audit events. | STR-009, STR-017; ADR-0012, REQ-AUD-001 | api/api/AdminDocumentTypeResourceTest.kt api/api/ScopeGovernanceResourceTest.kt api/api/ScopeProvisioningResourceTest.kt api/api/ValidationJourneyTest.kt catalog/catalog/DocumentTypeAdminServiceTest.kt catalog/catalog/DocumentTypeDefaultsServiceTest.kt catalog/catalog/RoleAdminServiceTest.kt catalog/catalog/ScopeProvisioningServiceTest.kt catalog/catalog/UserAdminServiceTest.kt document/document/ReviewPolicyServiceTest.kt |
PQ: station 12 (Reading the project's own activity trail, and exporting it) PQ: station 14 (Inviting a person into the customer's organization, and their accepting it) |
catalog/catalog/provisioning/service/ScopeProvisioningService.kt catalog/catalog/types/service/DocumentTypeAdminService.kt |
9dc234a7 fix(provisioning): the birth activation gets no setting-up…49219f41 feat(api,document): journey station 12 — the activity trail…2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014…619d859b feat(catalog,identity,api,webui): admin user lifecycle — in… |
| REQ-ADM-010 | verified | The oversight/traceability views shall be governed by two scope permissions added to the fixed permission set (REQ-ADM-… | STR-003, STR-011, STR-027; ADR-0080, ADR-0012 | document/document/TraceabilityPermissionSeparationTest.kt | — | — | f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
| REQ-ADM-011 | GAP | A freshly installed system shall be fully operable from its bootstrap administrator without out-of-band data manipulati… | STR-017; ADR-0106, ADR-0107, ADR-0108 | — | — | — | 25fe83b2 docs(requirements): baseline v2.0 — the five post-v1.9 func… |
| REQ-ADM-012 | verified | The system shall provide an admin System page whose sections render per their own gates: the backup act + evidence (EXP… | STR-010, STR-015; ADR-0116 | api/api/AdminSystemResourceTest.kt backup/backup/SystemJobHeartbeatServiceTest.kt |
— | api/api/backup/AdminSystemResource.kt backup/backup/SystemJobHeartbeatService.kt |
de8db2af docs(requirements): baseline v2.1 — the ADR-0116 delta stam…efe6223a feat(backup,api,webui,persistence,deploy): ADR-0116 realize…80804346 docs(requirements): REQ-BAK-006/007 + REQ-ADM-012 — the ADR… |
REQ-API¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-API-001 | accepted-gap | All system functionality shall be exposed via a REST API; the frontend shall use no other channel. (All functionality is REST under /api (ADR-0005/0007) and the SPA consumes only that API (driven end to end by FullStackBrowserSmokeTest); "no other channel" is a structural property without a unit-test carrier.) | STR-013; ADR-0005, ADR-0007 | — | — | — | — |
| REQ-API-002 | verified | Every API request shall be authenticated and executed under the requesting user's permissions; RLS shall apply to all A… | STR-003; ADR-0002 | api/api/AuthBoundaryTest.kt api/api/KeycloakIntegrationTest.kt scope/scope/AuthorizedRequestContextTest.kt |
— | — | — |
| REQ-API-003 | verified | The API shall expose the requesting user's effective permissions per resource so clients can reflect them without dupli… | STR-007; ADR-0007 | api/api/DirectoryResourceTest.kt | — | — | — |
| REQ-API-004 | verified | The API shall be documented in an OpenAPI specification generated from the implementation. | STR-013, STR-014 | api/api/OpenApiSpecTest.kt | — | — | 2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D…b24fe8fb feat(api): OpenAPI spec generated from the implementation (…c1bc7053 feat(api): generate OpenAPI spec from the implementation (R… |
| REQ-API-005 | future | The API layer shall be structured so an MCP interface can be added as an additional consumer of the same services, subj… (MCP interface is a Later capability (release-plan.md); the ADR-0005 module structure (thin REST over shared services with service-layer enforcement) is the planned extension point.) | STR-013; ADR-0005 | — | — | — | — |
| REQ-API-006 | verified | The system shall expose a product version (plain semver, per the release ritual) via GET /api/version — a productVersio… | STR-014; ADR-0090 | api/e2e/build-info.spec.ts | — | — | f0691e82 docs(requirements): v1.8 delta PREPARED — 9 rows, all verif…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
REQ-AUD¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-AUD-001 | verified | Every life-cycle transition, every create/modify/delete of a record or security-relevant configuration, and every secur… | STR-009; §8.1 | api/api/ValidationJourneyTest.kt audit/audit/ScopeActivityServiceTest.kt catalog/catalog/DirectoryServiceTest.kt document/document/AuditEventSchemaTest.kt document/document/DocumentServiceTest.kt document/document/PdfExportServiceTest.kt document/document/ValidationAxisSaveTest.kt |
PQ: station 12 (Reading the project's own activity trail, and exporting it) PQ: station 14 (Inviting a person into the customer's organization, and their accepting it) |
audit/audit/AuditEventRepository.kt audit/audit/AuditModule.kt audit/audit/ScopeActivityService.kt catalog/catalog/provisioning/service/DirectoryService.kt catalog/catalog/types/service/DocumentTypeAdminService.kt document/document/core/service/DocumentService.kt document/document/trace/service/DesignKindService.kt persistence/V011__audit_event.sql persistence/V129__audit_event_insertion_order.sql search/search/SearchService.kt |
49219f41 feat(api,document): journey station 12 — the activity trail…39e524f4 feat(catalog,document): config-change audit events — MAY_DE…115734a1 feat(catalog,document): audit the three unaudited config su…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-AUD-002 | verified | Audit events shall be append-only: no interface, including administrative ones, shall update or delete them. | STR-009 | document/document/AuditEventSchemaTest.kt | — | audit/audit/AuditEventRepository.kt document/document/trace/service/DesignKindService.kt persistence/V011__audit_event.sql persistence/V074__audit_event_scope_activity_index.sql persistence/V075__audit_event_scope_entity_read.sql persistence/V080__audit_append_assignment_reach.sql persistence/V086__blind_governance_acts_on_true_state.sql persistence/V088__version_release_stamp.sql persistence/V102__system_maintenance_surface.sql persistence/V106__working_record_tripwire.sql persistence/V107__version_submit_stamp.sql persistence/V128__audit_append_requires_genuine_reach.sql persistence/V134__organization_dissolution_residue.sql |
b2223784 feat(document): Phase 3 slices 3.3-3.5 — version, content_p… |
| REQ-AUD-003 | verified | For any released version, the system shall reproduce on demand: the exact content (via hash), all approvals (user, role… | STR-009; ADR-0001, ADR-0003 | api/e2e/documents.spec.ts document/document/DocumentServiceTest.kt document/document/LifecycleServiceTest.kt storage/storage/FilesystemContentStoreTest.kt |
— | api/api/document/DocumentResource.kt api/src/app/core/models.ts document/document/core/service/DocumentService.kt persistence/V131__version_revocation_stamp.sql |
3b4a09c2 docs(validation): refresh mock-audit walkthrough to shipped…2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014… |
| REQ-AUD-004 | verified | Audit events shall be queryable and exportable per scope by authorized users. | STR-009, STR-011 | api/api/ValidationJourneyTest.kt audit/audit/ScopeActivityServiceTest.kt document/document/DocumentServiceTest.kt |
PQ: station 12 (Reading the project's own activity trail, and exporting it) | audit/audit/AuditEventRepository.kt persistence/V011__audit_event.sql persistence/V129__audit_event_insertion_order.sql |
49219f41 feat(api,document): journey station 12 — the activity trail… |
| REQ-AUD-005 | verified | Audit events shall capture field-level changes (old → new values) for mutable records and security-relevant configurati… | STR-009; §8.8 | architecture-tests/architecture/AuditActionVocabularyCensusTest.kt catalog/catalog/DirectoryServiceTest.kt catalog/catalog/DocumentTypeAdminServiceTest.kt catalog/catalog/RetentionRuleServiceTest.kt document/document/AuditEventSchemaTest.kt document/document/DocumentServiceTest.kt document/document/ReviewPolicyServiceTest.kt document/document/ReviewSettingsServiceTest.kt document/document/ValidationAxisSaveTest.kt |
— | catalog/catalog/provisioning/repository/RetentionRuleRepository.kt catalog/catalog/provisioning/service/RetentionRuleService.kt catalog/catalog/types/repository/ActivationRepository.kt catalog/catalog/types/repository/DocumentTypeRepository.kt catalog/catalog/types/service/DocumentTypeAdminService.kt document/document/core/repository/DocumentRepository.kt document/document/core/service/DocumentMetadataService.kt document/document/core/service/DocumentService.kt document/document/core/service/FolderService.kt document/document/lifecycle/service/ReviewPolicyService.kt document/document/lifecycle/service/ReviewSettingsService.kt document/document/records/service/AcknowledgementPolicyService.kt persistence/V011__audit_event.sql persistence/V125__draft_save_points.sql |
3173261b fix(persistence,audit,backup,notification,catalog,document)…c8ac3cf6 docs(planning): catalog verification 3/3 — declineByToken +…39e524f4 feat(catalog,document): config-change audit events — MAY_DE…115734a1 feat(catalog,document): audit the three unaudited config su…85793870 feat(document): Phase 3 slice 3.7 (part 2) — editDraft + fr…b2223784 feat(document): Phase 3 slices 3.3-3.5 — version, content_p…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-AUD-006 | accepted-gap | The system shall produce, on demand, a complete inspection copy of a record comprising its content, full transition/cha… (Substance realized today: content PDFs (ADR-0074/0083) + the queryable audit trail (DocumentService.auditTrail, tested under REQ-AUD-003 carriers) cover content, history and approvals; the single human-readable inspection ARTIFACT (one dossier rendering all of it) is not built. Re-entry trigger: the ADR-0083 dossier arc ('reviewer's copy'). Decision 2026-07-22: keep as known gap.) | STR-009, STR-011; ADR-0014 | api/e2e/documents.spec.ts document/document/DocumentServiceTest.kt |
— | api/api/document/DocumentResource.kt api/src/app/core/models.ts document/document/core/service/DocumentService.kt persistence/V011__audit_event.sql persistence/V131__version_revocation_stamp.sql |
3b4a09c2 docs(validation): refresh mock-audit walkthrough to shipped…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
REQ-AUTH¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-AUTH-001 | verified | All user authentication shall be delegated to an external OIDC provider; LQMS shall not store user passwords or second-… | STR-016; ADR-0011 | api/api/KeycloakIntegrationTest.kt api/api/ValidationJourneyTest.kt |
PQ: station 13 (Reading the setup health and signing out) | identity/identity/IdentityProviderAdmin.kt | 78434617 feat(api): OIDC web-app/BFF auth + authenticated /me with J…e7448848 docs(arch): accept ADR-0011 authentication via OIDC SSO + B… |
| REQ-AUTH-002 | verified | LQMS shall authenticate against any standards-compliant OIDC provider, configured per deployment (e.g. | STR-016; ADR-0011 | api/api/KeycloakIntegrationTest.kt | — | identity/identity/IdentityProviderAdmin.kt | — |
| REQ-AUTH-003 | verified | The web client shall use a server-side session (BFF): LQMS performs the OIDC Authorization Code flow with PKCE and hold… | STR-016; ADR-0011 | api/api/FullStackBrowserSmokeTest.kt | — | — | — |
| REQ-AUTH-004 | accepted-gap | The session cookie shall be encrypted with a server-held key, httpOnly, Secure and SameSite, carrying no client-readabl… (Cookie encryption/httpOnly/Secure/SameSite and the no-server-session-store model are Quarkus OIDC configuration per ADR-0028 (application.properties), not application code; per-request revocation teeth are tested under REQ-AUTH-006.) | STR-003, STR-016; ADR-0011, ADR-0028 | — | — | — | 9db4f401 docs(req): release requirements-v1.4 baseline85a60c48 docs(adr): ADR-0028 — stateless encrypted token-state cookie78434617 feat(api): OIDC web-app/BFF auth + authenticated /me with J… |
| REQ-AUTH-005 | accepted-gap | Sessions shall enforce a configurable idle timeout and absolute maximum lifetime, after which re-authentication is requ… (Session idle timeout and absolute maximum lifetime are enforced by the IdP (Keycloak SSO Session Idle/Max), honored by LQMS through the ADR-0028 token-refresh path — the same IdP-delegation pattern accepted for REQ-AUTH-004/007; documented in the deployment docs. Decision 2026-07-22: accepted-gap, no app-side timers.) | STR-016; ADR-0011 | — | — | — | — |
| REQ-AUTH-006 | verified | Administrative revocation of access (user deactivation or role removal) shall take effect on the user's next request th… | STR-016; ADR-0011, ADR-0028 | api/api/DeactivatedUserAccessTest.kt api/api/FullStackBrowserSmokeTest.kt api/api/ValidationJourneyTest.kt |
PQ: station 13 (Reading the setup health and signing out) | api/api/auth/AuthenticatedUserService.kt | 9db4f401 docs(req): release requirements-v1.4 baselinef9544324 feat(identity): require verified email for invite binding;…b6995111 docs+config: reconcile design record with ADR-0028; restric…560077e3 feat(api): reject deactivated users per request (REQ-AUTH-0…85a60c48 docs(adr): ADR-0028 — stateless encrypted token-state cookie78434617 feat(api): OIDC web-app/BFF auth + authenticated /me with J… |
| REQ-AUTH-007 | accepted-gap | State-changing requests shall be protected against CSRF (SameSite plus an anti-CSRF token or required custom header). (CSRF control realized per ADR-0033: SameSite=Lax session cookie + JSON-only mutations (config/framework property, no app-code carrier; no token filter by decision).) | STR-003; ADR-0011 | — | — | — | — |
| REQ-AUTH-008 | verified | Authentication shall not grant authorization: an authenticated user with no role assignment shall have no access to any… | STR-003; ADR-0011, ADR-0009 | api/api/AuthBoundaryTest.kt identity/identity/UserProvisioningTest.kt scope/scope/AuthorizedRequestContextTest.kt |
— | api/api/auth/MeResource.kt identity/identity/UserProvisioning.kt identity/identity/UserRepository.kt scope/scope/AuthorizedRequestContext.kt |
b6995111 docs+config: reconcile design record with ADR-0028; restric…78434617 feat(api): OIDC web-app/BFF auth + authenticated /me with J…27d4cef0 feat(scope): authn->authz->RLS request bridge (REQ-AUTH-010)2d55516d feat(identity): JIT-provision / bind service for OIDC ident… |
| REQ-AUTH-009 | verified | On first successful authentication a user record shall be provisioned (JIT), keyed to a stable IdP subject identifier,… | STR-006; ADR-0011, ADR-0063 | api/api/DocumentResourceTest.kt api/api/KeycloakIntegrationTest.kt api/api/MeResourceTest.kt catalog/catalog/MembershipEmailInviteTest.kt identity/identity/UserProvisioningTest.kt |
— | api/api/auth/AuthenticatedUserService.kt api/api/auth/MeResource.kt catalog/catalog/membership/service/MembershipService.kt catalog/catalog/person/repository/UserAdminRepository.kt identity/identity/UserProvisioning.kt |
78434617 feat(api): OIDC web-app/BFF auth + authenticated /me with J…2d55516d feat(identity): JIT-provision / bind service for OIDC ident… |
| REQ-AUTH-010 | verified | On each authenticated request LQMS shall resolve the user's authorized scope set from role assignments and apply it as… | STR-003; ADR-0011, ADR-0009 | api/api/DocumentResourceTest.kt api/api/KeycloakIntegrationTest.kt scope/scope/AuthorizedRequestContextTest.kt |
— | scope/scope/AuthorizedRequestContext.kt | 27d4cef0 feat(scope): authn->authz->RLS request bridge (REQ-AUTH-010) |
| REQ-AUTH-011 | verified | API clients shall authenticate by OAuth2 bearer token validated against the configured OIDC provider — signature/JW… | STR-013; ADR-0011, ADR-0005 | api/api/AuthenticatedUserServiceTest.kt api/api/WrongAudienceTokenTest.kt |
— | api/api/auth/AuthExceptionMappers.kt api/api/auth/AuthenticatedUserService.kt |
d92857ff docs(process,traceability,planning): RISK-008/009 controls…914a234c fix(document,catalog,audit,api,scope): the review wave — fo…218e6931 feat(api): validate OIDC token audience (REQ-AUTH-011 harde…ceb0f25a feat(api): OIDC hybrid mode (bearer + BFF) + Keycloak integ… |
REQ-BAK¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-BAK-001 | accepted-gap | The system shall create a full backup as a zip archive containing all data required to restore the entire installation. (Realized by the deploy-side backup script (deploy/backup.sh: blobs-first-then-DB, pg_dump -Fc, Keycloak realm export, manifest, off-box copy, 35-day prune) — deploy tooling outside the code-scan globs; ADR-0060 B-1a. (Supersedes the 2026-07-05 empty-module note.)) | STR-010; ADR-0060 | — | — | backup/backup/BackupModule.kt persistence/V102__system_maintenance_surface.sql |
— |
| REQ-BAK-002 | future | The system shall create a per-scope backup as a self-contained zip archive (database content plus all referenced blobs… (Per-scope backup archive — operational backup/restore, future increment (not in MVP, release-plan.md; ADR-0002 isolation).) | STR-010; ADR-0002, ADR-0060 | — | — | — | — |
| REQ-BAK-003 | accepted-gap | Backups shall be restorable on the same or a different server, yielding a fully functional state; the search index may… (Realized by deploy/restore.sh + the weekly deploy/verify-backup.sh restore rehearsal (migrations/health/manifest-SHA/blob-rehash/ref-closure/search) — deploy tooling outside the code-scan globs; ADR-0060 B-2a.) | STR-010; ADR-0006, ADR-0060 | — | — | — | — |
| REQ-BAK-004 | accepted-gap | Backup creation shall verify blob integrity (re-hash and compare) and report any mismatch. (Realized: backup.sh re-hashes every blob in the copy pass and verify-backup.sh re-hashes the restored store — deploy tooling outside the code-scan globs; ADR-0060.) | STR-009; ADR-0001, ADR-0060 | — | — | storage/storage/BackupArchiveStore.kt storage/storage/FilesystemBackupArchiveStore.kt |
6c4e17b8 feat(deploy): backup arc — ordered backup, restore runbook,… |
| REQ-BAK-005 | future | Per-scope backups shall contain no data of other scopes. (Per-scope backup contains no other scope's data — verified once per-scope backup (BAK-002) is built; ADR-0002.) | STR-003; ADR-0002 | — | — | — | — |
| REQ-BAK-006 | verified | The system shall offer an in-app, EXPORT_BACKUP-gated backup act: asynchronously executed (one at a time — a concurrent… | STR-010; ADR-0116, ADR-0060, ADR-0018 | api/api/AdminSystemResourceTest.kt backup/backup/BackupServiceTest.kt |
— | api/api/backup/AdminSystemResource.kt | de8db2af docs(requirements): baseline v2.1 — the ADR-0116 delta stam…efe6223a feat(backup,api,webui,persistence,deploy): ADR-0116 realize…80804346 docs(requirements): REQ-BAK-006/007 + REQ-ADM-012 — the ADR… |
| REQ-BAK-007 | verified | The system shall present backup EVIDENCE on the admin System surface: the last recorded backup (time, size, blob count,… | STR-010, STR-009; ADR-0116 | api/api/AdminSystemResourceTest.kt backup/backup/BackupServiceTest.kt |
— | api/api/backup/AdminSystemResource.kt | de8db2af docs(requirements): baseline v2.1 — the ADR-0116 delta stam…efe6223a feat(backup,api,webui,persistence,deploy): ADR-0116 realize…80804346 docs(requirements): REQ-BAK-006/007 + REQ-ADM-012 — the ADR… |
REQ-CAT¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-CAT-001 | verified | Roles shall be defined in a global catalog (name, description, translations), maintainable by authorized users without… | STR-006; ADR-0004 | catalog/catalog/CatalogSchemaTest.kt | — | persistence/V004__catalog_and_permissions.sql | d23c3fe9 feat(catalog): authorization catalogs + permission model (P… |
| REQ-CAT-002 | verified | Document types shall be defined in a global catalog including type prefix, numbering mode, and translations. | STR-001; ADR-0004 | api/api/AdminDocumentTypeResourceTest.kt api/api/OpenApiSpecTest.kt api/e2e/admin-document-types.spec.ts api/e2e/screenshots.spec.ts catalog/catalog/CatalogSchemaTest.kt catalog/catalog/DocumentTypeAdminServiceTest.kt |
— | api/api/platform/ServiceProducers.kt api/api/types/AdminDocumentTypeResource.kt api/src/app/app.routes.ts api/src/app/core/lqms-api.ts api/src/app/features/admin/document-types-page.ts catalog/catalog/types/service/DocumentTypeAdminService.kt persistence/V004__catalog_and_permissions.sql |
d23c3fe9 feat(catalog): authorization catalogs + permission model (P… |
| REQ-CAT-003 | verified | Each scope shall activate the subset of catalog roles and document types it uses; non-activated entries shall not appea… | STR-006, STR-007; ADR-0004 | api/api/ValidationJourneyTest.kt catalog/catalog/DirectoryServiceTest.kt |
PQ: station 1 (Registering a customer and a project) | api/api/types/AdminDocumentTypeResource.kt catalog/catalog/types/service/DocumentTypeAdminService.kt persistence/V005__role_assignment_and_resolution.sql |
— |
| REQ-CAT-004 | verified | Users shall be assignable to activated roles per scope; one user may hold multiple roles in the same scope. | STR-006; ADR-0004 | api/api/ValidationJourneyTest.kt catalog/catalog/AuthzResolutionTest.kt |
PQ: station 1 (Registering a customer and a project) PQ: station 2 (Staffing the functions and naming who is accountable) PQ: station 14 (Inviting a person into the customer's organization, and their accepting it) |
catalog/catalog/person/repository/RoleRepository.kt persistence/V005__role_assignment_and_resolution.sql persistence/V015__effective_roles_function.sql persistence/V037__scope_users_function.sql |
83201d00 feat(catalog): role assignments + authorization resolution… |
| REQ-CAT-005 | verified | Review policies shall only reference catalog roles; activating a policy shall be rejected if it references roles not ac… | STR-002; ADR-0004 | catalog/catalog/AuthzResolutionTest.kt document/document/ReviewPolicyServiceTest.kt |
— | catalog/catalog/person/repository/RoleRepository.kt catalog/catalog/person/repository/UserAdminRepository.kt persistence/V005__role_assignment_and_resolution.sql persistence/V117__base_reader_role.sql |
6e517ca5 fix(catalog,document): humanize user-facing "not activated"…b6f5d429 fix(webui): assignment role picker offers only the scope's…83201d00 feat(catalog): role assignments + authorization resolution… |
| REQ-CAT-006 | future | The derive operation shall validate that all roles referenced by the applicable review policy are activated (and staffe… (The derive-time review-policy role-fit validation/prompt is a deferred slice by the code's own record (DeriveService: 'the review-policy-fit prompt is a later slice'); the existing CAT-006-tagged guard covers type activation only, a different property. ADR-0034.) | STR-004; ADR-0004 | document/document/DocumentServiceTest.kt | — | catalog/catalog/person/repository/RoleRepository.kt catalog/catalog/types/repository/ActivationRepository.kt document/document/core/service/DocumentService.kt document/document/lifecycle/service/DeriveService.kt document/document/lifecycle/service/InstantiateService.kt persistence/V005__role_assignment_and_resolution.sql persistence/V117__base_reader_role.sql |
97c08195 test(traceability): implemented-untested backfill — 5 of 7…7070565a test(traceability): backfill REQ citations for 5 impl-untes…33371734 docs(adr): ADR-0031 (proposed) — base-readability enforceme…83201d00 feat(catalog): role assignments + authorization resolution… |
| REQ-CAT-007 | verified | Free-form, scope-local role definitions shall not be possible. | STR-006; ADR-0004 | catalog/catalog/CatalogSchemaTest.kt | — | catalog/catalog/person/repository/RoleRepository.kt | 97c08195 test(traceability): implemented-untested backfill — 5 of 7…7070565a test(traceability): backfill REQ citations for 5 impl-untes… |
| REQ-CAT-008 | GAP | Where a guided setup requires catalog entries that do not exist, a caller holding catalog administration shall be offer… | STR-006; ADR-0004 (decisions: docs/planning/feedback-2026-08-06.md #9/#11/#13) | — | — | — | 25fe83b2 docs(requirements): baseline v2.0 — the five post-v1.9 func… |
REQ-DOC¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-DOC-001 | verified | Every document shall belong to exactly one scope and have exactly one document type from the types activated in that sc… | STR-001, STR-003; ADR-0002, ADR-0004 | api/api/ValidationJourneyTest.kt document/document/DocumentSchemaTest.kt |
PQ: station 4 (Writing a controlled procedure) | persistence/V007__document.sql | 1be7cf4d feat(document): Phase 3 slice 3.1 — document table + first… |
| REQ-DOC-002 | verified | Every document shall carry an immutable, human-readable document ID of the form [ |
STR-001; §8.1 | api/api/DocumentResourceTest.kt api/api/ValidationJourneyTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentSchemaTest.kt document/document/DocumentServiceTest.kt |
PQ: station 4 (Writing a controlled procedure) | catalog/catalog/types/service/DocumentTypeAdminService.kt document/document/arrival/service/ImportService.kt document/document/core/repository/DocumentRepository.kt document/document/core/service/DocumentService.kt persistence/V007__document.sql persistence/V012__draft_content_and_numbering.sql |
c7ae9fe8 fix(document): Phase 3 review fixes — permission gating + c…1be7cf4d feat(document): Phase 3 slice 3.1 — document table + first…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni… |
| REQ-DOC-003 | verified | The designator shall be an auto-sequence number (per scope and type) or a validated slug ([A-Z0-9_], length-limited, re… | STR-001; §8.1 | api/api/ValidationJourneyTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentServiceTest.kt |
PQ: station 4 (Writing a controlled procedure) | api/api/types/AdminDocumentTypeResource.kt api/src/app/core/models.ts api/src/app/features/admin/document-types-page.ts api/src/app/features/admin/setup-wizard/setup-wizard.ts catalog/catalog/types/service/DocumentTypeAdminService.kt document/document/core/repository/DocumentRepository.kt document/document/core/service/DocumentService.kt persistence/V004__catalog_and_permissions.sql persistence/V007__document.sql persistence/V012__draft_content_and_numbering.sql |
c7ae9fe8 fix(document): Phase 3 review fixes — permission gating + c… |
| REQ-DOC-004 | verified | A document shall consist of an ordered series of versions; every version shall record its author, life-cycle state, and… | STR-001, STR-009; ADR-0003 | api/api/FullStackBrowserSmokeTest.kt api/api/ValidationJourneyTest.kt document/document/DocumentServiceTest.kt document/document/DocumentVersionSchemaTest.kt |
PQ: station 4 (Writing a controlled procedure) | document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt persistence/V009__document_version.sql |
77190a84 fix(api-test): fullstack smoke — count version rows, not mu…87d61045 test(e2e): revision-flow full-stack browser E2E (CSV eviden… |
| REQ-DOC-005 | verified | Version content shall be either authored in-tool (structured content) or uploaded file(s); both shall behave identicall… | STR-001, STR-007; ADR-0045, ADR-0057/0058 | api/api/ValidationJourneyTest.kt document/document/AttachmentServiceTest.kt document/document/ContentPartSchemaTest.kt document/document/PdfExportServiceTest.kt |
PQ: station 4 (Writing a controlled procedure) | document/document/content/service/AttachmentService.kt persistence/V010__content_part.sql persistence/V030__draft_attachment.sql persistence/V048__file_attachments.sql |
af896454 docs(requirements): v1.5 baseline prepared — four-eyes REQ-…7d018e1a docs: currency audit after the 2026-07-03 change wavec7ae9fe8 fix(document): Phase 3 review fixes — permission gating + c…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-DOC-006 | verified | On every content-freezing life-cycle transition, version content shall be serialized to a canonical form, hashed (SHA-2… | STR-009; ADR-0001, ADR-0057 | document/document/DocumentServiceTest.kt | — | document/document/core/service/DocumentService.kt persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql |
— |
| REQ-DOC-007 | verified | The content of a released version shall be reproducible byte-exactly via its hash, and the system shall provide an inte… | STR-009; ADR-0001 | api/api/ArrivalRoundTripFullStackTest.kt document/document/BlobGcRaceTest.kt document/document/DocumentServiceTest.kt document/document/ImportServiceTest.kt storage/storage/FilesystemContentStoreTest.kt |
— | document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql storage/storage/ContentStore.kt |
85793870 feat(document): Phase 3 slice 3.7 (part 2) — editDraft + fr…b2ad02e4 feat(storage): Phase 3 slice 3.6 — content-addressed blob s… |
| REQ-DOC-008 | verified | Blob storage shall be accessed exclusively through a storage interface with a file-system implementation; an S3-compati… | STR-013; ADR-0001, ADR-0005 | storage/storage/FilesystemContentStoreTest.kt | — | storage/storage/ContentStore.kt | — |
| REQ-DOC-009 | verified | The blob directory layout shall be partitioned by scope; content shall never be deduplicated across scopes. | STR-003; ADR-0001 | document/document/BlobGcSweepServiceTest.kt document/document/DisposalServiceTest.kt scope/scope/BlobQuarantineRlsSeparationTest.kt storage/storage/FilesystemContentStoreTest.kt |
— | document/document/blob/repository/BlobGcRepository.kt document/document/content/repository/AttachmentRepository.kt storage/storage/ContentStore.kt storage/storage/FilesystemContentStore.kt |
b2ad02e4 feat(storage): Phase 3 slice 3.6 — content-addressed blob s… |
| REQ-DOC-010 | verified | The derive operation shall copy the full content of a released source version into the target scope as a new document… | STR-004; ADR-0002 | api/api/DeriveResourceTest.kt document/document/DeriveServiceTest.kt |
— | document/document/lifecycle/service/DeriveService.kt persistence/V017__relationships_and_derive_source.sql |
293c748a feat(document): copy-on-derive DeriveService (ADR-0031 slic…33371734 docs(adr): ADR-0031 (proposed) — base-readability enforceme… |
| REQ-DOC-011 | verified | Derived documents shall inherit the source's full document ID unchanged. | STR-004; §8.1 | document/document/DeriveServiceTest.kt | — | document/document/lifecycle/service/DeriveService.kt persistence/V017__relationships_and_derive_source.sql |
293c748a feat(document): copy-on-derive DeriveService (ADR-0031 slic…33371734 docs(adr): ADR-0031 (proposed) — base-readability enforceme… |
| REQ-DOC-012 | verified | When a new version of a derivation source is released, the system shall notify the affected scopes; derived documents s… | STR-005; ADR-0002 | notification/notification/FanoutDeploymentCheckTest.kt notification/notification/SourceFanoutTest.kt |
— | document/document/lifecycle/service/DeriveService.kt notification/notification/FanoutDeploymentCheck.kt persistence/V020__source_event_fanout.sql persistence/V021__fanout_notifications_and_hardening.sql |
0e7aa06c docs: ADR-0035 (fan-out contract as shipped) + review-round…ccc5d088 feat(api): derive REST endpoint (ADR-0031 slice 3)33371734 docs(adr): ADR-0031 (proposed) — base-readability enforceme… |
| REQ-DOC-013 | verified | A garbage-collection job shall remove blobs no longer referenced by any version; referenced blobs shall never be delete… | STR-009; ADR-0001, ADR-0092 | document/document/BlobGcRaceTest.kt document/document/BlobGcSweepServiceTest.kt document/document/BlobHashColumnInventoryTest.kt document/document/DisposalServiceTest.kt scope/scope/BlobQuarantineRlsSeparationTest.kt |
— | api/api/blob/BlobGcScheduler.kt api/api/platform/ServiceProducers.kt document/document/blob/repository/BlobGcRepository.kt document/document/blob/service/BlobGcSweepService.kt document/document/records/service/DisposalService.kt persistence/V065__blob_quarantine.sql storage/storage/ContentStore.kt |
396eec8d fix(document): disposal blob-deletion consults all four blo…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D…673d4c24 feat(document,storage,api): orphan-blob GC with quarantine…9a8e0394 feat(document,storage,api): orphan-blob GC with a quarantin… |
| REQ-DOC-014 | verified | A version's content shall be an ordered set of one or more named content parts, each stored as an immutable blob (ADR-0… | STR-001; ADR-0017, ADR-0045, ADR-0069, ADR-0065 | document/document/AttachmentServiceTest.kt document/document/ContentPartSchemaTest.kt |
— | document/document/core/service/DocumentService.kt persistence/V010__content_part.sql persistence/V030__draft_attachment.sql persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql persistence/V048__file_attachments.sql |
af896454 docs(requirements): v1.5 baseline prepared — four-eyes REQ-…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-DOC-015 | verified | The version's integrity/signing hash shall be a manifest hash computed over the ordered set of parts (part name, part h… | STR-009; ADR-0017, ADR-0014, ADR-0025 | api/api/ArrivalRoundTripFullStackTest.kt document/document/AttachmentServiceTest.kt document/document/DocumentServiceTest.kt document/document/ImportServiceTest.kt |
— | document/document/content/service/AttachmentService.kt document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt document/document/lifecycle/service/LifecycleService.kt persistence/V030__draft_attachment.sql persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql persistence/V048__file_attachments.sql |
c7ae9fe8 fix(document): Phase 3 review fixes — permission gating + c…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-DOC-016 | verified | Concurrent edits to a draft shall use optimistic locking: a save based on a stale version token shall be rejected with… | STR-001, STR-007; ADR-0003 | document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentServiceTest.kt |
— | document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt persistence/V009__document_version.sql persistence/V012__draft_content_and_numbering.sql persistence/V125__draft_save_points.sql |
85793870 feat(document): Phase 3 slice 3.7 (part 2) — editDraft + fr…b2223784 feat(document): Phase 3 slices 3.3-3.5 — version, content_p…558e92f1 docs(req): release requirements baseline v1.27c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-DOC-017 | verified | Creating a new version of an existing document shall require a change description (reason/summary of what changed); it… | STR-009; ADR-0001 | api/api/FullStackBrowserSmokeTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentServiceTest.kt |
— | api/src/app/core/lqms-api.ts api/src/app/core/models.ts document/document/core/DocumentValidation.kt document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt document/document/core/service/FolderService.kt document/document/records/repository/DisposalRepository.kt document/document/records/service/PeriodicReviewService.kt persistence/V009__document_version.sql persistence/V052__change_impact.sql |
87d61045 test(e2e): revision-flow full-stack browser E2E (CSV eviden…641e83b6 feat(api): Phase 4 REST endpoints for the document life cyc…3d4295c3 feat(lifecycle): revoke + new-version — document state mach…ac9d977f docs(adr): ADR-0030 — review & life-cycle realization model…c7ae9fe8 fix(document): Phase 3 review fixes — permission gating + c…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-DOC-018 | verified | The storage interface shall support deletion of a blob by hash; disposal (REQ-DPR-005) shall delete a version's content… | STR-021; ADR-0025, ADR-0001 | api/api/DisposalResourceTest.kt document/document/DisposalServiceTest.kt storage/storage/FilesystemContentStoreTest.kt |
— | persistence/V027__disposal.sql storage/storage/ContentStore.kt |
24bfe733 feat(document,storage,api,webui): disposal execution (ADR-0…b2ad02e4 feat(storage): Phase 3 slice 3.6 — content-addressed blob s…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-DOC-019 | verified | The system shall provide, per scope, a folder tree for organizing documents: folder rows are scope-keyed content-plane… | STR-007, STR-003; ADR-0048, ADR-0027 | api/api/FolderResourceTest.kt document/document/FolderSchemaTest.kt document/document/FolderServiceTest.kt scope/scope/RlsSeparationTest.kt |
— | document/document/core/repository/FolderRepository.kt document/document/core/service/FolderService.kt |
a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-DOC-020 | verified | Each document shall have an optional folder placement within its scope (nullable; unset = scope root); all of a documen… | STR-001, STR-009; ADR-0048 | api/api/FolderResourceTest.kt document/document/DeriveServiceTest.kt document/document/FolderServiceTest.kt |
— | document/document/core/service/FolderService.kt persistence/V101__document_folder_position.sql |
— |
| REQ-DOC-021 | verified | Folder create, rename, reorder, and re-parent operations and document moves shall be gated by a dedicated ORGANIZE_DOCU… | STR-003, STR-009; ADR-0048, ADR-0004, REQ-AUD-001 | api/api/FolderResourceTest.kt document/document/FolderServiceTest.kt |
— | document/document/core/service/FolderService.kt persistence/V101__document_folder_position.sql |
— |
| REQ-DOC-022 | verified | Each document type shall carry exactly one category from the fixed set PRESCRIPTIVE, RECORD, TEMPLATE, acting as a capa… | STR-001, STR-020, STR-021; ADR-0049, ADR-0015, ADR-0040, ADR-0004 | api/api/DocumentTypeResourceTest.kt api/api/ReviewSettingsResourceTest.kt catalog/catalog/CatalogSchemaTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | — | — |
| REQ-DOC-023 | verified | A TEMPLATE-category document body may declare template variables in a fenced template-vars block (one `key \ | label \ | document/document/TemplateInstantiationTest.kt document/document/TemplateVarsTest.kt |
— | document/document/lifecycle/service/LifecycleService.kt | — |
| REQ-DOC-024 | verified | Instantiating a template shall be permitted only from a RELEASED, currently-effective TEMPLATE version and shall requir… | STR-004, STR-001, STR-009; ADR-0049 | api/api/InstantiateResourceTest.kt document/document/TemplateInstantiationTest.kt |
— | — | — |
| REQ-DOC-025 | verified | The controlled markdown record format shall support in-text document links of the form text, with an op… | STR-001, STR-009, STR-008; ADR-0051, ADR-0057 | api/api/DocumentResolveResourceTest.kt api/e2e/doc-links.spec.ts document/document/DocumentResolveTest.kt |
— | api/src/app/core/markdown.ts | — |
| REQ-DOC-026 | verified | A version's attachments shall fall into two classes: DISPLAY (the sniffed image set — PNG/JPEG and the Excalidraw SVG/s… | STR-001, STR-009; ADR-0069, ADR-0045 | api/api/AttachmentResourceTest.kt api/e2e/file-attachments.spec.ts document/document/AttachmentServiceTest.kt |
— | — | — |
| REQ-DOC-027 | verified | FILE-class attachments shall be download-only: the serving endpoint shall force Content-Disposition: attachment togethe… | STR-009, STR-014; ADR-0069 | api/api/AttachmentResourceTest.kt api/e2e/file-attachments.spec.ts |
— | api/api/backup/AdminSystemResource.kt | — |
| REQ-DOC-028 | verified | Attachments shall share the version content lifecycle: DRAFT-only upload and delete (EDIT_DRAFT-gated, size- and count-… | STR-001, STR-003, STR-009; ADR-0069, ADR-0065, ADR-0045 | document/document/AttachmentServiceTest.kt | — | — | — |
| REQ-DOC-029 | verified | A diagram shall be a content-tree node referencing a content-part pair — the editable Excalidraw scene.json source plus… | STR-001, STR-007; ADR-0065, ADR-0072, ADR-0057, ADR-0045 | api/e2e/diagram.spec.ts document/document/AttachmentServiceTest.kt |
— | — | — |
| REQ-DOC-030 | verified | A diagram's SVG shall be displayed as an |
STR-014, STR-007; ADR-0065, ADR-0072 | api/e2e/diagram.spec.ts | — | — | — |
| REQ-DOC-031 | verified | Creating a new version shall carry a reason for change (REQ-DOC-017: why the change is made, required) plus an option… | STR-009; ADR-0001 (ISO 13485 §4.2.4) | api/api/EndpointBodyBindingTest.kt api/e2e/change-reason.spec.ts document/document/DocumentServiceTest.kt document/document/LifecycleServiceTest.kt |
— | — | — |
| REQ-DOC-032 | verified | An imported document's version numbering shall continue the source system's sequence (a create may start at a provenanc… | STR-026, STR-009; ADR-0075, ADR-0068 | document/document/DisposalServiceTest.kt document/document/DocumentServiceTest.kt |
— | — | — |
| REQ-DOC-033 | verified | A post-working version — RELEASED (any effective standing) or REVOKED — shall export as a server-rendered PDF via the c… | STR-009, STR-011; ADR-0074, ADR-0057, ADR-0062, ADR-0083 | api/api/ValidationJourneyTest.kt api/e2e/pdf-export.spec.ts document/document/PdfExportServiceTest.kt |
PQ: station 7 (Releasing the effective version) | — | — |
| REQ-DOC-034 | verified | A requirement shall be a keyed block INSIDE a controlled document (tree node requirement, fence :::requirement), never… | non-functional \ | api/e2e/requirement.spec.ts document/document/RequirementLogicTest.kt document/document/RequirementRegistryServiceTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
| REQ-DOC-035 | verified | A requirement item shall be one concrete TYPE of a generalized trace item — a keyed item inside a controlled document d… | STR-001, STR-009, STR-027; ADR-0078, ADR-0077, ADR-0057 | document/document/TraceItemGeneralizationTest.kt | — | — | db5ec3ee feat!(model): the born-free rename — system-requirement, sl… |
| REQ-DOC-036 | verified | The PDF renderer (REQ-DOC-033) shall emit navigation as CONTEXTS of the one render path, not a second surface: every he… | STR-009, STR-011; ADR-0074, ADR-0083, ADR-0051 | document/document/PdfExportServiceTest.kt | — | — | — |
| REQ-DOC-037 | verified | The system shall export a per-scope AUDIT PACK (GET /api/scopes/{scopeId}/audit-pack) that streams a zip containing the… | STR-009, STR-011, STR-003, STR-027; ADR-0083, ADR-0074, ADR-0060, ADR-0069 | api/api/ValidationJourneyTest.kt api/e2e/audit-pack.spec.ts document/document/PdfExportServiceTest.kt |
PQ: station 11 (Exporting the project as an audit pack) | — | — |
| REQ-DOC-038 | verified | The garbage-collection job (REQ-DOC-013) shall delete an orphan blob in TWO phases — quarantine, then purge. | STR-009; ADR-0092, ADR-0025, ADR-0042 | document/document/BlobGcSweepServiceTest.kt document/document/BlobHashColumnInventoryTest.kt |
— | — | f0691e82 docs(requirements): v1.8 delta PREPARED — 9 rows, all verif…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
REQ-DPR¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-DPR-001 | verified | Personal data shall be minimized: LQMS shall store only the identity data necessary for attribution (stable subject, di… | STR-021; ADR-0016 | identity/identity/DataProtectionMinimizationTest.kt | — | identity/identity/UserProvisioning.kt | be140278 docs(arch): accept ADR-0016 retention, disposal & privacy (… |
| REQ-DPR-002 | verified | Attribution shall reference users by a stable internal identifier; human-readable personal data (name, email) shall res… | STR-021; ADR-0016, ADR-0013 | identity/identity/DataProtectionMinimizationTest.kt | — | identity/identity/UserRepository.kt | — |
| REQ-DPR-003 | verified | Retention periods shall be configurable per document/record type and scope, with a defined retention-start event; the s… | STR-021; ADR-0016 | api/api/ScopeGovernanceResourceTest.kt catalog/catalog/RetentionIntervalIsPlainDaysTest.kt catalog/catalog/RetentionRuleServiceTest.kt document/document/RetentionClockHonoursConfiguredDaysTest.kt notification/notification/DisposalSweepTest.kt notification/notification/TaskServiceTest.kt |
— | catalog/catalog/provisioning/service/RetentionRuleService.kt document/document/records/repository/DisposalRepository.kt persistence/V025__retention_and_legal_hold.sql persistence/V132__retention_interval_is_plain_days.sql |
97b7b320 feat(notification,persistence): disposal-due surfacing (ADR… |
| REQ-DPR-004 | verified | A legal hold shall be applicable to a scope or record set, suspending disposal regardless of retention expiry. | STR-021; ADR-0016 | api/api/ScopeGovernanceResourceTest.kt document/document/DisposalServiceTest.kt notification/notification/DisposalSweepTest.kt |
— | catalog/catalog/provisioning/service/LegalHoldService.kt persistence/V025__retention_and_legal_hold.sql |
97b7b320 feat(notification,persistence): disposal-due surfacing (ADR… |
| REQ-DPR-005 | verified | Disposal at end of retention shall be a deliberate, authorized, audited action (not automatic); a disposal record (what… | STR-021; ADR-0016, ADR-0012 | api/api/DisposalResourceTest.kt | — | persistence/V027__disposal.sql | 24bfe733 feat(document,storage,api,webui): disposal execution (ADR-0… |
| REQ-DPR-006 | future | Personal data held under a retention obligation shall be retained, not erased, during the retention period; the system… (Retention/DPR automation is a Later capability (release-plan.md; ADR-0016); retain-under-hold behaviour is covered by REQ-DPR-004/005, the personal-data report of this requirement is not built yet.) | STR-021; ADR-0016 | — | — | — | — |
| REQ-DPR-007 | future | Where erasure is warranted (no retention basis, non-regulated scope, end of retention, minimization correction), the sy… (Erasure/anonymization workflow not built — DPR automation is Later (release-plan.md; ADR-0016); the ERASE_PERSONAL_DATA permission is seeded but unused.) | STR-021; ADR-0016, ADR-0013 | — | — | — | — |
| REQ-DPR-008 | future | The system shall provide, on request, an export of the personal data held about an identified individual (access). (Personal-data export (subject access) not built — DPR automation is Later (release-plan.md; ADR-0016).) | STR-021; ADR-0016 | — | — | — | — |
| REQ-DPR-009 | verified | Identity claims (name, email) shall be rectifiable by refresh from the identity provider. | STR-021; ADR-0016, ADR-0013 | identity/identity/UserProvisioningTest.kt | — | — | — |
| REQ-DPR-010 | verified | All retention-policy changes, legal holds, disposals, and erasures shall produce audit events. | STR-009, STR-021; ADR-0016, REQ-AUD-001 | api/api/ScopeGovernanceResourceTest.kt document/document/DisposalServiceTest.kt |
— | — | — |
| REQ-DPR-011 | verified | Disposal shall delete the record's content blobs and index rows in the live system (REQ-DOC-018, REQ-SRCH-011). | STR-021; ADR-0025, ADR-0016 | document/document/ContentColumnLifecycleInventoryTest.kt document/document/DisposalServiceTest.kt |
— | backup/backup/BackupService.kt persistence/V102__system_maintenance_surface.sql storage/storage/BackupArchiveStore.kt |
a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
REQ-EFF¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-EFF-001 | verified | A released version shall carry an effective date (effective_from), defaulting to its release time and settable to a fut… | STR-020; ADR-0015, ADR-0003 | api/api/LifecycleResourceTest.kt api/api/ValidationJourneyTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentServiceTest.kt document/document/LifecycleServiceTest.kt scope/scope/RlsPolicyInventoryTest.kt |
PQ: station 7 (Releasing the effective version) | api/api/document/DocumentResource.kt document/document/core/repository/VersionRepository.kt document/document/lifecycle/service/LifecycleService.kt persistence/V009__document_version.sql persistence/V041__effective_version_views.sql persistence/V088__version_release_stamp.sql |
a58ca7ea feat(document,api): review REST, future-dated effectivity,…3380af35 docs(arch): accept ADR-0015 effectivity & periodic review |
| REQ-EFF-002 | verified | The currently effective version of a document shall be derived as the released, non-revoked version with the latest eff… | STR-020, STR-009; ADR-0015 | api/e2e/documents.spec.ts document/document/DocumentServiceTest.kt document/document/EffectiveVersionViewEquivalenceTest.kt scope/scope/RlsPolicyInventoryTest.kt |
— | api/src/app/core/doc-nav.ts api/src/app/core/effective-standing.ts api/src/app/core/models.ts api/src/app/core/state-chip.ts document/document/core/EffectiveStanding.kt document/document/core/repository/VersionRepository.kt document/document/core/service/DocumentService.kt document/document/export/PdfRenderer.kt document/document/export/repository/PdfExportRepository.kt document/document/export/service/PdfExportService.kt document/document/lifecycle/service/InstantiateService.kt document/document/lifecycle/service/LifecycleService.kt document/document/records/repository/PeriodicReviewRepository.kt document/document/relation/repository/RelationshipRepository.kt persistence/V041__effective_version_views.sql persistence/V131__version_revocation_stamp.sql |
ce99795f refactor(document): dedupe effective-standing rule; move js…fd01e058 refactor(document): dedupe effective-standing rule; move js…ebacc8a9 feat(document,api): scope audit pack — zip of effective-rel…c76e669c feat(document,audit,webui): history release/invalid-since t…acdf19ec feat(document,webui): superseded/future display standing (R… |
| REQ-EFF-003 | verified | A periodic review interval shall be configurable per document type, with an optional per-document override; the system… | STR-020; ADR-0015, ADR-0004, ADR-0049 | api/api/ReviewSettingsResourceTest.kt document/document/PeriodicReviewStatusTest.kt document/document/ReviewSettingsServiceTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | api/api/document/DocumentResource.kt api/src/app/core/lqms-api.ts document/document/core/repository/DocumentRepository.kt document/document/lifecycle/service/ReviewSettingsService.kt persistence/V023__periodic_review_and_validity.sql persistence/V133__review_interval_is_plain_days.sql |
ca729ad2 docs(traceability): v1.8 citation backfill — 164/247 verifi…a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo…27a44c25 feat(document,notification): periodic review core (ADR-0038… |
| REQ-EFF-004 | verified | A periodic review shall be recordable with reviewer(s), date, and outcome: "confirmed unchanged" shall reset the next-r… | STR-020, STR-009; ADR-0015, ADR-0003 | api/api/PeriodicReviewResourceTest.kt document/document/PeriodicReviewStatusTest.kt notification/notification/PeriodicReviewServiceTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | api/api/document/DocumentResource.kt api/src/app/core/lqms-api.ts document/document/records/service/PeriodicReviewService.kt persistence/V023__periodic_review_and_validity.sql persistence/V133__review_interval_is_plain_days.sql |
ca729ad2 docs(traceability): v1.8 citation backfill — 164/247 verifi…4a9094e9 fix(document,api): REVISION_INITIATED outcome + 409/400 gua…27a44c25 feat(document,notification): periodic review core (ADR-0038… |
| REQ-EFF-005 | future | A periodic review may require an electronic signature with meaning REVIEWED, per the review policy. (Periodic-review e-signature hook — e-signatures are post-MVP (release-plan.md); design in ADR-0014; STATUS notes REQ-EFF realized "minus e-sig hook".) | STR-019, STR-020; ADR-0015, ADR-0014 | — | — | — | — |
| REQ-EFF-006 | verified | A document may carry an optional validity end (valid_until). | STR-020; ADR-0015 | api/api/ReviewSettingsResourceTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/ReviewSettingsServiceTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | api/api/document/DocumentResource.kt api/src/app/core/lqms-api.ts document/document/core/repository/DocumentRepository.kt document/document/lifecycle/service/ReviewSettingsService.kt persistence/V023__periodic_review_and_validity.sql persistence/V024__sweep_hardening.sql persistence/V025__retention_and_legal_hold.sql persistence/V026__notification_delivery_and_i18n.sql persistence/V032__content_model_round2.sql |
— |
| REQ-EFF-007 | verified | When a periodic review is overdue or a document's validity end passes, the document shall be flagged and surfaced for a… | STR-020, STR-007; ADR-0015 | document/document/PeriodicReviewStatusTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | persistence/V023__periodic_review_and_validity.sql persistence/V024__sweep_hardening.sql persistence/V025__retention_and_legal_hold.sql persistence/V026__notification_delivery_and_i18n.sql persistence/V032__content_model_round2.sql persistence/V133__review_interval_is_plain_days.sql |
ca729ad2 docs(traceability): v1.8 citation backfill — 164/247 verifi…27a44c25 feat(document,notification): periodic review core (ADR-0038… |
| REQ-EFF-008 | verified | Periodic reviews and effectivity changes shall produce audit events. | STR-009; ADR-0015, REQ-AUD-001 | notification/notification/PeriodicReviewServiceTest.kt | — | document/document/records/service/PeriodicReviewService.kt persistence/V023__periodic_review_and_validity.sql |
27a44c25 feat(document,notification): periodic review core (ADR-0038… |
| REQ-EFF-009 | verified | An imported released version's effective_from may be backdated to the source system's release date (Jira/Comala fields,… | STR-020, STR-026; ADR-0075, ADR-0015 | document/document/DocumentServiceTest.kt | — | — | — |
REQ-GSP¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-GSP-001 | verified | A regulatory reference shall be a keyed trace item (node regulatoryRef, fence :::regulatory-ref) — one GSPR / essential… | STR-001, STR-027; ADR-0084, ADR-0078, ADR-0061 | api/e2e/regulatory-axis.spec.ts document/document/PdfExportServiceTest.kt document/document/RegulatoryAxisRegistryTest.kt document/document/RegulatoryAxisSaveTest.kt scope/scope/RegulatoryLinkRlsSeparationTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-GSP-002 | verified | The system shall derive, per scope, a live GSPR CONFORMITY view (VIEW_TRACEABILITY-gated, RLS-scoped, nothing stored):… | STR-011, STR-027; ADR-0084, ADR-0088, ADR-0080 | api/api/GsprConformityResourceTest.kt api/e2e/gspr-conformity.spec.ts document/document/GsprConformityLogicTest.kt document/document/PdfExportServiceTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
REQ-I18N¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-I18N-001 | verified | All timestamps shall be stored in UTC and displayed in the user's time zone; signature and audit timestamps shall be re… | STR-009, STR-024; ADR-0020, ADR-0014 | identity/identity/TimestampStorageSchemaTest.kt | — | document/document/records/repository/RecurringObligationRepository.kt | 2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014…8e06e9b3 docs(arch): accept ADR-0020 internationalization (GAP-11) —… |
| REQ-I18N-002 | future | Dates, times, and numbers shall be formatted per the user's locale on display; stored values shall be canonical/locale-… (Locale-aware date/time/number formatting is Increment 2 (release-plan.md); ADR-0020. Stored values are canonical (UTC timestamptz).) | STR-012, STR-024; ADR-0020 | — | — | — | — |
| REQ-I18N-003 | verified | Each document shall have a content language attribute. | STR-024; ADR-0020 | search/search/LanguageDetectionTest.kt search/search/SearchServiceTest.kt |
— | document/document/core/repository/DocumentRepository.kt | — |
| REQ-I18N-004 | future | A translation shall be a separate, independently controlled document (its own review/approval/signatures/effective date… (Translations as separately controlled documents are Later (release-plan.md; ADR-0020); only the translation-of relationship type value exists in the schema.) | STR-024; ADR-0020, ADR-0003 | — | — | — | — |
| REQ-I18N-005 | verified | Search indexing shall be language-aware (per-language text analysis) so content is findable in its language; multilingu… | STR-008, STR-024; ADR-0020, ADR-0006 | search/search/LanguageDetectionTest.kt search/search/SearchServiceTest.kt |
— | search/search/LanguageDetection.kt | 7d018e1a docs: currency audit after the 2026-07-03 change wave |
REQ-LC¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-LC-001 | verified | Every document version shall be in exactly one of the states DRAFT, IN_REVIEW, RELEASED, REVOKED, CANCELLED; no other s… | STR-001; ADR-0003, ADR-0024 | api/api/ValidationJourneyTest.kt document/document/ContentColumnLifecycleInventoryTest.kt document/document/DocumentVersionSchemaTest.kt |
PQ: station 4 (Writing a controlled procedure) PQ: station 5 (Submitting for review, and the author being refused her own approval) PQ: station 7 (Releasing the effective version) |
persistence/V009__document_version.sql persistence/V088__version_release_stamp.sql persistence/V107__version_submit_stamp.sql |
b2223784 feat(document): Phase 3 slices 3.3-3.5 — version, content_p…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-LC-002 | verified | State transitions shall be limited to: submit (DRAFT→IN_REVIEW), reject (IN_REVIEW→DRAFT), withdraw (IN_REVIEW→DRAFT, b… | STR-001; ADR-0003, ADR-0024, ADR-0066 | api/api/ValidationJourneyTest.kt document/document/LifecycleServiceTest.kt |
PQ: station 5 (Submitting for review, and the author being refused her own approval) PQ: station 7 (Releasing the effective version) |
— | cb4e3161 docs(traceability): citation backfill — 49→102 verified, GA…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-LC-003 | verified | A review policy shall be configurable per scope and document type, defining approval requirements, the four-eyes flag,… | STR-002; ADR-0003, ADR-0091 | api/api/ReviewPolicyResourceTest.kt api/api/ValidationJourneyTest.kt document/document/ReviewPolicyServiceTest.kt lifecycle/lifecycle/ReviewPolicySchemaTest.kt |
PQ: station 1 (Registering a customer and a project) | api/api/lifecycle/ReviewPolicyResource.kt document/document/lifecycle/service/ReviewPolicyService.kt persistence/V013__review_policy.sql |
2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
| REQ-LC-004 | verified | Approval requirements shall be expressible as a set of (role, minimum count) pairs that must all be satisfied before re… | STR-002; ADR-0003, ADR-0004 | api/api/ValidationJourneyTest.kt document/document/LifecycleServiceTest.kt document/document/ReviewPolicyServiceTest.kt lifecycle/lifecycle/ReviewPolicySchemaTest.kt |
PQ: station 6 (The second pair of eyes approving) | api/src/app/core/models.ts document/document/arrival/ImportPayloads.kt document/document/export/service/AuthorityViewService.kt document/document/lifecycle/service/LifecycleService.kt document/document/lifecycle/service/ReviewPolicyService.kt lifecycle/lifecycle/ReviewPolicyResolver.kt lifecycle/lifecycle/WorkflowRoleRepository.kt persistence/V013__review_policy.sql persistence/V044__document_workflow_roles.sql |
cb4e3161 docs(traceability): citation backfill — 49→102 verified, GA…76f97d24 feat(lifecycle): Phase 4 slice 4.1 — review_policy schema |
| REQ-LC-005 | superseded | The four-eyes rule shall be enforced by default: the author of a version shall not count as one of its approvers; relax… (→ REQ-LC-016) | STR-002; ADR-0003, ADR-0047 | document/document/LifecycleServiceTest.kt lifecycle/lifecycle/ReviewPolicySchemaTest.kt |
— | persistence/V013__review_policy.sql persistence/V014__approval_and_review_comment.sql |
af896454 docs(requirements): v1.5 baseline prepared — four-eyes REQ-… |
| REQ-LC-006 | verified | Each transition shall be executable only by users holding a role permitted for that transition in the applicable review… | STR-002, STR-003; ADR-0003 | document/document/LifecycleServiceTest.kt document/document/ReviewPolicyServiceTest.kt lifecycle/lifecycle/ReviewPolicySchemaTest.kt |
— | api/src/app/core/models.ts document/document/lifecycle/service/LifecycleService.kt document/document/lifecycle/service/ReviewPolicyService.kt lifecycle/lifecycle/ReviewPolicyResolver.kt persistence/V013__review_policy.sql persistence/V044__document_workflow_roles.sql |
cb4e3161 docs(traceability): citation backfill — 49→102 verified, GA…76f97d24 feat(lifecycle): Phase 4 slice 4.1 — review_policy schema |
| REQ-LC-007 | verified | The release mode shall be configurable as automatic (on last required approval) or explicit (separate release step by a… | STR-002; ADR-0003 | api/api/ValidationJourneyTest.kt document/document/LifecycleServiceTest.kt document/document/ReviewPolicyServiceTest.kt lifecycle/lifecycle/ReviewPolicySchemaTest.kt |
PQ: station 7 (Releasing the effective version) | persistence/V013__review_policy.sql persistence/V062__review_policy_release_flow.sql |
75028f16 feat(lifecycle,document,api): DIRECT release flow + recurri… |
| REQ-LC-008 | verified | Every approval shall be recorded with user, the role in which they approved, and timestamp, permanently attached to the… | STR-009; ADR-0003 | api/api/ValidationJourneyTest.kt document/document/DocumentServiceTest.kt document/document/LifecycleServiceTest.kt |
PQ: station 6 (The second pair of eyes approving) | persistence/V014__approval_and_review_comment.sql | 2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014… |
| REQ-LC-009 | verified | Review comments shall be attachable to the version under review and shall be preserved with it. | STR-001; ADR-0003, ADR-0067 | document/document/LifecycleServiceTest.kt | — | persistence/V014__approval_and_review_comment.sql | — |
| REQ-LC-010 | verified | A released version shall remain unchanged and effective until a newer version of the same document is released or it is… | STR-001, STR-009; ADR-0003 | document/document/DocumentServiceTest.kt | — | persistence/V131__version_revocation_stamp.sql | df84a42e docs(req): release requirements baseline v1.13380af35 docs(arch): accept ADR-0015 effectivity & periodic review |
| REQ-LC-011 | verified | All life-cycle rules shall be enforced server-side; clients shall not be able to bypass them via any interface. | STR-003, STR-014; ADR-0007 | document/document/LifecycleServiceTest.kt | — | — | — |
| REQ-LC-012 | verified | Revocation (RELEASED → REVOKED) shall be terminal for a version; a revoked version shall not return to RELEASED. | STR-001; ADR-0003 | document/document/LifecycleServiceTest.kt | — | document/document/lifecycle/service/LifecycleService.kt lifecycle/lifecycle/StandingPermission.kt persistence/V131__version_revocation_stamp.sql |
558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-LC-013 | verified | Revoking a document that is a derivation source shall notify scopes holding derivations of it, and shall not change tho… | STR-005; ADR-0002 | notification/notification/SourceFanoutTest.kt | — | persistence/V020__source_event_fanout.sql | 558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-LC-014 | verified | Revocation shall be gated by transition permission and may, per the review policy, require approval and/or an electroni… | STR-002, STR-009; ADR-0003, ADR-0014 | document/document/LifecycleServiceTest.kt | — | — | 2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-LC-015 | verified | Cancellation shall be terminal and gated by transition permission; a cancelled version shall never be effective and sha… | STR-001; ADR-0024, REQ-AUD-001 | document/document/LifecycleServiceTest.kt | — | document/document/core/repository/VersionRepository.kt document/document/lifecycle/service/LifecycleService.kt lifecycle/lifecycle/StandingPermission.kt |
3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-LC-016 | verified | The four-eyes rule shall be enforced by default: the user who submitted the current review round — thereby freezing and… | STR-002, STR-009; ADR-0003, ADR-0047 | api/api/ValidationJourneyTest.kt document/document/LifecycleServiceTest.kt document/document/ReviewPolicyServiceTest.kt |
PQ: station 5 (Submitting for review, and the author being refused her own approval) PQ: station 6 (The second pair of eyes approving) |
document/document/lifecycle/service/LifecycleService.kt document/document/lifecycle/service/ReviewPolicyService.kt document/document/lifecycle/service/WorkflowActionEvaluator.kt persistence/V107__version_submit_stamp.sql |
c21e73bf fix(document,notification,webui): four-eyes submitter-only…af896454 docs(requirements): v1.5 baseline prepared — four-eyes REQ-… |
| REQ-LC-017 | verified | Each document shall carry three workflow role-group bindings — AUTHOR, REVIEWER (each entry with a minimum-approver cou… | STR-002, STR-003; ADR-0064, REQ-LC-004 | api/e2e/workflow-roles.spec.ts document/document/LifecycleServiceTest.kt document/document/WorkflowRoleServiceTest.kt |
— | — | — |
| REQ-LC-018 | verified | Workflow-role bindings shall be editable while the version is DRAFT by holders of the document edit permission — every… | STR-002, STR-009; ADR-0064, ADR-0030 | api/e2e/workflow-roles.spec.ts document/document/WorkflowRoleServiceTest.kt |
— | — | — |
| REQ-LC-019 | verified | SUBMIT shall require all three workflow groups to be non-empty (otherwise rejected with a clear message) and shall bloc… | STR-002, STR-003; ADR-0064, ADR-0054, REQ-LC-016 | document/document/LifecycleServiceTest.kt | — | — | — |
| REQ-LC-020 | verified | The author side shall be able to WITHDRAW a version from review (IN_REVIEW→DRAFT): permitted for any holder of the docu… | STR-001, STR-002; ADR-0066, ADR-0064 | api/e2e/withdraw.spec.ts document/document/LifecycleServiceTest.kt |
— | — | — |
| REQ-LC-021 | accepted-gap | Content mutation shall be confined to the AUTHOR-side roles while the version is DRAFT; reviewers shall act only throug… (Reviewers-comment-not-edit is a structural property (editing is EDIT_DRAFT- and DRAFT-state-gated; no reviewer edit path exists), enforced across the lifecycle/authz tests but with no single taggable carrier. ADR-0066/ADR-0067.) | STR-002; ADR-0066, ADR-0067 | — | — | — | — |
| REQ-LC-022 | verified | A review comment shall belong to a document version and may carry an anchor into the version's content tree — a block r… | STR-001, STR-002; ADR-0067, ADR-0057 | api/e2e/comment-anchor-determinism.spec.ts api/e2e/comments.spec.ts api/e2e/editor-comments.spec.ts document/document/CommentServiceTest.kt |
— | — | — |
| REQ-LC-023 | verified | Holders of the document's AUTHOR, REVIEWER, or RELEASER workflow roles may comment while the version is DRAFT or IN_REV… | STR-002, STR-003, STR-023; ADR-0067, ADR-0019 | api/e2e/comments.spec.ts api/e2e/editor-comments.spec.ts document/document/CommentServiceTest.kt |
— | — | — |
| REQ-LC-024 | verified | Review comments shall be immutable records: create, one-level reply, and resolve/unresolve (resolver + timestamp record… | STR-002, STR-009, STR-021; ADR-0067, ADR-0025 | api/e2e/comments.spec.ts document/document/CommentServiceTest.kt |
— | — | — |
| REQ-LC-025 | verified | A per-(scope, type) review-policy flag requireCommentsResolved (default ON, the four-eyes configurability pattern) shal… | STR-002; ADR-0067, REQ-LC-016 | api/e2e/comment-gate-visibility.spec.ts document/document/CommentServiceTest.kt |
— | — | — |
| REQ-LC-026 | verified | Comment visibility shall be state-bound: while DRAFT/IN_REVIEW the layer is visible to every version reader except that… | STR-002, STR-003, STR-009; ADR-0067 | api/e2e/comment-gate-visibility.spec.ts api/e2e/editor-comments.spec.ts document/document/CommentServiceTest.kt |
— | — | — |
| REQ-LC-027 | verified | The per-(scope, type) review policy shall carry a release flow — STANDARD (submit → approve → release, as today) or DIR… | STR-002, STR-009; ADR-0091, ADR-0049, ADR-0064 | api/e2e/direct-release.spec.ts api/e2e/obligations.spec.ts catalog/catalog/DocumentTypeDefaultsServiceTest.kt document/document/DirectReleaseTest.kt |
— | — | f0691e82 docs(requirements): v1.8 delta PREPARED — 9 rows, all verif…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
REQ-MEM¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-MEM-001 | GAP | Membership in a mandator shall be a first-class recorded state (invited → accepted / declined / removed); invitation, a… | STR-028, STR-009; ADR-0108, ADR-0107 | — | — | — | 25fe83b2 docs(requirements): baseline v2.0 — the five post-v1.9 func… |
| REQ-MEM-002 | GAP | Membership shall begin only upon the invitee's acceptance; an invitation may carry named responsibilities (scope, role)… | STR-028; ADR-0108 §5 | — | — | — | — |
| REQ-MEM-003 | GAP | Membership alone shall grant no content access; a member without roles sees nothing, and a non-member cannot observe th… | STR-028, STR-004; ADR-0108 §1, ADR-0012 | — | — | — | — |
| REQ-MEM-004 | GAP | Invitation by email shall not disclose to the inviter whether the address is already known to the installation, and sha… | STR-028, STR-013; ADR-0108 §3, ADR-0063 | — | — | — | — |
| REQ-MEM-005 | GAP | Email invitation links shall be single-use, unguessable, stored only as a digest, and expire; expired or unknown links… | STR-013; ADR-0108 §8 | — | — | — | — |
| REQ-MEM-006 | GAP | Ending a membership shall unassign the person's roles in that mandator and close the membership without affecting the p… | STR-028; ADR-0108 §7 | — | — | — | — |
REQ-MIG¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-MIG-001 | future | The system shall support importing the current released documents and their metadata from an existing QMS as an initial… (Validated product migration is a future increment; the ADR-0068 importer is dev tooling only (not a shipped/validated migration). Detailed import design ADR-0023/ADR-0068.) | STR-026, STR-007; ADR-0023, ADR-0068 | — | — | — | 41e0d21e docs: pre-implementation spec review + integrity errata (RV…7c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-MIG-002 | future | Imported documents shall enter as released baseline versions, marked as imported with an imported-from provenance refer… (Validated product migration is a future increment; the ADR-0068 importer is dev tooling only (not a shipped/validated migration). Detailed import design ADR-0023/ADR-0068.) | STR-026, STR-009; ADR-0023, ADR-0021, ADR-0068 | — | — | — | — |
| REQ-MIG-003 | future | Import shall be validated (metadata mapping checked, conflicts reported) before committing; a dry-run shall be supporte… (Validated product migration is a future increment; the ADR-0068 importer is dev tooling only (not a shipped/validated migration). Detailed import design ADR-0023/ADR-0068.) | STR-026, STR-007, STR-014; ADR-0023 | — | — | — | — |
| REQ-MIG-004 | accepted-gap | Import shall execute exclusively through the public authenticated REST API (no SQL side door), so row-level security, a… (Import tooling guarantee realized in scripts/import/ (ADR-0068, exercised via the trial-first DC rollout); the importer is dev-only Python outside the product test globs — no id-taggable product carrier. RLS/authz/audit behaviour it relies on is itself tested under REQ-SEP/REQ-API.) | STR-026, STR-003, STR-009; ADR-0068, ADR-0007, ADR-0064 | — | — | — | — |
| REQ-MIG-005 | accepted-gap | The fetch phase shall be strictly read-only against the source system, and fetched or staged source content shall never… (Read-only fetch + never-in-git staging + idempotent load are import-tooling properties in scripts/import/ (ADR-0068), outside the product test globs — no id-taggable product carrier.) | STR-026, STR-003; ADR-0068 | — | — | — | — |
| REQ-MIG-006 | accepted-gap | The importer shall be a single parameterized code path over a per-source configuration (source space key, target scope… (Importer parameterization (the second-scope and training-history source configs) is dev-only Python in scripts/import/ (test_sources.py, test_transform_training.py, test_source_history.py), outside the product test globs — no id-taggable product carrier. ADR-0068/0071.) | STR-026, STR-003; ADR-0068, ADR-0071 | — | — | — | — |
| REQ-MIG-007 | accepted-gap | The importer shall recognize an existing QMS's requirement representations — KEY (JIRA-key) prose headers AND table… (Requirement-item + satisfies-matrix import (ADR-0077 §7) is dev-only Python in scripts/import/ (outside the product test globs), like REQ-MIG-004/005/006 — no id-taggable product carrier. ADR-0068.) | STR-026, STR-027, STR-009; ADR-0077, ADR-0068 | — | — | — | db5ec3ee feat!(model): the born-free rename — system-requirement, sl…f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
REQ-NFR¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-NFR-001 | future | LQMS shall support at least ~100 users (~20 concurrent), tens of projects, and on the order of 100k document versions o… (Capacity target (~100 users / 100k versions) — not yet load-verified; target set in ADR-0018.) | STR-022; ADR-0018, ADR-0005 | — | — | — | 993e88b9 docs(req): resolve GAP-08/09/10 NFR block (ADR-0018) |
| REQ-NFR-002 | future | Interactive operations shall complete within p95 < 1s under expected load; full-text search within < 1s; LLM-assisted a… (Interactive p95 < 1s / search < 1s — no performance-test harness yet; target set in ADR-0018.) | STR-022; ADR-0018 | — | — | — | — |
| REQ-NFR-003 | not-applicable | Availability shall target ~99.5% during business hours. (Availability ~99.5% is an operational/deployment target, not verifiable by an automated code test (ADR-0018).) | STR-022; ADR-0018 | — | — | — | — |
| REQ-NFR-004 | future | Automated backups shall run at least nightly (RPO ≤ 24h), extending the backup capability (REQ-BAK-001/002). (Nightly automated backups (RPO ≤ 24h) — operational backup automation, future (extends REQ-BAK; ADR-0018).) | STR-010, STR-022; ADR-0018 | — | — | — | — |
| REQ-NFR-005 | future | The system shall be restorable to service within ~1 business day (RTO). (RTO ~1 business day restore — operational, future (ADR-0018).) | STR-010, STR-022; ADR-0018 | — | — | — | — |
| REQ-NFR-006 | future | Backups shall be stored separately from the primary system and retained per the data-protection/retention policy. (Off-site backup storage + retention — operational, future (ADR-0018/0016).) | STR-022; ADR-0018, ADR-0016 | — | — | — | — |
| REQ-NFR-007 | not-applicable | All network transport shall use TLS (current version); session cookies shall use secure attributes (per REQ-AUTH-003). (TLS transport is enforced at the deployment/reverse-proxy layer, not by an application code test (ADR-0018).) | STR-022, STR-003; ADR-0018 | — | — | — | — |
| REQ-NFR-008 | not-applicable | Database and blob storage shall be encrypted at rest (platform-level: disk/volume, DB TDE, or S3 SSE), with keys manage… (Encryption at rest is a platform capability (disk/TDE/SSE), not application code (ADR-0018).) | STR-022, STR-003; ADR-0018 | — | — | — | — |
| REQ-NFR-009 | not-applicable | Secrets and credentials shall be supplied via environment/secret manager and never stored in source or build artifacts. (Secrets supplied via env/secret manager is a deployment/config concern, not application code (ADR-0018).) | STR-022; ADR-0018 | — | — | — | — |
| REQ-NFR-010 | accepted-gap | Dependencies (the SOUP list) shall be scanned for known vulnerabilities in CI, with findings triaged. (Dependency vulnerability scanning is realized in CI (.github/workflows/ci.yml dependency-submission + dependency-review jobs) AND the ADR-0103 npm-audit gate (scripts/audit-gate.mjs in the e2e + sbom jobs: production scope blocking, dev tail report-only, expiring exceptions) — build/CI config outside the code-scan globs; ADR-0018, ADR-0103.) | STR-014, STR-022; ADR-0018 | — | — | — | 7a17e7c5 docs(traceability): REQ-NFR-010 cites the ADR-0103 npm-audi…04ba49a4 feat(webui,ci,security): ADR-0103 realized — the npm-audit…1c900c36 chore(deps): netty fix-forward 4.1.136.Final; commonmark 0.…7a01f90d chore(webui): frontend dependency security wave (2026-07-24…ea34921e fix(webui): force patched lodash-es + nanoid — extinguish t…71da42b3 feat(ci,security): release vulnerability gate + triage log…10e60d12 ci: make dependency-submission non-blocking until Dependenc…24d304b2 ci: add GitHub Actions workflow (Phase 0) |
| REQ-NFR-011 | accepted-gap | The runtime shall connect to the database as the RLS-subject role lqms_app (non-owner, non-superuser, no BYPASSRLS). (lqms_app is non-owner / no-BYPASSRLS: enforced and tested (RlsScopeContext + startup BYPASSRLS check per STATUS; ADR-0009) but not carrying an explicit REQ-NFR-011 tag in code.) | STR-003, STR-022; ADR-0018, ADR-0009 | — | — | — | — |
| REQ-NFR-012 | accepted-gap | Authentication events, authorization failures, and security-relevant administrative actions shall be audited. (Security-event auditing is realized via the audit trail (auth/authz/admin actions; ties to REQ-AUD-001) but not carrying an explicit REQ-NFR-012 tag in code (ADR-0018).) | STR-009, STR-022; ADR-0018, REQ-AUD-001 | — | — | — | — |
| REQ-NFR-013 | accepted-gap | Brute-force/credential protections and MFA are provided by the identity provider; LQMS shall store no user passwords. (Brute-force/MFA handled by the IdP and LQMS stores no passwords — realized by the OIDC design (ADR-0011) but not carrying an explicit REQ-NFR-013 tag in code.) | STR-016, STR-022; ADR-0018, ADR-0011 | — | — | — | — |
REQ-NOT¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-NOT-001 | verified | The system shall distinguish actionable tasks (tracked to completion) from informational notifications. | STR-023; ADR-0019 | notification/notification/NotificationSchemaTest.kt | — | notification/notification/NotificationModule.kt persistence/V019__tasks_and_notifications.sql |
6a044b6b docs(arch): accept ADR-0019 notifications & tasks (GAP-07) |
| REQ-NOT-002 | verified | Tasks shall be generated from domain events (review requested, approval/signature required, rejection, periodic-review… | STR-007, STR-023; ADR-0019, ADR-0003 | notification/notification/LifecycleTaskFlowTest.kt notification/notification/NotificationSchemaTest.kt notification/notification/TaskServiceTest.kt |
— | document/document/core/repository/VersionRepository.kt document/document/lifecycle/service/LifecycleService.kt notification/notification/LifecycleTaskHandler.kt notification/notification/TaskService.kt persistence/V019__tasks_and_notifications.sql |
5630cf10 fix(notification): review-round HIGHs — type-scoped resolut… |
| REQ-NOT-003 | verified | A task shall track state (open → done / cancelled) and auto-resolve when its underlying action is completed or no longe… | STR-023; ADR-0019 | notification/notification/LifecycleTaskFlowTest.kt notification/notification/NotificationSchemaTest.kt notification/notification/TaskServiceTest.kt |
— | document/document/core/repository/VersionRepository.kt document/document/lifecycle/service/LifecycleService.kt notification/notification/LifecycleTaskHandler.kt notification/notification/TaskService.kt persistence/V019__tasks_and_notifications.sql |
fc926639 feat(lifecycle): pending-items query (versions awaiting my… |
| REQ-NOT-004 | verified | Tasks shall support configurable reminders and optional escalation (e.g. | STR-007, STR-023; ADR-0019 | notification/notification/TaskReminderSweepTest.kt | — | api/api/notification/TaskSweepScheduler.kt catalog/catalog/person/service/UserAdminService.kt persistence/V022__task_due_dates_and_sweep.sql persistence/V072__primary_role_holder.sql |
2c200aa8 feat(notification): overdue-task sweep — reminders + escala… |
| REQ-NOT-005 | verified | Notifications shall inform users of relevant events (e.g. | STR-023; ADR-0019, REQ-DOC-012, REQ-LC-013 | notification/notification/NotificationSchemaTest.kt notification/notification/NotificationServiceTest.kt notification/notification/SourceFanoutTest.kt |
— | notification/notification/NotificationService.kt persistence/V019__tasks_and_notifications.sql persistence/V021__fanout_notifications_and_hardening.sql persistence/V045__review_comments.sql |
0e7aa06c docs: ADR-0035 (fan-out contract as shipped) + review-round…0d2d2742 feat(notification): fan-out v2 — notifications (REQ-NOT-005… |
| REQ-NOT-006 | verified | Notifications and tasks shall be scope-keyed and subject to RLS; a user shall see only those for scopes they are author… | STR-003, STR-023; ADR-0019, ADR-0009 | notification/notification/NotificationSchemaTest.kt | — | notification/notification/NotificationModule.kt persistence/V019__tasks_and_notifications.sql |
8f1e7795 feat(notification): tasks/notifications schema foundation (… |
| REQ-NOT-007 | verified | Delivery shall always include an in-app inbox, plus a pluggable channel interface with an email implementation configur… | STR-023; ADR-0019 | api/api/EmailChannelDeliveryTest.kt api/api/ValidationJourneyTest.kt |
PQ: station 8 (An addressee acknowledging the released document) | api/api/notification/EmailChannel.kt api/api/notification/TaskSweepScheduler.kt catalog/catalog/membership/MembershipMail.kt |
637d2934 feat(notification,api,webui): email channel + notification… |
| REQ-NOT-008 | verified | Overdue periodic reviews (REQ-EFF-007) and disposal-due records (REQ-DPR-005) shall surface as tasks. | STR-020, STR-021, STR-023; ADR-0019, ADR-0015, ADR-0016 | notification/notification/DisposalSweepTest.kt notification/notification/PeriodicReviewSweepTest.kt |
— | persistence/V025__retention_and_legal_hold.sql | 97b7b320 feat(notification,persistence): disposal-due surfacing (ADR… |
| REQ-NOT-009 | verified | Notifications and tasks are an operational layer; the authoritative record of actions remains the audit trail and they… | STR-009, STR-023; ADR-0019, REQ-AUD-001 | notification/notification/TaskServiceTest.kt | — | notification/notification/TaskService.kt persistence/V019__tasks_and_notifications.sql |
— |
| REQ-NOT-010 | verified | The system shall provide a session-authenticated live event channel (Server-Sent Events) that, after a domain transacti… | STR-007, STR-023, STR-003; ADR-0050, ADR-0034 | api/api/EventsResourceTest.kt api/e2e/live-updates.spec.ts scope/scope/TransactionPostCommitTest.kt |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-NOT-011 | verified | Draft-editing presence shall be ephemeral: held in memory with a short TTL and heartbeat, never persisted, never audite… | STR-007, STR-003; ADR-0050 | api/api/PresenceResourceTest.kt api/e2e/presence.spec.ts |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
REQ-OBL¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-OBL-001 | verified | A recurring obligation shall be a per-scope, RLS-separated configuration object (not a controlled document — its execut… | STR-015, STR-003; ADR-0089, ADR-0073 | api/api/RecurringObligationResourceTest.kt api/api/ValidationJourneyTest.kt api/e2e/obligations.spec.ts document/document/RecurringObligationTest.kt |
PQ: station 9 (Defining a recurring duty) | — | 2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
| REQ-OBL-002 | verified | Completion shall require no extra user action: a newly RELEASED record of the completion type in the scope is the evide… | STR-015, STR-023; ADR-0089, ADR-0038, ADR-0039 | api/api/ValidationJourneyTest.kt document/document/RecurringObligationTest.kt notification/notification/RecurringObligationSweepTest.kt |
PQ: station 9 (Defining a recurring duty) | — | — |
| REQ-OBL-003 | verified | The system shall provide a per-scope obligations-status oversight roll-up (GET /api/scopes/{scopeId}/obligations-status… | STR-015, STR-011; ADR-0089, ADR-0080 | api/api/RecurringObligationResourceTest.kt api/api/ValidationJourneyTest.kt api/e2e/obligations.spec.ts document/document/RecurringObligationTest.kt |
PQ: station 9 (Defining a recurring duty) | — | — |
| REQ-OBL-004 | verified | An obligation's schedule shall be one of three kinds with per-kind parameters and validation: INTERVAL (every N days fr… | STR-015; ADR-0094, ADR-0089 | api/api/ValidationJourneyTest.kt document/document/ObligationScheduleTest.kt notification/notification/RecurringObligationSweepTest.kt |
PQ: station 9 (Defining a recurring duty) | — | — |
REQ-REL¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-REL-001 | verified | The system shall support typed, directional relationships between documents (and, where relevant, versions) from a defi… | STR-001, STR-009; ADR-0021, ADR-0049 | document/document/DeriveServiceTest.kt | — | persistence/V017__relationships_and_derive_source.sql | 7c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-REL-002 | verified | Existing version-level provenance (derived-from, instantiated-from) and content translation (translation-of) shall be e… | STR-004, STR-024; ADR-0021, ADR-0002, ADR-0020, ADR-0049 | document/document/DeriveServiceTest.kt document/document/RelationServiceTest.kt document/document/TemplateInstantiationTest.kt |
— | document/document/lifecycle/service/DeriveService.kt document/document/relation/service/RelationService.kt |
293c748a feat(document): copy-on-derive DeriveService (ADR-0031 slic… |
| REQ-REL-003 | verified | Relationships shall be scope-keyed and subject to RLS; a user may relate only documents they are authorized to see. | STR-003; ADR-0021, ADR-0009 | scope/scope/RelationshipRlsSeparationTest.kt | — | persistence/V017__relationships_and_derive_source.sql persistence/V124__base_library_relation_readability.sql |
293c748a feat(document): copy-on-derive DeriveService (ADR-0031 slic… |
| REQ-REL-004 | verified | Creating, changing, or removing a relationship shall be audited. | STR-009; ADR-0021, REQ-AUD-001 | document/document/RelationServiceTest.kt | — | api/api/document/DocumentExceptionMappers.kt document/document/relation/service/RelationService.kt |
7070565a test(traceability): backfill REQ citations for 5 impl-untes… |
| REQ-REL-005 | verified | The system shall provide create/remove operations for the user-managed relationship vocabulary references, satisfies, v… | STR-001, STR-009; ADR-0049, ADR-0021, ADR-0081, REQ-AUD-001 | api/api/RelationResourceTest.kt document/document/RelationServiceTest.kt |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-REL-006 | verified | On SUBMIT, the system shall scan the frozen version body for doc: links (REQ-DOC-025) and synchronize a system-maintain… | STR-001, STR-009; ADR-0051, ADR-0049 | api/e2e/relations.spec.ts document/document/RelationServiceTest.kt |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-REL-007 | verified | The relationship model shall extend to typed TRACE LINKS whose endpoints are keyed trace items (of any type) or documen… | STR-001, STR-009, STR-027; ADR-0077, ADR-0078, ADR-0079, ADR-0084, ADR-0021 | api/e2e/requirement-links.spec.ts document/document/RequirementLinkServiceTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
| REQ-REL-008 | verified | User-initiated trace-structure mutations — trace-link create/delete and user-edge relation add/remove — shall be REFUSE… | STR-009, STR-027; ADR-0081, ADR-0080, ADR-0049 | document/document/RelationServiceTest.kt document/document/RequirementLinkServiceTest.kt |
— | — | f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
REQ-REP¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-REP-001 | future | The system shall generate a QMS re-evaluation report for a configurable period and set of scopes, auto-filling the sect… (Regulatory / management-review reporting is a future increment (release-plan.md).) | STR-011 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.2987f73a0 docs(req): resolve GAP-22 re-evaluation report content — al… |
| REQ-REP-002 | future | Reports shall be exportable in an editable format for completion by the quality manager. (Regulatory / management-review reporting is a future increment (release-plan.md).) | STR-011 | — | — | — | — |
| REQ-REP-003 | future | LLM-assisted report drafting shall honor the per-mandator LLM policy (REQ-SRCH-007). (Regulatory / management-review reporting is a future increment (release-plan.md).) | STR-011, STR-003; ADR-0006 | — | — | — | — |
| REQ-REP-004 | future | Re-evaluation and management reports shall be scopeable to internal (QMS operations) and/or external (customer products… (Regulatory / management-review reporting is a future increment (release-plan.md).) | STR-011, STR-015; ADR-0010 | — | — | — | df84a42e docs(req): release requirements baseline v1.110a141a2 docs(arch): accept ADR-0010 self-managed QMS via internal m… |
| REQ-REP-005 | future | The auto-filled report sections shall comprise: document inventory & state; versions released/revoked/superseded in the… (Auto-filled report sections are a future increment; the completeness view (REQ-REP-007/008, realized) is its first building block.) | STR-011, STR-009; ADR-0019/0015/0016/0021/0022 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.2987f73a0 docs(req): resolve GAP-22 re-evaluation report content — al… |
| REQ-REP-006 | future | The report shall provide a structured management-review template with manual-input placeholders for inputs LQMS does no… (Regulatory / management-review reporting is a future increment (release-plan.md).) | STR-011 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.2987f73a0 docs(req): resolve GAP-22 re-evaluation report content — al… |
| REQ-REP-007 | verified | The system shall support declarative coverage rules per scope (scope-keyed, RLS): each rule specifies a source document… | STR-002, STR-011; ADR-0049 | api/api/CoverageResourceTest.kt api/e2e/completeness.spec.ts document/document/CoverageRuleServiceTest.kt |
— | — | 69c12dd2 feat(coverage,seed,webui): ADR-0085 narrowing FINISHED — re…a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-REP-008 | verified | The system shall evaluate coverage rules live (no persisted state) per scope, reporting for each rule the number of sat… | STR-011, STR-009; ADR-0049 | api/api/CoverageResourceTest.kt api/e2e/completeness.spec.ts document/document/CoverageRuleServiceTest.kt |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-REP-009 | verified | The system shall derive, per scope, a read-only trace-item REGISTRY (key, type, defining document + version, attributes… | STR-009, STR-011, STR-027; ADR-0077, ADR-0078, ADR-0049, ADR-0088 | api/e2e/traceability.spec.ts document/document/RequirementLinkServiceTest.kt document/document/RequirementRegistryServiceTest.kt |
— | — | 2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D…f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
| REQ-REP-010 | verified | The system shall generate, per scope, a derived "Traceability report" PDF — a point-in-time compilation from the existi… | STR-011, STR-027; ADR-0087, ADR-0080, ADR-0074, ADR-0084 | api/api/TraceabilityReportResourceTest.kt document/document/PdfExportServiceTest.kt |
— | — | 69c12dd2 feat(coverage,seed,webui): ADR-0085 narrowing FINISHED — re…bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…11435523 feat(document,api,webui): Stage C Wave 5 — GSPR conformity…f831193c feat(document,api,webui): Stage C Wave 3 — validation matri…f0691e82 docs(requirements): v1.8 delta PREPARED — 9 rows, all verif…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
REQ-RISK¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-RISK-001 | verified | A risk shall be a keyed trace item (node risk, fence :::risk) inside a risk-analysis-capable controlled document, mirro… | not-acceptable) that is the CURRENT-evaluation outcome, not a residual-only field. The tool shall RECORD these tokens and shall NEVER compute a level from S and P nor validate them against a matrix — the scale and the level calculus are CONTENT (the scope's Risk Management Plan, tied via a document relation); a score shall render as recorded tokens (S3 · P1 · P2 — High), never as a formula. The descriptive narrative (sequence of events, rationale, benefit-risk justification) is the block body. |
api/e2e/risk.spec.ts document/document/RiskTraceItemTest.kt |
— | — | — |
| REQ-RISK-002 | verified | A risk control shall be a keyed trace item (node riskControl, fence :::risk-control) carrying the fixed attribute contr… | protective-measure \ |
api/e2e/risk.spec.ts document/document/RiskTraceItemTest.kt |
— | — | — |
| REQ-RISK-003 | verified | The system shall derive, per scope, a live risk-traceability read model (rows = risks: initial score → mitigating contr… | STR-009, STR-011, STR-027; ADR-0079 | api/e2e/risk.spec.ts api/e2e/traceability.spec.ts document/document/RiskTraceItemTest.kt |
— | — | — |
REQ-SBOM¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-SBOM-001 | accepted-gap | The system shall generate, per tagged release, a CycloneDX (JSON) SBOM at version ≥ 1.5 over everything that executes i… (Per-release CycloneDX generation is realized in the CI 'sbom' job (L1 cyclonedxDirectBom + L2 npm run sbom, merged with cyclonedx-cli) — build/CI config outside the code-scan globs (REQ-NFR-010 precedent). L3 container syft pinned in sbom-concept.md pending an image-build job. ADR-0062 P1.) | STR-013, STR-014; ADR-0062 | — | — | — | — |
| REQ-SBOM-002 | future | SBOM accuracy shall be validated against the built artifact: a syft scan of the final image shall be cross-checked agai… (Syft cross-check of the final IMAGE against declared L1+L2 is not yet wired (this CI builds no image; config pinned in sbom-concept.md). ADR-0062.) | STR-014; ADR-0062 | — | — | — | — |
| REQ-SBOM-003 | accepted-gap | License compliance shall be enforced on BOTH stacks against the same all-permissive allow-list — the npm production tre… (License gates on both stacks are realized (scripts/check-backend-licenses.py + backend-license-exceptions.txt; the npm gate) — build/CI config outside the code-scan globs. ADR-0062.) | STR-014; ADR-0062, ADR-0074 | — | — | — | — |
| REQ-SBOM-004 | accepted-gap | Vulnerabilities shall be monitored continuously and gated at release: Dependabot shall watch the npm, Gradle and docker… (grype >=High release gate over the SBOM (CI 'sbom' job, sole exceptions in docs/security/vuln-triage.md) + continuous Dependabot (npm/gradle/docker) — CI config outside the code-scan globs. ADR-0062.) | STR-014; ADR-0062, REQ-NFR-010 | — | — | — | — |
| REQ-SBOM-005 | future | The release job shall flag stale / end-of-life upstream components for human judgment, recorded in the triage log; the… (EOL/stale-upstream release-job flag not yet built; the dependency delta rides the ADR-0061 validation report (also deferred). ADR-0062.) | STR-014; ADR-0062, ADR-0061 | — | — | — | — |
REQ-SEP¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-SEP-001 | verified | The system shall manage mandators and scopes; every scope shall have a type (GLOBAL, MANDATOR, PROJECT), capability fla… | STR-003, STR-006; ADR-0002 | api/api/ValidationJourneyTest.kt scope/scope/ScopeSchemaTest.kt |
PQ: station 1 (Registering a customer and a project) | persistence/V001__mandator_and_scope.sql persistence/V071__manage_scopes_permission.sql persistence/V087__manage_mandators_permission.sql |
575d8774 build(persistence): add Flyway + jOOQ codegen toolchain |
| REQ-SEP-002 | verified | Every scope shall have a short, unique, immutable scope code. | STR-001; §8.1 | api/api/ValidationJourneyTest.kt scope/scope/ScopeSchemaTest.kt |
PQ: station 1 (Registering a customer and a project) | persistence/V001__mandator_and_scope.sql | 575d8774 build(persistence): add Flyway + jOOQ codegen toolchain |
| REQ-SEP-003 | verified | Every content-bearing database row shall carry its scope key. | STR-003; ADR-0002 | document/document/ContentColumnLifecycleInventoryTest.kt document/document/ContentPartSchemaTest.kt document/document/DocumentSchemaTest.kt document/document/DocumentServiceTest.kt document/document/DocumentVersionSchemaTest.kt document/document/DossierServiceTest.kt document/document/DraftAttachmentSchemaTest.kt document/document/FolderSchemaTest.kt scope/scope/EffectiveVersionViewTest.kt scope/scope/RlsPolicyInventoryTest.kt scope/scope/RlsSeparationTest.kt |
— | persistence/V002__row_level_security.sql persistence/V007__document.sql persistence/V009__document_version.sql persistence/V010__content_part.sql persistence/V011__audit_event.sql persistence/V012__draft_content_and_numbering.sql persistence/V030__draft_attachment.sql persistence/V031__document_folder_tree.sql persistence/V032__content_model_round2.sql persistence/V035__acknowledgement.sql persistence/V037__scope_users_function.sql persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql persistence/V041__effective_version_views.sql persistence/V048__file_attachments.sql persistence/V049__training_questionnaires.sql persistence/V050__training_plans.sql persistence/V123__deactivation_licenses_its_children.sql |
1be7cf4d feat(document): Phase 3 slice 3.1 — document table + first…c60914f1 feat(scope): enforce mandator separation with RLS + separat… |
| REQ-SEP-004 | verified | PostgreSQL Row-Level Security policies shall deny any access to rows of scopes the requesting user is not authorized fo… | STR-003; ADR-0002 | document/document/ContentPartSchemaTest.kt document/document/DocumentSchemaTest.kt document/document/DocumentServiceTest.kt document/document/DocumentVersionSchemaTest.kt document/document/DraftAttachmentSchemaTest.kt document/document/FolderSchemaTest.kt scope/scope/BlobQuarantineRlsSeparationTest.kt scope/scope/CoverageRuleRlsSeparationTest.kt scope/scope/EffectiveVersionViewTest.kt scope/scope/RecordFamilyRlsSeparationTest.kt scope/scope/RelationshipRlsSeparationTest.kt scope/scope/RlsPolicyInventoryTest.kt scope/scope/RlsSeparationTest.kt scope/scope/SearchIndexRlsSeparationTest.kt |
— | persistence/V002__row_level_security.sql persistence/V007__document.sql persistence/V009__document_version.sql persistence/V010__content_part.sql persistence/V011__audit_event.sql persistence/V012__draft_content_and_numbering.sql persistence/V030__draft_attachment.sql persistence/V031__document_folder_tree.sql persistence/V039__content_format_tree_record.sql persistence/V040__tree_record_integrity.sql persistence/V041__effective_version_views.sql persistence/V048__file_attachments.sql persistence/V128__audit_append_requires_genuine_reach.sql |
c60914f1 feat(scope): enforce mandator separation with RLS + separat… |
| REQ-SEP-005 | verified | A user shall access a scope's content only with a role assignment granting a read permission effective in that scope (i… | STR-003, STR-004; ADR-0002, ADR-0012 | api/api/ValidationJourneyTest.kt catalog/catalog/AuthzResolutionTest.kt |
PQ: station 14 (Inviting a person into the customer's organization, and their accepting it) | persistence/V002__row_level_security.sql persistence/V121__global_cascade_classification.sql persistence/V122__global_role_identity.sql |
2cb05e95 test(api): journey station 14 — membership as PQ evidence:…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00…c60914f1 feat(scope): enforce mandator separation with RLS + separat… |
| REQ-SEP-006 | verified | Behavioral differences between scope types shall be implemented exclusively via capability flags, not type-conditional… | STR-005; ADR-0002 | document/document/DocumentServiceTest.kt | — | persistence/V001__mandator_and_scope.sql persistence/V032__content_model_round2.sql |
575d8774 build(persistence): add Flyway + jOOQ codegen toolchain |
| REQ-SEP-007 | verified | An automated separation test suite shall prove at the database level that cross-scope access is impossible, and shall r… | STR-003, STR-014; ADR-0002, RISK-001 | scope/scope/BlobQuarantineRlsSeparationTest.kt scope/scope/CoverageRuleRlsSeparationTest.kt scope/scope/RecordFamilyRlsSeparationTest.kt scope/scope/RlsPolicyInventoryTest.kt scope/scope/RlsSeparationTest.kt scope/scope/SearchIndexRlsSeparationTest.kt |
— | persistence/V002__row_level_security.sql | c60914f1 feat(scope): enforce mandator separation with RLS + separat… |
| REQ-SEP-008 | verified | A mandator shall be classifiable as internal (the operating organization) or external (a customer). | STR-015; ADR-0010, ADR-0002 | api/api/SystemBootstrapTest.kt | — | persistence/V006__mandator_internal_flag.sql | dde92cf8 feat(api): idempotent system bootstrap (admin grant, base h…df84a42e docs(req): release requirements baseline v1.110a141a2 docs(arch): accept ADR-0010 self-managed QMS via internal m… |
| REQ-SEP-009 | verified | The operating organization's QMS operations shall be held in one or more PROJECT scopes under an internal mandator, sub… | STR-015; ADR-0010 | api/api/SystemBootstrapTest.kt | — | — | df84a42e docs(req): release requirements baseline v1.110a141a2 docs(arch): accept ADR-0010 self-managed QMS via internal m… |
| REQ-SEP-010 | verified | Released global-base content shall be readable by users holding a base-read permission via a global-scope role assignme… | STR-003, STR-004; ADR-0002, ADR-0012 | api/api/PermissionClassificationTest.kt document/document/BaseLibraryCitationResolveTest.kt scope/scope/BaseReadabilityRlsTest.kt |
— | persistence/V004__catalog_and_permissions.sql persistence/V007__document.sql persistence/V016__released_base_readability.sql persistence/V017__relationships_and_derive_source.sql persistence/V075__audit_event_scope_entity_read.sql persistence/V117__base_reader_role.sql persistence/V120__base_library_folder_readability.sql persistence/V121__global_cascade_classification.sql persistence/V122__global_role_identity.sql persistence/V124__base_library_relation_readability.sql |
b8b13962 feat(scope): released-base readability RLS (ADR-0031 Option…33371734 docs(adr): ADR-0031 (proposed) — base-readability enforceme…558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00… |
| REQ-SEP-011 | verified | The RLS scope context (lqms.authorized_scope_ids) shall be request-bounded — set transaction-scoped (SET LOCAL) or rese… | STR-003; ADR-0026, ADR-0009 | scope/scope/RlsConnectionReuseTest.kt scope/scope/RlsScopeContextTest.kt scope/scope/RlsSubjectRoleDeploymentCheckTest.kt |
— | api/api/platform/DeploymentCheckRunner.kt scope/scope/RlsScopeContext.kt scope/scope/RlsSubjectRoleDeploymentCheck.kt |
a18a1988 feat(scope): RlsScopeContext runtime RLS mechanism (ADR-002…5e2ff336 feat(scope): pooled-connection RLS isolation test (REQ-SEP-…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-SEP-012 | verified | RLS shall guard content-bearing tables (documents, versions, content parts, audit events, search index, and any table h… | STR-003; ADR-0027, ADR-0002 | document/document/AuditEventSchemaTest.kt document/document/ContentPartSchemaTest.kt document/document/DocumentSchemaTest.kt document/document/DocumentVersionSchemaTest.kt document/document/DraftAttachmentSchemaTest.kt document/document/FolderSchemaTest.kt scope/scope/RlsSeparationTest.kt |
— | persistence/V007__document.sql persistence/V009__document_version.sql persistence/V010__content_part.sql persistence/V011__audit_event.sql persistence/V012__draft_content_and_numbering.sql persistence/V030__draft_attachment.sql persistence/V031__document_folder_tree.sql persistence/V128__audit_append_requires_genuine_reach.sql |
9db4f401 docs(req): release requirements-v1.4 baselinebdf04444 docs(adr): ADR-0027 — RLS content-plane vs control-plane bo… |
REQ-SIG¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-SIG-001 | future | A review policy may mark a life-cycle step as requiring an electronic signature, with a defined meaning (AUTHORED, REVI… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-019; ADR-0014, ADR-0003, REQ-LC-008 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.2f2d7249a docs(req): resolve GAP-12/13/14 core clarifications (ADR-00…3c4534ad docs(arch): accept ADR-0014 electronic signatures (Part 11/… |
| REQ-SIG-002 | future | An electronic signature shall capture the signer, the meaning, the timestamp, the bound version and its content hash, a… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-019, STR-009; ADR-0014, ADR-0001 | — | — | — | — |
| REQ-SIG-003 | future | Signatures shall be immutable and append-only, forming part of the version's permanent record and audit trail. (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-009; ADR-0014, REQ-AUD-002 | — | — | — | — |
| REQ-SIG-004 | future | Every human-readable rendering and export of a signed record shall manifest, for each signature, the signer's name, dat… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-019, STR-009; ADR-0014, ADR-0016 | — | — | — | df84a42e docs(req): release requirements baseline v1.1be140278 docs(arch): accept ADR-0016 retention, disposal & privacy (… |
| REQ-SIG-005 | future | A signature shall be linked to the exact content it signs (via its content hash) such that it cannot be transferred to… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-009; ADR-0014, ADR-0001 | — | — | — | — |
| REQ-SIG-006 | future | Signing shall require re-authentication on a continuous-session basis: step-up at the start of a signing session, inten… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-019, STR-007; ADR-0014, ADR-0011, ADR-0013, ADR-0028 | — | — | — | 9db4f401 docs(req): release requirements-v1.4 baselinef9544324 feat(identity): require verified email for invite binding;…b6995111 docs+config: reconcile design record with ADR-0028; restric…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni… |
| REQ-SIG-007 | future | Each signature shall be uniquely attributable to one individual; shared/generic accounts shall not be able to sign. (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-009; ADR-0014, ADR-0013, REQ-USR-008 | — | — | — | — |
| REQ-SIG-008 | future | Which steps require signatures (and their meaning) and the re-authentication window shall be configurable per review po… (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-002, STR-019; ADR-0014, ADR-0003 | — | — | — | — |
| REQ-SIG-009 | future | Where the identity provider supplies it, the signature shall record the authentication method/assurance (e.g. (Electronic signatures are post-MVP (release-plan.md: e-sig deferred unless an early FDA/EU-regulated customer needs them); design in ADR-0014. No SIG id is code-cited yet.) | STR-019; ADR-0014, ADR-0011 | — | — | — | — |
REQ-SRCH¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-SRCH-001 | verified | The system shall provide full-text search over document metadata and content across all scopes the user is authorized f… | STR-008; ADR-0006, ADR-0044 | document/document/DocumentLookupTest.kt search/search/SearchServiceTest.kt |
— | api/api/search/SearchResource.kt persistence/V029__search_index.sql persistence/V104__search_vector_weights.sql persistence/V120__base_library_folder_readability.sql |
7d018e1a docs: currency audit after the 2026-07-03 change wave |
| REQ-SRCH-002 | future | On every content-freezing transition, content shall be indexed: text extracted from the blob, chunked, and embedded; fa… (Extract/chunk/embed indexing pipeline is search layer 2 per ADR-0006; ADR-0044 shipped the FTS-only baseline (index-on-freeze itself is tested in SearchIndexingTest, without embeddings).) | STR-008; ADR-0006, ADR-0057/0058 | — | — | search/search/SearchIndexer.kt | 7d018e1a docs: currency audit after the 2026-07-03 change wave |
| REQ-SRCH-003 | future | Embeddings shall be computed exclusively by a locally running model; no content shall be sent to external services at i… (Local-only embeddings — RAG indexing, layer 2 per ADR-0006 (beyond the ADR-0044 FTS baseline).) | STR-008, STR-003; ADR-0006 | — | — | — | — |
| REQ-SRCH-004 | verified | Index data (vectors, FTS rows) shall be stored in PostgreSQL carrying the scope key, subject to the same RLS policies a… | STR-003; ADR-0006, ADR-0044, REQ-SEP-007 | api/api/SearchResourceTest.kt scope/scope/SearchIndexRlsSeparationTest.kt search/search/SearchServiceTest.kt |
— | api/api/search/SearchResource.kt persistence/V029__search_index.sql persistence/V120__base_library_folder_readability.sql search/search/SearchService.kt |
7d018e1a docs: currency audit after the 2026-07-03 change wave4c86183a feat(document,api,webui): search indexing seam + /api/searc… |
| REQ-SRCH-005 | future | The question-answering function shall send only the retrieved, permission-filtered chunks and the user's question to th… (Permission-filtered chunk retrieval for QA — RAG, layer ⅔ per ADR-0006.) | STR-008, STR-003; ADR-0006 | — | — | — | — |
| REQ-SRCH-006 | future | LLM providers shall be pluggable behind one interface, supporting cloud-based and on-premise providers. (Pluggable LLM provider interface — layer ⅔ per ADR-0006.) | STR-013; ADR-0006 | — | — | — | — |
| REQ-SRCH-007 | future | Each mandator shall configure its LLM policy (cloud / on-prem / none); a query spanning scopes with different policies… (Per-mandator LLM policy — layer ⅔ per ADR-0006.) | STR-003, STR-008; ADR-0006 | — | — | — | a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni… |
| REQ-SRCH-008 | future | Every LLM call shall be audit-logged with provider and the exact chunks sent. (LLM-call audit logging — layer ⅔ per ADR-0006.) | STR-009; ADR-0006 | — | — | — | — |
| REQ-SRCH-009 | verified | The search index shall be derived data: fully rebuildable from stored content on demand. | STR-010; ADR-0006, ADR-0044 | api/api/AdminSearchResourceTest.kt search/search/SearchServiceTest.kt |
— | api/api/search/AdminSearchResource.kt api/src/app/core/lqms-api.ts notification/notification/PoolRoleDeploymentCheck.kt persistence/V029__search_index.sql persistence/V104__search_vector_weights.sql persistence/V120__base_library_folder_readability.sql search/search/SearchService.kt |
7d018e1a docs: currency audit after the 2026-07-03 change wave |
| REQ-SRCH-010 | future | Search/RAG quality shall be verified against a curated benchmark query set with expected top results, run as a regressi… (Search/RAG benchmark regression set — layer ⅔ per ADR-0006.) | STR-008, STR-014; ADR-0006 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.27c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-SRCH-011 | verified | Disposal and erasure shall synchronously delete or invalidate the corresponding full-text and vector index rows (not de… | STR-003, STR-021; ADR-0025, ADR-0006, ADR-0044 | document/document/DisposalServiceTest.kt | — | persistence/V029__search_index.sql search/search/SearchIndexRepository.kt search/search/SearchPurge.kt |
7d018e1a docs: currency audit after the 2026-07-03 change wave4dc34a21 feat(search,persistence): FTS baseline — search_index under…a01936cc docs(req): release requirements baseline v1.3 (spec-hardeni…3bbb5650 docs(req): v1.3 spec-hardening round — Tier-B must-fix from… |
| REQ-SRCH-012 | verified | The system shall provide a document lookup that matches documents visible to the caller (RLS-scoped) by a fragment of t… | STR-007, STR-008, STR-003; ADR-0051, ADR-0049 | api/e2e/doc-links.spec.ts document/document/DocumentLookupTest.kt |
— | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
REQ-TD¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-TD-001 | GAP | A dossier shall assemble released document versions by frozen reference (pins); issuing shall render the merged deliver… | STR-029; ADR-0083, ADR-0104 | — | — | — | 25fe83b2 docs(requirements): baseline v2.0 — the five post-v1.9 func… |
| REQ-TD-002 | GAP | A reader who cannot see every pinned element shall receive a freshly rendered partial copy visibly marked as not the re… | STR-029, STR-004; ADR-0104 amendment | — | — | — | — |
| REQ-TD-003 | GAP | An issued dossier shall not be deletable; correction is forward-only (clone to a new draft, re-issue as a new version);… | STR-029, STR-009; ADR-0104 | — | — | — | — |
REQ-TRN¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-TRN-001 | verified | Authorized users shall be able to define which roles must be trained on (acknowledge) a given document or document type. | STR-025; ADR-0022, ADR-0004 | api/api/AcknowledgementResourceTest.kt api/api/ValidationJourneyTest.kt architecture-tests/architecture/AuditActionVocabularyCensusTest.kt |
PQ: station 3 (Requiring a read acknowledgement for the procedure type) | api/api/records/AcknowledgementPolicyResource.kt document/document/records/service/AcknowledgementPolicyService.kt persistence/V035__acknowledgement.sql |
a7963285 feat(document,notification,api,webui): addressees & read-ac…7c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-TRN-002 | future | The system shall record that a user has read a specific document version. (Recording a bare read (distinct from acknowledgement) is not built; acknowledgement (REQ-TRN-003) covers read-and-understood. ADR-0022.) | STR-025; ADR-0022 | — | — | — | — |
| REQ-TRN-003 | verified | A user shall be able to acknowledge a specific document version (read & understood); the acknowledgement (user, version… | STR-025, STR-009; ADR-0022, ADR-0016 | api/api/AcknowledgementResourceTest.kt api/api/ValidationJourneyTest.kt notification/notification/AcknowledgementFanoutTest.kt |
PQ: station 8 (An addressee acknowledging the released document) | api/api/records/AcknowledgementResource.kt document/document/records/service/AcknowledgementService.kt persistence/V035__acknowledgement.sql |
7070565a test(traceability): backfill REQ citations for 5 impl-untes…a7963285 feat(document,notification,api,webui): addressees & read-ac… |
| REQ-TRN-004 | verified | A document (its type or a specific version) may carry a simple questionnaire (e.g. | STR-025; ADR-0022, ADR-0070 | document/document/TrainingQuestionnaireTest.kt | — | api/api/records/AcknowledgementResource.kt document/document/records/repository/AcknowledgementRepository.kt document/document/records/service/AcknowledgementService.kt persistence/V035__acknowledgement.sql persistence/V049__training_questionnaires.sql |
7070565a test(traceability): backfill REQ citations for 5 impl-untes…fd01e058 refactor(document): dedupe effective-standing rule; move js… |
| REQ-TRN-005 | verified | On release of a version whose document requires acknowledgement, holders of the required roles shall receive an acknowl… | STR-025, STR-023; ADR-0022, ADR-0019 | api/api/ValidationJourneyTest.kt notification/notification/AcknowledgementFanoutTest.kt |
PQ: station 8 (An addressee acknowledging the released document) | notification/notification/AcknowledgementFanoutHandler.kt persistence/V035__acknowledgement.sql |
7070565a test(traceability): backfill REQ citations for 5 impl-untes…a7963285 feat(document,notification,api,webui): addressees & read-ac… |
| REQ-TRN-006 | verified | Acknowledgement and questionnaire status shall be reportable per document, role, and scope (e.g. | STR-025; ADR-0022 | api/api/AcknowledgementResourceTest.kt document/document/AcknowledgementStatusRowsTest.kt document/document/DirectReleaseTrainingCarryForwardTest.kt document/document/TrainingBaselineParityTest.kt |
— | api/api/records/AcknowledgementResource.kt api/src/app/core/models.ts api/src/app/features/documents/document-detail.ts document/document/core/repository/VersionRepository.kt document/document/records/repository/AcknowledgementRepository.kt document/document/records/service/AcknowledgementService.kt persistence/V035__acknowledgement.sql persistence/V068__effective_training_baseline_function.sql |
aed197e1 refactor(document): single-source the training-baseline rul…f05f88ed feat(document,webui): ack-coverage card explains an empty s…396eec8d fix(document): disposal blob-deletion consults all four blo…cb9078ef fix(document): ack-coverage card anchors on the training ba…a7963285 feat(document,notification,api,webui): addressees & read-ac… |
| REQ-TRN-007 | verified | The acknowledgement policy shall carry a training mode per (scope, type) — NONE, ACKNOWLEDGE, or QUESTIONNAIRE (default… | STR-025, STR-002; ADR-0070, ADR-0053 | document/document/TrainingQuestionnaireTest.kt | — | — | — |
| REQ-TRN-008 | verified | Each release shall carry a training-relevant flag: when set, training tasks shall fan out to all addressees, each compl… | STR-025, STR-009; ADR-0070, ADR-0052 | api/e2e/training-questionnaire.spec.ts document/document/TrainingBaselineParityTest.kt document/document/TrainingQuestionnaireTest.kt |
— | document/document/core/repository/VersionRepository.kt document/document/records/repository/AcknowledgementRepository.kt document/document/records/service/AcknowledgementService.kt persistence/V068__effective_training_baseline_function.sql |
aed197e1 refactor(document): single-source the training-baseline rul…f9f837fd feat(document,webui): gate the training-relevant toggle on…c06e97cd feat(document,webui): floor training_relevant=false to revi…cb9078ef fix(document): ack-coverage card anchors on the training ba… |
| REQ-TRN-009 | verified | The system shall record external trainings and certifications as first-class per-user, per-scope entries {user, scope,… | CERTIFICATION), title, provider/issuer, completed/issued date, valid-until (null = non-expiring), evidence, notes, recorded-by}, following a self-record + attestation model: a user records their own entries (including PLANNED ones, which convert to RECORDED on completion), and a MANAGE_TRAINING holder other than the subject CONFIRMS them (four-eyes attestation — the subject can never self-confirm). Entries are immutable records with narrow correction-by-supersession (a Correct creates a replacement chained to the original, which remains visible); evidence attaches as FILE-class, download-only blobs; entries are RLS-scoped and retained like other QMS records (access narrowing, not deletion, on offboarding). |
document/document/TrainingPlanServiceTest.kt | — | — | — | |
| REQ-TRN-010 | verified | The system shall present a per-user, per-scope training plan that joins, without duplication, the user's DERIVED docume… | STR-025, STR-023; ADR-0071, ADR-0019 | api/e2e/my-training.spec.ts document/document/TrainingPlanServiceTest.kt |
— | — | — |
| REQ-TRN-011 | verified | The acknowledgement policy shall carry an optional training due-window per (scope, type) (training_due_days; null = no… | STR-025, STR-011; ADR-0071, ADR-0070 | api/api/EndpointBodyBindingTest.kt api/api/ValidationJourneyTest.kt api/e2e/traceability-training.spec.ts document/document/TrainingComplianceServiceTest.kt |
PQ: station 3 (Requiring a read acknowledgement for the procedure type) | — | — |
REQ-UI¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-UI-001 | verified | The web frontend shall be an Angular application consuming the REST API. | STR-007; ADR-0007 | api/api/FullStackBrowserSmokeTest.kt | — | — | — |
| REQ-UI-002 | verified | All UI texts shall be translatable; language shall be selectable per user. | STR-012; ADR-0007 | api/api/MeResourceTest.kt api/e2e/i18n.spec.ts |
— | — | — |
| REQ-UI-003 | verified | The UI shall reflect permissions (hide/disable unavailable actions) but never be the enforcement point. | STR-003; ADR-0007 | api/e2e/review.spec.ts | — | api/api/document/AttachmentResource.kt api/api/document/DocumentResource.kt |
— |
| REQ-UI-004 | verified | UI elements shall carry stable test selectors, and E2E flows shall be runnable against seeded test data, enabling the E… | STR-014; ADR-0007 | api/api/FullStackBrowserSmokeTest.kt | — | — | — |
| REQ-UI-005 | future | The web frontend shall target WCAG 2.2 level AA accessibility. (WCAG 2.2 AA conformance work is Increment 2 (release-plan.md); no accessibility test harness yet.) | STR-007, STR-012; ADR-0007 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.27c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-UI-006 | future | The web frontend shall support current evergreen browsers (latest stable Chrome, Edge, Firefox, Safari). (Evergreen-browser matrix is Increment 2 (release-plan.md); the E2E suite currently runs Chromium only.) | STR-007; ADR-0007 | — | — | — | 558e92f1 docs(req): release requirements baseline v1.27c74a466 docs(req): triage Tier-3 gaps GAP-15..22 (ADR-0021/0022/002… |
| REQ-UI-007 | verified | The UI shall present the differences between two versions of a document at the content-source level, distinguishing add… | STR-001, STR-002; ADR-0007 | api/e2e/diff.spec.ts | — | — | af896454 docs(requirements): v1.5 baseline prepared — four-eyes REQ-… |
| REQ-UI-008 | verified | The documents view shall present the scope's folder tree as a navigation panel; selecting a folder shall filter the doc… | STR-007; ADR-0048, ADR-0007 | api/e2e/folders.spec.ts | — | — | a93b6b95 docs(requirements): v1.6 baseline prepared — 21 new rows fo… |
| REQ-UI-009 | verified | The documents view shall present category tabs (PRESCRIPTIVE as "Documents", RECORD as "Records", TEMPLATE as "Template… | STR-007; ADR-0049, ADR-0007 | api/e2e/categories.spec.ts | — | — | — |
| REQ-UI-010 | verified | The document detail page shall present a References section listing outgoing relationships grouped by type and incoming… | STR-001, STR-007; ADR-0049, ADR-0007 | api/e2e/relations.spec.ts | — | — | — |
| REQ-UI-011 | verified | The system shall provide a per-scope traceability/completeness page presenting coverage rules as entry points phrased i… | STR-011, STR-007; ADR-0049, ADR-0007 | api/e2e/completeness.spec.ts api/e2e/traceability.spec.ts |
— | — | 69c12dd2 feat(coverage,seed,webui): ADR-0085 narrowing FINISHED — re… |
| REQ-UI-012 | verified | The draft editor shall use a CodeMirror 6 markdown editor providing syntax highlighting, a selection/transaction API fo… | STR-007; ADR-0050, ADR-0032, ADR-0055, ADR-0056, ADR-0057, ADR-0007 | api/api/ValidationJourneyTest.kt api/e2e/markdown.spec.ts |
PQ: station 4 (Writing a controlled procedure) | — | — |
| REQ-UI-013 | verified | In the CM6 editor, typing [[ shall trigger a document-link autocompletion (fed by the document lookup, REQ-SRCH-012) th… | STR-007, STR-008; ADR-0051, ADR-0049, ADR-0007 | api/e2e/doc-links.spec.ts | — | api/src/app/features/documents/markdown-editor.ts api/src/app/features/documents/tiptap-editor.ts |
f1350d2c feat(webui): visual-editor [[ doc-link completion (findin… |
| REQ-UI-014 | verified | The frontend shall consume the live event channel (REQ-NOT-010) to refetch and refresh affected views (document list, o… | STR-007; ADR-0050, ADR-0007 | api/e2e/live-updates.spec.ts api/e2e/presence.spec.ts |
— | — | — |
| REQ-UI-015 | verified | The draft editor shall offer a diagram slash-command that opens a lazily-loaded Excalidraw editor island; a created dia… | STR-007; ADR-0065, ADR-0072, ADR-0007 | api/e2e/diagram.spec.ts | — | — | — |
| REQ-UI-016 | verified | The version detail shall present an Attachments section (name, media type, size, download link) and the draft editor sh… | STR-007, STR-001; ADR-0069, ADR-0007 | api/e2e/file-attachments.spec.ts | — | — | — |
| REQ-UI-017 | verified | When the effective training mode is QUESTIONNAIRE, the draft surface shall present a training section with an author-ga… | STR-025, STR-007; ADR-0070, ADR-0007 | api/e2e/training-questionnaire.spec.ts | — | — | — |
| REQ-UI-018 | verified | The system shall present a per-scope QMS-configuration surface (route /scope-config, reached via a gear affordance next… | STR-007, STR-003; ADR-0073, ADR-0030, ADR-0007, ADR-0091, ADR-0084 | api/api/ScopeConfigReadResourceTest.kt api/api/ValidationJourneyTest.kt api/e2e/scope-config.spec.ts |
PQ: station 3 (Requiring a read acknowledgement for the procedure type) PQ: station 9 (Defining a recurring duty) PQ: station 13 (Reading the setup health and signing out) |
— | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
| REQ-UI-019 | verified | The system shall present a personal "My training" page (document-training obligations and external entries with mode/st… | STR-025, STR-007; ADR-0071, ADR-0007 | api/e2e/my-training.spec.ts api/e2e/traceability-training.spec.ts |
— | — | — |
| REQ-UI-020 | verified | The version detail shall offer a "Download PDF" affordance on post-working versions (RELEASED, REVOKED) that retrieves… | STR-007, STR-011; ADR-0074, ADR-0007 | api/api/ValidationJourneyTest.kt api/e2e/pdf-export.spec.ts |
PQ: station 7 (Releasing the effective version) | — | — |
| REQ-UI-021 | verified | The revise flow shall require a reason for change and accept an optional impact note (REQ-DOC-031); the version detail… | STR-007, STR-009; ADR-0001, ADR-0007 | api/e2e/change-reason.spec.ts | — | — | — |
| REQ-UI-022 | verified | The traceability page shall be a WORKSPACE: an overview hub whose tiles each show a headline metric + status (e.g. | STR-007, STR-011, STR-027; ADR-0080, ADR-0071, ADR-0007, ADR-0084 | api/e2e/gspr-conformity.spec.ts api/e2e/traceability-hub.spec.ts api/e2e/traceability-training.spec.ts api/e2e/traceability.spec.ts api/e2e/validation-matrix.spec.ts |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…f2b93b49 docs(requirements): prepare the v1.7 delta — trace/risk/aud… |
| REQ-UI-023 | verified | Risk-analysis-capable documents shall offer a TABLE-SHAPED authoring and reading surface over their risk items in which… | STR-001, STR-007, STR-027; ADR-0082, ADR-0079, ADR-0057, ADR-0007 | api/e2e/risk-grid.spec.ts | — | — | — |
| REQ-UI-024 | verified | The scope's documents surface shall offer a scope-level export menu for the audit pack (REQ-DOC-037): the merged review… | STR-007, STR-011; ADR-0083, ADR-0074, ADR-0007 | api/api/ValidationJourneyTest.kt api/e2e/audit-pack.spec.ts |
PQ: station 11 (Exporting the project as an audit pack) | — | — |
| REQ-UI-025 | verified | The toolbar scope switcher (a scope id or ALL, persisted) shall be the application's single scope-filter state; per-vie… | STR-007, STR-003; ADR-0093, ADR-0080, ADR-0007 | api/e2e/scope-context.spec.ts | — | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida…f0691e82 docs(requirements): v1.8 delta PREPARED — 9 rows, all verif…2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D… |
| REQ-UI-026 | verified | GSPR/applicability documents shall offer a TABLE-SHAPED authoring and reading surface over their regulatory-ref items i… | STR-001, STR-007, STR-027; ADR-0084, ADR-0082, ADR-0057, ADR-0007 | api/e2e/regulatory-axis.spec.ts | — | — | 84a5198f docs(requirements): v1.9 delta PREPARED — Stage C rows, all…bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-UI-027 | GAP | The user manual shall ship inside the application, versioned with it; help affordances on a surface shall open the topi… | STR-030; ADR-0099 | — | — | — | 25fe83b2 docs(requirements): baseline v2.0 — the five post-v1.9 func… |
REQ-USR¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-USR-001 | verified | A user shall be a unique individual identity anchored to a stable OIDC subject (issuer + subject); email and display na… | STR-016, STR-018; ADR-0013, ADR-0063 | identity/identity/UserSchemaTest.kt | — | persistence/V003__app_user.sql persistence/V042__user_identity_subject_only.sql |
7070565a test(traceability): backfill REQ citations for 5 impl-untes…4138cbee feat(identity): app_user entity + identity module (Phase 2,…ceab7252 docs(arch): accept ADR-0013 user identity lifecycle |
| REQ-USR-002 | verified | An administrator with MANAGE_USERS may pre-provision (invite) a user before first login (by email/IdP identifier) and a… | STR-018; ADR-0013, ADR-0011, ADR-0012 | api/api/AdminUserResourceTest.kt catalog/catalog/UserAdminServiceTest.kt |
— | api/src/app/core/lqms-api.ts api/src/app/core/models.ts catalog/catalog/person/service/UserAdminService.kt identity/identity/UserRepository.kt persistence/V003__app_user.sql persistence/V042__user_identity_subject_only.sql |
619d859b feat(catalog,identity,api,webui): admin user lifecycle — in… |
| REQ-USR-003 | verified | A user authenticating with no matching invited or existing record shall be JIT-provisioned, with no access until assign… | STR-018; ADR-0013, ADR-0011 | identity/identity/UserProvisioningTest.kt | — | — | — |
| REQ-USR-004 | verified | Email shall be the matching key only for not-yet-bound invited records, and only when the authentication token asserts… | STR-018; ADR-0013, ADR-0011 | identity/identity/UserProvisioningTest.kt | — | — | 9db4f401 docs(req): release requirements-v1.4 baselinef9544324 feat(identity): require verified email for invite binding;… |
| REQ-USR-005 | verified | A user shall have a lifecycle state (invited, active, deactivated); deactivation shall block authentication and authori… | STR-003, STR-018; ADR-0013 | api/api/AdminUserResourceTest.kt api/api/DeactivatedUserAccessTest.kt catalog/catalog/UserAdminServiceTest.kt identity/identity/UserSchemaTest.kt |
— | api/src/app/features/admin/invite-eligibility.ts catalog/catalog/membership/service/MembershipService.kt catalog/catalog/person/service/UserAdminService.kt persistence/V089__external_person.sql |
— |
| REQ-USR-006 | verified | Deactivation shall be a state change, never deletion: the user's authorship, approvals, and audit events shall remain i… | STR-009, STR-018; ADR-0013, REQ-AUD-001 | api/api/AdminUserResourceTest.kt catalog/catalog/UserAdminServiceTest.kt |
— | api/src/app/core/lqms-api.ts api/src/app/core/models.ts catalog/catalog/person/service/UserAdminService.kt |
619d859b feat(catalog,identity,api,webui): admin user lifecycle — in… |
| REQ-USR-007 | verified | A deactivated user shall be reactivatable, reusing the same record (no duplicate identity). | STR-018; ADR-0013 | catalog/catalog/UserAdminServiceTest.kt | — | api/src/app/core/lqms-api.ts catalog/catalog/person/service/UserAdminService.kt |
2da77f9a test(traceability): backfill REQ citations + add REQ-LC-014…619d859b feat(catalog,identity,api,webui): admin user lifecycle — in… |
| REQ-USR-008 | accepted-gap | Shared/generic human accounts shall not be permitted; each human user is a distinct individual identity. (One-human-one-identity is enforced by the unique (issuer,subject) key (tested under REQ-USR-001); prohibiting shared/generic accounts is IdP/organizational policy (ADR-0013), not app-enforceable.) | STR-009, STR-018; ADR-0013, REQ-AUTH-011 | — | — | — | — |
| REQ-USR-009 | future | On deactivation the user's pending obligations (required-approver in open reviews, owned drafts) shall be surfaced to a… (Surfacing pending obligations (open approvals, owned drafts) on deactivation is not built (ADR-0013 pending-obligations intent); the deactivation flow itself is tested under REQ-USR-005/006. The former screenshot citation was narrowed to USR-010 — it showed the assignment surface, not this behavior.) | STR-007, STR-018; ADR-0013 | — | — | api/src/app/core/lqms-api.ts api/src/app/features/admin/assignments-dialog.ts |
b6f5d429 fix(webui): assignment role picker offers only the scope's…97c08195 test(traceability): implemented-untested backfill — 5 of 7…7070565a test(traceability): backfill REQ citations for 5 impl-untes… |
| REQ-USR-010 | verified | User lifecycle actions (invite, bind, deactivate, reactivate) and role-assignment changes shall produce audit events. | STR-009, STR-018; ADR-0013, REQ-AUD-001 | api/e2e/screenshots.spec.ts catalog/catalog/UserAdminServiceTest.kt identity/identity/UserProvisioningTest.kt |
— | api/src/app/core/lqms-api.ts api/src/app/features/admin/assignments-dialog.ts identity/identity/UserProvisioning.kt |
2c3b51f2 docs(requirements): prepare the v1.8 delta — obligations, D…dcb018f8 feat(identity): USER_BOUND audit event on invite binding (R…2fc5936e feat(identity): audit USER_BOUND on invite→first-login bind… |
| REQ-USR-011 | future | Erasure of a user's personal data shall be governed by the retention/data-protection decision (GAP-06); deactivation is… (User personal-data erasure follows the DPR erasure capability (REQ-DPR-007), Later per release-plan.md; ADR-0016/ADR-0013. Deactivation-is-not-erasure is realized (status change, record retained).) | STR-018; ADR-0013 | — | — | — | — |
REQ-VAL¶
| ID | Status | Requirement | Trace | Test evidence | PQ evidence | Impl citations | Commits |
|---|---|---|---|---|---|---|---|
| REQ-VAL-001 | verified | A user need shall be a keyed trace item (node userNeed, fence :::user-need) inside a controlled document — the top of t… | STR-001, STR-027; ADR-0084, ADR-0078, ADR-0057 | api/e2e/validation-axis.spec.ts document/document/PdfExportServiceTest.kt document/document/ValidationAxisRegistryTest.kt document/document/ValidationAxisSaveTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-VAL-002 | verified | A validation case shall be a keyed trace item (node validationCase, fence :::validation-case) carrying the single FIXED… | STR-001, STR-027; ADR-0084, ADR-0078 | api/e2e/validation-axis.spec.ts document/document/PdfExportServiceTest.kt document/document/ValidationAxisRegistryTest.kt document/document/ValidationAxisSaveTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-VAL-003 | verified | A design element shall be a keyed trace item (node designElement, fence :::design-element) — the architecture/design *h… | STR-001, STR-027; ADR-0084, ADR-0078 | api/e2e/validation-axis.spec.ts document/document/PdfExportServiceTest.kt document/document/ValidationAxisRegistryTest.kt document/document/ValidationAxisSaveTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-VAL-004 | verified | A design element's designKind shall be constrained to a STRICT per-scope value set. | STR-003, STR-027; ADR-0084, ADR-0078 | api/e2e/validation-axis.spec.ts document/document/ValidationAxisSaveTest.kt scope/scope/DesignKindVocabularyRlsSeparationTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |
| REQ-VAL-005 | verified | The system shall derive, per scope, a live VALIDATION MATRIX read model (VIEW_TRACEABILITY-gated, RLS-scoped, nothing s… | STR-011, STR-027; ADR-0084, ADR-0088, ADR-0080 | api/api/ValidationMatrixResourceTest.kt api/e2e/validation-matrix.spec.ts document/document/PdfExportServiceTest.kt document/document/ValidationMatrixLogicTest.kt |
— | — | bfd379ec docs(requirements): prepare the v1.9 delta — Stage C valida… |