release: prepare canonical v1.0.0 identity (#214) - #217
Conversation
|
Implementation for #214 is complete at exact HEAD Exact-head evidence:
No tag creation, release publication, repository dispatch, Product/Protocol/Vault behavior change, or release-authority change was performed. |
miso-develop
left a comment
There was a problem hiding this comment.
Review disposition: REWORK_REQUIRED
Reviewed exact PR head 91d89ff440fff3e1ebbe0099244710ccbd425711 against Issue #214 and parent release-preparation contract #213.
One blocking fail-closed finding identified.
Blocking finding — CMake version parser accepts non-X.Y.Z values by truncation
scripts/validate_release.py::parse_cmake_project_version() currently extracts the version with:
re.findall(
r"\bVERSION\s+([0-9]+\.[0-9]+\.[0-9]+)\b",
project.group("body"),
re.IGNORECASE,
)This does not validate the complete VERSION token. It accepts a longer/nonconforming token by matching only its first three numeric components.
Concrete reproduction against the exact implementation logic:
project(m5authenticator VERSION 1.0.0.1)- parser result:
"1.0.0" - if
kFirmwareVersionand release-profilefirmware_versionare both1.0.0,validate_release()therefore passes the newly-added consistency checks even though the CMake project VERSION is not the required exactX.Y.Zvalue.
The same boundary also permits suffix-like input such as VERSION 1.0.0-beta to be extracted as 1.0.0.
This violates #214's explicit requirements:
- parse
project(m5authenticator VERSION X.Y.Z); - reject a missing/malformed project version;
- require the actual CMake Product/Firmware version to equal metadata/profile;
- fail closed on divergence/malformed values.
Current focused malformed tests cover missing VERSION, two-component 1.0, and a different project name, but do not cover an extra fourth component or suffix/trailing-token case, so this regression remains undetected.
Required completion condition:
- validate the complete CMake VERSION token as the required exact three-component Product/Firmware version rather than accepting a matching prefix;
- add deterministic regression coverage proving a non-X.Y.Z token such as
1.0.0.1is rejected; - retain the existing missing/malformed/divergence tests and both normal /
--require-productionvalidation paths.
No unrelated implementation change is required.
Other reviewed areas
The remaining #214 implementation is consistent with the current contract:
- canonical sources are changed to
1.0.0in exactly:firmware/CMakeLists.txt;firmware/components/m5auth_core/include/m5auth/core/metadata.hpp;firmware/release-profile.json;
- Protocol / Storage Schema / Vault Format remain exactly 2 / 2 / 1;
- security profile remains
encrypted-vault-ram-only-vmk/ v1; production_release_allowedremains true;- package regressions explicitly assert factory/update/target/release-metadata version
1.0.0and v1.0.0-prefixed binary names; - tracked
0.1.0audit is bounded to classified npm metadata, historical compatibility comments, and test/smoke fixtures; - no release authority, tag ruleset, immutable-release, ESP-IDF identity, Product behavior, Protocol, Vault, crypto, persistence, recovery, or Lock semantics changed.
Exact-head automated evidence is otherwise green:
- Foundation #940: SUCCESS.
- release validation prints
M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligible; - release package suite: 16 tests passed;
- Web, Windows Chrome, firmware, isolated ESP-IDF build/package validation, and dependency-lock verification succeeded.
- release validation prints
- Security #943: SUCCESS.
- Issue 117 Screen Snapshot #196: SUCCESS.
refs/tags/v1.0.0: absent (GitHub ref lookup 404).- GitHub Release
v1.0.0: absent (release lookup 404).
Staleness/collision:
- Handoff HEAD matches current PR HEAD.
- PR is open, non-draft, mergeable.
- Current
mainremains exact PR basebc5c3b90f57952f04a80c8ddfcb55b6d384c882e. - Effective diff is limited to the five expected release/version-contract files.
- PR #217 is the only open PR at final Review check.
#214 must not advance to Integration until the parser boundary above is corrected and re-reviewed on the new exact HEAD. No tag or Release operation belongs in this rework.
|
Review rework for #214 is complete at exact HEAD Blocking finding resolved:
Exact-head evidence:
No unrelated change, tag creation, release publication, repository dispatch, or merge was performed. |
miso-develop
left a comment
There was a problem hiding this comment.
Review disposition: REWORK_REQUIRED
Re-reviewed exact PR head f50a6930cc4824c1ae382053438f0f06363b1873 against Issue #214 and parent #213.
The prior blocking finding is partially resolved:
- complete VERSION token is now captured;
1.0.0.1is rejected when it is the matched project VERSION;1.0.0-betais rejected when it is the matched project VERSION;- focused tests cover those malformed tokens through parser-level and both normal/
require_production=Truevalidation paths.
However, one fail-closed parser bypass remains and is blocking.
Blocking finding — commented/string-literal project text can mask the actual CMake project VERSION
parse_cmake_project_version() still locates the project declaration with:
re.search(
r"project\s*\(\s*m5authenticator\b(?P<body>[^)]*)\)",
source,
re.IGNORECASE | re.DOTALL,
)This search operates on raw CMake source and does not exclude comments or quoted strings. It therefore returns the first textual project(m5authenticator ...) match even when that text is not an active CMake command.
Concrete reproductions against the exact-head parser:
# project(m5authenticator VERSION 1.0.0)
project(m5authenticator VERSION 1.0.0.1)Current parser result: 1.0.0.
Likewise:
# project(m5authenticator VERSION 1.0.0)
project(m5authenticator VERSION 9.9.9)Current parser result: 1.0.0.
A quoted/example string before the real declaration has the same masking effect, e.g.:
set(EXAMPLE "project(m5authenticator VERSION 1.0.0)")
project(m5authenticator VERSION 9.9.9)Current parser result: 1.0.0.
If metadata/profile remain 1.0.0, the newly-added release consistency gate therefore passes despite the actual active CMake Product/Firmware VERSION being malformed or divergent.
This still violates #214's core deterministic requirements:
- parse the actual
project(m5authenticator VERSION X.Y.Z)value; - reject malformed/missing project version;
- require actual CMake Product/Firmware VERSION to equal metadata/profile;
- fail closed on divergence.
Required completion condition:
- ensure inactive/comment/example text cannot satisfy or mask the canonical CMake project declaration;
- add a focused regression in which a commented valid
1.0.0declaration precedes an active malformed/divergent project declaration and verify rejection; - preserve the newly-added complete-token checks for
1.0.0.1and1.0.0-beta; - preserve both normal and production-required validation paths.
No broader CMake parser is required if a narrower deterministic implementation can unambiguously identify the active canonical declaration for the repository contract.
Other re-review results
All other previously reviewed #214 areas remain acceptable:
- the three canonical Product/Firmware sources are exactly
1.0.0; - Protocol / Storage Schema / Vault Format remain 2 / 2 / 1;
- security profile and production eligibility are unchanged;
- release/package tests explicitly assert v1.0.0 manifests, metadata, target version, and filenames;
- tracked
0.1.0audit remains bounded to classified noncanonical sources; - no tag, Release, repository dispatch, release-authority, Ruleset, immutable-Release, ESP-IDF identity, Product behavior, crypto, Vault, recovery, or Lock behavior changed.
Exact-head automated evidence:
- Security #944: SUCCESS.
- Foundation #941: SUCCESS.
- release validation reports
M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligible; - release package suite: 17 tests passed;
- isolated ESP-IDF build and distribution-package validation succeeded;
- generated candidate binaries remain v1.0.0-prefixed.
- release validation reports
- Issue 117 Screen Snapshot #197: SUCCESS.
refs/tags/v1.0.0: absent.- GitHub Release
v1.0.0: absent.
Staleness/collision:
- Handoff HEAD matches current PR HEAD.
- PR is open, non-draft, mergeable.
- Current
mainremains exact PR basebc5c3b90f57952f04a80c8ddfcb55b6d384c882e. - Rework delta from the prior reviewed HEAD changes only
scripts/validate_release.pyandtests/release_package_test.py. - Effective PR diff remains the same five expected release/version-contract files.
- PR #217 is the only open PR at final check.
#214 remains REWORK_REQUIRED until this active-declaration masking boundary is fixed and re-reviewed on a new exact HEAD. No tag or Release operation belongs in this rework.
|
Second Review rework for #214 is complete at exact HEAD Blocking finding resolved:
Focused regression coverage verifies both normal and
Exact-head evidence:
No unrelated change, tag creation, release publication, repository dispatch, or merge was performed. |
miso-develop
left a comment
There was a problem hiding this comment.
Review disposition: READY_FOR_INTEGRATION
Re-reviewed exact PR head 855679f5da8ef4379d8ef00ed56f0bb8b65ae971 against Issue #214 and parent release-preparation contract #213.
No blocking finding remains.
Resolution of prior Review findings
The two prior fail-closed parser findings are resolved.
- Complete VERSION token validation
parse_cmake_project_version()no longer accepts only anX.Y.Zprefix.- It captures the complete non-whitespace VERSION token and requires:
re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+", version). 1.0.0.1is rejected.1.0.0-betais rejected.- Regression coverage exercises both parser-level rejection and both normal /
require_production=Truevalidation paths.
- Inactive CMake text masking
- CMake source is sanitized before canonical project matching.
- Line comments are excluded.
- Bracket comments are excluded.
- Quoted strings are excluded.
- Bracket arguments are excluded.
- Newlines/spacing are preserved so active-command matching remains deterministic.
- The parser requires exactly one active line-rooted
project(m5authenticator ...)declaration. - Commented/quoted/bracketed example text therefore cannot satisfy or mask the canonical declaration.
- Focused regressions verify rejection when inactive valid
1.0.0examples precede:- active malformed
1.0.0.1; - active divergent
9.9.9; - equivalent quoted/bracket-comment/bracket-argument masking cases.
- active malformed
- These regressions run through both normal and production-required validation paths.
The resulting parser remains intentionally narrow to the repository's canonical CMake contract rather than attempting to interpret arbitrary dynamic CMake evaluation, which is appropriate for this deterministic release guard.
Canonical version / compatibility contract
Verified at this exact HEAD:
firmware/CMakeLists.txt: Product/Firmware VERSION =1.0.0.firmware/components/m5auth_core/include/m5auth/core/metadata.hpp:kFirmwareVersion = "1.0.0".firmware/release-profile.json:firmware_version = "1.0.0".- Protocol remains 2.
- Storage Schema remains 2.
- Vault Format remains 1.
- security profile remains
encrypted-vault-ram-only-vmk/ v1. production_release_allowedremains true.- No fourth hand-maintained canonical Product/Firmware version source was introduced.
The validator now requires CMake / runtime metadata / release profile firmware versions to agree while preserving all existing release/security checks.
Package / release metadata verification
Focused release-package coverage verifies:
- 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; - Protocol / Storage / Vault remain 2 / 2 / 1;
- pre-tag candidate
exact_releaseremains false; - generated candidate binaries use the required
m5authenticator-v1.0.0-<build_commit>-...identity; - existing partition/write-plan/security/package checks remain intact.
Exact-head Foundation firmware log confirms:
- release validation OK:
M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligible; - release/package regression suite: 18 tests passed;
- actual generated candidate filenames are v1.0.0-prefixed;
- isolated ESP-IDF build/package validation and dependency-lock verification succeeded.
Remaining 0.1.0 audit
The repository-wide tracked-file regression continues to fail closed on unexpected current 0.1.0 literals.
Remaining occurrences are restricted to the explicitly classified noncanonical categories:
- private npm package metadata;
- historical compatibility references;
- test/smoke fixtures.
No remaining current production/user-facing canonical Product/Firmware source asserts 0.1.0.
Security / release authority boundary
No Product behavior, Protocol vocabulary, Storage Schema, Vault Format/migration behavior, cryptography, Trusted Browser, recovery, Lock semantics, Flash/update layout, ESP-IDF identity, production eligibility, release-authority, provenance/attestation, tag Ruleset, immutable-Release, or legacy-workflow-retirement behavior is changed by this PR.
Exact-head checks:
- Security #946: SUCCESS.
- Foundation #943: SUCCESS.
- Issue 117 Screen Snapshot #199: SUCCESS.
refs/tags/v1.0.0: absent (GitHub ref lookup 404).- GitHub Release
v1.0.0: absent (release lookup 404).
No tag creation, Release publication, or publish_semver_release dispatch occurred.
Staleness / collision
- Handoff HEAD matches current PR HEAD.
- PR #217 is open, non-draft, and mergeable.
- Current
mainremains exact PR basebc5c3b90f57952f04a80c8ddfcb55b6d384c882e. - Rework from the previous reviewed HEAD changes only
scripts/validate_release.pyandtests/release_package_test.py. - Effective PR diff remains exactly the same five expected release/version-contract files.
- PR #217 is the only open PR at final Review check.
Integration boundary
#214 is ready for Integration.
Integration may merge this preparation PR under normal gates but must not create v1.0.0 as part of merging #214.
After #214 integration:
- return to parent #213;
- re-read exact current main;
- #216 becomes the next dependency;
- protected
v1.0.0creation remains a later explicit Human/Integration operation only after #216, manual candidate Pages validation, and the complete #213 exact pre-tag gate.
No additional Security-role review or Human Gate is required for #214 itself.
READY_TO_MERGEHEAD: Integration reconstruction:
STATE: READY_TO_MERGE |
INTEGRATEDPR: #217 Integration evidence:
STATE: INTEGRATED |
Closes #214
Parent: #213
Scope
0.1.0to1.0.0scripts/validate_release.pyto parse and fail closed on the CMake project version1.0.00.1.0literals and reject any occurrence outside classified noncanonical sourcesCanonical release identity
All three authoritative Product/Firmware sources are now exactly
1.0.0:firmware/CMakeLists.txtfirmware/components/m5auth_core/include/m5auth/core/metadata.hppfirmware/release-profile.jsonvalidate_release.pynow parsesproject(m5authenticator VERSION X.Y.Z)directly and requires:X.Y.ZCMake product version;kFirmwareVersion;firmware_version.Missing, malformed, or divergent values fail closed through both normal and
--require-productionvalidation paths.Remaining legacy-version audit
The exact-head tracked-file regression classifies every remaining
0.1.0occurrence as noncanonical:web/package.jsonweb/package-lock.jsonfirmware/components/m5auth_vault/include/m5auth/vault.hpptests/vault_interop_test.cppweb/vite.config.tsweb/src/build-identity.test.tsweb/src/canonical-management-lock-privacy.test.tsweb/src/canonical-management-rekey.test.tsweb/src/canonical-management.e2e.test.tsweb/src/canonical-protocol-v2.test.tsweb/src/canonical-recovery-reset.test.tsweb/src/canonical-reset-cleanup-recovery.test.tsweb/src/canonical-transaction-recovery.test.tsweb/src/firmware-update.test.tsweb/src/management.test.tsweb/src/protocol.test.tsweb/src/serial.test.tsweb/tests/browser/auto-lock-context-smoke.tsNo remaining tracked production/current canonical source asserts
0.1.0.Compatibility boundary
Unchanged:
encrypted-vault-ram-only-vmk/ v1production_release_allowed = trueNo Product behavior, crypto, Vault, Trusted Browser, recovery, Lock, tag Ruleset, immutable-Release, or release-authority change is included.
Exact-head verification
HEAD:
91d89ff440fff3e1ebbe0099244710ccbd425711python scripts/validate_release.py --require-productionproduced:M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligiblem5authenticator-v1.0.0-<build_commit>-...main:bc5c3b90f57952f04a80c8ddfcb55b6d384c882erefs/tags/v1.0.0: absent (404)v1.0.0: absent (404)No protected tag was created and no Release/repository dispatch was performed.
Integration boundary
After independent Review, Integration may merge this preparation change under normal gates but must not create
v1.0.0as part of merging #214.After integration, return to #213 and re-read the exact merged main state. Under the revised sequencing, #216 becomes implementation-ready only after #214 integration; protected
v1.0.0creation remains a later Human/Integration operation.Review rework
Review finding at prior HEAD
91d89ff440fff3e1ebbe0099244710ccbd425711identified that the CMake VERSION parser could accept a non-X.Y.Ztoken by matching only anX.Y.Zprefix.Fixed at exact HEAD
f50a6930cc4824c1ae382053438f0f06363b1873:VERSION;re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+", token);1.0.0.1is rejected;1.0.0-betais rejected;1.0, wrong project-name, and source-divergence coverage remains;require_production=Truepaths deterministically reject the malformed tokens.Exact-head rework evidence:
M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligiblem5authenticator-v1.0.0-<build_commit>-...main:bc5c3b90f57952f04a80c8ddfcb55b6d384c882ev1.0.0tag remains absentv1.0.0remains absentNo unrelated implementation change, tag creation, Release publication, or repository dispatch was performed.
Second Review rework
Re-review finding at prior HEAD
f50a6930cc4824c1ae382053438f0f06363b1873identified that raw-source search could let commented or quoted example text mask the actual active CMake project declaration.Fixed at exact HEAD
855679f5da8ef4379d8ef00ed56f0bb8b65ae971:project(m5authenticator ...)declaration is required;X.Y.Z;1.0.0.1/1.0.0-betafail-closed boundary remains intact.Focused regressions cover, through both normal and
require_production=Truevalidation paths:1.0.0preceding active malformed1.0.0.1;1.0.0preceding active divergent9.9.9;project(... 1.0.0)preceding active divergent9.9.9;Exact-head evidence:
M5StickS3 v1.0.0 protocol=2 storage=2 vault=1 security=encrypted-vault-ram-only-vmk/v1 eligibility=production-eligiblem5authenticator-v1.0.0-<build_commit>-...main:bc5c3b90f57952f04a80c8ddfcb55b6d384c882ev1.0.0tag remains absentv1.0.0remains absentNo unrelated implementation change, tag creation, Release publication, repository dispatch, or merge was performed.