Skip to content

[TRACKING] Machine-Checked Devcon Week: the task tree #25

Open

Description

@leolara

Machine-Checked Devcon Week: the task tree

One issue per unit of docs/PLAN.md, all labelled HACKATHON. The rules of the week live in RULES.md: comment claim to take an issue, one at a time; a pull request within 8 hours of the assignment, drafts count; every issue is claimable from day one, and you build ahead of open dependencies against mocks of their frozen interfaces; organisers review within 12 hours. Work targets hackathon26. The score multiplies code quality by proof coverage, so prove what the unit owns. Questions go to the event channel.

The tree (the plan's tracks, with issue numbers)

W1 foundations (parallel)
 ├─ track A (codecs):  #2 W1.2 → #3 W2.1 → {#7 W2.2 · #8 W2.3}
 ├─ track B (crypto):  #2 W1.2 → {#4 W3.1 · #5 W3.2} → #9 W3.3
 └─ track C (net):     #1 W1.1 (+#2 W1.2) → #10 W4.1 → {#13 W4.2 · #14 W4.3}
W5 joins all three tracks
 └─ #11 W5.1 → #15 W5.2 → {#16 W5.3 · #17 W5.4} → #18 W5.5
    → #19 W5.6 → #20 W5.7 → #22 W5.8 → #24 W5.9
W6 consensus extension
 └─ {#12 W6.1 · #6 W6.2} → #21 W6.3 → #23 W6.4

The issues, in tree order

Every issue is claimable from day one. The needs lines give the merge order, and the dependencies you mock until they merge.

Cross-edges the arrows hide

The tree draws the tracks. These edges cross them, and each issue body names them:

Issue Depends on Why
#10 W4.1 #1 W1.1 the sim and the Stream loop need the conc primitives
#13 W4.2 #1 W1.1 the close-wakes discipline sits on Chan and TaskSet
#16 W5.3 #9 W3.3 AEAD and HKDF through the Crypto facade
#19 W5.6 #11 W5.1, #1 W1.1 PeerId, and the registries over OnceRef
#21 W6.3 #6 W6.2 the snappy framing of the length prefix
#23 W6.4 #19 W5.6, #20 W5.7, #1 W1.1 the host, identify, and the bounded queues
#24 W5.9 #22 W5.8 the harness drives the built binaries

Mock substitution ledger

A merged pull request may carry mocks of unmerged dependencies (RULES.md, Working ahead of the tree). Each row names one mock, the dependency it stands in for, and the connections that replace it. The author of the mocked pull request drops the mocks within 12 hours of the last dependency merge, and CI goes green without mocks.

Carried by Mock Real dependency The connections to make
#7 W2.2 (PR #28) Pb.Mock.Bytes #2 W1.2 base/bytes DecodeError, the Codec and LawfulCodec classes, ofNatList, toNatList, toString?, and the productionAgrees and checkCodec harness take W1.2's concrete API
#7 W2.2 (PR #28) Pb.Mock.Varint #3 W2.1 codec/varint UVarint, maxBytes, limit, encode, decode?, and decodeB? move to the real module, and the four assumed facts (decodeEncodeSuffix, encodeDecode, encodeNonempty, encodeBytes) are re-proved from its theorems
#9 W3.3 (PR #41) Crypto.Mock.CryptoPure #4 W3.1 crypto/pure import the real CryptoPure and delete the mock; the surface match is verified name by name (the PR #29 review); tracked as issue #52
#10 W4.1 (PR #32) Streams.Mock.Bytes #2 W1.2 base/bytes drop the module; each open Streams.Mock.Bytes becomes open Bytes; the harness calls checkRoundTrips and checkModelPins and the LawfulCodec fields already follow #30's API
#10 W4.1 (PR #32) Streams.Mock.Varint #3 W2.1 codec/varint drop the module; each open moves to the real Varint; the two axioms (decodeEncodeSuffix, encodeDecode) are theorems there under the same names
#10 W4.1 (PR #32) Streams.Mock.Multiaddr #8 W2.3 codec/multiformats drop the module and open Multiformats; the four-protocol parser (ip4, ip6, tcp, memory) gives way to the full protocol table and its strict text parser
~~ #16 W5.3 (PR #69) ~~ Security.Mock.Core ~~ #15 W5.2 libp2p/core ~~ drop the module; the imports move to Libp2p.Core, the mocked SecureConn and SecurityProtocol give way to the real seam values, and the prose that says core is unmerged goes. Window: 19:22 UTC 2026-11-07 (#64 merged 07:22 UTC)
~~ #17 W5.4 (PR #49) ~~ Libp2p/Mux/Mock/Core.lean ~~ #15 W5.2 libp2p/core ~~ delete the mock modules, move the imports to Libp2p.Core, and re-point Muxer and MuxSession to the real seams; land Mux.yamux over the W4.3 session (unit 1b, issue #17). Window: 19:22 UTC 2026-11-07
~~ #18 W5.5 (PR #40) ~~ Negotiate.Mock.Core ~~ #15 W5.2 libp2p/core ~~ delete the mock, import Libp2p.Core, and re-type the upgrader over the real SecurityProtocol and Muxer seams; Mock/Core.lean stale prose goes with it. Window: 19:22 UTC 2026-11-07
~~ #19 W5.6 (PR #61) ~~ Host.Mock.Core ~~ #15 W5.2 libp2p/core ~~ delete the mock, import Libp2p.Core; the StreamContext retype stays mechanical. Window: 19:22 UTC 2026-11-07
#19 W5.6 (PR #61) Host.Mock.Negotiate #18 W5.5 negotiate a retype, not a delete: the merged negotiate takes no admit and answers the plain pair, and it exports no negotiateStream; the host gates before Negotiate.upgrade, and the stream-serving path needs real multistream over the muxed stream. Window: 12 hours from this merge
#20 W5.7 (PR #45) Protocols/Mock/Core.lean #15 W5.2 libp2p/core delete the mock, import Libp2p.Core, re-type the handlers over the real StreamHandler and StreamContext. Window: 19:22 UTC 2026-11-07
#20 W5.7 (PR #45) Protocols/Mock/Host.lean #19 W5.6 host delete the mock, import the real host seam, and serve identify and ping through the swarm registry. Window: 12 hours from the #61 merge
~~ #21 W6.3 (PR #46) ~~ Protocols/Mock/Core.lean ~~ #15 W5.2 libp2p/core ~~ delete the mock, import Libp2p.Core, re-type the req/resp handler over the real StreamHandler. Window: 19:22 UTC 2026-11-07
#22 W6.4 (PR #59) Negotiate/Legacy/ (not a Mock, a parallel pre-retype upgrader) #18 W5.5 negotiate, retyped host (seam issue #70) the subtree dies when the host gates before Negotiate.upgrade per #70's retype; the host's Swarm.lean drops its Negotiate.Legacy imports. Window: 12 hours from the #70 retype landing
#24 W5.9 (PR #60) Interop/Mock/Stack.lean the merged W5 stack (#11 identity, #15 core, #16 security, #17 mux, #18 negotiate, #19 host, #20 identify/ping) delete the mock, wire the harness over the real upgrader chain, and record the green matrix run on #24 with the binary SHA. Window: 20:45 UTC 2026-11-09 (12 hours from the #60 merge at 08:45 UTC)
#21 W6.3 (PR #46) Protocols/Mock/HostStream.lean #19 W5.6 host delete the mock, take the stream and its StreamContext from the real swarm registry. Window: 12 hours from the #61 merge
~~ #21 W6.3 (PR #46) ~~ Protocols/Mock/Muxer.lean ~~ #17 W5.4 mux ~~ delete the mock, dial and accept over the real Muxer seam. Window: 12 hours from the #49 merge

The Pb.Mock.* rows are done: PR #48 merged on 2026-11-05 and carries the real dependencies. The Crypto.Mock.CryptoPure row is done: PR #57 merged on 2026-11-06 (issue #52). The Streams.Mock.* rows are done: PR #58 merged on 2026-11-06 (issue #51).

A pull request that lands with mocks adds its rows here at merge time.

The critical path

#1 → #2 → #3 → #7 → #11 → #15 → #16 → #18 → #19 → #20 → #22 → #24 → #21 → #23

(W0 has landed; its commit is the scaffold every unit starts from.)

Activity

  1. leolara commented on Nov 1, 2026

    @leolara
    ContributorAuthor

    Rule change: every issue is claimable from day one.

    The tree's critical path is fourteen issues deep, and a serialized cycle of the 8 hour window and the 12 hour review cannot cross it inside the week. Claims now open on the frozen interfaces of ARCHITECTURE §4 instead of on merges:

    • Claim any issue from the start of the week.
    • When a dependency of your issue is not merged yet, build against a mock of its frozen interface: opaque declarations in a Mock namespace, spec theorems as mock axioms listed with #print axioms, no sorry, CI green.
    • A pull request with mocks opens and reviews normally. It merges only when every dependency has merged. After the last dependency merges, drop the mocks within 12 hours.
    • The frozen interfaces stay frozen for the week; a breaking change needs organiser approval on the issue first.

    Full text: #26, live in RULES.md once it merges. The needs lines below are the merge order, and the dependencies you mock until they merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions