Skip to content

Commit daa479f

Browse files
committed
plan: mark 6.4 (IPv6 dual-stack) + 6.5 (log timestamps) done
1 parent 4414c23 commit daa479f

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

plan/pending/hardening.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ algorithm.
1111
**Phases 1, 2, 4, 5, 7 are COMPLETE; Phase 3 is done except the v2 per-datagram MAC.** Every 🔴
1212
item and every cleanly-testable or minor 🟠/🟡/📄 item has landed. What remains is the larger
1313
reliability work: **3.2-v2** (a per-datagram MAC — the cryptographic upgrade over the v1
14-
source-address check) and **Phase 6** (6.1 notification anti-entropy, 6.2 chain/datagram size
15-
bounds, 6.3 peer liveness, 6.4 IPv6, 6.5 log timestamps). 1.6 stays deferred (mooted by 1.1).
14+
source-address check) and the **feature-scale Phase 6 items** (6.1 notification anti-entropy,
15+
6.2 chain/datagram size bounds, 6.3 peer liveness) — each deserving its own sub-plan. 6.4 (IPv6)
16+
and 6.5 (log timestamps) are done. 1.6 stays deferred (mooted by 1.1).
1617

1718
## Why now — the threat-model shift
1819

@@ -272,6 +273,9 @@ on-disk state stay consistent; a test drives a >2× single-record write and asse
272273

273274
## Phase 6 — Reliability & scale 🟡
274275

276+
**Status: 6.4 + 6.5 DONE.** The remaining items (6.1 anti-entropy, 6.2 chain/datagram size bounds,
277+
6.3 peer liveness) are feature-scale and each deserves its own sub-plan like 2.4 did.
278+
275279
- [ ] **6.1 — Reliable clock-notification delivery.** Reverse edges (the upper-bound walkability) are
276280
learned only from single, change-only UDP notifications ([node.cpp:102](../../src/core/node.cpp#L102));
277281
a lost datagram loses that reverse edge permanently. Add periodic re-advertisement / anti-entropy of
@@ -285,11 +289,14 @@ on-disk state stay consistent; a test drives a >2× single-record write and asse
285289
- [ ] **6.3 — Peer liveness and removal.** Implement `peer rm` / `peer ping`; expire dead peers so a
286290
years-long node's overlay does not rot into a graveyard of unreachable addresses it keeps notifying.
287291
(This is also on the paper-vs-implementation "not implemented" list — coordinate.)
288-
- [ ] **6.4 — IPv6 transport.** `set_peer` is `inet_pton(AF_INET, …)` only
289-
([transport.hpp:59](../../src/adapters/os/transport.hpp#L59)); add an IPv6/dual-stack path for
290-
real internet (IPv6-only ISPs, CGNAT).
291-
- [ ] **6.5 — Log timestamps + verbosity.** `LogTelemetry` emits no wall-clock time and floods
292-
discovery lifecycle lines unconditionally; add timestamps and gate discovery logging on verbosity.
292+
- [x] **6.4 — IPv6 transport.** DONE: `UdpTransport` opens a dual-stack `AF_INET6` socket
293+
(`IPV6_V6ONLY` off), so one socket serves IPv4-only, IPv6-only, and mixed networks. `set_peer`
294+
accepts an IPv6 literal or an IPv4 literal (mapped to `::ffff:a.b.c.d`); the source-address check
295+
compares the full 16-byte v6 address. Test: an IPv6 `::1` round-trip; IPv4 (127.0.0.1) tests and
296+
all acceptance suites still pass via IPv4-mapping.
297+
- [x] **6.5 — Log timestamps.** DONE: `LogTelemetry` prefixes each line with a wall-clock timestamp
298+
(`YYYY-MM-DD HH:MM:SS.mmm`). (Verbosity gating of discovery lifecycle lines left as a minor
299+
follow-up — `verbose_` already gates the noisiest per-clock-event line.)
293300

294301
---
295302

0 commit comments

Comments
 (0)