release: v1.8.4 — actionable regulatory traceability + 8-page detailed packet - #7
Conversation
…k basis v1.8.3 documented the regulatory basis registry but never committed its source layer. Add it now: - tools/update_regulatory_registry.py: rebuilds docs/regulatory_basis_registry.v1.json from references/_registry_entries/*.yaml. _build_display_note() prefers display_label over short_label and skips unlabeled supplementary sources, keeping the note concise and carrying 'ICH M15 MIDD (Step 4, Jan 2026)'. - references/_registry_entries/: per-source YAML (EU AI Act, FDA QMSR/ML-MD/PCCP, IMDRF SaMD/GMLP, ICH M15) as the single source of truth. - references/M15 ...md: ICH M15 reference text (PDF converted to Markdown). - docs/regulatory_basis_registry.v1.json: rebuilt from the YAML sources.
…d packet Rendering and packaging release. Scan schema and scoring unchanged. - Regulatory traceability renders human-readable labels, status (Signal only / Partially aligned / Aligned), finding_refs, and not_assessed gaps across Markdown, explain, HTML (new #s6 section), and PDF - no longer a basis-note restatement. - Detailed PDF packet (Level 3) is now 8 pages: regulatory traceability gets its own page and Report Metadata moves to the next, eliminating the KeepInFrame shrink that desynced fonts across pages. _LEVEL_MAP[3] -> (detailed, 8); CI artifact assertion -> _8p.pdf. - Page 1 executive summary carries an actionable regulatory bullet box (mapped count, partially-aligned requirements by name, signal-only count), replacing the boilerplate basis-note box. - Fix double HTML-escaping of '&' in requirement labels; REQ_LABELS and REQ_STATUS_BADGE defined once in render_html_components and shared by all renderers. - Rotate MICA memory to v1.8.4; fix MANIFEST.in (stale v1.7.4) and pyproject package-data (v1.8.3) to reference the active memory trio. - Regenerate report-preview assets as 8-page; bump version surfaces to 1.8.4. 178 passed, 1 skipped; PCT CLOSED CONTRACT.
…reak the build python -m build failed because packaging manifests hard-coded versioned memory filenames that drifted from the active files (MANIFEST.in on v1.7.4, pyproject data-files on v1.7.8, package-data on v1.8.3). - MANIFEST.in: replace explicit memory filenames with a version-agnostic 'recursive-include memory *.json *.md *.yaml' glob (sdist). - Add test_packaging_data_files_all_exist: asserts every [tool.setuptools.data-files] entry exists on disk, turning this recurring build break into a fast unit-test failure that names the stale entry (the wheel safety net, since data-files cannot glob). Build verified: stem_ai-1.8.4.tar.gz + wheel. 179 passed.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1155f3c7a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "short_label": entry.get("short_label", entry.get("title", "")), | ||
| "display_label": entry.get("display_label", entry.get("title", "")), |
There was a problem hiding this comment.
Keep generated registry entries schema-valid
This generator now emits short_label/display_label (and nearby source_file, sections, and managed_by_update_script) into docs/regulatory_basis_registry.v1.json, but docs/regulatory_basis_registry.schema.json still sets additionalProperties: false for each source and does not allow those fields; the new ICH entry also uses final_guideline, which is outside the schema's status enum. Any documented registry validation or downstream consumer that enforces the shipped schema will reject the committed/generated registry until the schema is updated or these fields are not written.
Useful? React with 👍 / 👎.
Summary
Rendering + packaging release. Scan schema and scoring are unchanged — this is a presentation and build-robustness release.
Regulatory traceability is now actionable everywhere
Each mapped requirement renders with a human-readable label (
EU AI Act Art. 13 — Transparency,ICH M15 §2.1.2 — Context of Use), explicit status (Signal only/Partially aligned/Aligned), thefinding_refsthat triggered it, and thenot_assessedgaps — across Markdown, explain text, HTML (new#s6section), and PDF. Previously it only restated the boilerplate basis note.Detailed PDF packet is now 8 pages (was 7)
Regulatory traceability gets its own dedicated page and Report Metadata moves to the next. This eliminates the
KeepInFrame(mode="shrink")that was shrinking the overcrowded page's fonts out of step with the rest of the report. Page count is no longer a fixed design contract — Level 3 = full detail, page count follows content.Page 1 carries an actionable regulatory bullet box
Right column, below AIRI Risk Triggers: mapped count by framework, the partially-aligned requirements by name, and the signal-only count — replacing the boilerplate full-width box.
Build robustness (root-cause fix)
python -m buildwas breaking on every MICA rotation because packaging manifests hard-coded versioned memory filenames that drifted (MANIFEST.inon v1.7.4,pyprojectdata-files on v1.7.8, package-data on v1.8.3). Fixed:MANIFEST.in→ version-agnosticrecursive-include memory *.json *.md *.yamlglob.test_packaging_data_files_all_existguard asserts everydata-filesentry exists on disk — turns this recurring build break into a fast unit-test failure naming the stale entry.Other
&in requirement labels;REQ_LABELS/REQ_STATUS_BADGEdefined once and shared.__init__, pyproject, CITATION, README badge, SKILL).references/_registry_entries/,tools/update_regulatory_registry.py) that v1.8.3 documented but never versioned.Verification
python -m build→stem_ai-1.8.4.tar.gz+ wheel._detailed_8p.pdf.10.5281/zenodo.20154479consistent;.zenodo.jsonversion-agnostic.