- Moore machine model: Effects determined by state diff, not events
- S combinator rule composition: pulse = S r3 . S r2 . S r1 $ dummy
- createRule helper with accessor-based state adaptation
- 7 tests passing (compose, async, adaptive tickMs, Moore property)
Design: https://github.com/oc-xiaoju/ograph/issues/44