# 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

<!-- generated by git-cliff -->
