Skip to content

Run routing and fan-out reactions as discrete channels - #187

Merged
jc-macdonald merged 2 commits into
mainfrom
feat/186-routed-reactions
Oct 2, 2026
Merged

jc-macdonald merged 2 commits into
mainfrom
feat/186-routed-reactions

Conversation

@jc-macdonald

Copy link
Copy Markdown
Member

Stacked on #185 (→ #183). The development pins point at the head of op_system #252, the top of the op_system stack #249 → #250 → #251 → #252. After those merge, I'll rebase, retarget to main, and move the pins to the merge commit.

op_system #252 publishes routing (X[imm:i] -> X[imm:j]) and target-only fan-out (I[age] -> X[age, imm:j]) reactions. Their propensity carries the routed target coordinate as a trailing dimension, listed in routed_axes. The compiler rejected them because their destination metadata did not cover the target.

Closes #186.

Behavior

  • Validation: routed_axes must be target axes not already copied, pinned, or offset. They count toward destination coverage.
  • Channels: one channel per source cell and target coordinate, named like wane[imm=0,to:imm=1], depositing at the routed coordinate. Diagonal channels of self-routing have zero propensity from op_system, so they never fire.
  • Older artifacts: artifacts without routed_axes compile unchanged.
  • Coverage guard examples: the Reject pure stochastic runs with uncovered dynamics #183 tests used chain stages and routing as examples of uncovered transitions. Both are covered once op_system #251 and #252 land, so the examples now use an unnamed coord_shift and a target axis missing from the source.

Coverage

  • Self-routing with a waning generator (negative diagonal): 9 channels with the expected stoichiometry, all propensities non-negative, diagonal propensities zero, and drift equal to the producer RHS, under NumPy and JAX.
  • Routing with a pinned vax flip, and fan-out: columns conserve units, and drift equals the RHS, under NumPy and JAX.
  • Older artifacts: artifacts without routed_axes produce the same network.
  • Ensemble: 1,024 seeded direct-SSA replicates (64 groups × 16 seeds) of a 3-bin waning chain driven by a routing generator, with 5 units starting in bin 0. Every path conserves units. At three times, bin means match the Poisson occupancy (the last bin is absorbing) within five binomial standard errors.

Docs

  • Provider README: routed-axis bookkeeping, and how routing reactions expand.
  • CHANGELOG entry under Unreleased.

Validation

  • just ci: 592 core tests passed, 2 skipped. 376 provider tests passed (8 new). Ruff and strict mypy passed for both packages.
  • just docs: strict documentation build passed.

Two commits: 390 and 15 changed lines.

🤖 Generated with Claude Code

@jc-macdonald
jc-macdonald force-pushed the feat/184-to-full-axes branch from 8ac8706 to 24b3bc9 Compare October 2, 2026 23:03
jc-macdonald and others added 2 commits October 2, 2026 19:07
op_system #252 publishes routing and target-only fan-out reactions whose
propensity carries the routed target coordinate as a trailing dimension,
listed in routed_axes. The network compiler rejected them as having
incomplete destination metadata.

Validate routed axes as free target axes, include them in destination
coverage, and expand one channel per source cell and target coordinate,
depositing each at its routed coordinate. Artifacts without routed_axes
compile unchanged. Advance the development op_system pins to the head of
cover (chain stages and routing) with shapes still lacking artifacts.

Refs #186

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #186

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jc-macdonald
jc-macdonald force-pushed the feat/186-routed-reactions branch from 648c7bf to a7e91bc Compare October 2, 2026 23:10
@jc-macdonald
jc-macdonald changed the base branch from feat/184-to-full-axes to main October 2, 2026 23:11
@jc-macdonald
jc-macdonald merged commit 71f48d2 into main Oct 2, 2026
6 checks passed
@jc-macdonald
jc-macdonald deleted the feat/186-routed-reactions branch October 2, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Consume routing and fan-out reactions (routed_axes)

1 participant