Commit Graph
51 Commits
Author SHA1 Message Date
kyleandClaude Opus 5.5 5c8bfe89ac chore: release 0.2.0; document the store contract and on_send_error
CI / ci (push) Canceled after 0s
Bump tines-core and tines-sim to 0.2.0 (Peer::in_flight changed type).
Add CHANGELOG.md. README gains a "Writing a store" section and a note on
calling Exchange::on_send_error when driving Exchange without Node.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:24:30 -07:00
kyleandClaude Opus 5.5 203550bfc4 docs: expand README with diagrams; bring AGENTS.md up to date
CI / ci (push) Canceled after 0s
README: protocol, fragmentation, poll and addressed-delivery diagrams;
observation fields and identity; transport, belief and trim guidance;
simulator example; constants table.

AGENTS.md: drop the completed plan's task-by-task workflow and Task 14
notes, point at both specs, use scripts/ci.sh as the gate, and update
the identity-hash constraint to include `to`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:14:56 -07:00
kyleandClaude Opus 5.5 9a055b5b57 refactor(core): scan only addressed ids for custody; share frag plan
- Add Store::for_each_addressed_id (default: every id; MemStore filters)
  so custody selection no longer clones every broadcast observation on
  each poll.
- Factor fragment sizing into frag::plan and MAX_FRAGMENTS, used by both
  frag::fragment and the exchange, and by the reassembler's bounds.
- Document `to` in the Observation::id hash input, matching the
  addressed-delivery plan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:09:07 -07:00
kyleandClaude Opus 5.5 cc39318673 fix(core): harden exchange send path from full-codebase review
- Cut every fragment of a stream from one encoding (age frozen at the
  first fragment) and bounds-check the slice: re-encoding mid-stream
  corrupted fragments and could panic when the tick went backwards.
- Fold the bloom summary to fit the MTU instead of sending a ~540-byte
  frame that small-MTU links reject; drop the sim's summary MTU
  exemption that hid this.
- Finish a peer's in-flight stream before starting another, and count
  an addressed message as delivered only after its last fragment.
- Alternate custody and broadcast per peer, rotate through addressed
  candidates, and evict the oldest bounce record when full, so neither
  path starves.
- Add Exchange::on_send_error; Node::poll uses it so Busy/Unreachable
  sends are retried rather than silently dropped.
- Clear bounce records per contact, record duplicates against their
  sender, and skip addressed messages that cannot fit the MTU.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:08:08 -07:00
kyleandClaude Opus 5.5 111a40236d ci: test the no-alloc build and harden the workflow
Run clippy, docs and tests for tines-core with --no-default-features,
gating the MemStore-based tests on `alloc` so they compile there. Fail on
rustdoc warnings, pass --locked everywhere, and pin the toolchain to
1.99.0. In the workflow, use read-only permissions, cancel superseded
runs, add a 20-minute timeout, and pin actions to commit SHAs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 05:07:12 -07:00
kyle 6907f000a2 ci: add GitHub Actions workflow
CI / ci (push) Successful in 2m10s
2026-10-18 04:30:00 -07:00
kyle d10e3cd88e test(core): close deferred coverage gaps 2026-10-18 04:28:38 -07:00
kyle 277daae89f fix(core): rebuild_send_queue excludes addressed messages 2026-10-18 03:57:08 -07:00
kyle 1d646344e6 style: cargo fmt --all 2026-10-18 03:28:51 -07:00
kyle c9ee3684f0 test(sim): addressed relay scenario and property tests 2026-10-18 03:22:35 -07:00
kyle db39dc1df0 feat(core): Node::observe_to and belief excludes addressed-to-others 2026-10-18 02:56:17 -07:00
kyle 8ad0a7415f feat(core): addressed store-and-forward in the exchange 2026-10-18 02:39:36 -07:00
kyle c59834737b feat(core): reject expired or malformed addressed messages 2026-10-18 02:03:52 -07:00
kyle 2c932e96c0 feat(core): summaries carry only broadcast observations 2026-10-18 01:55:29 -07:00
kyle 65c4aa72c0 feat(core): Store::for_each_broadcast_id 2026-10-18 01:49:01 -07:00
kyle 085b4d35da feat(core): Observation gains to/lifetime_ms; identity includes to 2026-10-18 01:41:24 -07:00
kyle 4be8042994 docs: add addressed-delivery implementation plan 2026-10-18 01:26:03 -07:00
kyle 720835de2f docs: pin custody count bound (lifetime + max_count) in addressed-delivery spec 2026-10-18 01:19:40 -07:00
kyle 0e737e3f4c chore: add cargo doc to ci gate 2026-10-18 01:17:16 -07:00
kyle 16198b4f10 chore: make crates publishable (version req, description, authors) 2026-10-18 01:16:36 -07:00
kyle 6c7b1ed492 docs: add addressed-delivery design spec (draft) 2026-10-18 01:14:57 -07:00
kyle 1a02ef2d93 docs: fix broken intra-doc links; make cargo doc clean 2026-10-18 01:12:19 -07:00
kyle 7ef81ced69 Cleaning up README diagram. 2026-10-18 00:23:59 -07:00
kyle 8a5afd17c8 Add tines.jpg diagram to README 2026-10-18 00:20:33 -07:00
kyle 946a3cec98 chore: license under Apache-2.0 (copyright K. Isom) 2026-10-18 00:01:48 -07:00
kyle 1257f227ce refactor(sim): move FrameBuf on dup; vary per-node obs; test disconnect/unreachable 2026-10-17 23:58:15 -07:00
kyle 1752bd23ff refactor(core): dedupe trim/belief comparators and emit_one; add coverage tests 2026-10-17 23:58:15 -07:00
kyle 80ccd25dde fix(core): reset reassembler slot on buffer overflow; drop tautological assert 2026-10-17 23:58:15 -07:00
kyle 09a676c243 docs: fix Bloom |1 placement and doubled 'The'; PairTransport 'broadcast' wording 2026-10-17 23:58:15 -07:00
kyle ab9b892d94 chore: ci script and README 2026-10-17 21:48:37 -07:00
kyle 4706004f47 test(sim): property tests for convergence, order independence, monotonicity 2026-10-17 21:42:16 -07:00
kyle 9de7157ee2 feat(sim): harness and convergence scenarios 2026-10-17 17:32:12 -07:00
kyle 5dca574c50 feat(sim): world, contact trace, SimTransport 2026-10-17 16:06:51 -07:00
kyle 1740acd625 feat(core): Node facade 2026-10-17 15:43:57 -07:00
kyle 12e7c79730 test(core): PairTransport helper 2026-10-17 15:19:25 -07:00
kyle 566b217be2 docs: drop stale current-state section from AGENTS.md 2026-10-17 15:13:50 -07:00
kyle 5c4e78f257 docs: add AGENTS.md for agents working on tines 2026-10-17 15:05:04 -07:00
kyle 781710b196 feat(core): BeliefPolicy, LatestWins, SelfFirst 2026-10-17 15:02:51 -07:00
kyle 0bd74080a5 feat(core): exchange state machine 2026-10-17 14:47:20 -07:00
kyle b935812ed1 feat(core): fragmentation and reassembly 2026-10-17 13:37:43 -07:00
kyle 843ddae6fa feat(core): Transport trait 2026-10-17 13:05:25 -07:00
kyle 010efbe1f5 feat(core): salted Bloom summary 2026-10-17 12:48:39 -07:00
kyle 7ece265dbd feat(core): Store trait, TrimPolicy, MemStore 2026-10-16 18:46:31 -07:00
kyle ba7189804f feat(core): wire frames with postcard 2026-10-16 18:16:25 -07:00
kyle 3bf09afdd8 feat(core): wire frames with postcard 2026-10-16 18:15:57 -07:00
kyle 8108feb146 feat(core): workspace, Observation, content-derived id 2026-10-16 18:05:52 -07:00
kyle 2d2beb7719 chore: gitignore target/ 2026-10-16 17:56:25 -07:00
kyle 138727d4dd Plan: tines-core + tines-sim implementation plan 2026-10-16 17:52:08 -07:00
kyle 08f024766c Design: age-based time (RFC 9171 Bundle Age), seq in identity hash 2026-10-16 17:45:57 -07:00
kyle 76f5a6bc77 Design: settle reviewer questions (NodeId, clock, Addr, convergence, v1 scope) 2026-10-16 14:50:39 -07:00
kyle f73f9247ed Design doc: tines opportunistic shared memory 2026-10-16 14:43:28 -07:00