docs: wave iphone-admin + PTT-over-Tri-Net (2026-07-14) - #81
Draft
gHashTag wants to merge 12 commits into
Draft
Conversation
Feasibility study for iPhone → P203 Mini direct connection as: 1. Admin dashboard (network management) 2. Voice PTT walkie-talkie client with Tri-Net as trusted transport. Structure: honesty preface, reality snapshot, 12-item weak-spots heatmap (3 CRITICAL / 9 MAJOR), cited science (Apple/Meshtastic/ Opus/Cisco/ATAK), 4-sprint 8-task decomposed plan, three cooperation lanes (PWA-first / native iTAK / split-brain hedge), trust ledger. Recommendation: Lane A (PWA-first) — covers -sim end-to-end, no App Store dependency, no silicon dependency, cheapest demo. Merge-order: E1.1 topology doc can start now without other PRs merged; E1.2 depends on PR #79 (M2 TUN spec) and #65/#63 (Noise handshake). All pre-silicon numbers tagged -sim. Attestation deferred to post-SKY26b (2026-12-16). Discipline hooks: no-fabricated-metrics, -sim tagging, Trinity rule (no chip no TRI), aspiration-vs-property, numbers-without-realm. phi^2 + phi^-2 = 3
All wire-format logic lands in .t27 spec files with assertion coverage:
- specs/ptt_frame.t27 (18 tests) — PTT frame version, action/talkgroup
bounds, big-endian byte extraction, state-transition table.
- specs/ws_accept.t27 (17 tests) — RFC 3174 SHA-1 primitives (round K,
round f-function, rotl32, schedule extension), RFC 4648 base64 sextet
and character table, RFC 6455 client-key length invariant.
Note: SHA-1 addition (mod 2^32) is deliberately excluded from the spec
because t27's `+` maps to Rust's debug-checked `+` and SHA-1 is
overflow-based. Instead the spec exposes the four summands
(step_a_term, step_f_term, e, K, W) and the runtime combines them via
`.wrapping_add`. This keeps every primitive spec-tested while matching
RFC semantics.
- specs/admin_status.t27 — attestation state gating (none/hmac/ed25519-sim/
ed25519+chip), uptime clamp, node_id range check, path-byte legality
and dot-dot detection.
The runtime glue in src/bin/admin_httpd.rs is byte I/O only:
TcpListener, TcpStream, thread spawning, HTTP framing, WebSocket
frame layer. Every SHA-1 step, every base64 character, every path-byte
check comes from generated code. Verified end-to-end against RFC 3174
test vectors ("abc", "", quick-brown-fox), RFC 4648 base64 vectors, and
the RFC 6455 §1.3 WebSocket handshake example — 7/7 tests pass.
The bin is deliberately built via rustc directly (see smoke script)
rather than through the cargo crate root: the workspace lib currently
has 106 pre-existing errors in unrelated gen/rust/ modules that block
`cargo build --lib`. The bin uses `#[path]` to include only the three
new generated modules and needs no other crate code.
build.rs incidental fix: the previous version had a type mismatch
(`.map_or(0, ...)` chained on integer). Replaced with a simple
`mtime()` helper. No behaviour change beyond making the pre-existing
regen path actually compile — as a side effect, `cargo` now regenerates
gen/rust/etx.rs and gen/rust/multipath_routing.rs correctly (which
partially fixes the older `return ()` stub bug). Full fix of the
remaining broken generated modules is out of scope for this PR.
Also included:
- docs/E1_1_IPHONE_TOPOLOGY.md — three-way topology decision
(USB Personal Hotspot / iPhone Wi-Fi Hotspot / Board AP), with
the primary recommendation, honest -sim limits, and a fallback ladder.
- webui/public/index.html — PWA skeleton: tabs (Status/Peers/PTT/Diag),
PTT hold-to-talk button (mouse + touch), WebSocket client with auto-
reconnect, safe-area insets for iPhone notch.
- webui/public/manifest.json — Add-to-Home-Screen manifest.
- smoke/e1_1_admin_httpd_smoke.sh — builds bin, launches on 127.0.0.1:18080,
curls /api/status, verifies /index.html, does a raw WebSocket upgrade
with RFC 6455 test key and checks the accept header matches the value
the generated primitives produce.
What this does NOT verify (must stay -sim until hardware run):
- iPhone tethering to P203 Mini (needs physical devices).
- mDNS discovery from an iOS client (needs NSLocalNetworkUsageDescription).
- mTLS mutual auth (E2.2, not implemented).
- Opus audio pipeline (E3.x, not implemented).
- Live neighbor data (needs IPC with trios_meshd — separate PR).
phi^2 + phi^-2 = 3
Co-Authored-By: Perplexity Computer <auaavroo0312@hotmail.com>
… audio-frame envelope Bundles four parallel forks on top of E1.1 (676ad70). All new logic lives in t27 specs; runtime is byte I/O (waiter, not oracle). Every hardware-bound claim stays -sim until it clears the four-stage ratchet. E1.2 — live neighbors via IPC (sandbox verified) - trios_meshd writes /tmp/trinet-<node>-status.json atomically (.tmp + rename) every third HELLO tick. Path overridable via TRINET_STATUS_PATH. - admin_httpd tails the status file, extracts the neighbors array with a balanced-bracket scan, gates freshness at 30 s (unix_time delta), exposes GET /api/neighbors and pushes {"type":"neighbors",...} on the /ws socket. - Regression gate smoke/e1_2_ipc_smoke.sh — 6/6: empty, valid, stale, torn, status/neighbors coexistence, path-traversal guard (curl --path-as-is). - New admin_httpd unit tests: b64_decode roundtrip + garbage-reject, JSON field extractor, IPC parser (missing file, valid file). 16/16 pass. E1.3 — mDNS wire skeleton - specs/mdns_wire.t27 (228 lines) — RFC 6762/6763 primitives: TYPE_A/PTR/TXT/ SRV, FLAGS_ANNOUNCE 0x8400, CACHE_FLUSH_BIT, TTL_SHARED_S=4500, TTL_UNIQUE_S=120, u16/u32 BE byte extractors, 11 in-spec tests. - Gen at gen/rust/mdns_wire.rs (spec verified). Responder runtime deferred to a separate PR. A2 — device-DNA challenge/response (Ratchet stage 1 of 4, -sim) - specs/device_dna.t27 (223 lines) — Xilinx DNA_PORT primitive, 7-series DNA_BITS=57, UltraScale=96, nonce 16 B, transcript 33 B, Ed25519 sig 64 B (payload only, sig itself is a placeholder in sim), clock skew ±30 s. - src/bin/attest_dna.rs — TCP verifier on :9601 (bind overridable), 5 unit tests pass. Sim DNA is 0xA57B_0000 + node_id, sig is a deterministic FNV-variant of the transcript. NOT Ed25519 yet. - smoke/a2_attest_dna_smoke.sh — 4/4: two-node fresh-challenge distinct DNA, stale-challenge replay-guard, signature divergence across nodes. - Ratchet: sim only. Stages 2 (Vivado synth), 3 (one P203 Mini), 4 (two boards, cross-replay) remain open. Must land before 2026-10-01 silicon freeze to enter SKY26b tape-out 2026-12-16. E3.1 — PTT audio-frame envelope - specs/ptt_audio.t27 (171 lines) — 9-byte header (version=1, session_id BE u32, seq BE u16, opus_len BE u16), OPUS_MIN_LEN=3, OPUS_MAX_LEN=512, FRAME_DURATION_MS=20, mesh_forward_safe predicate. 7 in-spec tests. - admin_httpd audio_frame_verdict validates envelope, returns audio-ack {accepted, reason, session_id, seq, opus_len}. Does NOT decode Opus and does NOT forward to mesh — that stays E3.2 territory. - PWA MediaRecorder captures 100 ms chunks on PTT press, base64-encodes and ships over WebSocket as {"type":"audio","payload":"..."}. Runtime clamps opus_len to spec bounds. - smoke/e3_1_audio_frame_smoke.sh — 4/4: valid frame accepted, bad version / size mismatch / opus_len 2 all rejected with the spec-mandated reason. - Tolerant JSON parser: extract_json_string_field now accepts both `"payload":"x"` and `"payload" : "x"`. Compact-form matcher for the top-level "type" so Python-style json.dumps output is not silently ignored. Honesty check - All spec predicates: spec verified (t27 parse + gen-rust clean). - All 4 smokes: sandbox verified on this host. - 16 admin_httpd + 5 attest_dna unit tests: sandbox verified. - A2 chip-attest binding: -sim. Silicon (Xilinx DNA_PORT on P203 Mini) NOT read. Ratchet 1/4. - mDNS responder runtime: not yet written. - Audio does NOT forward to mesh. Opus not decoded. E3.2 territory. - No fabricated metrics. No claim of "Ed25519" for the A2 sim signature. phi^2 + phi^-2 = 3
… mDNS responder
Landing three follow-up forks on top of the iPhone admin bundle.
A2 Ratchet 2/4 (kuznitsa):
- fpga/attest/dna_reader.v — Xilinx DNA_PORT FSM wrapper (IDLE/LOAD/SHIFT/HOLD)
- fpga/attest/sim/{dna_port_model.v, tb_dna_reader.v} — self-checking testbench
passing 6/6 checks under iverilog 12.0
- fpga/attest/constraints/dna_reader_ax7203.xdc — 100 MHz clock, xc7a200t-fbg484
- fpga/attest/scripts/{synth_yosys.sh, synth_vivado.tcl} — both synth paths
- docs/A2_RATCHET_2_SYNTH.md — honest R2/4 status: BLOCKED-toolchain
(sandbox lacks yosys/vivado/nextpnr-xilinx). Waits on ssdm4 macbook / CI.
- smoke/a2_ratchet_2_synth_smoke.sh — surfaces toolchain state as first-class
artifact rather than silent gap.
E3.2 audio wire:
- src/bin/audio_forwarder.rs — new binary. Listens TCP :9701, validates each
envelope with ptt_audio.t27 predicates (version_valid, opus_len_valid,
total_frame_len, mesh_forward_safe), UDP-fans accepted frames to
AUDIO_FWD_PEERS. Optional AUDIO_FWD_STATS_PORT plaintext endpoint.
7/7 unit tests.
- src/bin/admin_httpd.rs — on audio-ack accepted:true, lazily writes the raw
frame bytes to AUDIO_FWD_ADDR via a persistent TCP sink. Best-effort:
write errors drop the socket and re-connect on the next accepted frame.
16/16 admin_httpd unit tests still pass.
- webui/public/index.html — WebCodecs AudioEncoder path added. Prefers real
Opus (48kHz mono 24kbps 20ms frames) via AudioWorklet + AudioEncoder.
Falls back to MediaRecorder container-blobs on older Safari. Both paths
share buildAudioFrame → base64 → WebSocket sink.
- smoke/e3_2_opus_mesh_smoke.sh — 6/6 checks. 3 valid frames give
frames_in=3 frames_ok=3 forwarded=3 bytes_forwarded=267; UDP listener on
:9711 sees 3 frames / 267 bytes; invalid version bumps reject_version.
E1.3 responder (zov cherez vozdukh):
- src/bin/mdns_responder.rs — UDP :5353 mDNS responder. Joins 224.0.0.251
best-effort, answers PTR queries for _trinet-admin._tcp.local with
PTR+SRV+TXT+A. Preserves txid, sets FLAGS_ANNOUNCE=0x8400, cache-flush
bit on unique records, TTL 4500 (shared) / 120 (unique) per RFC 6762 §10.
Env knobs: TRINET_NODE, MDNS_BIND, MDNS_HOSTNAME, MDNS_ADMIN_ADDR.
7/7 unit tests.
- smoke/e1_3_mdns_responder_smoke.sh — 6/6 checks. Reply preserves
txid 0xBEEF, flags 0x8400, an-count 4, admin IP octets present,
foreign service _printer._tcp ignored.
Report:
- docs/W7_TRI_FORK_2026-07-14.md — three metaphor threads (kuznitsa, golos
cherez provod, zov cherez vozdukh), sandbox verification receipts,
honest -sim / BLOCKED-toolchain markings.
Discipline receipts:
- No fabricated metrics; all counters from stats endpoint stdout.
- A2 R2/4 explicitly BLOCKED-toolchain, not PASS, not FAIL.
- Opus decoder on receive side stays -sim.
- mDNS responder tested on unicast; real 224.0.0.251 multicast needs a host.
- 30 unit tests + 4 smokes green (adm 16, audio 7, mdns 7; sim_iverilog 6/6,
e3_2 6/6, e1_3 6/6, a2_r2 BLOCKED-toolchain by design).
phi^2 + phi^-2 = 3
…io replay) Weak-point #4 — mDNS name compression (CRITICAL): - src/bin/mdns_responder.rs: rewrote question parser to decode RFC 1035 §4.1.4 pointer form (0xC0). Prior code silently returned None on any 0xC0 byte, dropping iPhone Bonjour multi-question packets that compress the suffix. - Added read_name() helper with 32-hop limit, visited-offset guard, and 255-octet total-name cap (RFC 1035). - New tests: parse_accepts_compressed_qname, parse_rejects_out_of_bounds _pointer, parse_rejects_pointer_loop. 10/10 unit green. - Existing smoke e1_3_mdns_responder_smoke.sh still 6/6. Weak-point #8 — audio_forwarder replay (CRITICAL): - src/bin/audio_forwarder.rs: added ReplayGuard (RFC-6479-style, per session_id, 64-bit sliding-window bitmap, 16-bit wrap-around aware). - handle_conn now checks replay before UDP fan-out; new stats field reject_replay=N. - New tests: replay_first_frame_accepted, replay_exact_duplicate_rejected, replay_monotonic_seq_accepted, replay_within_window_accepted_once_only, replay_too_old_rejected, replay_isolated_per_session, replay_wrap_around, extract_session_seq_layout. 15/15 unit green. - New smoke smoke/e3_2_replay_smoke.sh — 4/4 checks; N=5 runs back-to-back all pass (deterministic gate per skill v1.3 rule). Non-claims: - No hardware verification; both fixes are runtime-only, sandbox-verified. - ReplayGuard is application-layer replay defense only; sender authentication belongs in future specs/audio_crypto.t27 (ChaCha20-Poly1305 + X25519) — planned as W3 in next wave. - No changes to A2 ratchet 2/4 in this commit; that is still BLOCKED-toolchain-required per prior report. Docs: - docs/W7_WEAK_POINTS_COMPETITORS_2026-07-14.md — full audit: 8 weak points classified by severity + trust class, 3 competitor axes cited from primary sources (SACHa DATE'19, PUFatt DAC'14, Guajardo CHES'07, Papalamprou arXiv:2506.21073, Reticulum LXST, RFC 8766), 8-workstream plan with acceptance criteria, 3 collab options (parallel/by-layer/ sequential-with-gates) with cost estimates. Recommendation: sequential-with-gates given 78 days to silicon freeze 2026-10-01. - docs/ITERATION_LOG.md — created with two entries for 2026-07-14 wave. Discipline: - Anti-anchor: every number in the audit doc carries an explicit trust class (sandbox verified / structural / cited / conjecture). Zero fabricated metrics. - No -sim tag on the runtime fixes because they run in sandbox on actual code paths; they do carry a "not yet hardware-verified" note. phi^2 + phi^-2 = 3
Follow-up to db9cb1b (W7 part-2, W1+W2). Closes the six workstreams that were queued in the W7 part-2 audit doc. W3 — audio_crypto envelope spec + reference runtime. - specs/audio_crypto.t27: 199-line spec-first envelope layout (version, nonce, ciphertext, MAC-tag) with predicates and eight tests. Cites RFC 7539, RFC 7748, RFC 8439, Reticulum LXST. Non-claim section states the runtime uses PLACEHOLDER primitives. - gen/rust/audio_crypto.rs: reference runtime tagged -crypto-placeholder. XOR keystream + SHA-256-truncated MAC (pure Rust, no deps). SHA-256 verified against RFC 6234 vector "abc". 17/17 unit tests: constants, arithmetic, envelope gate, nonce layout, wrap/unwrap roundtrip, wrong-key rejection, bit-flip rejection in ct and tag, bad-version rejection, distinct nonces produce distinct ciphertexts, SHA-256 vectors. - Explicitly NOT suitable for adversarial deployment; must be replaced with audited chacha20poly1305 + x25519_dalek (or FIPS-compliant crate audited on ssdm4) before shipping. W4 — dna_reader.v ifdef SYNTHESIS + synth_yosys.sh -DSYNTHESIS. - fpga/attest/dna_reader.v: added (* blackbox *) DNA_PORT declaration gated by `ifdef SYNTHESIS`. Lets yosys openXC7 preserve the primitive through synth_xilinx -family xc7. iverilog sim continues to use sim/dna_port_model.v behavioural stand-in (SYNTHESIS undefined). - fpga/attest/scripts/synth_yosys.sh: pass -DSYNTHESIS via read_verilog. Ratchet 1/4 (iverilog): still 6/6 PASS. Ratchet 2/4 (yosys): unblocked structurally; still BLOCKED-toolchain in this sandbox because yosys is not installed here, but will run cleanly on any host that provides yosys 0.35+ with the Xilinx flow. W5 — anti-anchor cleanup on A2_RATCHET_2_SYNTH.md. - Retracted the "< 50 LUTs and 100 FFs" line as unmeasured. Replaced with a placeholder that explicitly cites the numbers-without-realm- check discipline from tri-net-m2-m4-workflow skill v1.2. The exact count must be filled in when ratchet 2/4 completes on ssdm4 (or on any host with Vivado / yosys). W6 — mDNS multi-question support (qdcount > 1). - src/bin/mdns_responder.rs: new parse_all_questions() iterates over qdcount questions (bounded at 64 as DoS guard) using the compressed- name parser from W1. parse_first_question is now a thin wrapper. - handle_query now scans every question for want_ptr / want_srv / want_a, so Apple-style batched (A + AAAA + PTR) packets are answered correctly. Previously the responder gave up on the first non-matching question. - 5 new tests: two-of-two roundtrip, three-question Apple style, truncated-second rejected, DoS guard (qd=65 rejected), handle_query answers second-of-batch. 15/15 unit green (was 10). Existing smoke e1_3_mdns_responder_smoke.sh still 6/6. W7 — RFC 8766 Discovery Proxy skeleton. - docs/W7_DISCOVERY_PROXY_SPEC.md: spec-first document. Wire layout for overlay proxy queries and replies, predicates, minimum acceptance criteria, non-claims (this is NOT a complete RFC 8766 implementation), what is deferred. Cites RFC 8766, RFC 8765, Apple Bonjour, Mist Bonjour Gateway, Avahi. - src/bin/mdns_proxy.rs: envelope wrap/unwrap for ProxyQuery and ProxyReply, framed I/O helpers (read/write with 8 KiB cap), predicates. 13/13 unit tests. End-to-end runtime (two-process smoke, trios_meshd integration, audio_crypto wrapping) explicitly deferred to a later wave. W8 — Proof of FPGA whitepaper v0. - docs/PROOF_OF_FPGA_WHITEPAPER_v0.md: 10-section, 145-line document. Abstract + threat model (T1-T6, three defended + three explicitly not defended) + non-claims + construction (§4.1 device DNA, §4.2 bitstream attestation citing SACHa, §4.3 PUF citing Guajardo, §4.4 KDF) + mesh integration + monetization (5 revenue paths) + ratchet discipline + honest current status snapshot (A1 done, A2 partial, A3-A5 pending) + what v0 does not cover + full bibliography. Discipline hooks applied: - anti-anchor-audit: every claim in every doc that is not a citation is explicitly labelled as sandbox verified / structural / cited / conjecture. Zero fabricated metrics. - numbers-without-realm-check: W5 closed a historical instance of this defect on A2_RATCHET_2_SYNTH.md. - Non-claim sections: W3 spec, W7 spec, W8 whitepaper each carry explicit "we do NOT claim X" paragraphs. - No hardware verification: everything is sandbox-verified or structural. -sim tag is implicit in the placeholder-crypto, toolchain-required-elsewhere framing. Test counts after this commit: - mdns_responder: 15/15 unit (was 10) + 6/6 smoke unchanged - audio_forwarder: 15/15 unit + 6/6 old smoke + 4/4 replay smoke - audio_crypto: 17/17 unit (new) - mdns_proxy: 13/13 unit (new) - dna_reader: 6/6 iverilog ratchet 1/4 (unchanged) Files added: - specs/audio_crypto.t27 - gen/rust/audio_crypto.rs - src/bin/mdns_proxy.rs - docs/W7_DISCOVERY_PROXY_SPEC.md - docs/PROOF_OF_FPGA_WHITEPAPER_v0.md - .gitignore: sim/build/ Files modified: - docs/A2_RATCHET_2_SYNTH.md (W5) - fpga/attest/dna_reader.v (W4) - fpga/attest/scripts/synth_yosys.sh (W4) - src/bin/mdns_responder.rs (W6) phi^2 + phi^-2 = 3
…8 smoke) phi^2 + phi^-2 = 3
Make the golden pipeline mechanically enforceable so implementation code
cannot be hand-written outside the .t27 -> t27c -> gen/ workflow without a
reviewed exception.
- lefthook.yml: add handwritten-logic-allowlist (covers src/bin/, closes the
bin-smuggling gap), golden-anchor (L5), gen-provenance + stale-gen pre-push
audits; tolerate the non-ASCII banner t27c emits; fix no-cyrillic to a
byte-based match (the \x{0400} PCRE form silently no-ops on this grep build).
- .t27-allowlist: single reviewable exception surface (M1 bootstrap core, bins,
build.rs, and the quarantined audio_crypto placeholder).
- specs/mdns_proxy.t27: source of truth for the proxy envelope, bounded framing
(8192), multi-question bound (16), qtype dispatch/routing, header extractors;
9 test blocks + 1 invariant. Supersedes hand-written logic in
src/bin/mdns_proxy.rs (codegen deferred: t27c absent in this env).
- docs/T27_ENFORCEMENT.md: enforcement model + measured toolchain findings
(t27c absent; crate pre-broken on main; audio_crypto fail-closed by non-link).
- docs/ITERATION_LOG.md: W7 part-4 measured facts; translate the one Cyrillic
header line to English (docs are English-only per CLAUDE.md).
Sandbox-measured: lefthook 7/7 negative blocked + 4/4 positive pass;
gen-provenance OK over 75 gen files; mdns_proxy 13/13 and audio_crypto 17/17
unit (rustc --test, isolated) x3 deterministic, clippy clean. Whole-crate
cargo build FAILS (106 errors) due to pre-existing invalid t27c codegen on
main (not a PR regression). No hardware, no RFC 8766 completeness claim.
phi^2 + phi^-2 = 3
…fect isolation Regenerate all 76 specs through the repo batch workflow with the repaired t27c (SHA 2a114bc0, fix/codegen-let-mut-split-decl @ 6921c9a); the let-mut split bug is fixed, dropping whole-crate build errors 106 -> 28. Migrate src/bin/mdns_proxy.rs to source all spec-verifiable logic from generated gen/rust/mdns_proxy.rs via #[path]; add smoke/mdns_proxy_smoke.sh (two-process, N=5, 5/5 x3 deterministic; 14/14 unit). Fix one genuine spec typo in multipath_routing.t27 through the pipeline + add its anchor. Eliminate the audio_crypto placeholder by regeneration (no allowlist quarantine needed). Harden two Lefthook gates (no-gen-edits ties staged gen byte-for-byte to fresh t27c output; golden-anchor exempts gen/ via banner provenance) so the pipeline's own output cannot fail the pipeline's rules. Remaining blockers isolated, NOT masked: t27c defect A ([u32;N] param -> Vec<>, 26 E0107) and defect B (compare/logical-not not lowered to u32, 2 E0308); both block whole-crate build, neither hand-patched. phi^2 + phi^-2 = 3 | TRINITY Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Convert docs/E1_1_IPHONE_TOPOLOGY.md from a Russian DRAFT into a production-honest English decision record. Status: DECISION COMPLETE - HARDWARE UNVERIFIED (architecture closed; real-device validation is a separate gate, not a reason to stay draft). Factual corrections (authoritative-source checked): - Board naming normalized to P201 Mini (P203 stated once as deprecated alias). - Variant A (USB Personal Hotspot via ipheth) kept PROVISIONAL PRIMARY, gated on a real-device acceptance gate (Apple 111785 + ArchWiki tethering). - Removed false "Airplane Mode + Wi-Fi off => hotspot without SIM" claim; Personal Hotspot shares cellular (Apple iph45447ca6). MDM/MVNO restriction elevated to primary risk. - Removed false "NSLocalNetworkUsageDescription gives Safari PWA an mDNS-browse prompt" claim; iOS Safari has no public DNS-SD browse API (Apple NetServices FAQ + DTS 704037). Lane A uses deterministic entry (QR / URL / stable trinet-admin.local); Avahi advert preserved for native tooling only. - Removed uncited goodput numbers and "all iPhones" universals. - Self-signed https://<ip> does not satisfy Safari trust; curl -k is not browser evidence; certificate/pairing/bootstrap deferred to E2.2. Smoke is now two-level: Level 1 sandbox IP/API sim (smoke/e1_1_admin_httpd_smoke.sh, measured PASS) and Level 2 real-device gate (doc section 7, blocking, hardware). Iteration log updated with the W7 part-6 entry. phi^2 + phi^-2 = 3 | TRINITY Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…defects C + B-residual The toolchain at /home/user/workspace/toolchain/t27c was upgraded to the defect-A/B-fix build (SHA 052ede5, t27 commit b1a0f8d), which made the committed gen/ (produced by 2a114bc) stale versus the current compiler; the repo-wide stale-gen pre-push gate correctly blocked. Regenerate all 76 specs via the repo batch workflow (24 files change). No hand-edits, no spec edits, binary not committed. Measured whole-crate cargo build --release: error CLASS shifted, count ~unchanged. - Defect A ([T;N] -> Vec<>, E0107): FIXED (0 E0107). - Defect B (comparison -> u32 at return): FIXED at return sites. - NEW defect C: array-length const emitted as u32 (const MAX_FLOWS: u32 in [u32; MAX_FLOWS]) but Rust needs usize -> 26 E0308. Dominant remaining blocker. - Defect B residual: logical-not `!` on a u32-valued call in an if-condition not lowered -> 1 E0308 at gen/rust/multipath_routing.rs:93. Crate still does not fully build; cargo-build hook stays ADVISORY. Both remaining defects isolated for the t27 compiler owner, NOT hand-patched. phi^2 + phi^-2 = 3 | TRINITY Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Capture the authoritative-checked facts for the iPhone<->P201 Mini lane: Personal Hotspot shares cellular (MDM/MVNO risk), iOS Safari has no DNS-SD browse API (deterministic QR/URL entry, not PWA mDNS), self-signed https is not Safari-trusted (curl -k != browser), two-level smoke, P201 Mini naming. phi^2 + phi^-2 = 3 | TRINITY Co-Authored-By: Claude Opus 4.7 <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.
Summary
Feasibility study for iPhone → P203 Mini direct connection as (1) admin dashboard for network management and (2) voice PTT walkie-talkie client, with Tri-Net as trusted transport underneath.
Not implementation — this is the wave report + decomposed plan + three cooperation lanes for the next loop.
Report structure
6850649,-sim/-cite/-structtagging disciplineRecommendation
Lane A (PWA-first) — covers
-simend-to-end, no App Store dependency, no silicon dependency, cheapest first demo (~3 weeks). Lane B kicks in only if Lane A confirms market fit.Reproduction
cd /home/user/workspace/tri-net git fetch origin git checkout feat/wave-iphone-admin-2026-07-14 less docs/WAVE_IPHONE_ADMIN_2026-07-14.mdDiscipline hooks
-simor-cite)What this PR does NOT ship
Not-merged, DRAFT
Human review only. Do not auto-merge.
phi^2 + phi^-2 = 3