Skip to content

docs: wave iphone-admin + PTT-over-Tri-Net (2026-07-14) - #81

Draft
gHashTag wants to merge 12 commits into
mainfrom
feat/wave-iphone-admin-2026-07-14
Draft

docs: wave iphone-admin + PTT-over-Tri-Net (2026-07-14)#81
gHashTag wants to merge 12 commits into
mainfrom
feat/wave-iphone-admin-2026-07-14

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

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

Recommendation

Lane A (PWA-first) — covers -sim end-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.md

Discipline hooks

  • no-fabricated-metrics (every number tagged -sim or -cite)
  • Trinity rule («no chip, no TRI, period» — attestation deferred to post-SKY26b tape-out 2026-12-16)
  • aspiration-vs-property (jitter buffer § respects WMEWMA reactivity, does not test asymptote)
  • numbers-without-realm-check (all numeric claims have method + trust class in §9)
  • SHA-advance rule (approvals bind to this SHA; re-approval required on push)

What this PR does NOT ship

  • No code changes. Doc only.
  • No iOS app. No PWA. No Opus wrapper. All of that is future work (see §5 tasks E1.1–E4.1).
  • No chip-attestation claims. Pre-silicon everything.

Not-merged, DRAFT

Human review only. Do not auto-merge.

phi^2 + phi^-2 = 3

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
@gHashTag gHashTag added mesh TRI-NET mesh track documentation Docs labels Jul 14, 2026
gHashTag and others added 11 commits July 14, 2026 04:36
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
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Docs mesh TRI-NET mesh track

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant