Parent
Owner
- ACTIVE_ROLE:
implementation
- DOMAIN:
infra
State
READY_FOR_REVIEW
Specification baseline
Objective
Prepare the repository's canonical Product/Firmware version for the first stable v1.0.0 release without creating a tag or publishing a Release.
This Task is deliberately limited to:
- canonical SemVer reconciliation;
- deterministic consistency validation;
- package/release-metadata regression coverage.
It does not publish the release.
Required canonical version changes
firmware/CMakeLists.txt
Change:
project(m5authenticator VERSION 0.1.0)
to:
project(m5authenticator VERSION 1.0.0)
firmware/components/m5auth_core/include/m5auth/core/metadata.hpp
Change:
inline constexpr char kFirmwareVersion[] = "0.1.0";
to:
inline constexpr char kFirmwareVersion[] = "1.0.0";
Do not alter the Protocol / Storage / Vault constants.
firmware/release-profile.json
Change:
"firmware_version": "0.1.0"
to:
"firmware_version": "1.0.0"
Preserve:
protocol_version: 2
storage_schema_version: 2
vault_format_version: 1
security_profile: encrypted-vault-ram-only-vmk
security_profile_version: 1
production_release_allowed: true
- all Flash/layout/security fields.
Deterministic version-consistency validation
Extend the existing release validator rather than creating a separate release-version script.
scripts/validate_release.py must:
- parse the CMake
project(m5authenticator VERSION X.Y.Z) value from firmware/CMakeLists.txt;
- reject a missing/malformed project version;
- require it to equal
m5auth::core::kFirmwareVersion;
- require it to equal
firmware/release-profile.json["firmware_version"];
- preserve all existing validation/security checks.
The ordinary:
python scripts/validate_release.py
python scripts/validate_release.py --require-production
paths must both exercise this version consistency check.
Add focused regression coverage that proves divergence fails closed.
Do not introduce a fourth hand-maintained Product/Firmware version constant.
Package/regression expectations
Update/extend the existing release-package test surface so the repository's current production identity is explicitly asserted as 1.0.0.
Candidate packaging from the exact PR head must prove:
- factory manifest version =
1.0.0;
- update manifest version =
1.0.0;
- firmware target version =
1.0.0;
- release metadata firmware version =
1.0.0;
- generated binary names carry
v1.0.0-<build_commit>;
- candidate
exact_release remains false before a matching tag exists;
- Protocol / Storage Schema / Vault Format remain 2 / 2 / 1;
- production eligibility remains true;
- existing partition/write-plan/security/provenance checks remain unchanged.
Do not create or fake a real v1.0.0 Git tag to make tests pass.
Repository-wide 0.1.0 audit
Before finalizing the PR, audit tracked current files for 0.1.0.
Classify every remaining occurrence as one of:
- historical release reference;
- private npm package metadata;
- test/smoke fixture;
- another clearly non-canonical synthetic value.
Known non-canonical values that may remain:
web/package.json version;
- root package version entries in
web/package-lock.json;
web/vite.config.ts QR/layout-smoke fixture;
- references intentionally describing historical
v0.1.0.
Do not mechanically replace all 0.1.0 strings.
If another current production/user-facing canonical version source is discovered, record it on #213 and request Specification clarification if ownership is ambiguous.
README / docs / release notes
No broad README/docs rewrite and no new CHANGELOG are required by this Task.
Only update documentation if the current text falsely identifies 0.1.0 as the current release.
Do not change the current Authorized Release --generate-notes policy.
Non-goals / forbidden actions
Implementation must not:
- create
v1.0.0;
- move/delete any release tag;
- call the
publish_semver_release repository dispatch;
- create/draft/publish a GitHub Release;
- change Protocol / Storage Schema / Vault Format versions;
- change security profile or production eligibility;
- change product behavior;
- change cryptography/Vault/Trusted Browser/recovery/Lock semantics;
- change partition layout/update behavior;
- change release authority, permissions, attestation, provenance, Rulesets, immutable Releases, or legacy workflow retirement;
- change ESP-IDF image tag/digest.
Expected surfaces
Expected production/release-contract files:
firmware/CMakeLists.txt
firmware/components/m5auth_core/include/m5auth/core/metadata.hpp
firmware/release-profile.json
scripts/validate_release.py
- focused release validation/package tests
Avoid unrelated files.
Verification
At exact PR head:
Independent Review is mandatory.
Integration boundary
After Review, Integration may merge this preparation PR when normal merge gates are satisfied.
Integration must not create v1.0.0 as part of merging this Task.
After merge:
The release tag and Authorized Release dispatch are a separate irreversible Integration/Human operation.
References
Parent
Owner
implementationinfraState
READY_FOR_REVIEWSpecification baseline
main:bc5c3b90f57952f04a80c8ddfcb55b6d384c882erefs/tags/v1.0.0: absentObjective
Prepare the repository's canonical Product/Firmware version for the first stable
v1.0.0release without creating a tag or publishing a Release.This Task is deliberately limited to:
It does not publish the release.
Required canonical version changes
firmware/CMakeLists.txtChange:
to:
firmware/components/m5auth_core/include/m5auth/core/metadata.hppChange:
to:
Do not alter the Protocol / Storage / Vault constants.
firmware/release-profile.jsonChange:
to:
Preserve:
protocol_version: 2storage_schema_version: 2vault_format_version: 1security_profile: encrypted-vault-ram-only-vmksecurity_profile_version: 1production_release_allowed: trueDeterministic version-consistency validation
Extend the existing release validator rather than creating a separate release-version script.
scripts/validate_release.pymust:project(m5authenticator VERSION X.Y.Z)value fromfirmware/CMakeLists.txt;m5auth::core::kFirmwareVersion;firmware/release-profile.json["firmware_version"];The ordinary:
paths must both exercise this version consistency check.
Add focused regression coverage that proves divergence fails closed.
Do not introduce a fourth hand-maintained Product/Firmware version constant.
Package/regression expectations
Update/extend the existing release-package test surface so the repository's current production identity is explicitly asserted as
1.0.0.Candidate packaging from the exact PR head must prove:
1.0.0;1.0.0;1.0.0;1.0.0;v1.0.0-<build_commit>;exact_releaseremains false before a matching tag exists;Do not create or fake a real
v1.0.0Git tag to make tests pass.Repository-wide
0.1.0auditBefore finalizing the PR, audit tracked current files for
0.1.0.Classify every remaining occurrence as one of:
Known non-canonical values that may remain:
web/package.jsonversion;web/package-lock.json;web/vite.config.tsQR/layout-smoke fixture;v0.1.0.Do not mechanically replace all
0.1.0strings.If another current production/user-facing canonical version source is discovered, record it on #213 and request Specification clarification if ownership is ambiguous.
README / docs / release notes
No broad README/docs rewrite and no new CHANGELOG are required by this Task.
Only update documentation if the current text falsely identifies
0.1.0as the current release.Do not change the current Authorized Release
--generate-notespolicy.Non-goals / forbidden actions
Implementation must not:
v1.0.0;publish_semver_releaserepository dispatch;Expected surfaces
Expected production/release-contract files:
firmware/CMakeLists.txtfirmware/components/m5auth_core/include/m5auth/core/metadata.hppfirmware/release-profile.jsonscripts/validate_release.pyAvoid unrelated files.
Verification
At exact PR head:
1.0.0;python scripts/validate_release.py --require-productionsucceeds;1.0.0;0.1.0occurrences are classified and recorded in PR evidence;Independent Review is mandatory.
Integration boundary
After Review, Integration may merge this preparation PR when normal merge gates are satisfied.
Integration must not create
v1.0.0as part of merging this Task.After merge:
v1.0.0creation.The release tag and Authorized Release dispatch are a separate irreversible Integration/Human operation.
References
docs/DISTRIBUTION.md.github/workflows/release-authorized.ymlscripts/validate_release.pyscripts/package_firmware.pytests/release_package_test.py