Set up the protocol spec as an mdBook and add a GitHub Actions workflow that builds it on every push/PR and deploys to GitHub Pages on main. The repo is now both a machine-readable corpus and a browsable, searchable site. Structure changes (one-time, mechanical): - Rename the spec source directory from `spec/` to `src/` to match mdBook's default convention. All 21 chapter files move; their internal relative cross-links are unchanged. - Add `src/SUMMARY.md` as the mdBook table of contents, grouping chapters under Wire Format, Payloads, Cryptography & Identity, and Routing & Higher-Layer Protocols. - Add `book.toml` at repo root: title, author, search enabled, fold enabled, edit-on-GitHub links, navy theme. - Add `.github/workflows/mdbook.yml`: build on push + PR, deploy on push to main only (configure-pages + upload-pages-artifact + deploy-pages from actions/). - Add `/book/` to .gitignore. Reference updates so the old path is fully retired: - Every `spec_ref` in `corpus/**/*.json` rewritten from `spec/` to `src/` (54 files). - Schema description text and example path in `corpus/schema/test-vector.schema.json`. - `README.md`: prominent link to the published site near the top; "What's Here" updated for the new layout. - `CONTRIBUTING.md`: spec-editing instructions point at `src/` and note the SUMMARY.md requirement. - `CLAUDE.md`: directory-layout notes updated. CHANGELOG.md historical entries intentionally keep their `spec/` paths since those record what the paths were at the time of those commits. After this lands, the user needs to enable GitHub Pages in repo settings with source = "GitHub Actions" (one-time, manual). The workflow will then publish to https://swaits.github.io/meshcore-spec/ on every push to main. Verified locally: `mdbook build` produces a clean book/ tree with all 21 chapters rendered and the SUMMARY-driven sidebar populated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.6 KiB
1.6 KiB
MeshCore Spec — Project Guide
What This Project Is
A specification and conformance test suite for the MeshCore mesh networking protocol. It contains:
- RFC-style spec documents in
src/(Markdown, using RFC 2119 language; this is also the mdbook source root) - JSON test vector corpus in
corpus/ - Validation tooling in
tools/
Conventions
- All binary data in JSON is uppercase hex (e.g.,
"0D00EFBEADDE"). Whitespace in hex strings is allowed and stripped on parse. - All multi-byte integers are little-endian unless explicitly noted otherwise.
- Test vector IDs use the format
{category}-{NNN}(e.g.,ack-001,kiss-hw-003). - Spec sections are numbered
00-through20-and use RFC 2119 keywords. - The C++ reference implementation at github.com/meshcore-dev/MeshCore is the source of truth for protocol behavior.
Key Protocol Constants
- MAX_PACKET_PAYLOAD: 184 bytes
- MAX_PATH_SIZE: 64 bytes
- CIPHER_MAC_SIZE: 2 bytes
- PATH_HASH_SIZE: 1 byte (default)
- PUB_KEY_SIZE: 32 bytes
- SIGNATURE_SIZE: 64 bytes
- MAX_TRANS_UNIT: 255 bytes
File Organization
src/NN-topic.md— Spec sections, numbered for reading order (mdbook root)src/SUMMARY.md— mdbook table of contents; new chapters MUST be added herecorpus/schema/— JSON Schema for test vector validationcorpus/{layer}/{type}/— Test vectors organized by protocol layertools/— Python validation and generation scripts
Working With Test Vectors
Each JSON file validates against corpus/schema/test-vector.schema.json.
Vector types: encode_decode, decode_only, invalid.