feat(sprint2): E4-E6 path diversity + self-heal + E5 bugfixes#23
Merged
gHashTag merged 12 commits intoJul 4, 2026
Merged
Conversation
Wave A: 4-segment map (tethered / mm-wave / MANET / silicon-bound DePIN) Wave B: 9-column comparison table vs 8 competitors Wave C: 10 Trinity artefacts mapped to specific competitor moats Anchor: phi^2 + phi^-2 = 3
- AGENT_ORDERS_2026-07-03.md: sync protocol, ownership split, hard boundaries - AGENT_STATUS_CLOUD.md: cloud agent state, open PRs, awaiting user decisions Anchor: phi^2 + phi^-2 = 3
- AGENT_ORDERS_2026-07-04.md: local agent -> Sprint 2 E4-E6, cloud -> Wave N+2 beta - AGENT_STATUS_CLOUD.md: user decisions logged (trigger+weekly, beta, parallel) - Correction: local agent 3c62234 out of zone, reset --hard prescribed Anchor: phi^2 + phi^-2 = 3
- Order 3.1: finish E5 (2 pending tests) before handoff - Order 3.2: base64 patch via AGENT_STATUS_LOCAL.md (with SHA-256) - Order 3.3: local agent must not narrate cloud state - Order 3.4: allowed parallel work - Order 3.5: WAIT MODE after handoff User decision: variant A (fix E5 first, then full patch) Cloud agent: starting Wave N+2 beta Recon in parallel Anchor: phi^2 + phi^-2 = 3
Anchor: phi^2 + phi^-2 = 3
…o-push reality Root cause acknowledged: local agent has no git remote access to gHashTag/tri-net. All previous 'git fetch origin' orders were technically impossible for it. Fault on cloud side, not local. New protocol: - Local codes freely in its own copy, any branch names locally - Handoff via plain text in AGENT_STATUS_LOCAL.md (docs) or format-patch (code) - User is courier - Cloud holds push/PR monopoly User decision: variant 2 — merge best content from local's 337-line version into PR #22. Also confirmed via API: - PR #22 open at f262dbc on feat/wave-benchmark-2026-07-04 - Ready to receive local's content via merge commit Anchor: phi^2 + phi^-2 = 3
Zero-history clean start covering: - Identity and environment (no push access reality) - First task: Sprint 2 E4-E6 (Path Diversity + Self-Heal) - Handoff protocol via AGENT_STATUS_LOCAL.md - Hard boundaries and honesty rules Anchor: phi^2 + phi^-2 = 3
Merged 158-line cloud version (commit 74dbbf5) with 210-line local version (commit 7bad790 on local Mac): - Kept Russian voice/style from cloud - Adopted 12-section structure from local - Removed emojis (violate user style) - Updated Sprint 2 status to done (176/0 tests) - Added Emergency Procedures section - Added rule for handling contradictory session dumps Anchor: phi^2 + phi^-2 = 3
Manual reconciliation equivalent to local commit 8c6fcc7 (which lives only on local/sprint2-path-diversity-2026-07-04 and was never pushed to cloud). Content-equivalent, not cherry-picked. Reflects post-dump reality: - Sprint 2 E4+E5+E6 done, 176/0 tests on local 58bf246 - Both doc-merges pushed (onboarding 4da6e85, benchmark 31aafc2) - Awaiting sprint2-full.mbox (sha256 d958aeb) for git am - Old sprint2.patch (9717163) marked STALE, pre-fix state Anchor: phi^2 + phi^-2 = 3
Local agent (dump caf595a, 2026-07-04T03:14) pre-validated my Sprint 2 apply plan on throwaway branch from 8c6fcc7 (content- equivalent of cloud e7ff37a): - git am sprint2-full.mbox: 8/8 clean apply - cargo test --all: 176/0 E5 fix attribution clarified: local agent authored both Bug A (hot_swap dead-filter stale cache) and Bug B (ranked_hops missing feasibility routes) in same session — commits d640423 + 58bf246. Will attribute correctly in Sprint 2 PR description. Anchor: phi^2 + phi^-2 = 3
Ported from local/sprint2-path-diversity-2026-07-04 (58bf246) onto feat/wave-competitors-2026-07-03. Repos diverged structurally (Cargo.toml bench layout, cosmetic src drift), so applied as final file-states, not git am. E4 - Babel path ETX + feasibility (RFC 8966 §3.7): src/routing.rs adds PathRoute/path_routes/is_feasible/learn_route/compute_path_etx/force_dead. 100-topology fuzz -> 0 loops. E5 - Ranked next-hops (k=2) + hot-swap: src/router.rs. Bug A (hot_swap_on_force_dead): dead-filter now reads live EtxTable, not stale cached candidate metric. Bug B (ranked_hops_ignores_dead_links): pool merges feasibility-learned routes (etx.path_route), not just ranked_candidates. Spec: etx.t27 (dead=inf), redundancy_management.t27 (backup excludes failed). E6 - Self-heal convergence: src/daemon.rs ConvergenceMetrics + JSON emit + CI gates (<5s link, <10s node). src/discovery.rs, src/bin/trios_meshd.rs. Cargo.toml: serde/serde_json promoted to [dependencies] (runtime JSON). doctest: src/crypto.rs NoiseXX diagram marked text-fence. cargo test --all = 110 passed, 0 failed. Sprint 2 landmarks green: fuzz_100_random_topologies_no_loops, hot_swap_on_force_dead, ranked_hops_ignores_dead_links, convergence_ci_gate_*.
Pre-existing debt was blocking PR #23 CI (.github/workflows/ci.yml runs cargo fmt --all --check + cargo clippy --all-targets -- -D warnings). fmt: cargo fmt --all across affected files. clippy: machine-fixed via cargo clippy --fix, plus 4 manual resolutions: - src/router.rs: remove dead is_alive() method (Sprint 2 vestigial; the alive-check is inlined in recompute_ranked_hops). - src/router.rs: collapse single-pattern match to if let (clippy::single_match). - src/crypto.rs: remove unused SharedSecret type alias. - src/crypto.rs: #[allow(dead_code)] on NoiseXX.initiator (role retained for future rekey/anti-replay logic; set by new(), not yet read). Gate verified locally: fmt=0 clippy=0 test=0 (110 passed, 0 failed). No behavior change; Sprint 2 landmarks still green.
gHashTag
marked this pull request as ready for review
July 4, 2026 04:58
This was referenced Jul 4, 2026
gHashTag
added a commit
that referenced
this pull request
Jul 4, 2026
) * docs: wave report — competitor moat analysis × Trinity assets Wave A: 4-segment map (tethered / mm-wave / MANET / silicon-bound DePIN) Wave B: 9-column comparison table vs 8 competitors Wave C: 10 Trinity artefacts mapped to specific competitor moats Anchor: phi^2 + phi^-2 = 3 * docs: order #1 to local agent + cloud status file - AGENT_ORDERS_2026-07-03.md: sync protocol, ownership split, hard boundaries - AGENT_STATUS_CLOUD.md: cloud agent state, open PRs, awaiting user decisions Anchor: phi^2 + phi^-2 = 3 * docs: order #2 — Sprint 2 auth + Wave N+2 beta kickoff - AGENT_ORDERS_2026-07-04.md: local agent -> Sprint 2 E4-E6, cloud -> Wave N+2 beta - AGENT_STATUS_CLOUD.md: user decisions logged (trigger+weekly, beta, parallel) - Correction: local agent 3c62234 out of zone, reset --hard prescribed Anchor: phi^2 + phi^-2 = 3 * docs: order #3 — fix E5 first, patch handoff protocol - Order 3.1: finish E5 (2 pending tests) before handoff - Order 3.2: base64 patch via AGENT_STATUS_LOCAL.md (with SHA-256) - Order 3.3: local agent must not narrate cloud state - Order 3.4: allowed parallel work - Order 3.5: WAIT MODE after handoff User decision: variant A (fix E5 first, then full patch) Cloud agent: starting Wave N+2 beta Recon in parallel Anchor: phi^2 + phi^-2 = 3 * docs: cloud status — Wave N+2 beta closed, PR #22 open Anchor: phi^2 + phi^-2 = 3 * docs: order #4 — coordination protocol rebuilt around local agent's no-push reality Root cause acknowledged: local agent has no git remote access to gHashTag/tri-net. All previous 'git fetch origin' orders were technically impossible for it. Fault on cloud side, not local. New protocol: - Local codes freely in its own copy, any branch names locally - Handoff via plain text in AGENT_STATUS_LOCAL.md (docs) or format-patch (code) - User is courier - Cloud holds push/PR monopoly User decision: variant 2 — merge best content from local's 337-line version into PR #22. Also confirmed via API: - PR #22 open at f262dbc on feat/wave-benchmark-2026-07-04 - Ready to receive local's content via merge commit Anchor: phi^2 + phi^-2 = 3 * docs: onboarding brief (Order #0) for fresh local agent Zero-history clean start covering: - Identity and environment (no push access reality) - First task: Sprint 2 E4-E6 (Path Diversity + Self-Heal) - Handoff protocol via AGENT_STATUS_LOCAL.md - Hard boundaries and honesty rules Anchor: phi^2 + phi^-2 = 3 * docs(onboarding): v2.0 merge cloud+local versions Merged 158-line cloud version (commit 74dbbf5) with 210-line local version (commit 7bad790 on local Mac): - Kept Russian voice/style from cloud - Adopted 12-section structure from local - Removed emojis (violate user style) - Updated Sprint 2 status to done (176/0 tests) - Added Emergency Procedures section - Added rule for handling contradictory session dumps Anchor: phi^2 + phi^-2 = 3 * docs(status): reconcile cloud status to Sprint 2 COMPLETE Manual reconciliation equivalent to local commit 8c6fcc7 (which lives only on local/sprint2-path-diversity-2026-07-04 and was never pushed to cloud). Content-equivalent, not cherry-picked. Reflects post-dump reality: - Sprint 2 E4+E5+E6 done, 176/0 tests on local 58bf246 - Both doc-merges pushed (onboarding 4da6e85, benchmark 31aafc2) - Awaiting sprint2-full.mbox (sha256 d958aeb) for git am - Old sprint2.patch (9717163) marked STALE, pre-fix state Anchor: phi^2 + phi^-2 = 3 * docs(status): pre-validation logged, awaiting sprint2-full.mbox Local agent (dump caf595a, 2026-07-04T03:14) pre-validated my Sprint 2 apply plan on throwaway branch from 8c6fcc7 (content- equivalent of cloud e7ff37a): - git am sprint2-full.mbox: 8/8 clean apply - cargo test --all: 176/0 E5 fix attribution clarified: local agent authored both Bug A (hot_swap dead-filter stale cache) and Bug B (ranked_hops missing feasibility routes) in same session — commits d640423 + 58bf246. Will attribute correctly in Sprint 2 PR description. Anchor: phi^2 + phi^-2 = 3 * feat(sprint2): E4-E6 path diversity + self-heal + E5 bugfixes Ported from local/sprint2-path-diversity-2026-07-04 (58bf246) onto feat/wave-competitors-2026-07-03. Repos diverged structurally (Cargo.toml bench layout, cosmetic src drift), so applied as final file-states, not git am. E4 - Babel path ETX + feasibility (RFC 8966 §3.7): src/routing.rs adds PathRoute/path_routes/is_feasible/learn_route/compute_path_etx/force_dead. 100-topology fuzz -> 0 loops. E5 - Ranked next-hops (k=2) + hot-swap: src/router.rs. Bug A (hot_swap_on_force_dead): dead-filter now reads live EtxTable, not stale cached candidate metric. Bug B (ranked_hops_ignores_dead_links): pool merges feasibility-learned routes (etx.path_route), not just ranked_candidates. Spec: etx.t27 (dead=inf), redundancy_management.t27 (backup excludes failed). E6 - Self-heal convergence: src/daemon.rs ConvergenceMetrics + JSON emit + CI gates (<5s link, <10s node). src/discovery.rs, src/bin/trios_meshd.rs. Cargo.toml: serde/serde_json promoted to [dependencies] (runtime JSON). doctest: src/crypto.rs NoiseXX diagram marked text-fence. cargo test --all = 110 passed, 0 failed. Sprint 2 landmarks green: fuzz_100_random_topologies_no_loops, hot_swap_on_force_dead, ranked_hops_ignores_dead_links, convergence_ci_gate_*. * chore(fmt+clippy): project-wide to clear CI -D warnings gate Pre-existing debt was blocking PR #23 CI (.github/workflows/ci.yml runs cargo fmt --all --check + cargo clippy --all-targets -- -D warnings). fmt: cargo fmt --all across affected files. clippy: machine-fixed via cargo clippy --fix, plus 4 manual resolutions: - src/router.rs: remove dead is_alive() method (Sprint 2 vestigial; the alive-check is inlined in recompute_ranked_hops). - src/router.rs: collapse single-pattern match to if let (clippy::single_match). - src/crypto.rs: remove unused SharedSecret type alias. - src/crypto.rs: #[allow(dead_code)] on NoiseXX.initiator (role retained for future rekey/anti-replay logic; set by new(), not yet read). Gate verified locally: fmt=0 clippy=0 test=0 (110 passed, 0 failed). No behavior change; Sprint 2 landmarks still green. --------- Co-authored-by: Perplexity Computer <agent@perplexity.ai> Co-authored-by: SSD DDD <ssdm4@MacBook-Pro.local>
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.
Sprint 2 ported from local worktree (
58bf406) ontofeat/wave-competitors-2026-07-03(aa5c855). Repos had diverged structurally (Cargo.toml bench layout, cosmetic src drift) so applied as final file-states rather thangit am.Deliverables
E4 — Babel path ETX + feasibility (RFC 8966 §3.7) —
src/routing.rsPathRoute, path_routes, is_feasible, learn_route, compute_path_etx, force_dead. 100-topology fuzz → 0 loops.
E5 — Ranked next-hops (k=2) + hot-swap —
src/router.rshot_swap_on_force_dead): dead-filter now reads liveEtxTable, not stale cached candidate metric.ranked_hops_ignores_dead_links): candidate pool merges feasibility-learned routes (etx.path_route), not justranked_candidates.etx.t27(dead=∞),redundancy_management.t27(backup excludes failed path).E6 — Self-heal convergence instrumentation —
src/daemon.rsConvergenceMetrics, link_loss/node_off detection timers, JSON emit, CI gates (<5s link, <10s node).
src/discovery.rs,src/bin/trios_meshd.rsintegration.Cargo.toml: serde/serde_json promoted to [dependencies].doctest fix —
src/crypto.rs: NoiseXX diagram markedtext-fence.Tests
cargo test --all= 110 passed, 0 failed. Sprint 2 landmarks green:fuzz_100_random_topologies_no_loops,hot_swap_on_force_dead,ranked_hops_ignores_dead_links,convergence_ci_gate_*.Note
110 ≠ 176 (local) because this base has fewer tests in non-Sprint-2 modules (transport/multihop) — not a regression. Pre-existing fmt/clippy debt intentionally NOT mixed in; separate
chorerecommended.Anchor: φ² + φ⁻² = 3