Releases
Any unfamiliar word is in the glossary.
Three ways work can enter the plant, and they answer different questions.
| use it when | |
|---|---|
releases | work arrives on its own — an order book, customer demand |
schedule | you know exactly what starts and when, to the lot |
conwip | the plant holds a fixed population: one out, one in |
Release streams
product: bracket
interarrival_seconds: { kind: exponential, mean: 900.0 }
| key | type | required | what it means |
|---|---|---|---|
product | string | yes | Which product this stream releases. |
interarrival_seconds | dist | yes | The gap between releases. ⚠️ Must be able to exceed zero: a gap that is always zero releases without bound at one instant, and validate refuses it. |
priority | number | no, default 10.0 | Priority stamped on every entity from this stream, read by the priority dispatch feature. |
quantity | integer | no, default 1 | Entities per release. |
due_after_seconds | number | no | Seconds from release to the due date. Absent means no due date. |
rate_profile | string | no | A profile id whose factor multiplies this stream's arrival rate. ⚠️ A factor of 0 on a rate deletes demand rather than deferring it — the arrivals that would have happened are gone, not queued for Monday. |
A gap that is always zero releases an unbounded number of entities at one instant. The
engine used to run until the entity slot field overflowed and died with a message naming a
bit-field; validate now refuses it. Zero is still legal as a process time.
A named schedule
Lots at explicit times, in addition to any streams.
| key | type | required | what it means |
|---|---|---|---|
product | string | yes | Which product this lot is. |
at_seconds | number | yes | When it is released, in seconds from the start of the run including warm-up. |
priority | number | no | Priority for this one lot, overriding the stream default. |
due_seconds | number | no | Absolute, not an offset — an enumerated schedule states the date. |
pieces | integer | no | Size of this lot, if it differs from the product's usual pieces. |
at_step | integer | no | ⭐ Where on the route it starts. This is what makes initial work-in-progress the same mechanism rather than a second one: SMT2020's WIP.txt is an order file like any other, and its only distinguishing column is a step number. |
Two lots at the same instant are released in the order they appear in the document. That is the only thing that makes such a run reproducible, so the order is load-bearing.
A closed population
conwip replaces arrivals with a fixed number of entities circulating: one completes, one
is released. Mutually exclusive with releases and schedule.
It takes either one class:
conwip: { population: 12, product: bracket }
⭐ …or several, as an array — a mixed closed network, each product holding its own share of a fixed total:
conwip:
- { population: 8, product: bracket }
- { population: 4, product: housing }
⚠️ The two spellings are not interchangeable in meaning. One class of 12 is a plant running a single product; two classes of 8 and 4 is a plant whose mix is fixed by policy — completing a bracket releases a bracket, never a housing. That is the whole point of a multi-class CONWIP and it is what makes the product mix a decision rather than an outcome.
| key | type | required | what it means |
|---|---|---|---|
population | integer | yes | How many entities of this class circulate. ⚠️ Constant for the whole run, by definition — a population that varies is not a closed network and has no product form. |
product | string | yes | Which product this share of the circulating population is. |