Spaces:
Sleeping
Sleeping
Flamehaven Initiative commited on
Commit ·
d647970
1
Parent(s): 5d47b47
release: v1.8.0 mica runtime uplift
Browse files- CHANGELOG.md +15 -0
- README.md +6 -6
- docs/ADVISORY_RUNTIME.md +4 -4
- docs/ADVISORY_SECRET_HANDLING.md +2 -2
- docs/AIRI_DATA_GOVERNANCE.md +1 -1
- docs/API_CONTRACT.md +4 -4
- docs/ARCHITECTURE.md +1 -1
- docs/CALIBRATION_PROFILE_DESIGN.md +13 -13
- docs/CLI_REFERENCE.md +4 -4
- docs/DETERMINISTIC_DIAGNOSTICS.md +3 -3
- docs/EXAMPLE_AUDITS.md +2 -2
- docs/MICA_MEMORY.md +1 -1
- docs/SCORING_RATIONALE.md +3 -3
- docs/UI_HTML_REPORT.md +4 -4
- docs/assets/report-preview/yorkeccak_bio_report.html +0 -0
- pyproject.toml +1 -1
- stem_ai/__init__.py +1 -1
- stem_ai/cli.py +3 -3
- stem_ai/policy_intent.py +1 -1
- stem_ai/render.py +1 -1
- tests/test_scanner_regressions.py +4 -4
CHANGELOG.md
CHANGED
|
@@ -14,6 +14,21 @@ Rubric refinements and additions use patch versions (1.0.x).
|
|
| 14 |
|
| 15 |
---
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
## [1.7.9] - 2026-05-31
|
| 18 |
|
| 19 |
### Changed
|
|
|
|
| 14 |
|
| 15 |
---
|
| 16 |
|
| 17 |
+
## [1.8.0] - 2026-05-31
|
| 18 |
+
|
| 19 |
+
### Added
|
| 20 |
+
- Added explicit MICA invocation runtime surfaces for session-start governance:
|
| 21 |
+
- `tools/mica_runtime.py --format session-report`
|
| 22 |
+
- `tools/mica_invoke.py --mode {natural|guided|forced}`
|
| 23 |
+
- `mica_invoke.bat` Windows wrapper
|
| 24 |
+
- Added `SECURITY.md` so the default deterministic scan boundary, advisory/provider boundary, and verification path are documented as first-class repository surfaces.
|
| 25 |
+
- Added focused regression coverage for the new MICA invocation/session-report path in `tests/test_mica_invocation.py`.
|
| 26 |
+
|
| 27 |
+
### Changed
|
| 28 |
+
- Refreshed the tracked HTML preview artifact under `docs/assets/report-preview/yorkeccak_bio_report.html` from a real `1.8.0` generated report so the README/browser preview matches the current runtime surface.
|
| 29 |
+
|
| 30 |
+
---
|
| 31 |
+
|
| 32 |
## [1.7.9] - 2026-05-31
|
| 33 |
|
| 34 |
### Changed
|
README.md
CHANGED
|
@@ -23,7 +23,7 @@ pinned: false
|
|
| 23 |
|
| 24 |
<p align="center">
|
| 25 |
<a href="https://github.com/flamehaven01/STEM-BIO-AI/actions/workflows/python-package.yml"><img src="https://github.com/flamehaven01/STEM-BIO-AI/actions/workflows/python-package.yml/badge.svg" alt="CI"></a>
|
| 26 |
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/stable-v1.
|
| 27 |
<a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.9%2B-blue.svg" alt="Python 3.9+"></a>
|
| 28 |
<a href="https://pypi.org/project/stem-ai/"><img src="https://img.shields.io/pypi/v/stem-ai.svg" alt="PyPI"></a>
|
| 29 |
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="Apache 2.0"></a>
|
|
@@ -96,7 +96,7 @@ stem audit /path/to/bio-ai-repo --tier-gate T3 --quiet
|
|
| 96 |
|
| 97 |
Clone the target repository first; the CLI operates on local paths only.
|
| 98 |
|
| 99 |
-
Calibration profiles are implemented in `mirror_only` mode in `1.
|
| 100 |
|
| 101 |
Researchers and domain specialists are expected to influence calibration through `derive`, `simulate`, and documented preview/profile proposals. The intent interview uses a governed `1–5` posture scale, while official score-affecting policy changes still require profile promotion rather than direct ad hoc tuning.
|
| 102 |
|
|
@@ -260,7 +260,7 @@ The plain `stem <repo>` and `stem scan <repo>` path now defaults to `--level 3`,
|
|
| 260 |
|
| 261 |
Interactive features: sticky scroll-spy nav · repo hyperlink in the hero header · `?` tooltip icons on every metric · click-to-expand integrity cards · covered/gaps + domain filtering for AIRI risks · FAIL/WARN/PASS/INFO filter on the evidence ledger.
|
| 262 |
|
| 263 |
-
Current `1.
|
| 264 |
|
| 265 |
- `Decision Path` explains score construction and policy posture with `Configured, Not Rewritten`
|
| 266 |
- `Code Integrity` surfaces the split between `C4` fail-open exceptions, `C5` compliance/boundary integrity, and `C6` mock-auth/no-auth trust boundaries
|
|
@@ -394,7 +394,7 @@ How AIRI is used here:
|
|
| 394 |
- AIRI does **not** prove harm, causality, clinical safety, or regulatory status
|
| 395 |
- AIRI helps place local findings into a wider risk vocabulary for review
|
| 396 |
|
| 397 |
-
In the current `1.
|
| 398 |
|
| 399 |
1. full normalized local registry
|
| 400 |
2. curated runtime bundle used by deterministic scans
|
|
@@ -515,14 +515,14 @@ See [CONTRIBUTING.md](CONTRIBUTING.md). High-value areas: rubric discrimination
|
|
| 515 |
|
| 516 |
Preferred citation metadata lives in [`CITATION.cff`](CITATION.cff).
|
| 517 |
|
| 518 |
-
Current concept DOI-backed archive for the `1.
|
| 519 |
- <https://doi.org/10.5281/zenodo.20154479>
|
| 520 |
|
| 521 |
```bibtex
|
| 522 |
@software{stem-bio-ai,
|
| 523 |
author = {Yun, Kwansub},
|
| 524 |
title = {STEM BIO-AI: Deterministic Evidence-Surface Scanner for Bio/Medical AI Repositories},
|
| 525 |
-
version = {1.
|
| 526 |
year = {2026},
|
| 527 |
doi = {10.5281/zenodo.20154479},
|
| 528 |
url = {https://doi.org/10.5281/zenodo.20154479}
|
|
|
|
| 23 |
|
| 24 |
<p align="center">
|
| 25 |
<a href="https://github.com/flamehaven01/STEM-BIO-AI/actions/workflows/python-package.yml"><img src="https://github.com/flamehaven01/STEM-BIO-AI/actions/workflows/python-package.yml/badge.svg" alt="CI"></a>
|
| 26 |
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/stable-v1.8.0-informational.svg" alt="v1.8.0"></a>
|
| 27 |
<a href="pyproject.toml"><img src="https://img.shields.io/badge/python-3.9%2B-blue.svg" alt="Python 3.9+"></a>
|
| 28 |
<a href="https://pypi.org/project/stem-ai/"><img src="https://img.shields.io/pypi/v/stem-ai.svg" alt="PyPI"></a>
|
| 29 |
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="Apache 2.0"></a>
|
|
|
|
| 96 |
|
| 97 |
Clone the target repository first; the CLI operates on local paths only.
|
| 98 |
|
| 99 |
+
Calibration profiles are implemented in `mirror_only` mode in `1.8.0`. `--policy` changes what profile is surfaced in artifacts, while `policy derive` and `policy simulate` provide governed preview lanes without mutating the authoritative deterministic score path. `policy simulate --profile-file <path>` allows local schema-valid profile experiments without registering a new named policy. In the current rule scope, `strict_clinical_adjacency` is the only release-grade named recommendation; stronger reproducibility postures still fall back to `preview_only` simulation deltas rather than a named profile.
|
| 100 |
|
| 101 |
Researchers and domain specialists are expected to influence calibration through `derive`, `simulate`, and documented preview/profile proposals. The intent interview uses a governed `1–5` posture scale, while official score-affecting policy changes still require profile promotion rather than direct ad hoc tuning.
|
| 102 |
|
|
|
|
| 260 |
|
| 261 |
Interactive features: sticky scroll-spy nav · repo hyperlink in the hero header · `?` tooltip icons on every metric · click-to-expand integrity cards · covered/gaps + domain filtering for AIRI risks · FAIL/WARN/PASS/INFO filter on the evidence ledger.
|
| 262 |
|
| 263 |
+
Current `1.8.0` HTML semantics:
|
| 264 |
|
| 265 |
- `Decision Path` explains score construction and policy posture with `Configured, Not Rewritten`
|
| 266 |
- `Code Integrity` surfaces the split between `C4` fail-open exceptions, `C5` compliance/boundary integrity, and `C6` mock-auth/no-auth trust boundaries
|
|
|
|
| 394 |
- AIRI does **not** prove harm, causality, clinical safety, or regulatory status
|
| 395 |
- AIRI helps place local findings into a wider risk vocabulary for review
|
| 396 |
|
| 397 |
+
In the current `1.8.0` line, AIRI is used through three local governed layers:
|
| 398 |
|
| 399 |
1. full normalized local registry
|
| 400 |
2. curated runtime bundle used by deterministic scans
|
|
|
|
| 515 |
|
| 516 |
Preferred citation metadata lives in [`CITATION.cff`](CITATION.cff).
|
| 517 |
|
| 518 |
+
Current concept DOI-backed archive for the `1.8.0` line:
|
| 519 |
- <https://doi.org/10.5281/zenodo.20154479>
|
| 520 |
|
| 521 |
```bibtex
|
| 522 |
@software{stem-bio-ai,
|
| 523 |
author = {Yun, Kwansub},
|
| 524 |
title = {STEM BIO-AI: Deterministic Evidence-Surface Scanner for Bio/Medical AI Repositories},
|
| 525 |
+
version = {1.8.0},
|
| 526 |
year = {2026},
|
| 527 |
doi = {10.5281/zenodo.20154479},
|
| 528 |
url = {https://doi.org/10.5281/zenodo.20154479}
|
docs/ADVISORY_RUNTIME.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# Advisory Runtime Boundary
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Public operational note for `stem advisory call`
|
| 5 |
|
| 6 |
---
|
|
@@ -9,11 +9,11 @@ Status: Public operational note for `stem advisory call`
|
|
| 9 |
|
| 10 |
`stem advisory packet` and `stem advisory validate` are deterministic local contract operations.
|
| 11 |
|
| 12 |
-
`stem advisory call` is different. It is the explicit runtime boundary where a downstream provider adapter may be invoked. In v1.
|
| 13 |
|
| 14 |
---
|
| 15 |
|
| 16 |
-
## What `stem advisory call` Does In v1.
|
| 17 |
|
| 18 |
- builds the same provider-budgeted advisory input packet
|
| 19 |
- exports provider request metadata
|
|
@@ -86,7 +86,7 @@ Artifacts are sanitized before write. This is the last boundary if upstream reda
|
|
| 86 |
|
| 87 |
## What This Mode Does Not Yet Do
|
| 88 |
|
| 89 |
-
v1.
|
| 90 |
|
| 91 |
That means:
|
| 92 |
|
|
|
|
| 1 |
# Advisory Runtime Boundary
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Public operational note for `stem advisory call`
|
| 5 |
|
| 6 |
---
|
|
|
|
| 9 |
|
| 10 |
`stem advisory packet` and `stem advisory validate` are deterministic local contract operations.
|
| 11 |
|
| 12 |
+
`stem advisory call` is different. It is the explicit runtime boundary where a downstream provider adapter may be invoked. In v1.8.0, this mode exists to make the boundary visible and enforce its security contract before real provider execution is attached.
|
| 13 |
|
| 14 |
---
|
| 15 |
|
| 16 |
+
## What `stem advisory call` Does In v1.8.0
|
| 17 |
|
| 18 |
- builds the same provider-budgeted advisory input packet
|
| 19 |
- exports provider request metadata
|
|
|
|
| 86 |
|
| 87 |
## What This Mode Does Not Yet Do
|
| 88 |
|
| 89 |
+
v1.8.0 does **not** ship a live provider adapter.
|
| 90 |
|
| 91 |
That means:
|
| 92 |
|
docs/ADVISORY_SECRET_HANDLING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# Advisory Secret Handling
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Operational policy for provider-neutral advisory handoff
|
| 5 |
|
| 6 |
---
|
|
@@ -123,7 +123,7 @@ This keeps deterministic scoring and external provider execution on separate tru
|
|
| 123 |
|
| 124 |
## Runtime Guardrails
|
| 125 |
|
| 126 |
-
`stem advisory call` is an explicit provider-call boundary. In v1.
|
| 127 |
|
| 128 |
- centralized redaction policy
|
| 129 |
- adapter logging policy
|
|
|
|
| 1 |
# Advisory Secret Handling
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Operational policy for provider-neutral advisory handoff
|
| 5 |
|
| 6 |
---
|
|
|
|
| 123 |
|
| 124 |
## Runtime Guardrails
|
| 125 |
|
| 126 |
+
`stem advisory call` is an explicit provider-call boundary. In v1.8.0 the runtime exports:
|
| 127 |
|
| 128 |
- centralized redaction policy
|
| 129 |
- adapter logging policy
|
docs/AIRI_DATA_GOVERNANCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# AIRI Data Governance
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Active governance note for the local AIRI data layer
|
| 5 |
|
| 6 |
---
|
|
|
|
| 1 |
# AIRI Data Governance
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Active governance note for the local AIRI data layer
|
| 5 |
|
| 6 |
---
|
docs/API_CONTRACT.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# STEM BIO-AI Public API Contract
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: **Stable**
|
| 5 |
Supersedes: historical v1.5 draft contract
|
| 6 |
|
|
@@ -71,7 +71,7 @@ All fields below are present in every `audit_repository()` result.
|
|
| 71 |
| Field | Type | Description |
|
| 72 |
|-------|------|-------------|
|
| 73 |
| `schema_version` | string | `"stem-ai-local-cli-result-v1.6"` — bumped on breaking change |
|
| 74 |
-
| `stem_ai_version` | string | Package version (e.g. `"1.
|
| 75 |
| `generated_at_local` | string | ISO 8601 date of scan |
|
| 76 |
| `execution_mode` | string | Always `"LOCAL_ANALYSIS"` for the CLI |
|
| 77 |
| `method` | string | Human-readable method description |
|
|
@@ -101,10 +101,10 @@ All fields below are present in every `audit_repository()` result.
|
|
| 101 |
| `calibration_profile.tool_version_last_validated` | string | Last tool version whose runtime constants were checked against this profile |
|
| 102 |
| `calibration_profile.profile_name` | string | Active profile label selected by CLI `--policy` |
|
| 103 |
| `calibration_profile.profile_status` | string | Profile lifecycle status (`authoritative_release`, `experimental`, etc.) |
|
| 104 |
-
| `calibration_profile.profile_read_mode` | string | `"mirror_only"` in `1.
|
| 105 |
| `calibration_profile.policy_sha256` | string | Canonical SHA256 surfaced by the runtime artifact; profile files may carry `null` before authoritative read-through |
|
| 106 |
|
| 107 |
-
In `1.
|
| 108 |
|
| 109 |
### Target (Locked)
|
| 110 |
|
|
|
|
| 1 |
# STEM BIO-AI Public API Contract
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: **Stable**
|
| 5 |
Supersedes: historical v1.5 draft contract
|
| 6 |
|
|
|
|
| 71 |
| Field | Type | Description |
|
| 72 |
|-------|------|-------------|
|
| 73 |
| `schema_version` | string | `"stem-ai-local-cli-result-v1.6"` — bumped on breaking change |
|
| 74 |
+
| `stem_ai_version` | string | Package version (e.g. `"1.8.0"`) |
|
| 75 |
| `generated_at_local` | string | ISO 8601 date of scan |
|
| 76 |
| `execution_mode` | string | Always `"LOCAL_ANALYSIS"` for the CLI |
|
| 77 |
| `method` | string | Human-readable method description |
|
|
|
|
| 101 |
| `calibration_profile.tool_version_last_validated` | string | Last tool version whose runtime constants were checked against this profile |
|
| 102 |
| `calibration_profile.profile_name` | string | Active profile label selected by CLI `--policy` |
|
| 103 |
| `calibration_profile.profile_status` | string | Profile lifecycle status (`authoritative_release`, `experimental`, etc.) |
|
| 104 |
+
| `calibration_profile.profile_read_mode` | string | `"mirror_only"` in `1.8.0`; later `"authoritative"` when scan scoring reads policy values directly |
|
| 105 |
| `calibration_profile.policy_sha256` | string | Canonical SHA256 surfaced by the runtime artifact; profile files may carry `null` before authoritative read-through |
|
| 106 |
|
| 107 |
+
In `1.8.0`, `scan --policy <name>` still keeps authoritative scan scoring on the deterministic runtime-constant path. Policy selection changes surfaced metadata only; governed score-delta preview belongs to `stem policy simulate`.
|
| 108 |
|
| 109 |
### Target (Locked)
|
| 110 |
|
docs/ARCHITECTURE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# STEM BIO-AI Architecture
|
| 2 |
|
| 3 |
-
This document describes the implemented repository structure and runtime boundaries in `v1.
|
| 4 |
|
| 5 |
## Purpose
|
| 6 |
|
|
|
|
| 1 |
# STEM BIO-AI Architecture
|
| 2 |
|
| 3 |
+
This document describes the implemented repository structure and runtime boundaries in `v1.8.0`.
|
| 4 |
|
| 5 |
## Purpose
|
| 6 |
|
docs/CALIBRATION_PROFILE_DESIGN.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
# STEM BIO-AI Calibration Profile Architecture
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
-
Status: implemented mirror-only calibration contract with derive/simulate preview surfaces; 1.
|
| 5 |
|
| 6 |
---
|
| 7 |
|
|
@@ -9,7 +9,7 @@ Status: implemented mirror-only calibration contract with derive/simulate previe
|
|
| 9 |
|
| 10 |
STEM BIO-AI already separates formal scoring, deterministic diagnostics, regulatory traceability, and AI advisory into distinct lanes.
|
| 11 |
|
| 12 |
-
As of `1.
|
| 13 |
|
| 14 |
- packaged profiles in `policy/`
|
| 15 |
- schema and runtime validation
|
|
@@ -25,7 +25,7 @@ What is still not fully separated is the **authoritative score read-through surf
|
|
| 25 |
- evidence-only versus score-authoritative detector status
|
| 26 |
- reasoning-model status labels
|
| 27 |
|
| 28 |
-
In `1.
|
| 29 |
|
| 30 |
> if calibration values are easy to change but hard to govern, the architecture will drift even if the lane boundaries remain conceptually correct.
|
| 31 |
|
|
@@ -143,7 +143,7 @@ Current shipped fields:
|
|
| 143 |
"policy_schema_version": "1",
|
| 144 |
"policy_version": "ca-policy-1.0",
|
| 145 |
"tool_version_introduced": "1.6.5",
|
| 146 |
-
"tool_version_last_validated": "1.
|
| 147 |
"profile_name": "default",
|
| 148 |
"profile_status": "authoritative_release",
|
| 149 |
"profile_read_mode": "mirror_only",
|
|
@@ -200,7 +200,7 @@ Current shipped fields:
|
|
| 200 |
}
|
| 201 |
```
|
| 202 |
|
| 203 |
-
This is the active shipped schema family in `1.
|
| 204 |
|
| 205 |
Schema notes:
|
| 206 |
|
|
@@ -209,7 +209,7 @@ Schema notes:
|
|
| 209 |
- normalization should be represented as named semantics plus parameters, not a free-form expression string
|
| 210 |
- `policy_version` should be independent from the tool release version
|
| 211 |
- `profile_read_mode` must distinguish mirror-only exposure from authoritative runtime loading
|
| 212 |
-
- `stage_3_policy.b2_partial_credit_mode` is currently a declared mirror-only profile field; authoritative Stage 3 B2 scoring in `1.
|
| 213 |
- `governance_sources.ca_taxonomy_version` must increment whenever runtime CA trigger membership, severity mapping, or cap-relevant phrase semantics change
|
| 214 |
|
| 215 |
Current `profile_status` state set:
|
|
@@ -507,7 +507,7 @@ Current intent variables:
|
|
| 507 |
- `reproducibility_priority`
|
| 508 |
- `structured_limitations_requirement`
|
| 509 |
|
| 510 |
-
Current `1.
|
| 511 |
|
| 512 |
| Condition | Outcome |
|
| 513 |
|---|---|
|
|
@@ -515,7 +515,7 @@ Current `1.7.9` decision rules:
|
|
| 515 |
| all four values are `2` or `3` | keep `default` |
|
| 516 |
| no named profile rule matches | generate `preview_only` profile delta from explicit bounded deltas only |
|
| 517 |
|
| 518 |
-
This narrow table is intentional. It keeps the translation layer visible, reviewable, and testable without pretending that every strong posture already has a release-grade named profile. In particular, `reproducibility_first` remains deferred in `1.
|
| 519 |
|
| 520 |
Rule priority:
|
| 521 |
|
|
@@ -567,7 +567,7 @@ Current bounded deltas used in preview-only mode:
|
|
| 567 |
| `structured_limitations_requirement >= 4` with no named-profile match | require stricter Stage 3 B2 partial-credit posture only |
|
| 568 |
| multiple strong answers with no named-profile match | combine only explicitly listed bounded deltas; do not infer new arithmetic outside documented policy fields |
|
| 569 |
|
| 570 |
-
These are active preview-only deltas in `1.
|
| 571 |
|
| 572 |
### 11.2.4 Comparison Output
|
| 573 |
|
|
@@ -599,11 +599,11 @@ The current implementation defines two named profiles:
|
|
| 599 |
Deferred until explicitly defined:
|
| 600 |
|
| 601 |
- `documentation_lenient`
|
| 602 |
-
- not active in the `1.
|
| 603 |
- `research_repo_baseline`
|
| 604 |
-
- not active in the `1.
|
| 605 |
- `biosecurity_cautious`
|
| 606 |
-
- not active in the `1.
|
| 607 |
- `reproducibility_first`
|
| 608 |
- intentionally deferred until an actual policy diff exists and a release-grade recommendation path is defined
|
| 609 |
|
|
|
|
| 1 |
# STEM BIO-AI Calibration Profile Architecture
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
+
Status: implemented mirror-only calibration contract with derive/simulate preview surfaces; 1.8.0 preview hardening complete; authoritative read-through remains future work
|
| 5 |
|
| 6 |
---
|
| 7 |
|
|
|
|
| 9 |
|
| 10 |
STEM BIO-AI already separates formal scoring, deterministic diagnostics, regulatory traceability, and AI advisory into distinct lanes.
|
| 11 |
|
| 12 |
+
As of `1.8.0`, the repository ships a real calibration architecture:
|
| 13 |
|
| 14 |
- packaged profiles in `policy/`
|
| 15 |
- schema and runtime validation
|
|
|
|
| 25 |
- evidence-only versus score-authoritative detector status
|
| 26 |
- reasoning-model status labels
|
| 27 |
|
| 28 |
+
In `1.8.0`, most score-affecting values are still implemented as runtime constants plus prose in `SCORING_RATIONALE.md`, even though mirror-only profile metadata, CLI-visible profile selection, and derive/simulate preview surfaces are already live. That is acceptable for the current release line, but it still creates a long-term maintenance risk:
|
| 29 |
|
| 30 |
> if calibration values are easy to change but hard to govern, the architecture will drift even if the lane boundaries remain conceptually correct.
|
| 31 |
|
|
|
|
| 143 |
"policy_schema_version": "1",
|
| 144 |
"policy_version": "ca-policy-1.0",
|
| 145 |
"tool_version_introduced": "1.6.5",
|
| 146 |
+
"tool_version_last_validated": "1.8.0",
|
| 147 |
"profile_name": "default",
|
| 148 |
"profile_status": "authoritative_release",
|
| 149 |
"profile_read_mode": "mirror_only",
|
|
|
|
| 200 |
}
|
| 201 |
```
|
| 202 |
|
| 203 |
+
This is the active shipped schema family in `1.8.0`.
|
| 204 |
|
| 205 |
Schema notes:
|
| 206 |
|
|
|
|
| 209 |
- normalization should be represented as named semantics plus parameters, not a free-form expression string
|
| 210 |
- `policy_version` should be independent from the tool release version
|
| 211 |
- `profile_read_mode` must distinguish mirror-only exposure from authoritative runtime loading
|
| 212 |
+
- `stage_3_policy.b2_partial_credit_mode` is currently a declared mirror-only profile field; authoritative Stage 3 B2 scoring in `1.8.0` still follows the hardcoded scanner path and does not yet read this value directly
|
| 213 |
- `governance_sources.ca_taxonomy_version` must increment whenever runtime CA trigger membership, severity mapping, or cap-relevant phrase semantics change
|
| 214 |
|
| 215 |
Current `profile_status` state set:
|
|
|
|
| 507 |
- `reproducibility_priority`
|
| 508 |
- `structured_limitations_requirement`
|
| 509 |
|
| 510 |
+
Current `1.8.0` decision rules:
|
| 511 |
|
| 512 |
| Condition | Outcome |
|
| 513 |
|---|---|
|
|
|
|
| 515 |
| all four values are `2` or `3` | keep `default` |
|
| 516 |
| no named profile rule matches | generate `preview_only` profile delta from explicit bounded deltas only |
|
| 517 |
|
| 518 |
+
This narrow table is intentional. It keeps the translation layer visible, reviewable, and testable without pretending that every strong posture already has a release-grade named profile. In particular, `reproducibility_first` remains deferred in `1.8.0`; high reproducibility answers still fall back to `preview_only` Stage 4 emphasis rather than a named recommendation.
|
| 519 |
|
| 520 |
Rule priority:
|
| 521 |
|
|
|
|
| 567 |
| `structured_limitations_requirement >= 4` with no named-profile match | require stricter Stage 3 B2 partial-credit posture only |
|
| 568 |
| multiple strong answers with no named-profile match | combine only explicitly listed bounded deltas; do not infer new arithmetic outside documented policy fields |
|
| 569 |
|
| 570 |
+
These are active preview-only deltas in `1.8.0`. They are not hidden similarity operations and they do not mutate the authoritative scan path.
|
| 571 |
|
| 572 |
### 11.2.4 Comparison Output
|
| 573 |
|
|
|
|
| 599 |
Deferred until explicitly defined:
|
| 600 |
|
| 601 |
- `documentation_lenient`
|
| 602 |
+
- not active in the `1.8.0` rule table
|
| 603 |
- `research_repo_baseline`
|
| 604 |
+
- not active in the `1.8.0` rule table
|
| 605 |
- `biosecurity_cautious`
|
| 606 |
+
- not active in the `1.8.0` rule table
|
| 607 |
- `reproducibility_first`
|
| 608 |
- intentionally deferred until an actual policy diff exists and a release-grade recommendation path is defined
|
| 609 |
|
docs/CLI_REFERENCE.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
| 1 |
# CLI Reference
|
| 2 |
|
| 3 |
-
**Version:** 1.
|
| 4 |
**Status:** Stable
|
| 5 |
|
| 6 |
---
|
| 7 |
|
| 8 |
## Command Model
|
| 9 |
|
| 10 |
-
The 1.
|
| 11 |
|
| 12 |
```bash
|
| 13 |
stem <folder> [OPTIONS] # shortcut for `stem scan <folder>`
|
|
@@ -90,7 +90,7 @@ The shorthand remains:
|
|
| 90 |
stem /path/to/repo
|
| 91 |
```
|
| 92 |
|
| 93 |
-
Policy selection remains mirror-only in scans in `1.
|
| 94 |
|
| 95 |
Layer 2 AST contract detectors (`CC1` / `CC2` / `CC3`) run during normal scans
|
| 96 |
and surface through:
|
|
@@ -130,7 +130,7 @@ stem policy simulate /path/to/repo \
|
|
| 130 |
|
| 131 |
In this mode, the profile file must remain schema-valid and `mirror_only`. The file is used for preview only and is not added to the packaged named-profile set.
|
| 132 |
|
| 133 |
-
Current `1.
|
| 134 |
|
| 135 |
- strong clinical strictness maps to `strict_clinical_adjacency`
|
| 136 |
- balanced `2..3` answers keep `default`
|
|
|
|
| 1 |
# CLI Reference
|
| 2 |
|
| 3 |
+
**Version:** 1.8.0
|
| 4 |
**Status:** Stable
|
| 5 |
|
| 6 |
---
|
| 7 |
|
| 8 |
## Command Model
|
| 9 |
|
| 10 |
+
The 1.8.0 CLI is organized around workflows instead of one long option string, exposes named calibration profiles directly, and adds auditable researcher-intent derive/simulate surfaces.
|
| 11 |
|
| 12 |
```bash
|
| 13 |
stem <folder> [OPTIONS] # shortcut for `stem scan <folder>`
|
|
|
|
| 90 |
stem /path/to/repo
|
| 91 |
```
|
| 92 |
|
| 93 |
+
Policy selection remains mirror-only in scans in `1.8.0`: the chosen profile is surfaced in outputs and summaries, and `policy derive` / `policy simulate` preview governed posture changes without turning those deltas into authoritative scan behavior.
|
| 94 |
|
| 95 |
Layer 2 AST contract detectors (`CC1` / `CC2` / `CC3`) run during normal scans
|
| 96 |
and surface through:
|
|
|
|
| 130 |
|
| 131 |
In this mode, the profile file must remain schema-valid and `mirror_only`. The file is used for preview only and is not added to the packaged named-profile set.
|
| 132 |
|
| 133 |
+
Current `1.8.0` rule scope is intentionally narrow:
|
| 134 |
|
| 135 |
- strong clinical strictness maps to `strict_clinical_adjacency`
|
| 136 |
- balanced `2..3` answers keep `default`
|
docs/DETERMINISTIC_DIAGNOSTICS.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
# Deterministic Diagnostics for Bio-AI Integrity
|
| 2 |
-
## Version 1.
|
| 3 |
|
| 4 |
This document is the active deterministic diagnostics specification for STEM BIO-AI's bio-focused deterministic lane. The local lane is implemented as evidence-bearing repository diagnostics inside `stem_ai/detector_bio.py`. The optional AI lane remains advisory, opt-in, and non-authoritative.
|
| 5 |
|
|
@@ -22,7 +22,7 @@ The local deterministic lane is authoritative for hard findings. The AI lane is
|
|
| 22 |
|
| 23 |
---
|
| 24 |
|
| 25 |
-
## 1A. Implementation Status (STEM BIO-AI v1.
|
| 26 |
|
| 27 |
Implemented now:
|
| 28 |
1. `SMILES-DECEPT` Lane A0 conservative surface scanner
|
|
@@ -136,7 +136,7 @@ Not yet implemented:
|
|
| 136 |
---
|
| 137 |
|
| 138 |
## 3. Integration with STEM-BIO-AI CORE
|
| 139 |
-
These diagnostics align with the current **Code Integrity (C1-C6)** and bio-diagnostic surfaces in the `1.
|
| 140 |
|
| 141 |
- **SMILES-DECEPT** -> bio deterministic diagnostics surface first; possible future linkage to `C3` or a dedicated bio-integrity lane after benchmark review
|
| 142 |
- **MOUNT-AUDIT** -> future hardening candidate; not currently shipped in the active runtime
|
|
|
|
| 1 |
# Deterministic Diagnostics for Bio-AI Integrity
|
| 2 |
+
## Version 1.8.0 (Active deterministic bio diagnostics note)
|
| 3 |
|
| 4 |
This document is the active deterministic diagnostics specification for STEM BIO-AI's bio-focused deterministic lane. The local lane is implemented as evidence-bearing repository diagnostics inside `stem_ai/detector_bio.py`. The optional AI lane remains advisory, opt-in, and non-authoritative.
|
| 5 |
|
|
|
|
| 22 |
|
| 23 |
---
|
| 24 |
|
| 25 |
+
## 1A. Implementation Status (STEM BIO-AI v1.8.0)
|
| 26 |
|
| 27 |
Implemented now:
|
| 28 |
1. `SMILES-DECEPT` Lane A0 conservative surface scanner
|
|
|
|
| 136 |
---
|
| 137 |
|
| 138 |
## 3. Integration with STEM-BIO-AI CORE
|
| 139 |
+
These diagnostics align with the current **Code Integrity (C1-C6)** and bio-diagnostic surfaces in the `1.8.0` line:
|
| 140 |
|
| 141 |
- **SMILES-DECEPT** -> bio deterministic diagnostics surface first; possible future linkage to `C3` or a dedicated bio-integrity lane after benchmark review
|
| 142 |
- **MOUNT-AUDIT** -> future hardening candidate; not currently shipped in the active runtime
|
docs/EXAMPLE_AUDITS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# Example Audits
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Public proof-surface index
|
| 5 |
|
| 6 |
---
|
|
@@ -16,7 +16,7 @@ This project is easier to evaluate through outputs than through claims. This pag
|
|
| 16 |
- Report preview pages: [`docs/assets/report-preview/`](assets/report-preview)
|
| 17 |
- Sample PDF: [`yorkeccak_bio_detailed_7p.pdf`](assets/report-preview/yorkeccak_bio_detailed_7p.pdf)
|
| 18 |
|
| 19 |
-
Use this when you want to inspect the current `1.
|
| 20 |
|
| 21 |
---
|
| 22 |
|
|
|
|
| 1 |
# Example Audits
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Public proof-surface index
|
| 5 |
|
| 6 |
---
|
|
|
|
| 16 |
- Report preview pages: [`docs/assets/report-preview/`](assets/report-preview)
|
| 17 |
- Sample PDF: [`yorkeccak_bio_detailed_7p.pdf`](assets/report-preview/yorkeccak_bio_detailed_7p.pdf)
|
| 18 |
|
| 19 |
+
Use this when you want to inspect the current `1.8.0` full 7-page packet shape, Stage 4 separation, AIRI reasoning, and closeout metadata.
|
| 20 |
|
| 21 |
---
|
| 22 |
|
docs/MICA_MEMORY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# STEM BIO-AI MICA Memory Layer
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
MICA Contract: 0.2.4
|
| 5 |
Status: Active operational memory contract
|
| 6 |
|
|
|
|
| 1 |
# STEM BIO-AI MICA Memory Layer
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
MICA Contract: 0.2.4
|
| 5 |
Status: Active operational memory contract
|
| 6 |
|
docs/SCORING_RATIONALE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# STEM BIO-AI Scoring Rationale
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Authoritative design record. Update with each structural score change.
|
| 5 |
|
| 6 |
---
|
|
@@ -33,7 +33,7 @@ In LOCAL_ANALYSIS mode, Stage 2 cross-platform verification is unavailable. The
|
|
| 33 |
|
| 34 |
## 3. Key Terms
|
| 35 |
|
| 36 |
-
- **CA-DIRECT / CA-INDIRECT**: Clinical-adjacent severity classes derived from visible repository language. They govern cap policy, not clinical truth. In `1.
|
| 37 |
- **Stage 2R**: Repo-local consistency substitute for full Stage 2 cross-platform verification in LOCAL_ANALYSIS mode.
|
| 38 |
- **score_cap**: Post-score ceiling applied when clinical-adjacent boundary conditions are not satisfied.
|
| 39 |
- **C1_penalty**: Only code-integrity item that currently subtracts from the final score.
|
|
@@ -265,7 +265,7 @@ C1–C6 are code-level or governance-boundary checks available only in LOCAL_ANA
|
|
| 265 |
|
| 266 |
Only C1 affects the final score. C2–C6 are reported as risk surfaces because they represent elevated engineering or governance concern but do not rise to the level of score penalties in the current calibration.
|
| 267 |
|
| 268 |
-
The C4/C5/C6 split is deliberate in `1.
|
| 269 |
|
| 270 |
- `C4` is reserved for executable fail-open exception behavior in code.
|
| 271 |
- `C5` is reserved for compliance, legal, or clinical-boundary integrity warnings surfaced from reviewed repository sources.
|
|
|
|
| 1 |
# STEM BIO-AI Scoring Rationale
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Authoritative design record. Update with each structural score change.
|
| 5 |
|
| 6 |
---
|
|
|
|
| 33 |
|
| 34 |
## 3. Key Terms
|
| 35 |
|
| 36 |
+
- **CA-DIRECT / CA-INDIRECT**: Clinical-adjacent severity classes derived from visible repository language. They govern cap policy, not clinical truth. In `1.8.0`, the active runtime taxonomy remains `ca-taxonomy-v1` implemented in `scanner.py`; reference markdown is informative, not authoritative.
|
| 37 |
- **Stage 2R**: Repo-local consistency substitute for full Stage 2 cross-platform verification in LOCAL_ANALYSIS mode.
|
| 38 |
- **score_cap**: Post-score ceiling applied when clinical-adjacent boundary conditions are not satisfied.
|
| 39 |
- **C1_penalty**: Only code-integrity item that currently subtracts from the final score.
|
|
|
|
| 265 |
|
| 266 |
Only C1 affects the final score. C2–C6 are reported as risk surfaces because they represent elevated engineering or governance concern but do not rise to the level of score penalties in the current calibration.
|
| 267 |
|
| 268 |
+
The C4/C5/C6 split is deliberate in `1.8.0`:
|
| 269 |
|
| 270 |
- `C4` is reserved for executable fail-open exception behavior in code.
|
| 271 |
- `C5` is reserved for compliance, legal, or clinical-boundary integrity warnings surfaced from reviewed repository sources.
|
docs/UI_HTML_REPORT.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
# HTML Report Dashboard
|
| 2 |
|
| 3 |
-
Version: 1.
|
| 4 |
Status: Active HTML/PDF surface note
|
| 5 |
|
| 6 |
-
STEM BIO-AI ships a **self-contained interactive HTML dashboard** as the primary human-readable output format. In the current `1.
|
| 7 |
|
| 8 |
## Generating the Report
|
| 9 |
|
|
@@ -120,7 +120,7 @@ The 5-page and 7-page packets both include AIRI coverage and bounded `why:` expl
|
|
| 120 |
|
| 121 |

|
| 122 |
|
| 123 |
-
*Screenshot: current 1.
|
| 124 |
|
| 125 |
## Color Palette
|
| 126 |
|
|
@@ -158,7 +158,7 @@ This helps reviewers understand *why* a risk appears in AIRI coverage without im
|
|
| 158 |
|
| 159 |
Coverage rate = covered risk IDs / total IDs in detector scope.
|
| 160 |
|
| 161 |
-
Representative active mapping rows in the `1.
|
| 162 |
|
| 163 |
| Detector | AIRI Risk IDs Covered |
|
| 164 |
|----------|----------------------|
|
|
|
|
| 1 |
# HTML Report Dashboard
|
| 2 |
|
| 3 |
+
Version: 1.8.0
|
| 4 |
Status: Active HTML/PDF surface note
|
| 5 |
|
| 6 |
+
STEM BIO-AI ships a **self-contained interactive HTML dashboard** as the primary human-readable output format. In the current `1.8.0` line, the dashboard reflects the post-`C4/C5/C6` code-integrity split, AIRI detector-to-risk reasoning, policy-surface metadata, and audit-freshness summaries. The report is a single `.html` file with inline CSS, SVG, and JavaScript — zero external dependencies, fully offline-capable.
|
| 7 |
|
| 8 |
## Generating the Report
|
| 9 |
|
|
|
|
| 120 |
|
| 121 |

|
| 122 |
|
| 123 |
+
*Screenshot: current 1.8.0 HTML dashboard surface with the post-C4/C5/C6 integrity split and AIRI domain filtering.*
|
| 124 |
|
| 125 |
## Color Palette
|
| 126 |
|
|
|
|
| 158 |
|
| 159 |
Coverage rate = covered risk IDs / total IDs in detector scope.
|
| 160 |
|
| 161 |
+
Representative active mapping rows in the `1.8.0` line:
|
| 162 |
|
| 163 |
| Detector | AIRI Risk IDs Covered |
|
| 164 |
|----------|----------------------|
|
docs/assets/report-preview/yorkeccak_bio_report.html
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
pyproject.toml
CHANGED
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
| 4 |
|
| 5 |
[project]
|
| 6 |
name = "stem-ai"
|
| 7 |
-
version = "1.
|
| 8 |
description = "STEM BIO-AI deterministic evidence-surface scanner for bio/medical AI repositories"
|
| 9 |
readme = "README.md"
|
| 10 |
requires-python = ">=3.9"
|
|
|
|
| 4 |
|
| 5 |
[project]
|
| 6 |
name = "stem-ai"
|
| 7 |
+
version = "1.8.0"
|
| 8 |
description = "STEM BIO-AI deterministic evidence-surface scanner for bio/medical AI repositories"
|
| 9 |
readme = "README.md"
|
| 10 |
requires-python = ">=3.9"
|
stem_ai/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
"""STEM BIO-AI local audit CLI."""
|
| 2 |
|
| 3 |
-
__version__ = "1.
|
| 4 |
|
| 5 |
|
| 6 |
|
|
|
|
| 1 |
"""STEM BIO-AI local audit CLI."""
|
| 2 |
|
| 3 |
+
__version__ = "1.8.0"
|
| 4 |
|
| 5 |
|
| 6 |
|
stem_ai/cli.py
CHANGED
|
@@ -228,7 +228,7 @@ def _add_shared_arguments(parser: argparse.ArgumentParser, *, default_format: st
|
|
| 228 |
"--policy",
|
| 229 |
choices=_policy_choices(),
|
| 230 |
default="default",
|
| 231 |
-
help="Named calibration profile to surface in the result (1.
|
| 232 |
)
|
| 233 |
parser.add_argument(
|
| 234 |
"--explain",
|
|
@@ -618,7 +618,7 @@ def _print_policy_explain(profile_name: str) -> int:
|
|
| 618 |
print(f"Read Mode: {profile['profile_read_mode']}")
|
| 619 |
print(
|
| 620 |
"Scoring Effect: "
|
| 621 |
-
"mirror-only in 1.
|
| 622 |
)
|
| 623 |
print()
|
| 624 |
print(
|
|
@@ -734,7 +734,7 @@ def _print_simulation_tail(simulation: dict) -> None:
|
|
| 734 |
print(f"Score Delta: {simulation['score_delta']:+d}")
|
| 735 |
print(f"Raw Delta: {simulation['raw_score_delta']:+d}")
|
| 736 |
if simulation["replication_posture_changed"] and not simulation["formal_score_changed"]:
|
| 737 |
-
print("Formal Score: unchanged; Stage 4 remains a separate replication lane in 1.
|
| 738 |
|
| 739 |
|
| 740 |
def _print_policy_derive(args: argparse.Namespace) -> int:
|
|
|
|
| 228 |
"--policy",
|
| 229 |
choices=_policy_choices(),
|
| 230 |
default="default",
|
| 231 |
+
help="Named calibration profile to surface in the result (1.8.0 keeps scan-time policy selection mirror-only)",
|
| 232 |
)
|
| 233 |
parser.add_argument(
|
| 234 |
"--explain",
|
|
|
|
| 618 |
print(f"Read Mode: {profile['profile_read_mode']}")
|
| 619 |
print(
|
| 620 |
"Scoring Effect: "
|
| 621 |
+
"mirror-only in 1.8.0; selection is surfaced in artifacts but does not yet reweight score computation"
|
| 622 |
)
|
| 623 |
print()
|
| 624 |
print(
|
|
|
|
| 734 |
print(f"Score Delta: {simulation['score_delta']:+d}")
|
| 735 |
print(f"Raw Delta: {simulation['raw_score_delta']:+d}")
|
| 736 |
if simulation["replication_posture_changed"] and not simulation["formal_score_changed"]:
|
| 737 |
+
print("Formal Score: unchanged; Stage 4 remains a separate replication lane in 1.8.0")
|
| 738 |
|
| 739 |
|
| 740 |
def _print_policy_derive(args: argparse.Namespace) -> int:
|
stem_ai/policy_intent.py
CHANGED
|
@@ -141,7 +141,7 @@ def simulate_policy_outcome(
|
|
| 141 |
if replication_posture_changed and final_score == baseline_final:
|
| 142 |
notes.append(
|
| 143 |
"Formal score remained unchanged because Stage 4 is still a separate "
|
| 144 |
-
"replication lane in 1.
|
| 145 |
)
|
| 146 |
|
| 147 |
simulation = {
|
|
|
|
| 141 |
if replication_posture_changed and final_score == baseline_final:
|
| 142 |
notes.append(
|
| 143 |
"Formal score remained unchanged because Stage 4 is still a separate "
|
| 144 |
+
"replication lane in 1.8.0."
|
| 145 |
)
|
| 146 |
|
| 147 |
simulation = {
|
stem_ai/render.py
CHANGED
|
@@ -335,7 +335,7 @@ def _calibration_effect_note(calibration: dict[str, Any]) -> str | None:
|
|
| 335 |
if calibration.get("profile_read_mode") != "mirror_only":
|
| 336 |
return None
|
| 337 |
return (
|
| 338 |
-
"mirror-only in 1.
|
| 339 |
"but authoritative scan scoring still follows deterministic runtime constants. "
|
| 340 |
"Preview-only posture changes, including Stage 4 replication emphasis, do not "
|
| 341 |
"change the formal score until a future read-through phase. "
|
|
|
|
| 335 |
if calibration.get("profile_read_mode") != "mirror_only":
|
| 336 |
return None
|
| 337 |
return (
|
| 338 |
+
"mirror-only in 1.8.0 — selected profile metadata is surfaced in artifacts, "
|
| 339 |
"but authoritative scan scoring still follows deterministic runtime constants. "
|
| 340 |
"Preview-only posture changes, including Stage 4 replication emphasis, do not "
|
| 341 |
"change the formal score until a future read-through phase. "
|
tests/test_scanner_regressions.py
CHANGED
|
@@ -2452,10 +2452,10 @@ def test_markdown_and_explain_surface_calibration_profile(tmp_path: Path) -> Non
|
|
| 2452 |
html = render_html(result)
|
| 2453 |
|
| 2454 |
assert "**Calibration Profile:** `default` (`ca-policy-1.0`, `mirror_only`, `authoritative_release`)" in markdown
|
| 2455 |
-
assert "**Calibration Effect:** mirror-only in 1.
|
| 2456 |
assert "Stage 4 replication emphasis" in markdown
|
| 2457 |
assert "Policy : default [ca-policy-1.0; mirror_only; authoritative_release]" in explain
|
| 2458 |
-
assert "Policy Mode: mirror-only in 1.
|
| 2459 |
assert "Stage 4 replication emphasis" in explain
|
| 2460 |
assert "authoritative_release" in html
|
| 2461 |
assert "mirror_only" in html
|
|
@@ -2508,7 +2508,7 @@ def test_policy_explain_cli_surfaces_profile_details(capsys) -> None:
|
|
| 2508 |
|
| 2509 |
assert code == 0
|
| 2510 |
assert "STEM BIO-AI policy: strict_clinical_adjacency" in captured.out
|
| 2511 |
-
assert "Scoring Effect: mirror-only in 1.
|
| 2512 |
assert "Clinical Caps: no_disclaimer_cap=60 | t0_hard_floor_cap=35" in captured.out
|
| 2513 |
assert "Default Diff:" in captured.out
|
| 2514 |
|
|
@@ -2861,7 +2861,7 @@ def test_policy_simulate_cli_accepts_local_profile_file(tmp_path: Path, capsys)
|
|
| 2861 |
assert "Profile File:" in captured.out
|
| 2862 |
assert "Profile Hash:" in captured.out
|
| 2863 |
assert "Replication: baseline=baseline | simulation=stronger_than_baseline" in captured.out
|
| 2864 |
-
assert "Formal Score: unchanged; Stage 4 remains a separate replication lane in 1.
|
| 2865 |
|
| 2866 |
|
| 2867 |
def test_policy_simulate_cli_rejects_mixing_profile_file_and_intent_answers(tmp_path: Path) -> None:
|
|
|
|
| 2452 |
html = render_html(result)
|
| 2453 |
|
| 2454 |
assert "**Calibration Profile:** `default` (`ca-policy-1.0`, `mirror_only`, `authoritative_release`)" in markdown
|
| 2455 |
+
assert "**Calibration Effect:** mirror-only in 1.8.0" in markdown
|
| 2456 |
assert "Stage 4 replication emphasis" in markdown
|
| 2457 |
assert "Policy : default [ca-policy-1.0; mirror_only; authoritative_release]" in explain
|
| 2458 |
+
assert "Policy Mode: mirror-only in 1.8.0" in explain
|
| 2459 |
assert "Stage 4 replication emphasis" in explain
|
| 2460 |
assert "authoritative_release" in html
|
| 2461 |
assert "mirror_only" in html
|
|
|
|
| 2508 |
|
| 2509 |
assert code == 0
|
| 2510 |
assert "STEM BIO-AI policy: strict_clinical_adjacency" in captured.out
|
| 2511 |
+
assert "Scoring Effect: mirror-only in 1.8.0" in captured.out
|
| 2512 |
assert "Clinical Caps: no_disclaimer_cap=60 | t0_hard_floor_cap=35" in captured.out
|
| 2513 |
assert "Default Diff:" in captured.out
|
| 2514 |
|
|
|
|
| 2861 |
assert "Profile File:" in captured.out
|
| 2862 |
assert "Profile Hash:" in captured.out
|
| 2863 |
assert "Replication: baseline=baseline | simulation=stronger_than_baseline" in captured.out
|
| 2864 |
+
assert "Formal Score: unchanged; Stage 4 remains a separate replication lane in 1.8.0" in captured.out
|
| 2865 |
|
| 2866 |
|
| 2867 |
def test_policy_simulate_cli_rejects_mixing_profile_file_and_intent_answers(tmp_path: Path) -> None:
|