feat(catalog): graduate the FlowController Family (n=4 rule-of-three i22/7-BM/LIX/XFP)#400
Merged
Conversation
… actuator; n=4 rule-of-three i22/7-BM/LIX/XFP) FlowController was a loose family held as a graduation candidate: LIX (#388) fired the rule-of-three at n=3 and XFP (#395) became the 4th consumer and flagged it "overdue", both deferring the graduation as a separate gated decision. This is that decision (the EmissionSpectrometer #376 precedent). Adds FlowController to catalog/catalog.yaml as a Family: a continuous-setpoint flow / pump actuator presenting the Regulator Role, the settable-actuator sibling of TemperatureController (distinct by what it actuates: mass flow / pump rate, not temperature). One Family spans mass-flow controllers and syringe / peristaltic / HPLC pumps (pump-vs-MFC a per-Asset setting). Removed from _ALLOWED_LOOSE_FAMILIES and _PROMOTION_REVIEWED. Updated the TemperatureController note (its sibling graduated alongside). Swept the four consumer deployments (i22, 7-BM, LIX, XFP) descriptors + docs from loose/overdue to graduated, and fixed two stale cross-references (ISS, i10) that named FlowController as loose. The wider fluidic chain beyond the pump (selector valves, SEC columns, flow cells, fraction collectors) stays in the ControlPort seam pending its own rule-of-three (FLUID-1); FLOW-1's command-vs-read residual is kept. No new beamline (XFP itself already landed via #395); this is the focused graduation delta. 403 deployment guard tests pass; strict docs build clean; ruff clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Graduates
FlowControllerfrom a loose family into a catalog Family. It was a flagged graduation candidate: LIX (#388) fired the rule-of-three at n=3 and XFP (#395) became the 4th consumer and marked it "overdue", both deferring the graduation as a separate gated decision. This is that decision (the EmissionSpectrometer #376 precedent).This is not a new beamline — XFP itself already landed via #395 (a parallel session built it while this was in planning). This PR is the focused, non-duplicate graduation delta those scaffolds deferred.
Changes
catalog/catalog.yaml: addFlowControlleras a Family — a continuous-setpoint flow / pump actuator presenting the Regulator Role, the settable-actuator sibling ofTemperatureController(distinct by what it actuates: mass flow / pump rate, not temperature). One Family spans mass-flow controllers and syringe / peristaltic / HPLC pumps (pump-vs-MFC a per-Asset setting). Updated theTemperatureControllernote (its sibling graduated alongside).test_beamline_descriptor.py): removedFlowControllerfrom_ALLOWED_LOOSE_FAMILIESand_PROMOTION_REVIEWED.ControlPortseam pending its own rule-of-three (FLUID-1); FLOW-1's command-vs-read residual is intact.Verification
tests/unit/deployments/guard tests pass.make docs-build(mkdocs--strict) clean (a LIX model.md heading/anchor rename was followed through to its inbound links).🤖 Generated with Claude Code