Signal Flow · Part A

Give the work an identity

From incoming signals to comparable facts and connected cases.

Illustrated woodland streams pass between moss-covered stones and leaves.

A supplier confirms an order on Monday. A dispatch update follows on Wednesday. A delivery notice comes on Friday. Three messages, one purchase. Software needs to understand that relationship before it can do useful work.

I have spent this summer building and working with Signal Flow. Here I follow the architecture from an arrival to an identifiable piece of work. The supplier example is illustrative; the mechanisms come from the system I have been developing.

The role symbols return from the model-routing article. Each badge names a job. Different models can do that job.

01 / Find the concern

Start with a unit of work

An arrival is an input received by the system. A case is a concern it can work on. The Splitter proposes what belongs together: several products in one order may be one concern; two independent requests may need separate cases.

An arrival is offered to the Splitter. Two dashed concern boxes show one possible proposed division, not accepted cases.

Keep a source record

For work that continues from an arrival with content, the split proposal is followed by a saved source record before cases are created. Depending on the input, that record preserves the text or uses an Extractor digest. This first question is about retaining the arrival's information; later extraction asks for business-specific fields.

After the split proposal, arrival content is saved as preserved text or an Extractor digest before applying the split. The paths are alternatives.

Review the division

A single concern can proceed automatically when its gate is satisfied. A proposed division into several cases can wait for review while a provisional case carries the whole arrival forward. Each case remains linked to its source. Splitting too aggressively can still lose shared context.

A single concern can pass a clean-subtree gate. Several proposed concerns wait for review while a provisional whole-arrival case can continue into routing.

02 / Ask a smaller question

Workflow: which process handles this?

The Router first chooses a workflow, the business process responsible for the case. It receives the applicable workflow choices, their interests and routing guidance, alongside the case material. In our example, the answer is Purchasing.

Case material, applicable workflow choices and routing guidance inform the Router. Purchasing is the synthetic selected workflow.

Extract what that process needs

The workflow can supply a field contract. The Extractor uses it, extraction guidance and the case content to produce structured facts. Where extraction is unnecessary or no usable contract exists, the source record can pass through to the next question.

The workflow contract, extraction guidance and case content inform the Extractor. It can return structured facts; eligible cases instead pass the source record through.

Lane: which vocabulary applies?

The Router now chooses among the selected workflow's lanes. Case facts, lane descriptions and guidance for this question help it choose. A particular supplier is one possible lane; another company might divide work by product family or contract category.

Case facts, the selected workflow’s candidate lanes and Lane guidance inform the Router. A particular supplier is the synthetic selected lane.

Read again when the lane knows more

A lane can bring its own extraction contract. When that contract needs applying, the Extractor reads the case content again before Intent. The new fields answer the lane's question. This is a conditional step, not an extra model call required for every case.

When the accepted lane’s field contract needs applying, the Extractor revisits the source before Intent and produces lane-specific fields.

Intent: what does this case mean here?

The Router chooses an intent using the lane, case facts, candidate meanings and Intent guidance. Order confirmation, dispatch update and delivery notice are different meanings within the purchase example. Routing makes the same case more specific; it does not split it three times.

Case facts and lane context, candidate Intents and Intent guidance inform the Router. Dispatch update is the synthetic selected meaning.

Give the vocabulary a clear scope

Workflows contain lanes. Lanes can select their candidate Intents from a shared vocabulary. The same Intent may be relevant to several lanes. If a lane has no active scoped choices, my implementation falls back to the active Intent vocabulary.

Synthetic Purchasing workflow with supplier and carrier lanes. The lanes select allowed choices from one shared active Intent vocabulary; Intent records are not exclusively owned by a lane. With no active scoped choices, the active vocabulary is the fallback.
Illustrative vocabulary. The lines show scope and allowed choices, not a sequence of model calls.
A painted leaf with branching veins carries droplets above dark water.

03 / Make facts comparable

Select memory for the question

Domain memory is guidance retained from earlier work and corrections. My routing guidance describes each workflow; separate memory for Extraction, Lane, Intent and Normalization serves those questions within it. More specific work needs relevant guidance, not necessarily a larger pile of text.

Routing guidance sits on the workflow memory node. Extraction, Lane, Intent and Normalization guidance are sibling step nodes within that workflow. The branches show storage scope, not automatic inheritance into every prompt.

Keep knowledge and evidence distinct

I distinguish the role's instructions, selected domain memory, reference context and the case data. A field definition says what to look for; the case supplies a possible value. These concerns are composed differently for different jobs. They help me ask whether a bad answer came from the question, its guidance or its evidence.

The recurring four symbols distinguish role instructions, selected domain memory, reference context and case data. They are conceptual concerns composed for a question, not four mandatory request fields.

Build the contract for this lane

For normalization, a lane's field contract can replace the workflow's base contract. The applicable Intent fields are then added. A dispatch update and a delivery notice can therefore share an order reference while asking for different event details.

The lane’s base field contract is used when present, otherwise the workflow’s. Applicable fields for the selected Intent are added to make the effective field vocabulary.

Propose fields, then check them

The Normalizer proposes structured fields with source support. Code checks grounding and puts values into comparable forms. A dispatch date is not an expected delivery date; an absent value should stay absent. Even a value found in the source may belong to the wrong event. Deterministic processing can carry a bad assumption forward.

The Normalizer proposes fields with source support. Deterministic processing checks grounding and puts fields into comparable forms. In the synthetic record the dispatch date is stated, while expected delivery is not. Finding a value in text does not prove correct interpretation.

Make identity explicit

Declared recipes let code compose strong keys from grounded fields. The lane's key recipes take precedence when present; otherwise the workflow's apply. This is the hinge I care about: a model interprets the source, then ordinary comparisons can operate on an explicit identity.

Synthetic grounded supplier and order reference values plus a declared recipe produce Supplier A / PO-2048. Code composes the identity; the model does not invent the key.

04 / Reconnect the work

Look for the continuing matter

A matter connects cases about one continuing concern. Correlation first tries declared strong keys against open matters in the same workflow, including keys contributed by their member cases. The search can cross lanes: a carrier update and a supplier confirmation may share a meaningful identity.

A synthetic case key and the keys of existing member cases inform a search of open matters within Purchasing. The lookup can cross lanes and produces a proposed relationship, not accepted membership.

Leave uncertainty visible

Two matching matters are an ambiguity; missing keys need another route. The deterministic tier declines to choose when the evidence cannot settle it. Correlation can also abstain while the case continues to DECIDE. A successful matter match is useful context, not a prerequisite for every decision.

Missing usable keys or more than one matching matter decline a deterministic choice. The case can take the correlation route; an abstention does not stop DECIDE from advancing.

Accept the connection separately

Even a verified key match is saved as a proposal. Acceptance writes the matter membership. A person can inspect, accept or redirect the proposed connection. The cases retain their own histories while the matter explains why they belong together.

A proposed connection passes a separate review and acceptance before membership is written. A person can inspect, accept or redirect the proposal. Cases retain their individual histories.

Trace the interpretation

I built the Signal Flow board to make the work inspectable. If an identity looks wrong, I want to follow it back through normalization, Intent, Lane and Workflow, then check the source. Corrections need a place in that history too.

A company supplies its vocabulary and contracts. Signal Flow gives those declarations a path from incoming information to structured, connected work. Part B follows the next boundary: turning that understanding into application records and actions.

A synthetic excerpt of the Signal Flow board shows Workflow, Lane, Intent and Normalization. Opening a case provides its decisions and history for checking against the source. It is not a production screenshot or a complete board.
Synthetic excerpt, redrawn for this article. The complete board also covers later layers.

Explore the complete Signal Flow overview →