Skip to content

Prepare OpenNet v0.2.0 reliability and authorization release - #7

Merged
devkyato merged 14 commits into
mainfrom
codex/v0.2.0-authorization
Jul 29, 2026
Merged

Prepare OpenNet v0.2.0 reliability and authorization release#7
devkyato merged 14 commits into
mainfrom
codex/v0.2.0-authorization

Conversation

@devkyato

Copy link
Copy Markdown
Owner

What changed

This prepares OpenNet v0.2.0 while keeping the ONP/1 wire format unchanged.

  • adds optional Python topic authorization, including verified mutual-TLS certificate context and a simple CLI topic-prefix policy
  • separates Python control-frame progress from application backpressure, prevents message-ID collisions, and bounds writes, reads, handlers, connection overload, and slow clients
  • defines ACK and retry semantics precisely, including the limits of connection-local deduplication and application idempotency
  • aligns Python and Arduino UTF-8, JSON, scalar, and control-frame validation through shared conformance vectors
  • bounds Arduino polling, partial writes, and outstanding ACK state; adds a caller-owned receive buffer and callback-scoped message view
  • hardens CLI file handling and logging, labels benchmark results as sequential acknowledged round trips, and pins workflow actions to immutable commits
  • updates the architecture, protocol, security, compatibility, transport, memory, tutorial, rationale, changelog, and release documentation in a personal but concise narrative

Why

The earlier implementation had several reliability gaps: DATA could interfere with ping dispatch, application queue pressure could stall ACK processing, slow handlers could block protocol progress, ACK timing did not match its documented meaning, long-lived message IDs could collide, and Arduino stream work was insufficiently bounded. The documentation also needed a clearer answer to why ONP/1 exists beside established protocols and where its abstraction deliberately stops.

User and developer impact

Existing ONP/1 frame bytes remain compatible. Existing Python servers do not need an authorizer, and existing Arduino constructors and onMessage callbacks remain source-compatible. New policies and bounded-memory APIs are optional. Direct BLE GATT remains unsupported and no hardware-runtime, adoption, performance, or security guarantee is claimed.

Verification

  • python -m pytest -p no:cacheprovider python — 113 passed
  • Ruff across python, benchmarks, and scripts
  • strict mypy across python/src
  • local Markdown link validation
  • native PlatformIO protocol tests
  • esp32dev build plus all four Arduino example compiles
  • fresh-wheel install/import and CLI parser smoke test
  • Linux installer/uninstaller shell syntax validation
  • matching SHA-256 release checksums
  • byte-for-byte reproducibility checks for Arduino and Linux bundles

The deterministic fault corpus covers concurrent sends, all 47 truncation points of a representative frame, fragmented ACK delivery, and 2,240 single-bit or seeded-random 24-byte-header mutations.

@devkyato
devkyato marked this pull request as ready for review July 29, 2026 13:57
@devkyato
devkyato merged commit 32a30b3 into main Jul 29, 2026
12 checks passed
@devkyato
devkyato deleted the codex/v0.2.0-authorization branch July 30, 2026 01:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant