diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bb8ec7c..d9b6021 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,7 +9,7 @@ # catch-all. # -# WHY THESE PATHS NAME TWO OWNERS AND NOT ONE. +# WHY THESE PATHS NAME TWO ACCOUNTS AND NOT ONE. # # They named only @0j0bit until 2026-09-12. That deadlocks: GitHub does not let # anyone approve their own pull request, and the branch ruleset grants no @@ -18,10 +18,17 @@ # change to hit it would have been the one recording rows 27 and 37, which # touches /governance/ and /releases/. # -# Both named accounts have write access, which a code owner must have to count. -# These lines currently resolve to the same two people as the catch-all, so -# their present effect is documentary: they record which paths are authorities. -# If the catch-all ever widens, they narrow again on their own. +# @0j0bit and @sed-boi are two GitHub accounts controlled by the SAME project +# owner. Either account may satisfy the code-owner review requirement for a +# change it did not author -- in practice, changes proposed by the +# mcl-release-governor App and reviewed as @0j0bit. This is account redundancy, +# NOT independent two-person review, and nothing here claims separation of +# duties. +# +# Both accounts have write access, which a code owner must have to count. The +# path lines below name the same accounts as the catch-all, so their present +# effect is documentary: they record which paths are authorities. If the +# catch-all ever widens, they narrow again on their own. * @0j0bit @sed-boi diff --git a/conformance/independent/20260913-public-candidate/HEADS.json b/conformance/independent/20260913-public-candidate/HEADS.json new file mode 100644 index 0000000..0c8fdfd --- /dev/null +++ b/conformance/independent/20260913-public-candidate/HEADS.json @@ -0,0 +1,16 @@ +{ + "release_repositories_at_public_qualification": { + "mcl-core": "66c838b7dbf6a4c7c92ab006b53366f22667d955", + "mcl-wire": "415f110e55ed00ddd9c7e4c2c6a241dcdfb17a6e", + "mcl-link": "59214bc1c65295a1cbd0940af3ba223cef4f1b7c", + "mcl-sdk": "3fd3b931d66ab9f3d487091b8fb60b8df4155f54", + "mcl-ap": "686908093cc4f0ca04a295492e81b9c8d5c2945e", + "mcl-ip": "adbe2e64db7ffb7c0b7419ea77cc552d8154913c", + "mcl-ble": "9d35ff05e3ffa83292f71e59f22cd45214ae93fd", + "mcl-uwb": "4ddd18bcf39f1e6778f76ea4572ef53c3e30fe3c" + }, + "organization_infrastructure": { + ".github": "4d35d0cdd372" + }, + "note": "These are the heads public CI and the audit qualified. They are NOT the frozen Public Candidate: mcl-core moves when this closure merges, and the Candidate is sealed later on the final heads. .github is recorded for operations only and is never part of the release manifest." +} diff --git a/conformance/independent/20260913-public-candidate/PUBLIC_AUDIT.txt b/conformance/independent/20260913-public-candidate/PUBLIC_AUDIT.txt new file mode 100644 index 0000000..9dd433e --- /dev/null +++ b/conformance/independent/20260913-public-candidate/PUBLIC_AUDIT.txt @@ -0,0 +1,42 @@ +## repositories (anonymous) +repo visib page actions release tags license contrib/security +mcl-core public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-wire public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-link public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-sdk public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-ap public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-ip public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-ble public 200 200 0 0 200 contributing-from=none security-policy-page=200 +mcl-uwb public 200 200 0 0 200 contributing-from=none security-policy-page=200 +.github public 200 200 0 0 404 contributing-from=none security-policy-page=200 + +## organization profile (anonymous) +org page http=200 profile-README-rendered=1 + +## cross-repo links in READMEs on main (anonymous) + checked 14 unique links, broken=0 + +## evidence index claim paths on main (anonymous) + checked 7 claim paths, missing=0 + +## tracked content: credentials and local identity (all 9 repos at main) + mcl-core credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=6 + mcl-wire credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + mcl-link credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + mcl-sdk credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=10 + mcl-ap credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + mcl-ip credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + mcl-ble credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + mcl-uwb credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + org-profile credential-shaped=0 local-paths(non-evidence)=0 local-paths(retained records)=0 + +## default community-health files (anonymous) +community profile mcl-wire: contributing -> https://github.com/machine-contact-layer/.github/blob/main/CONTRIBUTING.md +community profile mcl-core: contributing -> https://github.com/machine-contact-layer/mcl-core/blob/main/CONTRIBUTING.md +mcl-wire security policy page: shows the organization-wide default policy +mcl-ble security policy page: shows the organization-wide default policy +mcl-core security policy page: shows the mcl-core policy (Release gate item 23) +mcl-wire community page links CONTRIBUTING from .github +mcl-uwb community page links CONTRIBUTING from .github + +.github has no LICENSE: it is organization infrastructure and carries no MCL release content. diff --git a/conformance/independent/20260913-public-candidate/PUBLIC_CI.json b/conformance/independent/20260913-public-candidate/PUBLIC_CI.json new file mode 100644 index 0000000..add2cd6 --- /dev/null +++ b/conformance/independent/20260913-public-candidate/PUBLIC_CI.json @@ -0,0 +1,70 @@ +{ + "receipt": "20260913-public-candidate", + "event": "workflow_dispatch on main, after mcl-ap #1 and mcl-core #1 merged", + "ci": { + "mcl-core": { + "run": 34732269868, + "head": "66c838b7dbf6", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-wire": { + "run": 34732271489, + "head": "415f110e55ed", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-link": { + "run": 34732273058, + "head": "59214bc1c652", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-sdk": { + "run": 34732274496, + "head": "3fd3b931d66a", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-ap": { + "run": 34732275914, + "head": "686908093cc4", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-ip": { + "run": 34732277584, + "head": "adbe2e64db7f", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-ble": { + "run": 34732279462, + "head": "9d35ff05e3ff", + "build (gcc)": "success", + "build (clang)": "success" + }, + "mcl-uwb": { + "run": 34732281385, + "head": "4ddd18bcf39f", + "build (gcc)": "success", + "build (clang)": "success" + } + }, + "release-gates": { + "repository": "mcl-core", + "run": 34732282757, + "head": "66c838b7dbf6", + "posix-gates": "success", + "cross_repository_checkout": "all eight release repositories, public" + }, + "superseded_failure": { + "release-gates run": 34708065754, + "conclusion": "failure", + "cause": "two mcl-ap/experiments/011 run.log digests recorded over Windows CRLF working-tree bytes; corrected by mcl-ap #1, gate hardened by mcl-core #1" + }, + "local_exact_head": { + "posix_rehearsal_checks_passed": 22, + "msvc_test_targets_passed": 44 + } +} diff --git a/conformance/independent/20260913-public-candidate/README.md b/conformance/independent/20260913-public-candidate/README.md new file mode 100644 index 0000000..c729692 --- /dev/null +++ b/conformance/independent/20260913-public-candidate/README.md @@ -0,0 +1,46 @@ +# Public Candidate operations receipt + +Receipts for release gate rows 27 and 37, taken on 2026-09-13 after all nine +repositories were made public. + +| file | what it records | +| --- | --- | +| `PUBLIC_AUDIT.txt` | the logged-out audit, run with no token and no credential helper | +| `PUBLIC_CI.json` | the qualifying public `ci` and `release-gates` runs, by run id | +| `HEADS.json` | the heads those runs qualified, and `.github` separately | +| `releases/v1.0.0/GOVERNANCE_RECEIPT.json` | the live read-back of every ruleset | + +## What the audit found + +All eight release repositories and `.github` are anonymously readable. The +organization profile renders. Every release repository serves its LICENSE, a +security policy and a contributing guide: `mcl-core` its own, the other seven +through the default community-health files in `.github`, verified from the +community profile and security-policy pages rather than assumed. The 14 unique +cross-repository links in the READMEs and the 7 evidence-index claim paths all +resolve. No credential-shaped string exists in any tracked file. Absolute user +paths appear only in retained evidence records, which +`check-publication-readiness.sh` lists as disclosure decisions rather than +defects. There are zero tags and zero GitHub Releases. + +## What public qualification found first + +The first public `release-gates` run failed, and it was right to. Two digests +under `mcl-ap/experiments/011-bootstrap-over-air` had been recorded over a +Windows working tree still holding CRLF bytes, while Git stores LF; a Windows +sweep reported them passing because it read the wrong bytes. `mcl-ap` #1 +corrected the two records without touching the measurements, and `mcl-core` #1 +made the digest gate compare the working tree against the committed blob. Both +were merged before the qualifying runs recorded in `PUBLIC_CI.json`. + +## Review, stated accurately + +`@0j0bit` and `@sed-boi` are two GitHub accounts controlled by the same project +owner. The code-owner requirement is satisfied by the owner reviewing changes +proposed by the `mcl-release-governor` App. That is account redundancy, not +independent two-person review. + +## What this does not establish + +These receipts record operations. They are not review: row 36, public external +review, remains open, and no Stable tag or GitHub Release exists or is implied. diff --git a/conformance/independent/20260913-public-candidate/SHA256SUMS.txt b/conformance/independent/20260913-public-candidate/SHA256SUMS.txt new file mode 100644 index 0000000..219225c --- /dev/null +++ b/conformance/independent/20260913-public-candidate/SHA256SUMS.txt @@ -0,0 +1,4 @@ +bfbedaa4418a41b072cd738a5f850b92b990377fd6917d17864fc685297a36a1 HEADS.json +bbec7b9f8ea785fd7de9954457ef8d32049cb46363f9a886346bfb835fab45d9 PUBLIC_AUDIT.txt +8269525e439b547ba282c50f296ee6b81eec7849f11616622e723847657d02cc PUBLIC_CI.json +ddab2de6b1fc7cc886881d3ffa9314c1942db7e76b870c259f619fac4b7f5fe7 README.md diff --git a/governance/RELEASE_GATE_V1.md b/governance/RELEASE_GATE_V1.md index bf9d284..f796b91 100644 --- a/governance/RELEASE_GATE_V1.md +++ b/governance/RELEASE_GATE_V1.md @@ -58,7 +58,7 @@ and non-overclaiming* is itself the requirement. | 24 | Legal / IPR / contribution closure | `DONE` | `LICENSING.md`, `CONTRIBUTING.md`, `NOTICE` in all eight. | | 25 | Licensing / provenance audit | `DONE` | `check-provenance.sh`, 101 binaries accounted for, in the gates. | | 26 | Governance operationalization | `DONE` | `governance/GOVERNANCE.md`. | -| 27 | Public Candidate operations | `EXTERNAL` | Everything a repository can carry is present and checked: `check-publication-readiness.sh` (front doors, absolute paths, secrets, claim boundary, CI policy) and `governance/PUBLISHING.md` (the order, and the evidence-disclosure decisions the owner takes). **This row used to say the remaining act was one step -- making the eight repositories readable. That was wrong, and preparing the GitHub organisation is what showed it.** Readability is one act in a sequence, and the acts after it decide whether a public repository is governed at all: `tracked readiness -> evidence/disclosure decisions -> CI-qualified frozen heads -> visibility public -> per-repository rulesets and branch/tag protection applied -> governance receipt verified -> logged-out front-door audit -> Public Candidate`. The protections cannot be applied before the flip, and that is a platform constraint rather than an oversight: on GitHub Free both branch protection and repository rulesets answer `403 Upgrade to GitHub Pro or make this repository public` while a repository is private -- measured, not assumed. The interval between flip and rulesets is therefore real. It is small in severity, because becoming public grants no outsider write access, and it is bounded by applying all eight through the release-governor App in one scripted operation rather than a manual settings session. **Organisation-wide rulesets are deliberately NOT part of this row**: they require GitHub Team, visibility does not unlock them, and eight repositories are manageable per-repository. Row 37 carries the receipt. | +| 27 | Public Candidate operations | `DONE` | Closed 2026-09-13, in the order this row used to prescribe: tracked readiness and the evidence-disclosure decisions; CI-qualified heads; all eight release repositories and the `.github` organization-infrastructure repository made public in one pass and read back `private=false`; per-repository rulesets applied immediately and verified (row 37); and a logged-out audit with no token and no credential helper. The audit: all nine anonymously readable; the organization profile rendering; LICENSE, a security policy and a contributing guide served by every release repository -- `mcl-core` its own, the other seven through the default community-health files in `.github`, confirmed from the community-profile and security-policy pages; the 14 cross-repository README links and the 7 evidence-index claim paths resolving; no credential-shaped string in any tracked file; absolute user paths only in retained evidence records that `check-publication-readiness.sh` lists as disclosure decisions; zero tags and zero GitHub Releases. Public qualification on the merged heads: `ci` green with both `build (gcc)` and `build (clang)` on all eight, and `release-gates` completing its cross-repository checkout and passing. **The first public `release-gates` run failed, and was right to**: two `mcl-ap` digests had been recorded over a Windows working tree's CRLF bytes rather than the committed LF blobs. `mcl-ap` #1 corrected the records without touching the measurements and `mcl-core` #1 hardened the gate to compare against committed bytes; both merged before the qualifying runs. Receipts in `conformance/independent/20260913-public-candidate/`. This row records operations, not review: row 36 remains open. | | 28 | Interoperability gate | `DONE` | `V1_SCOPE.md` §5.9 defines what v1.0 requires, in three mandatory parts, and all three are met: (a) two implementations independent of each other's code cross-decoding, C4 803 + C5 108; (b) over-air between distinct devices on IP, BLE and acoustic; (c) the stack compiled by a different toolchain for a different architecture, running on an ESP32-S3 and interoperating over air — `mcl-ap/experiments/008-embedded-node/`. **See the note below: this row was narrowed by an explicit scope decision, and what it no longer covers is stated in the release.** | | 29 | Errata and defect-report process | `DONE` | `REPORTING.md` (what a useful report is, and what happens to it) and `errata/README.md` (the list, empty at v1.0.0 by design, with the format and the never-silently-rewrite rule). `GOVERNANCE.md` §6 defines the process; these make it usable by someone who has just found a defect. | | 30 | Final release bundle | `DONE` | Frozen developer archive built from the eight revisions in `releases/v1.0.0/commits.txt`; the artifact inventory is the source of truth. Release-candidate only until public review and Stable promotion. Final audit metadata is sealed after execution without rebuilding the SDK archive. | @@ -69,7 +69,7 @@ and non-overclaiming* is itself the requirement. | 34a | Android peer verification | `DONE` | `mcl-ip/evidence/e4-android-udp-20260904/` — an iQOO 9 on Android 14 (arm64-v8a) as a third IP peer over its own 2.4 GHz SoftAP. Four cells (both directions × both majors), 142 checks, 0 failed, 400 sustained frames, 0 lost, 0 retries. The Stable path — major-1 Link frames carrying major-1 `PRESENCE` and `TRANSPORT_OFFER` on profile 1 — was exercised in both directions, including refusal of reserved `profile_id` 0, reserved `transport_id` 0, and a Candidate object at the Stable major. Harness in `mcl-ip/hardware/android-udp-peer/`. | | 35 | Builder-interoperability floor | `DONE` | Original `V1_SCOPE.md` section 5.10, restored by owner review on 2026-09-10. Both-role zero-prior DFR/Android migration and physical three-party AP contention session `E0585224` are verified by `conformance/independent/20260910-private-rc/verify_row35.py`. All three transmit and receive; both devices receive Windows; the first selected session survives a competing ACCEPT and migrates with explicit policy. Windows is an AP contention participant only. Later stress cells remain informative, including the failed 120-second recheck. Candidate-profile caveats and public review remain separate. | | 36 | Charter-required public review | `EXTERNAL` | `ARCHITECTURE_CHARTER.md` §6 requires **public review** for a Stable Specification, in addition to interoperability and operational evidence. This row exists because that requirement was being satisfied nowhere: row 27 makes the repositories readable, and readability is not review. **The external act is people outside this project reading the specifications and reporting on them**, after row 27. No fixed waiting period is recorded, because the charter names review, not a timer — the evidence is the reports and what was done about them, tracked as errata. Two consequences while this row is open: no profile is promoted to Stable on private evidence alone, and **AP's Standards Action profile identifier is not assigned** — `AP-BOOTSTRAP-1` and `BLE-ACTIVATE-1` stop at Interoperability Candidate, and profile 192 stays Experimental forever. | -| 37 | GitHub governance receipt | `EXTERNAL` | After row 27's flip, each of the eight repositories carries: protected `main` with pull-request-only merges, at least one approving review, required status checks from `ci`, required conversation resolution, no force push and no deletion; code-owner review on the authority paths named in that repository's `.github/CODEOWNERS`; and a tag rule protecting the `v*` namespace from deletion and mutation, because a release tag that can be moved is not a release tag. **The evidence for this row is machine-readable, not a screenshot.** Every setting is read back through the API after it is written and recorded as a receipt, for the same reason every other number in this ledger is generated rather than typed: a governance setting nobody re-read is a governance setting nobody has. Prerequisite for row 36 -- external reviewers should be reading repositories whose history cannot be quietly rewritten underneath them. | +| 37 | GitHub governance receipt | `DONE` | Closed 2026-09-13. `releases/v1.0.0/GOVERNANCE_RECEIPT.json` is the read-back of live API state, not the write: every asserted parameter recorded as GitHub returned it. **Release class, all eight:** `main` pull-request-only, at least one approving review, code-owner review, conversation resolution, stale reviews dismissed on push, strict required status checks `build (gcc)` and `build (clang)`, no deletion and no force push; a tag ruleset on `refs/tags/v*` blocking deletion, force-update and update. **Infrastructure class, `.github`:** the same review protections and no deletion or force push, with required status checks and a tag ruleset asserted *absent*, because a required context no workflow reports would make every pull request unmergeable. 9/9 verified, 0 skipped, 0 failed, and an independent read-back found **zero bypass actors** on every ruleset. Exercised, not only configured: a direct push to the protected `main` of `.github` by an App holding administrator rights was refused with `GH013`, and the two release-integrity fixes merged only through code-owner review. **What that review means, stated accurately:** `@0j0bit` and `@sed-boi` are two GitHub accounts controlled by the same project owner. Naming both in CODEOWNERS is account redundancy, not separation of duties; MCL has one human project authority, and changes proposed by the `mcl-release-governor` App are reviewed by that owner, not by an independent second person. Organisation-wide rulesets remain out of scope: they require GitHub Team. | ## Row 28: what was narrowed, and what was not diff --git a/releases/v1.0.0/EVIDENCE_INDEX.json b/releases/v1.0.0/EVIDENCE_INDEX.json index f6a65fc..98bfda8 100644 --- a/releases/v1.0.0/EVIDENCE_INDEX.json +++ b/releases/v1.0.0/EVIDENCE_INDEX.json @@ -2,11 +2,11 @@ "generated_by": "mcl-core/tools/build-release-bundle.sh", "version": "v1.0.0", "source_commits": { - "mcl-core": "4b34a66fc3a1cbc87c84e6603d6b8732705451a8", + "mcl-core": "7e75f279c9ae298d16f7185d9bee3f78f678e33b", "mcl-wire": "415f110e55ed00ddd9c7e4c2c6a241dcdfb17a6e", "mcl-link": "59214bc1c65295a1cbd0940af3ba223cef4f1b7c", "mcl-sdk": "3fd3b931d66ab9f3d487091b8fb60b8df4155f54", - "mcl-ap": "24579b3ea3895cdf5ecbed4939d5c62583a92c90", + "mcl-ap": "686908093cc4f0ca04a295492e81b9c8d5c2945e", "mcl-ip": "adbe2e64db7ffb7c0b7419ea77cc552d8154913c", "mcl-ble": "9d35ff05e3ffa83292f71e59f22cd45214ae93fd", "mcl-uwb": "4ddd18bcf39f1e6778f76ea4572ef53c3e30fe3c" @@ -28,13 +28,13 @@ "claim": "embedded_wire1_link1_physical", "path": "mcl-ap/experiments/008-embedded-node/README.md", "sha256": "57a635a92f11a96d8d7dadda3671a6f2010470c1ef3e41b8407f490ae7a0644f", - "repository_commit": "24579b3ea3895cdf5ecbed4939d5c62583a92c90" + "repository_commit": "686908093cc4f0ca04a295492e81b9c8d5c2945e" }, { "claim": "embedded_wire1_link1_digests", "path": "mcl-ap/experiments/008-embedded-node/evidence/e4-node-board-to-host-frame-20260904/SHA256SUMS.txt", "sha256": "233c79864974e39f7d8118ed67e190948f5fa182eeac16499ce12daf8152432b", - "repository_commit": "24579b3ea3895cdf5ecbed4939d5c62583a92c90" + "repository_commit": "686908093cc4f0ca04a295492e81b9c8d5c2945e" }, { "claim": "physical_campaign_digests", @@ -46,13 +46,13 @@ "claim": "row35", "path": "mcl-core/conformance/independent/20260910-private-rc/ROW35.json", "sha256": "15a86cd97d3a27a9bb8d1042c01fa34c782e8fd2a610b3dce555738a6fcd88fd", - "repository_commit": "4b34a66fc3a1cbc87c84e6603d6b8732705451a8" + "repository_commit": "7e75f279c9ae298d16f7185d9bee3f78f678e33b" }, { "claim": "row35_verifier", "path": "mcl-core/conformance/independent/20260910-private-rc/verify_row35.py", "sha256": "e9ec451f4cf3262ada27db0f054ebd6300fe923ead0e1b95e13d7acbedf62923", - "repository_commit": "4b34a66fc3a1cbc87c84e6603d6b8732705451a8" + "repository_commit": "7e75f279c9ae298d16f7185d9bee3f78f678e33b" } ], "wire_major_qualification": { diff --git a/releases/v1.0.0/GOVERNANCE_RECEIPT.json b/releases/v1.0.0/GOVERNANCE_RECEIPT.json new file mode 100644 index 0000000..dc92320 --- /dev/null +++ b/releases/v1.0.0/GOVERNANCE_RECEIPT.json @@ -0,0 +1,403 @@ +{ + "generated_by": "mcl-core/tools/apply-github-governance.ps1", + "organization": "machine-contact-layer", + "note": "Organisation-wide rulesets are intentionally absent: they require GitHub Team, and visibility does not unlock them. Per-repository rulesets are the v1 mechanism.", + "receipt_kind": "read-back of live API state, with every asserted setting recorded as its observed value", + "release_repositories": [ + "mcl-core", + "mcl-wire", + "mcl-link", + "mcl-sdk", + "mcl-ap", + "mcl-ip", + "mcl-ble", + "mcl-uwb" + ], + "infrastructure_repositories": [ + ".github" + ], + "scope_note": "The MCL v1 release is exactly the eight release repositories. Infrastructure repositories are governed here but are NOT release components: they are absent from the v1.0.0 manifest, the synchronized tags and the canonical Release. Row 37 is satisfied by the eight.", + "asserted_release": [ + "branch ruleset active on ~DEFAULT_BRANCH", + "deletion and non_fast_forward blocked on the default branch", + "pull request required, >= 1 approving review", + "code-owner review required, and a CODEOWNERS file exists", + "conversation resolution required", + "stale reviews dismissed on push", + "strict required status checks, including build (gcc) and build (clang)", + "tag ruleset active on refs/tags/v*, blocking deletion, force-update and mutation" + ], + "asserted_infrastructure": [ + "branch ruleset active on ~DEFAULT_BRANCH", + "deletion and non_fast_forward blocked on the default branch", + "pull request required, >= 1 approving review", + "code-owner review required, and a CODEOWNERS file exists", + "conversation resolution required", + "stale reviews dismissed on push", + "required status checks ABSENT -- a required context no workflow reports would make every pull request unmergeable", + "tag ruleset ABSENT -- nothing here is released under a v* tag" + ], + "repositories": [ + { + "repository": "mcl-core", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "bb8ec7c37fe51e70a750db3f6dd3bb6d79b0cbd7", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:21:59Z" + }, + { + "repository": "mcl-wire", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "85c37a978802417735dfbc9331d12c400a475756", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:05Z" + }, + { + "repository": "mcl-link", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "edca3c729b0d7d8a0a35ab0084feed9300f6bcd5", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:10Z" + }, + { + "repository": "mcl-sdk", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "71a3ebb9a2e35338dbc33afea9b1fa8af5c8ad6d", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:16Z" + }, + { + "repository": "mcl-ap", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "af01b1a32c73eda01e16537bb8f7f699a3a1b556", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:21Z" + }, + { + "repository": "mcl-ip", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "5be59247ab5e23a322e4ea825eca87b25edf00cb", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:27Z" + }, + { + "repository": "mcl-ble", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "186adde0fd87dc930376dd4b5f9ab615b19f53b0", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:32Z" + }, + { + "repository": "mcl-uwb", + "repository_class": "release", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request", + "required_status_checks" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": true, + "required_status_check_contexts": [ + "build (clang)", + "build (gcc)" + ], + "tag_ruleset_enforcement": "active", + "tag_ref_include": [ + "refs/tags/v*" + ], + "tag_rule_types": [ + "deletion", + "non_fast_forward", + "update" + ] + }, + "codeowners_sha": "d9aeb5b81d10bc46af2683486ab769bb9dce3316", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:37Z" + }, + { + "repository": ".github", + "repository_class": "infrastructure", + "private": false, + "default_branch": "main", + "observed": { + "branch_ruleset_enforcement": "active", + "branch_ref_include": [ + "~DEFAULT_BRANCH" + ], + "branch_rule_types": [ + "deletion", + "non_fast_forward", + "pull_request" + ], + "required_approving_review_count": 1, + "require_code_owner_review": true, + "required_review_thread_resolution": true, + "dismiss_stale_reviews_on_push": true, + "require_last_push_approval": false, + "strict_required_status_checks_policy": null, + "required_status_check_contexts": [], + "tag_ruleset_enforcement": "MISSING", + "tag_ref_include": [ + null + ], + "tag_rule_types": [] + }, + "codeowners_sha": "aabd802247b7491b826371279f9fe2d44cb14389", + "verified": true, + "failures": [], + "verified_utc": "2026-09-13T02:22:42Z" + } + ] +} diff --git a/releases/v1.0.0/SHA256SUMS.txt b/releases/v1.0.0/SHA256SUMS.txt index 9bdd9ca..bd0045b 100644 --- a/releases/v1.0.0/SHA256SUMS.txt +++ b/releases/v1.0.0/SHA256SUMS.txt @@ -6,7 +6,7 @@ 207eed90edb52ea1b81bafdae5a7c9e7a0a319a63939dd821888e54fb8fb4ec0 *mcl-core/LICENSING.md b2ed5e4adcaa336400cc8cb9c2ee18358682a26a58ca0ff012ed3f637ea8d40f *mcl-core/CONTRIBUTING.md dfe844e21b6db6673139254355a9ec3c41e2f412a4df1a79578b046ef45b3deb *mcl-core/governance/V1_SCOPE.md -f21477fc8aa6930762615a4a31149aea6372be6779efd2eb31068956bfc8f62e *mcl-core/governance/RELEASE_GATE_V1.md +c78de63e27e7a752ff173a0036623b39b7155107219b9b42491934260136cd6f *mcl-core/governance/RELEASE_GATE_V1.md 24e4369b13bf3b2c635f352cf2fb4ee7dd0270dfe6e475b12feb8ca680d70897 *mcl-core/governance/GOVERNANCE.md 696369d8bc76c3f1b00f3e66622f0e5b404641e008fde80c9bad8635413e0ee2 *mcl-core/governance/ARCHITECTURE_CHARTER.md 3cf85cb41a1efe1e7c75c65a420653cdb0bad0a10324b368604e26db3163b396 *mcl-core/governance/REGISTRY_POLICY.md @@ -46,6 +46,6 @@ dae8bf448dd691c703ec6b6f531614242d31e35b81834c1d0d500e30e1b8d465 *mcl-ap/conform 5a2d3a81f168bbbf8b3c57e925dd25f606a78566927a0a791faf7bc4c274598e *mcl-ap/conformance/vectors/07-refuse-truncated.wav 096eac6b0d63663629dbdf5b130f46a50b2577b6e11779f2fb64c8bdfe69f8a4 *mcl-ap/conformance/vectors/08-refuse-no-preamble.wav e294409b36a8ac1893b23336eeab5202d3e84ce4f66c7572aa1589c43d43c1ff *mcl-ap/conformance/vectors/09-refuse-silence.wav -4dc53d640bb45826345994bc9a41d4ae79a2434ef75ce3b146412dc38a399d97 *mcl-core/releases/v1.0.0/mcl-developer-sdk.tar.gz -28d23b6541c8715c34a0d516362552069b23aa55125185e54dcebe1db14a7e03 *mcl-core/releases/v1.0.0/EVIDENCE_INDEX.json +13f89b36134219a6afa606565f86d51c08847c18117959c9201aaf530bf3ba59 *mcl-core/releases/v1.0.0/mcl-developer-sdk.tar.gz +4c30afada6a04d695f53f5053504b4d0b8d512c332bb4222545a979efafef0af *mcl-core/releases/v1.0.0/EVIDENCE_INDEX.json 61ac838002640c6e5055fb057b14480e8590af9c78ac1c265d3b4d71c09cf3c2 *mcl-core/releases/v1.0.0/REPRODUCIBILITY.md diff --git a/releases/v1.0.0/commits.txt b/releases/v1.0.0/commits.txt index 1c990b0..5e2c728 100644 --- a/releases/v1.0.0/commits.txt +++ b/releases/v1.0.0/commits.txt @@ -1,8 +1,8 @@ -mcl-core 4b34a66fc3a1cbc87c84e6603d6b8732705451a8 +mcl-core 7e75f279c9ae298d16f7185d9bee3f78f678e33b mcl-wire 415f110e55ed00ddd9c7e4c2c6a241dcdfb17a6e mcl-link 59214bc1c65295a1cbd0940af3ba223cef4f1b7c mcl-sdk 3fd3b931d66ab9f3d487091b8fb60b8df4155f54 -mcl-ap 24579b3ea3895cdf5ecbed4939d5c62583a92c90 +mcl-ap 686908093cc4f0ca04a295492e81b9c8d5c2945e mcl-ip adbe2e64db7ffb7c0b7419ea77cc552d8154913c mcl-ble 9d35ff05e3ffa83292f71e59f22cd45214ae93fd mcl-uwb 4ddd18bcf39f1e6778f76ea4572ef53c3e30fe3c diff --git a/releases/v1.0.0/manifest.txt b/releases/v1.0.0/manifest.txt index ef35f0b..b170206 100644 --- a/releases/v1.0.0/manifest.txt +++ b/releases/v1.0.0/manifest.txt @@ -1,5 +1,5 @@ MCL v1.0.0 release manifest -built: 2026-09-12T16:47:24Z +built: 2026-09-13T02:30:21Z COMMITS @@ -12,11 +12,11 @@ COMMITS exactly this and recorded a stale mcl-core hash. Stating which entry is which is the honest fix; claiming to know it is not. - mcl-core 4b34a66fc3a1cbc87c84e6603d6b8732705451a8 + mcl-core 7e75f279c9ae298d16f7185d9bee3f78f678e33b mcl-wire 415f110e55ed00ddd9c7e4c2c6a241dcdfb17a6e mcl-link 59214bc1c65295a1cbd0940af3ba223cef4f1b7c mcl-sdk 3fd3b931d66ab9f3d487091b8fb60b8df4155f54 - mcl-ap 24579b3ea3895cdf5ecbed4939d5c62583a92c90 + mcl-ap 686908093cc4f0ca04a295492e81b9c8d5c2945e mcl-ip adbe2e64db7ffb7c0b7419ea77cc552d8154913c mcl-ble 9d35ff05e3ffa83292f71e59f22cd45214ae93fd mcl-uwb 4ddd18bcf39f1e6778f76ea4572ef53c3e30fe3c diff --git a/releases/v1.0.0/mcl-developer-sdk.tar.gz b/releases/v1.0.0/mcl-developer-sdk.tar.gz index 2191307..d0b2ad8 100644 Binary files a/releases/v1.0.0/mcl-developer-sdk.tar.gz and b/releases/v1.0.0/mcl-developer-sdk.tar.gz differ