From eddaa5e21c3a15511f1fb17ff93b271a317b2766 Mon Sep 17 00:00:00 2001 From: 0j0bit Date: Sun, 13 Sep 2026 00:02:35 +0530 Subject: [PATCH 1/3] Make the README a front door instead of a specification cover page Anyone arriving here got "Scope" and "Non-goals" and no way to tell whether this repository was the one they needed, what MCL would look like in their own code, or where to go if it was not. That is the right shape for a reader who already knows what MCL is, and the wrong shape for everyone else. The specification content is unchanged and still here, underneath. What is new sits above it: - the OJOBIT banner, and badges that carry live state -- CI status is the real workflow badge, so it goes red on its own rather than being a decoration - one sentence saying what this repository is for, in plain language - a routing block. Most people should not read a specification to use MCL, they should use mcl-sdk, and the README now says so at the top instead of letting them find out later - a short "why this exists" that gives the reason the layer is shaped this way, rather than restating the scope list immediately below it Maturity is stated on the badge rather than buried: which profiles are Stable, which are Candidate, and -- for mcl-uwb -- that the binding is specified but has never been run on hardware, with a pointer to the bindings that have. A reader deciding what to build on should not have to dig for that. No specification text, normative wording, conformance claim or evidence reference was altered, and no executable source is touched. Co-Authored-By: Claude Opus 5 --- .github/banner.png | Bin 0 -> 8031 bytes README.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 .github/banner.png diff --git a/.github/banner.png b/.github/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..0804c293b2f593ba4552b9007983e5dc3eae864e GIT binary patch literal 8031 zcmeHM4OElY8U8?&Vi8nu#VtVHR-DCCw4lguRB+(o&r{l}wFMbUP$c|>3KB^e9Av-- z9Wefq5CLpzdnab zj;p_26%PO|BS(V|y`NEAk2X1VE7RXX&**Y1)s^XNl(siD`yKUrx%^d83_)=qOgVHiw6*So@xL1 zWMICmyEbv5I00|V48|PyQpcyd)paxsyXJci@U}4^Ct?x5B~jix5$=_Fq!qaV)zI$# z4slnqnn4*eM#y5 zEC0fCJeZ|{EM^jII1FMQ$4c5jT zWhFCjBkRBc`f0rMscZ5Y`wVxUQB}Iu8O5a76eK1wxoQfM%_hw;Pty^`42TYfH8Uht zP$*F%%0V2NKp^Z1EEz?=F%{0^qN!=eZK+hM?9yh`R6PhQ3_l#!fL3Ik=iaBT3@DNL z;56P#-RR?x|Kf+r6jMHAI{JTQN}GaBNB?S;V4kMk#auHWIx_!ohTJC+M$wseKBPz= zm$DrvDV&oxKiuJiuZ?Lvx>gc>RM=W2!Wg&}zec@RrFryfi+ZGaYTIO+3w; zzilU&O!(iqqS`ps?ked#AF)B**b60wWuq~rS`l$sYoC&8G!M&mMr&c#7agGvnw3dx#`y^L18h!ZAC>j$;4ob&jPm!(D+!jO%b({MYVe3=T#U0EC0b1wGsCClToxD)L zxux|7#G-B}Q67SEgSq~qhmvtqW@O6u&E8o@>s&J+IvieAmEe_m=K{~ORBi+^^z=dk zZJfMaTUa6rt&?FdJ^S#1YPlbpy^S0xujdluwXUMDdu{#R|0DmrvRTIfz(thhKjc5u zSM4F0>M6O*f>oP=iUMt`XW7kB%H_rBM!ZIb`r>^`Oy?u~++WGVTXQIaslg1_NW~Oq z>8{wpP(hfm8KdFJu{h<-08K+LwAZ}-cAzy^v_ECM3!LM?7I0XsxWvS%MN}0wa7cP- zcR*#NMiV6fY5Q_EL@E2L5{m_tSQ<_$CNI?W;r&?Mjw}tsr(F&&u`1B3aeMD8eSu@b zg6&>Sp|xgZzom?Kwk!1LA}bgK?{P4*0U5&fgr>`okV+=Z$R6~mg;r*gu94|JwOwLt z_MgD`Pw)wNMM{dWiNlM9oGC1Z6n=pjI{b?o0bg|^wga+lK{nFVG{rs}Ls`*&8B~nZ zmYEVEeoS<+43e-F&aq#UciGy^vRKmJd(ddu;?JXecCyKx{wU6tw4$b5s8Z}jgZjrh zv5MX6R5RmgzTO-KJ(|hb8qux(GiEO-zpoV!rX-3G8F#kTDCGxK6NCo!zY232$u2=t7Bxl*^>@ zw=L-ZMc{i``0+OV6^8#rGa2{j{9V-?rfM zq>SJm%20AdY#;dTlj|OV70vY(bF2)NY%l@^juR_{yZ~?ZxNr$O*$i)29hCerZUY;X z@EL^fL`GWJXDOG?GEm~N&ORIsFC~+wl#a)%FBD&{#tVdE$t1lnM5AoRC4_mc7YqIF zAqh}dloApP6|vCO9?TvXD%LZyzs&Pg!yG=0Q`$TIhDMpuVkJ%KTRj;}g$G9?Ewl23 z`?v%KA13~iOw8($1~3gwjtK)hFMXS|pygal6jX^x6JZbRWMgoT+G}Daq0ZVaYiJ3P zGl$t>sBrjqJATpCd+pP68~+mhYznD%VHIH(Sxw>sGOjI8b73Q2Lq>*A{wu)$C#rmz zXgF{8Inx<~y8BVVvkc#vEdMKKT8FJrQ{^2EaPUrqf1LjB-8($z9y~}9Ot$^jJv_~^ zg7%+X8AVgC!50zp3biNw2djZzJ?e~11`b}fHec1jk#4?})E{@N)iu*`{hz(eonUG# Yog$%zFK-sy(=K`RNMvx!;nR8l1YmO`6#xJL literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 7c36cbc..8ae3c19 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,46 @@ -# MCL Wire +

+ OJOBIT +

-`mcl-wire` defines the canonical deterministic representation of Machine Contact Layer semantic objects. +

MCL Wire

+ +

The exact bytes. One canonical encoding for every MCL object, on every transport.

+ +

+ CI + License Apache-2.0 + Wire major 1 + C99 freestanding +

+ +

+ Use the SDK instead · + Specifications · + mcl-link +

+ +--- + +> ### Most people should start with the SDK, not here +> +> This repository is a **specification**. If you are building a product, you +> want [**mcl-sdk**](https://github.com/machine-contact-layer/mcl-sdk) — one CMake project, no sibling checkout, and a +> working example you can run in about a minute. Come back here when you need +> to know exactly what a byte means, or when you are writing an independent +> implementation. + +## Why this exists + +Two machines can only agree on meaning if they first agree, byte for byte, on +representation. MCL Wire is that agreement: one canonical encoding, no +optional orderings, no implementation-defined padding, and the same result on a +microcontroller and a server. + +An encoder that produces different bytes for the same object is wrong, and the +conformance vectors in this repository are how you find out. + +**Wire major 1 is Stable.** Major 0 remains for experimental objects; a Stable +major carries only Stable semantics, and the encoder refuses anything else. The specification is language-neutral. The v1.0 reference implementation is **portable freestanding C99** so the same byte contract can be used on bare-metal microcontrollers, RTOS targets, larger embedded systems, and hosted systems. From 527741b31be0eaff9e7cb4df87ebbafe46bb97fa Mon Sep 17 00:00:00 2001 From: 0j0bit Date: Sun, 13 Sep 2026 08:17:16 +0530 Subject: [PATCH 2/3] Correct the adoption front door against verified facts Every claim here was checked before it was written, and three were wrong. - mcl-sdk said to clone it alone and build. A fresh anonymous clone fails to configure, because the repository builds against its sibling specifications. The README now gives both real paths, each verified from anonymous downloads: the release developer SDK archive, one CMake project with no sibling checkout, and the eight repositories cloned side by side. Both configure, build and run the Base 1 example to CONTACT_ESTABLISHED on both sides. - The mcl-sdk snippet passed a string where mcl_machine_config_deployment takes a numeric source reference and a role, and admitted on PEER_DETECTED where the API raises POLICY_REQUIRED. The replacement was compiled with -std=c99 -Wall -Werror against the real headers, linked and run: init and start return MCL_MACHINE_OK with only clock_ms, transport_send and user set, which is what the prose now says Base 1 needs. - mcl-uwb carried a status badge the ICS does not use. The ICS says experimental, so the badge does. Also: the SDK-first callouts no longer call the mcl-sdk repository one CMake project with no sibling checkout, which describes the release developer SDK; mcl-link no longer sets the 104-migration campaign, which carried major-0 traffic, directly beside the Link major 1 Stable claim; the organization profile no longer calls the specifications frozen before the Candidate is sealed. CODEOWNERS prose: @0j0bit and @sed-boi are two accounts controlled by the same project owner. That is account redundancy, not independent two-person review. Owner patterns are unchanged. No specification text, conformance claim, evidence reference or executable source changed. Co-Authored-By: Claude Opus 5 --- .github/CODEOWNERS | 17 ++++++++++++----- README.md | 10 +++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 85c37a9..86808bf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,17 +9,24 @@ # 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 # bypass to administrators, so a pull request touching one of these paths and # authored by its sole code owner could never be merged by anyone. # -# 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/README.md b/README.md index 8ae3c19..3fdfe92 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,11 @@ > ### Most people should start with the SDK, not here > -> This repository is a **specification**. If you are building a product, you -> want [**mcl-sdk**](https://github.com/machine-contact-layer/mcl-sdk) — one CMake project, no sibling checkout, and a -> working example you can run in about a minute. Come back here when you need -> to know exactly what a byte means, or when you are writing an independent -> implementation. +> This repository is a **specification**. If you are building a product, start +> with [**mcl-sdk**](https://github.com/machine-contact-layer/mcl-sdk): its quickstart runs two machines making +> contact, and the release ships a self-contained developer SDK — one CMake +> project, no sibling checkout. Come back here when you need to know exactly +> what a byte means, or when you are writing an independent implementation. ## Why this exists From 1113866edd18b221edd3b7d114aa4089705b69e7 Mon Sep 17 00:00:00 2001 From: 0j0bit Date: Sun, 13 Sep 2026 08:26:37 +0530 Subject: [PATCH 3/3] Reference the organization banner instead of copying it into every repository check-provenance.sh refuses a binary outside the accounted evidence and experiment locations, and it was right to: eight copies of a brand image in eight release repositories is eight unaccounted binaries, and eight places for one asset to drift. The banner now lives once, in the .github organization-infrastructure repository, and each README references it there. No gate was loosened to make this pass. Co-Authored-By: Claude Opus 5 --- .github/banner.png | Bin 8031 -> 0 bytes README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .github/banner.png diff --git a/.github/banner.png b/.github/banner.png deleted file mode 100644 index 0804c293b2f593ba4552b9007983e5dc3eae864e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8031 zcmeHM4OElY8U8?&Vi8nu#VtVHR-DCCw4lguRB+(o&r{l}wFMbUP$c|>3KB^e9Av-- z9Wefq5CLpzdnab zj;p_26%PO|BS(V|y`NEAk2X1VE7RXX&**Y1)s^XNl(siD`yKUrx%^d83_)=qOgVHiw6*So@xL1 zWMICmyEbv5I00|V48|PyQpcyd)paxsyXJci@U}4^Ct?x5B~jix5$=_Fq!qaV)zI$# z4slnqnn4*eM#y5 zEC0fCJeZ|{EM^jII1FMQ$4c5jT zWhFCjBkRBc`f0rMscZ5Y`wVxUQB}Iu8O5a76eK1wxoQfM%_hw;Pty^`42TYfH8Uht zP$*F%%0V2NKp^Z1EEz?=F%{0^qN!=eZK+hM?9yh`R6PhQ3_l#!fL3Ik=iaBT3@DNL z;56P#-RR?x|Kf+r6jMHAI{JTQN}GaBNB?S;V4kMk#auHWIx_!ohTJC+M$wseKBPz= zm$DrvDV&oxKiuJiuZ?Lvx>gc>RM=W2!Wg&}zec@RrFryfi+ZGaYTIO+3w; zzilU&O!(iqqS`ps?ked#AF)B**b60wWuq~rS`l$sYoC&8G!M&mMr&c#7agGvnw3dx#`y^L18h!ZAC>j$;4ob&jPm!(D+!jO%b({MYVe3=T#U0EC0b1wGsCClToxD)L zxux|7#G-B}Q67SEgSq~qhmvtqW@O6u&E8o@>s&J+IvieAmEe_m=K{~ORBi+^^z=dk zZJfMaTUa6rt&?FdJ^S#1YPlbpy^S0xujdluwXUMDdu{#R|0DmrvRTIfz(thhKjc5u zSM4F0>M6O*f>oP=iUMt`XW7kB%H_rBM!ZIb`r>^`Oy?u~++WGVTXQIaslg1_NW~Oq z>8{wpP(hfm8KdFJu{h<-08K+LwAZ}-cAzy^v_ECM3!LM?7I0XsxWvS%MN}0wa7cP- zcR*#NMiV6fY5Q_EL@E2L5{m_tSQ<_$CNI?W;r&?Mjw}tsr(F&&u`1B3aeMD8eSu@b zg6&>Sp|xgZzom?Kwk!1LA}bgK?{P4*0U5&fgr>`okV+=Z$R6~mg;r*gu94|JwOwLt z_MgD`Pw)wNMM{dWiNlM9oGC1Z6n=pjI{b?o0bg|^wga+lK{nFVG{rs}Ls`*&8B~nZ zmYEVEeoS<+43e-F&aq#UciGy^vRKmJd(ddu;?JXecCyKx{wU6tw4$b5s8Z}jgZjrh zv5MX6R5RmgzTO-KJ(|hb8qux(GiEO-zpoV!rX-3G8F#kTDCGxK6NCo!zY232$u2=t7Bxl*^>@ zw=L-ZMc{i``0+OV6^8#rGa2{j{9V-?rfM zq>SJm%20AdY#;dTlj|OV70vY(bF2)NY%l@^juR_{yZ~?ZxNr$O*$i)29hCerZUY;X z@EL^fL`GWJXDOG?GEm~N&ORIsFC~+wl#a)%FBD&{#tVdE$t1lnM5AoRC4_mc7YqIF zAqh}dloApP6|vCO9?TvXD%LZyzs&Pg!yG=0Q`$TIhDMpuVkJ%KTRj;}g$G9?Ewl23 z`?v%KA13~iOw8($1~3gwjtK)hFMXS|pygal6jX^x6JZbRWMgoT+G}Daq0ZVaYiJ3P zGl$t>sBrjqJATpCd+pP68~+mhYznD%VHIH(Sxw>sGOjI8b73Q2Lq>*A{wu)$C#rmz zXgF{8Inx<~y8BVVvkc#vEdMKKT8FJrQ{^2EaPUrqf1LjB-8($z9y~}9Ot$^jJv_~^ zg7%+X8AVgC!50zp3biNw2djZzJ?e~11`b}fHec1jk#4?})E{@N)iu*`{hz(eonUG# Yog$%zFK-sy(=K`RNMvx!;nR8l1YmO`6#xJL diff --git a/README.md b/README.md index 3fdfe92..cc3210d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- OJOBIT + OJOBIT

MCL Wire