# Changelog All notable changes to this project will be documented in this file. ## [Unreleased] ### πŸ—οΈ Engine v2.3.0 β€” ds-stream Pipeline v4 β€” 2026-03-11 - **`ChecksumCodec`** β€” CRC32 integrity: append on encode, verify+strip on decode, Error on mismatch - **`RateLimitCodec`** β€” Token bucket algorithm (burst-tolerant, refills over time) - **`TagCodec`** β€” Attach channel ID for mux routing, drop wrong-channel frames on decode - **`Pipeline::chain()`** β€” Compose two pipelines into one - **`Pipeline::describe()`** β€” Human-readable dump (`dedup β†’ compress β†’ encrypt`) - **Error propagation tested** β€” Corrupt checksum β†’ `PipelineResult.errors` collects the error - 474 total ds-stream tests (+13 new) ### πŸ—οΈ Engine v2.2.0 β€” ds-stream Pipeline v3 β€” 2026-03-11 - **`PipelineResult`** β€” returns frames + collected errors + consumed count - **`StageMetric`** β€” per-stage frames_in/frames_out/consumed/errors observability - **`ReassemblyCodec`** β€” reassemble chunked frames (counterpart to SlicerCodec) - **`ConditionalCodec`** β€” wrap any codec with runtime enable/disable toggle - **`Pipeline::signal(key)`** β€” preset: dedupβ†’compressβ†’encrypt - **`Pipeline::media(mtu)`** β€” preset: compressβ†’slicer - **`Pipeline::metrics()`** β€” per-stage counter snapshot - **Slicer↔Reassembly roundtrip** β€” verified end-to-end chunkβ†’reassemble - 461 total ds-stream tests (+12 new) ### πŸ—οΈ Engine v2.1.0 β€” ds-stream Pipeline v2 β€” 2026-03-11 - **`CodecOutput::Many`** β€” codecs can fan-out (1 frame β†’ N frames) - **`EncryptCodec`** β€” XOR cipher encrypt/decrypt adapter - **`FilterCodec`** β€” drop frames by type (`FilterCodec::drop_control()`) - **`Codec::reset()`** β€” clear internal state on reconnect - **`Pipeline::encode_all/decode_all`** β€” batch frame processing - **`SlicerCodec`** rewritten β€” real MTU chunking via `Many` (no more truncation) - **Full roundtrip test** β€” Compressβ†’Encryptβ†’encodeβ†’decodeβ†’verify original - 449 total ds-stream tests (+11 new) ### πŸ—οΈ Engine v2.0.0 β€” ds-stream Pipeline Architecture β€” 2026-03-11 - **[NEW] `pipeline.rs`** β€” `Frame`, `CodecResult`, `Codec` trait, `Pipeline` builder - **6 codec adapters** β€” `PassthroughCodec`, `DedupCodec`, `CompressCodec`, `PacerCodec`, `SlicerCodec`, `StatsCodec` - **15 pipeline tests** β€” frame roundtrip, pipeline composition, per-codec verification (438 total ds-stream tests) ### πŸš€ Engine v1.15.0 β€” 2026-03-11 - **ds-stream** β€” `StreamStats1150`, `PacketCoalescer`, `ErrorBudget` (423 tests) - **ds-stream-wasm** β€” `stats_v1150`, `coal_v1150`, `ebudget_v1150` WASM bindings (281 tests) - **ds-physics** β€” `find_fastest_body_v1150`, `get_total_mass_v1150`, `apply_magnet_v1150`, `get_body_angle_v1150` (350 tests) ### πŸš€ Engine v1.14.0 β€” 2026-03-11 - **ds-stream** β€” `PriorityQueue1140`, `LatencyTracker1140`, `FrameWindow` (413 tests) - **ds-stream-wasm** β€” `pq_v1140`, `lat_v1140`, `fw_v1140` WASM bindings (274 tests) - **ds-physics** β€” `get_body_aabb_v1140`, `get_max_speed_v1140`, `apply_buoyancy_v1140`, `is_body_colliding_v1140` (340 tests) ### 🎯 Engine v1.13.0 β€” 2026-03-11 β€” **1,000 TESTS MILESTONE** - **ds-stream** β€” `ChannelMux1130`, `FrameSlicer`, `BandwidthProbe` (403 tests) - **ds-stream-wasm** β€” `mux_v1130`, `slicer_v1130`, `probe_v1130` WASM bindings (267 tests) - **ds-physics** β€” `get_body_distance_v1130`, `get_world_centroid_v1130`, `apply_wind_v1130`, `count_bodies_in_radius_v1130` (330 tests) ### πŸš€ Engine v1.12.0 β€” 2026-03-11 - **ds-stream** β€” `FrameFingerprint`, `AdaptiveBitrate1120`, `JitterBuffer1120` (393 tests) - **ds-stream-wasm** β€” `fingerprint_v1120`, `abr_v1120`, `jitter_v1120` WASM bindings (260 tests) - **ds-physics** β€” `get_contact_count_v1120`, `get_world_momentum_v1120`, `apply_vortex_v1120`, `get_body_inertia_v1120` (320 tests) ### πŸš€ Engine v1.11.0 β€” 2026-03-11 - **ds-stream** β€” `FrameDropPolicy`, `StreamTimeline`, `PacketPacer` (383 tests) - **ds-stream-wasm** β€” `drop_policy_v1110`, `timeline_v1110`, `pacer_v1110` WASM bindings (253 tests) - **ds-physics** β€” `get_world_aabb_v1110`, `get_total_angular_ke_v1110`, `apply_drag_field_v1110`, `get_body_speed_v1110` (310 tests) ### πŸš€ Engine v1.10.0 β€” 2026-03-11 - **ds-stream** β€” `FrameRateLimiter`, `DeltaAccumulator`, `ConnectionGrade` (373 tests) - **ds-stream-wasm** β€” `rate_limit_v1100`, `delta_accum_v1100`, `conn_grade_v1100` WASM bindings (246 tests) - **ds-physics** β€” `get_body_rotation_v1100`, `get_energy_ratio_v1100`, `apply_explosion_v1100`, `get_nearest_body_v1100` (300 tests) ### πŸš€ Engine v1.9.0 β€” 2026-03-11 - **ds-stream** β€” `SequenceValidator`, `FrameTagMap`, `BurstDetector` (363 tests) - **ds-stream-wasm** β€” `seq_v190`, `burst_v190`, `tag_v190` WASM bindings (239 tests) - **ds-physics** β€” `get_gravity_v190`, `get_body_mass_v190`, `apply_central_impulse_v190`, `get_total_potential_energy_v190` (290 tests) ### πŸš€ Engine v1.8.0 β€” 2026-03-11 - **ds-stream** β€” `RingMetric180`, `FrameCompactor`, `RetransmitQueue` (353 tests) - **ds-stream-wasm** β€” `ring_v180`, `compactor_v180`, `retransmit_v180` WASM bindings (232 tests) - **ds-physics** β€” `set/get_angular_damping_v180`, `set_restitution_v180`, `sleep/wake_body_v180`, `count_sleeping_v180` (280 tests) ### πŸš€ Engine v1.7.0 β€” 2026-03-11 - **ds-stream** β€” `DelayBuffer170`, `PacketInterleaver`, `HeartbeatWatchdog` (343 tests) - **ds-stream-wasm** β€” `loss_v170`, `watchdog_v170`, `interleave_v170` WASM bindings (225 tests) - **ds-physics** β€” `set/get_linear_damping_v170`, `is_out_of_bounds_v170`, `clamp_velocities_v170`, `count_dynamic_bodies_v170` (270 tests) ### πŸš€ Engine v1.6.0 β€” 2026-03-11 - **ds-stream** β€” `AesFrameCipher`, `LossInjector`, `StreamCheckpoint` (333 tests) - **ds-stream-wasm** β€” `throttle_v160`, `cipher_v160`, `checkpoint_v160` WASM bindings (218 tests) - **ds-physics** β€” `get_body_type_v160`, `get_world_center_of_mass_v160`, `apply_gravity_well_v160`, `get_total_kinetic_energy_v160` (260 tests) ### πŸš€ Engine v1.5.0 β€” 2026-03-11 - **ds-stream** β€” `ContentDedup`, `StreamHealthTracker`, `FrameThrottler` (323 tests) - **ds-stream-wasm** β€” `bw_limiter_v150`, `dedup_v150`, `metrics_v150` WASM bindings (211 tests) - **ds-physics** β€” `apply_force_field_v150`, `freeze/unfreeze_body_v150`, `get_distance_v150`, `get_angular_momentum_v150` (250 tests) ### πŸš€ Engine v1.4.0 β€” 2026-03-11 - **ds-stream** β€” `SessionRecorder`, `PriorityScheduler`, `BandwidthLimiter` (313 tests) - **ds-stream-wasm** β€” `compositor_v140`, `recorder_v140`, `priority_v140` WASM bindings (204 tests) - **ds-physics** β€” `raycast_v140`, `get_collision_events_v140`, `time_scale_v140`, `get_body_momentum_v140` (240 tests) ### πŸš€ Engine v1.3.0 β€” 2026-03-11 - **ds-stream** β€” `QualityPolicy`, `FrameLayerCompositor`, `ReorderBuffer`, `QualityDecision`+`FrameMode` (303 tests) - **ds-stream-wasm** β€” `quality_decide_v130`, `reorder_push/drain_v130`, `channel_auth_check_v130` (197 tests) - **ds-physics** β€” `snapshot_scene_v130`, `restore_scene_v130`, `get_body_aabb_v130`, `apply_torque_v130` (230 tests) ### πŸš€ Engine v1.2.0 β€” 2026-03-11 - **ds-stream** β€” `HapticPayload`, `haptic_frame()`, `FrameBatch`, `StreamDigest`, `ChannelAuth` (291 tests) - **ds-stream-wasm** β€” `haptic_message_v120`, `batch_frames_v120`, `digest_v120` (190 tests) - **ds-physics** β€” `create_spring_joint_v120`, `get_joint_info_v120`, `set_body_rotation_v120`, `get_body_energy_v120` (220 tests) ### πŸš€ Engine v1.1.0 β€” 2026-03-11 - **ds-stream** β€” `FrameType::Error`, `ErrorPayload`, `ProtocolInfo`, `encrypt_frame/decrypt_frame`, `FrameRouter`, `error_frame()` builder (277 tests) - **ds-stream-wasm** β€” `error_frame_v110`, `decode_error_payload`, `protocol_info_v110`, `encrypt_frame_v110/decrypt_frame_v110` (183 tests) - **ds-physics** β€” `get_body_velocity_v110`, `set_body_position_v110`, `get_contact_pairs_v110`, `engine_version_v110` (210 tests) ### πŸš€ Features - V2 phase 1 β€” array access, timer, string interpolation - Step sequencer demo β€” reactive pads, playhead, BPM - V2 built-in functions β€” 90+ native functions - V2 module system β€” import/export with multi-file compilation - V2 codegen hardening β€” scoped local variables - Todo app demo β€” streamable, showcases v2 builtins - Bidirectional signal streaming sync - Peer mode relay + self-echo filtering for true bidirectional sync - Per-signal version counters for conflict resolution - Explicit signal output API for stream declarations - 4-app signal composition demo with explicit outputs - Chained signal composition β€” 3β†’1β†’final + mood mixing - Stream composition API β€” select, schema, relay filtering - Dependent types β€” refinement types, type aliases, type annotations - Dependent types review β€” cycle detection, precision, error quality - Component registry with styled variants, dreamstack add/convert CLI, and showcase - Container variant props, 11-component registry, rich dashboard - Each loop, dreamstack init, expanded registry - When/else conditional branching - Slot/children composition for components - Dev server improvements - recursive watching, auto-open browser - Dynamic lists (push/remove/pop) + TodoMVC demo - Component event callbacks + function prop forwarding - Upgrade init starter app to showcase all DreamStack features - Multi-page routing demo with 4 routes - Project Manager demo β€” comprehensive 4-page routed app - Multi-statement event handlers with semicolons - Streaming dashboard with imported components + live data - Comprehensive streaming improvements - HTTP /meta API, signal dedup, periodic auto-sync - Enhanced 14 registry components + component gallery - Expanded variant system β€” 30+ new CSS class mappings - *= /= operators + 6 new array methods - Snake game streaming via relay - Game-pong.ds + two compiler improvements - Keyboard input, Web Audio synthesis, and multiplayer demo - Pong spectator viewer + stream proxy reactivity fix - Beats viewer, score sounds, audio early-exit guards - Core language & stream improvements - Complete type system β€” HM unification, signal-aware types, effect scoping - Tetris β€” signal composition showcase with 6 reactive layers - Live signal debug panel for tetris - Full grid collision, freeze, and T-piece support (20 rows) - Complete tetris rewrite β€” flat grid, SRS rotation, ghost piece toggle - Add Waveshare P4 panel device integration with display streaming and touch input, alongside core streaming engine - Implement Panel IR emitter to generate JSON UI descriptions for LVGL panels. - Implement ds-screencast engine, panel preview, and Waveshare ESP-NOW communication. ### πŸ› Bug Fixes - Bidirectional streaming sync β€” phoneβ†’laptop now works - Add _streamDiff to push/pop/reverse built-ins - Streaming polish β€” bind diff, state snapshot, dead code cleanup - Signal composition β€” stream derived signals, fix identity check, correct relay routing - Use explicit /peer/counter channel for streaming-counter - Integer division + streaming restart - Component prop signal wrapping + import demo - When/else parentNode null guard for slot context + match parser boundaries + showcase demo - Match parser allows container bodies in arms - Merge duplicate click props + upgrade streaming examples - For-in parser token mismatch + enhanced step sequencer - Reactive component props + breakout improvements - Tetris collision detection β€” pieces now stack properly - Collision off-by-one β€” pieces now stack adjacently - Keyboard inputs now respect collision β€” soft drop and hard drop gated on blocked - Complete collision β€” checks both top row and bottom cell - Piece-type aware collision β€” only T-piece checks bottom cell - No-overlap rendering β€” hide foot cell for non-T pieces, render all 20 rows - I-piece now persists all 4 cells and renders at correct row ### πŸ”§ Refactoring - Type system second pass β€” deeper unification throughout - Complete collision system rewrite β€” decomposed sub-signals ### πŸ“š Documentation - Add STREAM_COMPOSITION.md β€” full API reference and protocol spec - Comprehensive documentation update ### ⚑ Performance - Streaming core improvements β€” batched diffs, RTT tracking, relay merging - Merge same-interval timers + breakout game + beats viewer ## [0.1.0] - 2026-02-26 ### πŸš€ Features - Add DreamStack project vision and detailed implementation plan documentation. - DreamStack compiler foundation β€” Phase 0/1 - TodoMVC example with full reactivity - Phase 2+3 β€” effects, streams, springs, search + dashboard - Phase 3+4 β€” Cassowary constraint solver + type system - Phase 5 β€” Live Playground with editor, preview, signal graph, console - Showcase β€” What DreamStack Does That Nothing Else Can - Dev server with file watching + poll-based HMR - Signal propagation benchmarks + dev server HMR fix - For-in list rendering + component system - Hash-based router + keyed list reconciliation - Two-way binding, form props, and async resources - Universal bitstream streaming β€” any input β†’ any output - Physics language integration β€” scene container with Rapier2D WASM - **ds-stream:** RLE compression, input events, keyframe caching - **demos:** Sync protocol with Rust codec, add touch/gamepad support - **compiler:** Full bitstream integration across 7 pipeline stages - **compiler:** Complete bitstream integration β€” all 9 changes - **examples:** Add streaming .ds examples β€” compiler-native streaming - **wasm:** Add ds-stream-wasm crate β€” browser codec via WebAssembly - **relay:** Multi-source routing β€” /source/{name} and /stream/{name} - **examples:** Add streaming-physics.ds, mark all roadmap items complete - WebRTC transport β€” peer-to-peer data channels with auto-fallback - Production hardening β€” relay v1.0.0, receiver protocol completeness ### πŸ“š Documentation - Add implementation status, benchmarks, and React comparison to DREAMSTACK.md - Add router to DREAMSTACK.md features and comparison - Mark all integration spec changes as implemented, update test counts - Add Next Steps roadmap (Phases A-C) to integration spec - Add compiler-native streaming syntax to language reference - Add USE_CASES.md β€” vision, revenue paths, and demo roadmap