Conversation
…ors and the reference decoder's reasons Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, bindings and signed objects; LAMPS vector recorded and cross-verified with macula 12.8.0 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stack removed; keystore holds a node key The 12 dial is macula-go's: TLS 1.3 with macula-pqc's post-quantum groups, one ML-DSA-87 station certificate whose key the station holds, a target that pins the node_id the handshake must prove, and quinn configured with the QUIC Initial suite. Tested over real QUIC against local stations, and refused for a classical certificate, classical groups, another ALPN, and no pinned node_id. The 10.x modules (connection, control channel, direct dial, frames, dht, streams, pool, content, manifest, ucan, bolt4, Ed25519 identity, X.509 trust) and their live tests and examples go: macula-pqc 0.3 verifies ML-DSA-87 stations only, and no 10.x station remains. keystore now keeps a node key's seed-form bytes, so a pq_hybrid key fits. macula-rust-ffi does not build until it moves to the 12 API. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d status frames, client and station halves, held to macula's own frames both ways Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… frames in the tests) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…blications, stream frames), neighbour signatures, the codec and payload rules Held to macula's own neighbour-signed control frames, both profiles, and to the shared vectors that read a CALL's fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion (D25 org directories and delegations, own namespace) Held to macula's own-namespace fixtures and verdicts, both profiles. Node records, procedure advertisements, station endpoints, content announcements, tombstones and domain envelopes sign and verify in macula's order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The statement issuer (D22): a CONNECT key bound to the identity key, a status statement reissued every 15 minutes, rotation every 5 days, and CONNECT material in force for every dial. The link, ported from macula-go v0.12.0's stationlink: the v4 handshake over QUIC on macula-pqc, status statements both ways with the 5-minute grace, neighbour signatures and seqs in pq_hybrid, the _macula.ping liveness probe, calls, the DHT with every record verified, pubsub with per-node dedup, serving under an org (D25 directory and delegation, checked against the realm key) or in the node's own namespace, request admission, and streaming sessions released on every path. Tested against macula-go's in-process stations (tests/teststation, built by scripts/build-teststation.sh). close() now ends the link as Closed even when the connection watcher sees the station's close first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One link per pinned seed, all sharing the node's identity key, statement issuer, request admission, publication seq and event dedup; a link that ends is dialed again after the respawn delay and given back the node's subscriptions and served procedures. Calls and streams reach a provider at its own station: advertisements resolved from the DHT and trusted only under the pinned realm key (or signed by the namespace's own node), the serving station dialed from the endpoint record it signed itself, candidates tried freshest first. Publications are signed once and sent on the first replication_factor links. Records go through the first link that can carry them. Fixed: a done or stopped flag sent on a tokio watch channel with no receiver yet was lost (watch::Sender::send does not store it then), so Pool::close could wait forever on a member that had already stopped. Every such flag now uses send_replace. Tests: tests/pool.rs against the teststation's new lab mode (stations and realms started and shaped one by one), including a 2 s release deadline for relayed streams (#3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mirrors macula-php's FleetTest: a pool pinned to one station as a pq_hybrid key made for the run, the DHT read, mcl-echo/echo called by direct dial, and its own publication heard. Passed 3/3 against helsinki at 2026-09-26T07:37:49Z. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macula-rust-ffi rewritten on the new core API; the 10.x surface (sessions, direct dial, cert chains, UCAN, content) and its live tests are gone. - FfiNodeKey: an identity key in either profile with the puzzle solved, kept in an owner-only key file or the platform's secure store. - FfiPool: pinned seeds, realm trust and the pool's options; calls, providers, DHT records. - Serving with a handler Kotlin or Swift implements (FfiCallHandler, FfiStreamHandler), an own-namespace helper, FfiServed. - FfiSubscription (next with a timeout), publish. - FfiStream on either side. - FfiValue kept as it was (Items/Fields, i64). - FfiError maps the pool's and link's errors, plus a foreign handler's unexpected throw. Tests: macula-rust-ffi/tests/pool_ffi.rs drives the FFI types against the teststation lab, which now finds the helper in the workspace's target/. Kotlin and Swift bindings generate; neither is compiled here (no Kotlin or Swift toolchain on this box). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- README rewritten for the macula 12 SDK: status, quick start, coming from 0.3, what is implemented, payloads, the mobile bindings, what is not yet here, testing. - CHANGELOG: both unreleased sections say what 0.4.0 and ffi-0.4.0 are. - Examples quickstart, serve and publish_subscribe, on the MACULA_* variables the other SDKs' examples read; serve and publish_subscribe run against a lab station. - NodeKey::load_or_create (and FfiNodeKey's): a new puzzle-solved key saved when nothing is at the path; anything there that does not load is refused and never replaced. - CI and both release workflows build the teststation (setup-go from its go.mod) before the tests, and test with --locked. - Cargo.lock is committed; .gitignore no longer hides it. - rust-version 1.89 (core) and 1.91 (ffi), the least the dependencies build with, checked with those toolchains. - plans/ removed: the 10.x wire spec and leak survey describe code that is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Opened only so ci.yml runs on 39a580e before master fast-forwards 5fa5e99..39a580e and v0.4.0 is tagged. It is not merged through this PR; it is closed after the fast-forward.
🤖 Generated with Claude Code