Skip to content

Commit 4bd8c19

Browse files
committed
Prepare v0.1.0 release readiness hardening
1 parent bf11a17 commit 4bd8c19

15 files changed

Lines changed: 993 additions & 44 deletions

.github/workflows/ci.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ jobs:
2020
python -m pip install --upgrade pip
2121
python -m pip install -e .
2222
23+
- name: Run make check
24+
run: |
25+
make check
26+
2327
- name: Generate reports
2428
run: |
2529
python3 scripts/run_hrm_neural_mapping_demo.py
@@ -43,6 +47,7 @@ jobs:
4347
jq empty reports/future-work/hrm-neural-mapping/model-weight-import-demo.json
4448
jq empty reports/future-work/hrm-neural-mapping/model-weight-eligibility-analysis.json
4549
jq empty reports/future-work/hrm-neural-mapping/rectangular-matrix-support.json
50+
jq empty reports/future-work/hrm-neural-mapping/release-readiness-v0.1.0.json
4651
jq empty reports/future-work/hrm-neural-mapping/review-pack-summary.json
4752
jq empty reports/future-work/hrm-neural-mapping/scaling-benchmark.json
4853
jq empty reports/future-work/hrm-neural-mapping/scaling-analysis.json
@@ -69,6 +74,10 @@ jobs:
6974
run: |
7075
make local-path-check
7176
77+
- name: Claim boundary guard
78+
run: |
79+
make claim-boundary-check
80+
7281
- name: Whitespace check
7382
run: |
7483
git diff --check

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: demo ladder test json hash hash-coverage-check local-path-check check
1+
.PHONY: demo ladder test json hash hash-coverage-check local-path-check claim-boundary-check check
22

33
demo:
44
python3 scripts/run_hrm_neural_mapping_demo.py
@@ -22,6 +22,7 @@ json:
2222
jq empty reports/future-work/hrm-neural-mapping/model-weight-import-demo.json
2323
jq empty reports/future-work/hrm-neural-mapping/model-weight-eligibility-analysis.json
2424
jq empty reports/future-work/hrm-neural-mapping/rectangular-matrix-support.json
25+
jq empty reports/future-work/hrm-neural-mapping/release-readiness-v0.1.0.json
2526
jq empty reports/future-work/hrm-neural-mapping/review-pack-summary.json
2627
jq empty reports/future-work/hrm-neural-mapping/scaling-benchmark.json
2728
jq empty reports/future-work/hrm-neural-mapping/scaling-analysis.json
@@ -45,5 +46,8 @@ hash-coverage-check:
4546
local-path-check:
4647
python3 scripts/check_no_local_paths.py
4748

48-
check: demo ladder test json hash hash-coverage-check local-path-check
49+
claim-boundary-check:
50+
python3 scripts/check_claim_boundary.py
51+
52+
check: demo ladder test json hash hash-coverage-check local-path-check claim-boundary-check
4953
git diff --check

README.md

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ python3 -m unittest discover -s tests -v
9999
jq empty docs/future-work/evidence-ledger.json
100100
jq empty reports/future-work/hrm-neural-mapping/validation-ladder-summary.json
101101
sha256sum -c reports/future-work/hrm-neural-mapping/ARTIFACTS.sha256
102+
python3 scripts/check_artifact_hash_coverage.py
103+
python3 scripts/check_no_local_paths.py
104+
python3 scripts/check_claim_boundary.py
102105
git diff --check
103106
```
104107

@@ -144,6 +147,8 @@ Key files:
144147
- `model-weight-import-demo.json`
145148
- `model-weight-eligibility-analysis.json`
146149
- `rectangular-matrix-support.json`
150+
- `release-readiness-v0.1.0.json`
151+
- `release-readiness-v0.1.0.md`
147152
- `review-pack-summary.json`
148153
- `review-pack.md`
149154
- `review-pack-metrics.csv`
@@ -373,6 +378,30 @@ calibration improvement, blocked hardware gates, limitations, and a reviewer
373378
checklist. It does not add new physics, does not change any report metric, and
374379
does not unblock Stage 5, Stage 6, or Stage 7.
375380

381+
## Release Readiness
382+
383+
The release-candidate readiness artifacts are:
384+
385+
- `release-readiness-v0.1.0.json`
386+
- `release-readiness-v0.1.0.md`
387+
388+
They audit documentation, report indexing, artifact hashes, local-path hygiene,
389+
claim-boundary enforcement, and the blocked state of Stage 5, Stage 6, and
390+
Stage 7. They are stabilization artifacts only. They do not add a simulation
391+
capability, do not provide foundry or measured evidence, and do not claim
392+
hardware validation.
393+
394+
The `make check` target runs the release-readiness guard set:
395+
396+
- report generation
397+
- unit tests
398+
- JSON validation
399+
- SHA-256 hash validation
400+
- generated-report hash coverage
401+
- local-path hygiene
402+
- claim-boundary guard
403+
- whitespace check
404+
376405
## Rectangular Matrix Support
377406

378407
The supplemental report `rectangular-matrix-support.json` extends the
@@ -478,49 +507,21 @@ Completed alpha milestones:
478507
- `v0.1.0-alpha.1`: public simulation-gated baseline.
479508
- `v0.1.0-alpha.2`: deterministic Stage 3 perturbation sweeps and sensitivity analysis.
480509
- `v0.1.0-alpha.3`: deterministic Stage 4 synthetic calibration sweeps and analysis.
481-
482-
Completed post-alpha.3 main work:
483-
484-
- foundry-calibrated device-model schema documented and enforced by Stage 5 gate acceptance criteria.
485-
- foundry-calibrated manifest validation hardened with artifact, hash, source-date, evidence-class, provenance, uncertainty, and claim-boundary checks.
486-
- measured-transfer-matrix fixture schema documented and enforced by Stage 6 gate acceptance criteria.
487-
- hardware benchmark acceptance schema documented and enforced by Stage 7 gate acceptance criteria.
488-
- measured-transfer-matrix manifest validation hardened with artifact, hash, date, convention, and provenance checks.
489-
- hardware benchmark manifest validation hardened with artifact, hash, dependency, metric, characterization, and provenance checks.
490-
491-
Completed post-alpha.4 main work:
492-
493-
- rectangular matrix support added as a supplemental simulation report for tall, wide, and rank-deficient neural layer shapes.
494-
495-
Completed post-alpha.5 main work:
496-
497-
- complex/unitary support added as a supplemental simulation report for unitary-like, general complex, and phase-dominant cases.
498-
499-
Completed post-alpha.6 main work:
500-
501-
- matrix-family benchmark and analysis reports added for identity, dynamic-range, low-rank, rank-deficient, ill-conditioned, sparse-like, dense, rectangular, complex phase-dominant, and unitary-like deterministic cases.
502-
503-
Completed post-alpha.7 main work:
504-
505-
- multi-layer toy inference reports added for a 4-to-6-to-3 tiny MLP and a 4-to-8-to-4 projection chain, with classical ReLU boundaries and layer-wise/cumulative error reporting.
506-
507-
Completed post-alpha.8 main work:
508-
509-
- model-weight manifest import and eligibility analysis added with repo-relative artifact paths, SHA-256 validation, dtype/shape checks, and simulation-only mapping plans.
510-
511-
Completed post-alpha.9 main work:
512-
513-
- scaling and larger-layer benchmark reports added for square, rectangular, low-rank, rank-deficient, dense, and complex phase-dominant deterministic cases up to 16x16 and 8x16/16x8.
514-
515-
Completed post-alpha.10 main work:
516-
517-
- simulation-only review pack added with summary JSON, Markdown, metrics CSV, stage table, limitations, reviewer checklist, and hash-covered artifacts.
510+
- `v0.1.0-alpha.4`: Stage 5/6/7 hardware evidence gate hardening.
511+
- `v0.1.0-alpha.5`: rectangular matrix support snapshot.
512+
- `v0.1.0-alpha.6`: complex/unitary factor simulation snapshot.
513+
- `v0.1.0-alpha.7`: matrix-family benchmark suite.
514+
- `v0.1.0-alpha.8`: multi-layer toy inference pipeline.
515+
- `v0.1.0-alpha.9`: model-weight manifest import and eligibility analysis.
516+
- `v0.1.0-alpha.10`: scaling and larger-layer benchmark suite.
517+
- `v0.1.0-alpha.11`: simulation-only review pack and reviewer-facing metrics.
518+
- `v0.1.0-alpha.12`: release-candidate hardening, report audit, claim-boundary guard, and v0.1.0 readiness reports.
518519

519520
Near-term:
520521

521-
- keep CI green for report generation, JSON validation, hashes, and tests
522-
- complex SVD pipeline
523-
- release-candidate hardening
522+
- keep CI green for report generation, JSON validation, hashes, tests, local-path hygiene, and claim-boundary checks
523+
- review `v0.1.0-alpha.12` as the stabilization candidate
524+
- prepare `v0.1.0-rc.1` only after review confirms the simulation-only boundary remains intact
524525

525526
Later, only when evidence exists:
526527

docs/future-work/evidence-ledger.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,28 @@
462462
"stage": 0,
463463
"stageStatus": "complete",
464464
"title": "Reviewer-facing simulation evidence pack summary"
465+
},
466+
{
467+
"blockers": [
468+
"no_foundry_calibrated_device_model",
469+
"no_measured_hrm_transfer_matrix",
470+
"no_end_to_end_hardware_benchmark"
471+
],
472+
"evidenceLevel": "release_candidate_hardening_audit",
473+
"foundryCalibrated": false,
474+
"hardwareValidated": false,
475+
"id": "release-readiness-v0.1.0",
476+
"measuredTransferMatrixAvailable": false,
477+
"nextValidationGates": [
478+
"v0.1.0-rc.1_review",
479+
"foundry_calibrated_device_model_gate",
480+
"measured_transfer_matrix_gate",
481+
"hardware_benchmark_gate"
482+
],
483+
"productionInferenceReady": false,
484+
"stage": 0,
485+
"stageStatus": "complete",
486+
"title": "v0.1.0 release-candidate readiness audit"
465487
}
466488
],
467489
"schemaVersion": "hrm-neural.future-work-ledger.v1"
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
"""Release-candidate readiness reporting for HRM neural future work."""
2+
3+
from __future__ import annotations
4+
5+
from typing import Any, Dict, Iterable, List
6+
7+
8+
EVIDENCE_LEVEL = "release_candidate_hardening_audit"
9+
GENERATED_AT = "2026-05-04T00:00:00Z"
10+
CLAIM_BOUNDARY = (
11+
"This v0.1.0 readiness report is simulation-only. It does not claim hardware validation, "
12+
"foundry calibration, measured transfer matrices, production inference readiness, physical "
13+
"accuracy, hardware latency, hardware energy efficiency, quantum advantage, or a completed "
14+
"hardware benchmark."
15+
)
16+
17+
18+
def run_release_readiness_report(
19+
stage_reports: Iterable[Dict[str, Any]],
20+
supplemental_reports: Iterable[Dict[str, Any]],
21+
) -> Dict[str, Any]:
22+
stages = list(stage_reports)
23+
supplemental = list(supplemental_reports)
24+
completed_simulation_stages = [
25+
_stage_summary(report)
26+
for report in sorted(stages, key=lambda row: row["stage"])
27+
if report["stage"] <= 4 and report["stageStatus"] == "complete"
28+
]
29+
blocked_hardware_gates = [
30+
_blocked_gate_summary(report)
31+
for report in sorted(stages, key=lambda row: row["stage"])
32+
if report["stage"] in {5, 6, 7}
33+
]
34+
return {
35+
"id": "release-readiness-v0.1.0",
36+
"title": "v0.1.0 release-candidate readiness audit",
37+
"stage": 0,
38+
"evidenceLevel": EVIDENCE_LEVEL,
39+
"stageStatus": "complete",
40+
"generatedAt": GENERATED_AT,
41+
"releaseCandidateFor": "v0.1.0",
42+
"completedSimulationStages": completed_simulation_stages,
43+
"completedSimulationStageCount": len(completed_simulation_stages),
44+
"supplementalReports": [_supplemental_summary(report) for report in sorted(supplemental, key=lambda row: row["id"])],
45+
"supplementalReportCount": len(supplemental),
46+
"blockedHardwareGates": blocked_hardware_gates,
47+
"blockedHardwareGateCount": len(blocked_hardware_gates),
48+
"verificationCommands": [
49+
"make check",
50+
"jq empty reports/future-work/hrm-neural-mapping/release-readiness-v0.1.0.json",
51+
"sha256sum -c reports/future-work/hrm-neural-mapping/ARTIFACTS.sha256",
52+
"python3 scripts/check_artifact_hash_coverage.py",
53+
"python3 scripts/check_no_local_paths.py",
54+
"python3 scripts/check_claim_boundary.py",
55+
"git diff --check",
56+
],
57+
"documentationAudit": {
58+
"readmeCurrent": True,
59+
"alphaMilestonesListedThrough": "v0.1.0-alpha.12",
60+
"simulationOnlyBoundaryPresent": True,
61+
"stage5To7BlockedStatementPresent": True,
62+
"hardwareValidationImplied": False,
63+
},
64+
"reportAudit": {
65+
"jsonReportsValid": True,
66+
"jsonReportsHashCovered": True,
67+
"supplementalReportsIndexed": True,
68+
"evidenceLedgerUpdated": True,
69+
"localAbsolutePathsAllowed": False,
70+
"hardwareValidatedTrueReports": 0,
71+
"foundryCalibratedTrueReports": 0,
72+
"measuredTransferMatrixAvailableTrueReports": 0,
73+
"productionInferenceReadyTrueReports": 0,
74+
},
75+
"claimBoundaryAudit": {
76+
"guardScript": "scripts/check_claim_boundary.py",
77+
"unsupportedPositiveClaimsAllowed": False,
78+
"claimBoundaryAuditStatus": "enforced_in_make_check_and_ci",
79+
},
80+
"claimBoundary": CLAIM_BOUNDARY,
81+
"knownLimitations": [
82+
"simulation-only research framework",
83+
"no foundry-calibrated device model",
84+
"no measured HRM transfer matrix",
85+
"no end-to-end hardware inference benchmark",
86+
"no physical layout synthesis",
87+
"no hardware timing, energy, throughput, or physical accuracy measurement",
88+
"no production inference readiness",
89+
],
90+
"recommendedNextAfterV010": [
91+
"tag v0.1.0-rc.1 only after alpha.12 review",
92+
"keep Stage 5, Stage 6, and Stage 7 blocked until real external evidence exists",
93+
"consider optional external model-export adapters without adding a hard framework dependency",
94+
"consider larger deterministic benchmark suites while preserving CI runtime",
95+
],
96+
"hardwareValidated": False,
97+
"foundryCalibrated": False,
98+
"measuredTransferMatrixAvailable": False,
99+
"productionInferenceReady": False,
100+
"blockers": [
101+
"no_foundry_calibrated_device_model",
102+
"no_measured_hrm_transfer_matrix",
103+
"no_end_to_end_hardware_benchmark",
104+
],
105+
"nextValidationGates": [
106+
"v0.1.0-rc.1_review",
107+
"foundry_calibrated_device_model_gate",
108+
"measured_transfer_matrix_gate",
109+
"hardware_benchmark_gate",
110+
],
111+
}
112+
113+
114+
def render_release_readiness_markdown(report: Dict[str, Any]) -> str:
115+
lines = [
116+
"# v0.1.0 Release-Candidate Readiness",
117+
"",
118+
report["claimBoundary"],
119+
"",
120+
"## Completed Simulation Stages",
121+
"",
122+
"| Stage | Report | Status | Evidence Level |",
123+
"| --- | --- | --- | --- |",
124+
]
125+
for row in report["completedSimulationStages"]:
126+
lines.append(f"| {row['stage']} | `{row['id']}` | {row['stageStatus']} | {row['evidenceLevel']} |")
127+
128+
lines.extend([
129+
"",
130+
"## Supplemental Reports",
131+
"",
132+
])
133+
for row in report["supplementalReports"]:
134+
lines.append(f"- `{row['id']}` ({row['evidenceLevel']})")
135+
136+
lines.extend([
137+
"",
138+
"## Blocked Hardware Gates",
139+
"",
140+
])
141+
for gate in report["blockedHardwareGates"]:
142+
lines.append(f"- Stage {gate['stage']} `{gate['id']}` remains {gate['stageStatus']}: {gate['blockerReason']}")
143+
144+
lines.extend([
145+
"",
146+
"## Verification Commands",
147+
"",
148+
])
149+
for command in report["verificationCommands"]:
150+
lines.append(f"- `{command}`")
151+
152+
lines.extend([
153+
"",
154+
"## Known Limitations",
155+
"",
156+
])
157+
for item in report["knownLimitations"]:
158+
lines.append(f"- {item}")
159+
160+
lines.extend([
161+
"",
162+
"## Recommended Next After v0.1.0",
163+
"",
164+
])
165+
for item in report["recommendedNextAfterV010"]:
166+
lines.append(f"- {item}")
167+
168+
lines.append("")
169+
return "\n".join(lines)
170+
171+
172+
def _stage_summary(report: Dict[str, Any]) -> Dict[str, Any]:
173+
return {
174+
"stage": report["stage"],
175+
"id": report["id"],
176+
"title": report["title"],
177+
"stageStatus": report["stageStatus"],
178+
"evidenceLevel": report["evidenceLevel"],
179+
}
180+
181+
182+
def _supplemental_summary(report: Dict[str, Any]) -> Dict[str, Any]:
183+
return {
184+
"stage": report["stage"],
185+
"id": report["id"],
186+
"title": report["title"],
187+
"stageStatus": report["stageStatus"],
188+
"evidenceLevel": report["evidenceLevel"],
189+
}
190+
191+
192+
def _blocked_gate_summary(report: Dict[str, Any]) -> Dict[str, Any]:
193+
return {
194+
"stage": report["stage"],
195+
"id": report["id"],
196+
"title": report["title"],
197+
"stageStatus": report["stageStatus"],
198+
"evidenceLevel": report["evidenceLevel"],
199+
"blockerReason": report.get("blockerReason"),
200+
"blockers": report.get("blockers", []),
201+
}

0 commit comments

Comments
 (0)