Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
48 changes: 45 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,48 @@
# MCL-AP

**MCL-AP** is the Acoustic Profile of the Machine Contact Layer.
<p align="center">
<img src="https://raw.githubusercontent.com/machine-contact-layer/.github/main/profile/banner.png" alt="OJOBIT" width="100%">
</p>

<h1 align="center">MCL-AP</h1>

<p align="center"><strong>First contact through the air, using the speaker and microphone the machine already has.</strong></p>

<p align="center">
<a href="https://github.com/machine-contact-layer/mcl-ap/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/machine-contact-layer/mcl-ap/actions/workflows/ci.yml/badge.svg"></a>
<a href="https://github.com/machine-contact-layer/mcl-ap/blob/main/LICENSE"><img alt="License Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-blue"></a>
<img alt="profile" src="https://img.shields.io/badge/AP--BOOTSTRAP--1-Candidate-yellow">
<img alt="evidence" src="https://img.shields.io/badge/over--air-E4-brightgreen">
</p>

<p align="center">
<a href="https://github.com/machine-contact-layer/mcl-sdk"><b>Use the SDK instead</b></a> ·
<a href="https://github.com/machine-contact-layer/mcl-core"><b>Specifications</b></a> ·
<a href="https://github.com/machine-contact-layer/mcl-ap/tree/main/experiments"><b>Experiments</b></a>
</p>

---

> ### Most people should start with the SDK, not here
>
> 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

Two machines with no shared network still share the air. MCL-AP is the binding
that needs no infrastructure at all: no access point, no pairing, no account —
just a speaker on one side and a microphone on the other, long enough to agree
on somewhere better to talk.

It is the bootstrap medium for `MCL Stranger-Contact 1`, and it has been run
over real air on real hardware, including the whole stack decoding on an
embedded target with no host in the loop.

> **`AP-BOOTSTRAP-1` is a Candidate profile, not Stable.** Promotion needs a
> second independent transmitter class. Profile identifier 192 stays
> Experimental Use.

It provides a reference software-defined path for first contact and MCL communication through audio I/O, while allowing OEMs to extend or replace the physical implementation without changing MCL Core semantics or MCL Link behavior.

Expand Down
Loading