Regentry Overview
Regentry turns reviewed analytical evidence into threshold assessments, report drafts, dossier components, and audit-ready export packages.
- ICH Q3A, Q3B, Q3C, Q3D, M7(R2), Q2(R2), and Q14 support areas
- FDA, EMA, PMDA, and Health Canada jurisdiction contexts
- Threshold calculation from dose and impurity context
- CTD Module 3 report support
- Human approval and audit trail export
Backend foundation
Section titled “Backend foundation”Regentry is built deterministic-first: regulated math and classification come from an auditable, version-pinned rule engine tied to a named guidance revision — LLMs are reserved for narrative, retrieval, and triage and never produce a regulated number. The Phase 0 foundation (moltrace.regulatory.infra) establishes objective, reproducible acceptance evidence from day one: a regulatory metric layer with two zero-tolerance hard gates (calculation-error rate must be 0 and formula coverage 100%), content-addressed rule_set_version / corpus / gold-set provenance, per-run tracking linkable to the model registry, fail-loud schema validation on every structured input (including the SpectraCheck impurity handoff), and a versioned GAMP 5 Appendix D11 validation-document skeleton. The deterministic numeric path is proven byte-identical across repeated runs. (v0.22.0, 2026-06-08)
Impurity assessment
Section titled “Impurity assessment”The five impurity engines (see ICH Guidelines) are exposed as one cohesive capability rather than five separate screens.
- Unified assessment endpoint.
POST /regulatory/impurities/assesstakes one drug-product context (dose, route, substance type, treatment duration) plus optional impurity lists and returns one unified report covering Q3A/B thresholds, Q3C residual-solvent limits, Q3D elemental PDEs, M7 mutagenicity class + TTC, FDA CPCA nitrosamine category + AI limit, and the nitrosamine cumulative-risk sum — every number a deterministic computation carrying its regulatory basis and content-hashedrule_set_version. Per-impurity failures degrade to awarningsentry, never a 500, and every response carrieshuman_review_required = trueplus a disclaimer. (v0.23.1, 2026-06-09) - Dossier-integrated assessments. The dossier assessment endpoints stopped being hollow regex / rule-row lookups and now compute via the deterministic engines: residual-solvent → Q3C and nitrosamine-watch → CPCA (v0.23.2); impurity-risk-register → Q3A/B + M7, sourcing one product dose now carried on the dossier (
max_daily_dose_g/substance_type, migration0013) (v0.23.3); and a net-new…/elemental-impurity-assessment→ Q3D, with the dossier also carrying the product route (oral | parenteral | inhalation | cutaneous, migration0014) because Q3D PDEs are route-dependent (v0.23.4). All five engines now compute behind the dossier, each sourcing the dossier’s product context; tenant rule-rows remain an optional override layer. (v0.23.2–v0.23.4, 2026-06-09) - Nitrosamine cumulative-risk rollup.
GET /regulatory/dossiers/{id}/nitrosamine-cumulative-riskaggregates every nitrosamine watch on a dossier into one FDA-Rev-2 cumulative verdict (sum(measured / AI limit), which must be< 1), with each watch’smeasured_ng_per_dayfed into the rollup and non-qualifying watches reported underexcludedwith a reason — no silent drop. (v0.23.5, 2026-06-09)
Access control & data isolation
Section titled “Access control & data isolation”Regulatory dossiers are owner-scoped per user — MolTrace has no per-request tenant context, so the boundary is the authenticated user (a system API key or an admin is unrestricted). A non-owner gets a non-leaking 404 (an unowned dossier is indistinguishable from a missing one).
- Reads (migration
0015). A dossier carries acreated_by_user_idowner set at create; a bearer caller reads only dossiers they own, plus their sub-resources and by-child records. Migration0015_dossier_created_by_user_idadds the column + index and backfills legacy rows from theregulatory.dossier.createaudit trail (un-attributable rows stay NULL = system-visible-only). Sibling?dossier_id=query reads (action-items, notifications, bridges) inner-join the owner so they cannot be an alternate path around the gate. (v0.23.6, v0.24.0, 2026-06-10) - Writes. A single
require_dossier_accessgate (own-or-system/admin, reads and writes alike) guards everyPOST/PATCHunder/regulatory/dossiers/{id}/…, the by-child-id writes (a requirement / action-item / notification mutated by its own id), the cross-module bridge create paths, and the mobile review-decision sync that flips a dossier’s status. A dossier’s project link is validated against the acting user too, so it can’t be linked to another tenant’s workspace project. (v0.23.6, v0.24.1–v0.24.3, 2026-06-10–11) - Privileged surveillance. Regulatory surveillance is a privileged platform process: its mutating routes (run + source-watcher create/patch), which fan review action-items and notifications onto every matched dossier across tenants, are admin + system-key only; the GET monitoring reads stay open. (v0.24.4, 2026-06-11)
AI-decision governance (EU GMP Annex 22, draft)
Section titled “AI-decision governance (EU GMP Annex 22, draft)”An AI-assisted regulatory decision is persisted as a tamper-evident, per-dossier hash chain with a human-in-the-loop (HITL) gate for high-risk decisions. EU GMP Annex 22 is in draft and not in force; these are decision-support governance records, never an “Annex 22 compliant” claim.
- The decision log.
regulatory_ai_decisions(migration0016) is an append-only table chained per dossier (previous_entry_hash → entry_hash; a HITL review is its own linked row). The API —GET/POST /regulatory/dossiers/{id}/ai-decisions,…/{entry_hash}/review, and…/ai-decisions/verify— records a decision’s model + version, calibrated confidence (constrained to[0,1]so an uncalibrated / NaN value is rejected at the boundary), feature attribution, regulatory basis, and risk level, and verifies the chain by recomputing each row’s content hash and links (DB-level tamper detection). Owner-scoped like the rest of the dossier. (v0.24.7, 2026-06-12) - Auto-recording from the request path. The deterministic classifications record their own decisions automatically: a nitrosamine watch records its FDA CPCA categorization (v0.24.8), and an impurity register’s ICH M7 classification and a Q3D elemental assessment each record theirs (v0.24.9). Each is best-effort and in the same transaction — a governance-recording failure is logged and never breaks the underlying assessment — and risk-tiered, so the review queue reflects real criticality (a mutagenic M7 class 1–3, a triggered Q3D Class-1 / limit element, or any potency categorization → high-risk / HITL required). (v0.24.8–v0.24.9, 2026-06-12)
Data-integrity affordances on regulated records
Section titled “Data-integrity affordances on regulated records”A dossier is a regulated controlled record, so the platform-wide data-integrity hardening lands directly on Regentry workflows:
- 21 CFR Part 11 e-signatures. A dossier release approval is signed via the dedicated, server-attributed signing path (
POST /esignatures/records+ the…/verifyand…/manifestationreads), with each signature content-bound to the SHA-256 hash of the exact signed record snapshot and the durable signer-name + UTC time-stamp + meaning manifestation embedded in the inspection-package copy. Signing requires a fresh step-up re-authentication (§11.200). Full detail: Compliance → Electronic signatures. (v0.50.0, 2026-06-19) - ALCOA+ on controlled records. A regulated change records its why in a queryable
reason_for_changecolumn; archiving a dossier-attached controlled record is a soft delete (deleted_at+deleted_by+reason_for_change, retained for the audit trail and retrievable via?include_deleted=true); and the audit trail is itself an immutable-by-design hash chain. Full detail: Compliance → ALCOA+. (v0.51.0, 2026-06-19) - Validation lifecycle + change control (GAMP 5 / CSA). A Regentry release surfaces a regenerable validation package —
GET /system-releases/{id}/validation-package— that bundles the traceability matrix + IQ / OQ / PQ-from-CI evidence + change-control state + release signature manifestations into one deterministic artifact, and a CI-evidence ingestion seam (POST /system-releases/{id}/evidence) feeds parsed pytest / coverage into the release’s slots. Once a validation project is approved / archived or attached to an approved release, every child mutation requires areason_for_change. Full detail: Compliance → Computer system validation. (v0.52.0, 2026-06-20)
Release timeline
Section titled “Release timeline”A chronological summary of the dossier-era Regentry releases; see the sections above (and ICH Guidelines → Release timeline for the engine library) for substantive detail.
| Version | Date | Headline |
|---|---|---|
| v0.24.9 | 2026-06-12 | M7 + Q3D classifications auto-record AI decisions |
| v0.24.8 | 2026-06-12 | Nitrosamine watch auto-records its CPCA AI decision |
| v0.24.7 | 2026-06-12 | Annex 22 (draft) AI-decision log surfaced on the dossier |
| v0.24.6 | 2026-06-11 | Readiness reports carry a content hash (provenance) |
| v0.24.5 | 2026-06-11 | Readiness reports rehydrate (dossier-scoped list read) |
| v0.24.4 | 2026-06-11 | Surveillance is a privileged (admin/system) process |
| v0.24.1–v0.24.3 | 2026-06-11 | Dossier writes + by-child + bridge creates owner-scoped |
| v0.24.0 | 2026-06-10 | Dossier reads are user-scoped (migration 0015) |
| v0.23.6 | 2026-06-10 | Dossier project link is user-scoped |
| v0.23.5 | 2026-06-09 | Dossier nitrosamine cumulative-risk rollup |
| v0.23.4 | 2026-06-09 | Q3D elemental-impurity dossier endpoint + product route |
| v0.23.3 | 2026-06-09 | Product dose on the dossier; register via Q3A/B + M7 |
| v0.23.2 | 2026-06-09 | Dossier endpoints compute via the engines |
| v0.23.1 | 2026-06-09 | Unified impurity-assessment endpoint |