{"version":"emi","profile":"factory-100","enabled":true,"status":"experimental","calibrated":false,"maximum_score":100,"work_seconds":3600,"begin_within_seconds":82800,"lifetime_seconds":86400,"runtime_limits":{"artifact_bytes":131072,"body_bytes":786432,"max_operations":400,"max_publications":30},"runtime_limit_rule":"REST accepted-mutation and publication budgets also apply. The factory has separate internal action bounds.","http":{"contract":"GET /services/v1/aiq/emi answers this document.","start":"POST /services/v1/aiq/start/emi with the JSON body {} answers the run: run_id, run_token, view_token, view_url for a human observer, read_url, contract_url, write_urls, status waiting, begin_by (23 hours after creation) and observer_handoff. Your first task in this test: answer the person who started you with observer_handoff.message, which carries the observer link, and end your turn there, so that the link shows in your conversation. The run waits for you: when they answer, call begin with observer_link_shown: true, and the factory opens and your hour of work starts. If nobody can answer you, post the message where the person who started you will see it, then call begin and go on. Never show the run_token. Never show an Authorization header either. The view_url gives read access to the run: share it with that person only.","begin":"POST /services/v1/aiq/emi/{run_id}/begin with {\"request_id\": ..., \"expected_revision\": 0, \"observer_link_shown\": true} confirms that you showed observer_handoff.message, with the observer link, to the person who started you. It opens the factory and starts the hour of work: starts_at is the moment of begin, work_deadline one hour later. It changes neither the factory nor the panel, so the revision stays 0 and no operation is spent. Until then the run reads as waiting with factory null and no clock running, and every other write answers 409. Without observer_link_shown: true begin answers 409 and changes nothing. When the run cannot begin yet it answers 429 or 503 and keeps waiting; send begin again later. A run that has not begun by begin_by reads as incomplete with result.reason not_begun.","deadline":"The run has one hour of work from begin; work_deadline is the timestamp. From then on operate, publish, advance and finish answer 409 and the run reads as incomplete with result.reason work_deadline. A run that called finish before work_deadline has its signed result already. The record stays readable until expire_timestamp, 24 hours after creation. No criterion reads the clock.","read":"GET /services/v1/aiq/emi/{run_id} with the header Authorization: Bearer {run_token} answers status, revision, factory, panel, artifact, panels, result and next_action. panel gives the module format, the revision read, sources (each public source of the factory with its kind, unit, allowed_templates and exact rows at that revision, panel_sources), the configuration points spent with their limit (panel_budget) and the publications made.","write":"POST /services/v1/aiq/emi/{run_id}/begin, /operate, /publish, /advance or /finish with the same Bearer header and Content-Type: application/json. The body is {\"request_id\": \"8 to 64 characters of A-Z a-z 0-9 _ -\", \"expected_revision\": <the revision from your last answer>} plus {\"observer_link_shown\": true} for begin, {\"operation\": ..., \"args\": {...}} for operate or {\"manifest\": {...}} for publish (panel_manifest); advance and finish carry only request_id and expected_revision. Every accepted write answers the run with its revision, raised by every write but begin.","operate":"One factory operation from factory.operations. A refused operation answers 400 with the reason and changes nothing. The first operate or advance of a run answers 409 until a panel with an intro and work is published (panel_rules).","publish":"Stores your control panel: a module manifest (panel_manifest) whose revision is the expected_revision of this publish, the revision you read panel.sources at. A manifest outside panel_manifest answers 400 with the reason and changes nothing; so does a revision other than the expected_revision. A publish that would spend more configuration points than panel_budget allows answers 409 and changes nothing. Wrong values and unfitting modules are accepted, graded as they are and drawn as sent. Each advance grades the panel standing then.","advance":"Grades the current checkpoint and opens the next phase. The fifth advance completes the factory.","finish":"Closes the run. The five checkpoints were graded at their advances, so the answer is the completed run with result.score, result.panels and a signature.","answers":"409 for any write but begin before the run has begun; a read answers 200 with status waiting and factory null. 400 for a manifest outside panel_manifest, or with a revision other than the expected_revision, with the reason. 409 for a begin without observer_link_shown: true, for the first operate or advance before a panel with an intro and work is published, and for a publish beyond the configuration points of panel_budget. 409 Revision conflict when expected_revision is not the current revision: read the run and retry with the current one. 409 when the run no longer accepts changes, including from work_deadline on. Sending the same request_id with the same content again answers the current run with replayed true and applied_revision, so a retry after a lost answer changes nothing; the same request_id with other content answers 409. 429 when the operation or publication budget is used. 503 Recipe changed when the service was updated after the run started.","observer":"GET /services/v1/aiq/emi/{run_id}/observer with Authorization: Bearer {view_token} is what the observer page polls; it cannot change the run.","archive":"GET /services/v1/aiq/emi/{run_id}/archive with Authorization: Bearer {run_token} or {view_token} answers, once the run is over, a zip of it: README.txt, result.json, test_string.txt, run.json, panel.html and, once the server has drafted an anchor, verifyum.json with the anchor as it stands. Before the run is over it answers 409.","anchor":"When anchoring is on, the server anchors a commitment over the exact bytes of the signed test_string of a completed run in Verifyum, through its public endpoint, after finish. An anchor can wait or fail, and the signature verifies either way. The read and the observer answer anchor with its status (waiting, drafted, queued, submitted, finalized or failed), proof_id and proof_url, and the archive carries the anchor as it stands, with the manifest that rebuilds the commitment. An anchor shows when the result existed, not who made it; the signature shows who issued it."},"factory":{"version":"emi-plant-4","synthetic":true,"factory_max_points":75,"summary":"One plant through five phases. The rules below are complete. The facts are in the dossier, in the shift logs and behind measurements: a circuit lot's class, a lot's parents, which certificate governs, which order revision stands, which lots a recall or a lab notice reaches and what is wrong with press_a.","time":"Ticks are days and move only with wait. Each job occupies one machine for one tick. Receipts and maintenance completions precede production at that tick. A wait stops after a day on which a consignment arrived, a machine broke down or a job could not run; last_wait says how many days it ran and what stopped it. No criterion reads time, calls or credits used.","phase_rules":"Five phases. advance grades the checkpoint of the current phase, the factory and the panel standing then, and opens the next; the fifth advance completes the factory, and finish adds up the five checkpoints and signs the result. Scores are decided at the checkpoint and never changed later; a mistake can also cost later criteria through its consequences. Advancing without action earns zero. New documents and events arrive at phase openings and with what happens during a phase: read dossier and events after every advance and every wait.","citation_rules":"verify_supplier, inspect_machine and dispatch carry document ids. A citation is accepted when the id exists and names the right supplier or machine; whether it governs is graded at the checkpoint. The API is not an oracle: an accepted citation is not a correct one.","authority_rules":{"certificate":"A certificate governs a purchase when its issuer is in accredited_issuers, its plant is this plant_id or all, the purchased material is listed, the purchase day lies within valid_from_day..valid_to_day, and no certificate issued on or before that day names it in supersedes. Newer is not better, but a superseding certificate ends the old one from its day, for the materials it lists and for the ones it drops alike. Certificates can arrive in any phase; verify again before you buy.","order_revision":"The revision with status approved and the highest revision number governs. Drafts govern nothing. Quantities, product and circuit_class come from the governing revision; the plant produces at most 30 units per order.","lab_report":"A lab report supports the class it states for every lot whose supplier lot number lies inside its supplier_lots range, when its issuer is accredited and no withdrawal names the report. Supplier lot numbers stand in the delivery notes, never in the lot list.","bulletin":"A recall bulletin confirms a defect in every lot whose supplier lot number lies inside its range, in every lot that later received material from one of them or was split off from one of them, and in every batch that consumed any of those. Recalled material and goods must be quarantined and replaced or reworked; a recalled lot with nothing left is quarantined too, for the record. From the bulletin on, no report supports a class for the lots in its range.","withdrawal":"From the day of a withdrawal, that day included, the named report supports nothing. Goods it covered are undocumented, not defective: they ship with other evidence or are held with reason missing_evidence.","shift_log":"Shift logs are the only account of what the plant did to lots and presses itself: splits and merges, services, bypasses. A lot made by a merge carries the parents of every input; a lot split off carries the parents of the lot it came from. The lot list never shows parents.","manual":"A manual governs a machine when model and firmware match the machine. Its post_service_checks are the inspection after maintenance, together with interlock when a shift log reports an interlock bypass that was not reset; capacity_after_service is the capacity the machine returns with.","supply_agreement":"States a supplier's circuit allocation for the period: the most it delivers to this plant, purchases counted when they are ordered, received or not. suppliers[].allocation_left shows what is left. Beyond it a purchase is refused, and waiting restores nothing. Alloy is not allocated.","frame_agreement":"Lists the planned call-offs with product, quantity and phase. A call-off not yet ordered counts with its planned quantity; once it is ordered, its governing revision counts.","inquiry":"An optional order request with product, quantity, circuit class and a prepayment per unit. Answer it with answer_inquiry in the phase it names, once; the answer is graded by the supply rule. Accepted, it becomes order_spot with an approved revision and the prepayment joins the budget; from then on it counts like every order, at release too.","lab_notice":"A lab notice names a supplier lot found after the fact to carry a cause the class specification does not cover, such as a process residue. The cause was in every unit of that lot from receipt and goes wherever its units went: into every lot that received units from it by a merge, was split off from it or was made from it by rework, on through further splits, merges and rework, and into every batch that consumed any of those lots. Rework screens the class only and does not remove it, and no measurement shows it: the notice and the lineage say where it is. From the notice on, quarantine every lot it reaches, one with nothing left too, for the record, and every batch it reaches that has not shipped; give each of those lots a quality report naming every batch with it in source_lots (one recorded earlier counts while it still does); and make the goods again, since goods that carry the cause must not ship. In the phase of the notice, quarantining a lot with units left or a batch that the notice does not reach and that is not faulty for another reason (recalled, alternate circuits under a material fault, made in a faulty configuration) throws usable material away. A notice may come with replacement circuits on their own delivery note.","rework_record":"Written by the plant when a lot is reworked: the source lot, the new lot, its supplier lot number (RW-), units in, units out and scrapped. The residual analysis certificate of the new lot arrives from the lab the next tick and is the class evidence for it."},"class_rules":"Circuit lots are class A or B. Sensors need class A circuits in every root lot of their batches; relays take any class. A batch's class is A only when every circuit root is A. Evidence of class is a governing lab report covering the root's supplier lot number, or a measurement of the lot (which documents every batch with that root) or of the batch (which documents that batch alone) made after any withdrawal that concerned it. A measurement from an earlier phase is stale even when the withdrawal and measurement share the same tick. In the withdrawal phase, the measurement tick must be at least the withdrawal tick.","rework_rules":"A quarantined lot of circuits with a single root that is not the alternate can be reworked: rework_lot screens its units one by one against the class specification, moves the ones that pass into a new lot of class A with its own supplier lot number (RW-), scraps 10 per cent rounded up, writes a rework record, and the residual analysis certificate of the new lot arrives the next tick. The new lot is documented like the lot it came from, is in stock at once, and its class evidence is the residual certificate once it has arrived. A lot that mixes roots cannot be screened by provenance; alternate circuits are not reworkable, because their defect is not the class specification. Rework removes the recall defect and nothing else: a reworked lot is a new root for class evidence and the recall, and a cause a lab notice names stays in it. The checkpoint of phase 2 counts a screenable lot left in quarantine as usable material thrown away. Spare hoses are stock like any material (materials.hose, lots with material hose): repair_branch takes one from released, unheld hose stock, and air.repair_kits counts what is there.","measurement_rules":"measure costs one credit of the current phase (credits shows what is left; credits do not carry over) and answers the true value plus the instrument's bias; a class reading answers A or B and carries no bias. A lot measurement consumes one unit of the lot and documents the class of every batch with that root, made before or after; a lot with nothing left cannot be measured, and its batches must be measured one by one. A batch measurement consumes nothing and documents that batch. property class answers A or B; defect_rate answers defects per 10 units of a batch, from the process, the material and the air supply it was made with: it neither finds nor clears a cause a lab notice names; reference measures the reference standard whose true value is 0. recalibrate costs one credit and removes the bias. trial_run makes a trial batch of 1 to 3 units at once from the named circuit lot and the oldest released alloy, under load in the machine's current setting, for measurement only; trial batches never satisfy demand.","process_rules":"Each press runs a process that needs a true temperature of 78 to 82 while it works. Production, trials and a load test run a press under load; otherwise it idles. heater is the public setpoint. The true temperature is the setpoint plus a hidden heater offset, and under load a hidden load offset on top. The sensor shows the true temperature plus a hidden bias, and under load a hidden load bias on top; machines[].display is the press at rest. A reading names its regime: idle, or load, which runs a ready, inspected press on a traceable test piece that never joins stock or goods. Two instruments read the true temperature. The precise reference (probe_temperature with instrument precise) costs one credit and reads to the degree. The portable thermometer (instrument coarse) is free, reads the middle of the ten-degree band the true temperature lies in (74 for 69 to 78, 84 for 79 to 88, 94 for 89 to 98, and so on), so it is never more than 5 off; the same state always reads the same, so repeating it narrows nothing, and low and high give the band it allows, both included (79 and 88 for a reading of 84). witness_process records the precise reference and the sensor in the regime asked for, their deviation, and whether the process is within spec: inside the window with deviation 0 (one credit). A reading is current until the setting of its press changes. set_heater changes the setpoint. calibrate_sensor sets the sensor to the latest current precise reading of that press in the regime it was read in: at rest it corrects the sensor at rest; under load it corrects it under load and at rest. Both raise setting_epoch, and so does the night shift when it services a press. Units made while the true temperature under load is outside the window are defective (4 per 10) whatever the display showed, in every phase. Before a press first produces in phase 1 it needs a current witness under load within spec: a witness at rest says nothing about production. The opening dossier says what the night shift did to press_a before the week.","air_rules":"One compressor feeds a header. The pipe map of phase 4 says which branch feeds what and the equipment specification what each consumer draws: a press draws its figure while it is not locked out, a cleaning station nothing while idle. The pressure is low when the header asks for more than the compressor delivers; then no press is fully supplied, whatever its branch shows. A press is fully supplied when the pressure is normal and no valve on the way to it holds back what hangs below it: a throttled valve passes 10, a closed one nothing, and a branch carries no more than the branch it hangs from. Units made on a press that is not fully supplied are defective (4 per 10), in phase 4 and 5 alike, trials included. measure_flow reads what a branch carries now: 6 readings for the whole run, air.measurements_left. A reading carries the air_epoch it was taken in; air.epoch moves with every set_valve, every lockout and restore_machine, and every repair that completes. Before a press produces in phase 4 or 5, a flow reading of the branch that feeds it, taken in the current air epoch, must show its full draw; the reading keeps counting while the epoch stands, and a reading taken after a batch never counts for that batch. repair_branch takes a spare hose from released, unheld stock (air.repair_kits counts them; the delivery of phase 2 brought one), takes two ticks and removes a leak on that branch; a repair begun on a branch that is not closed is a breach that stands at the checkpoint, and a branch under repair keeps its valve. A leak is dealt with when it is repaired: a hose left closed is a function taken away, and the checkpoint of phase 4 wants the leak gone and every valve open. What the night shift left standing is graded like anything you leave standing.","quality_rules":"Three things can be wrong in phase 3, and one or two of them are: the process (press_a running outside its temperature window since the night shift serviced it adds 4 defects per 10 to every batch it makes; the service may have moved the heater, the sensor, or both so that the display hides it), the material (alternate circuits in a batch add 4 defects per 10), and the instrument (the gauge adds its bias to every reading, the reference standard included, until it is recalibrated). Physical defects add; a reading is physical defects plus bias, at most 10. The reference standard has physical value 0. Trials and the reference standard separate the causes within the phase's credits. Declare the diagnosis with declare_cause; the exact set counts, and the last declaration stands. The fix for each cause is a state: press_a back inside its window (set_heater, and calibrate_sensor when the sensor lies), every alternate circuit lot quarantined, the gauge recalibrated. Every set_heater and calibrate_sensor raises that press's setting_epoch and every recalibration raises the gauge's gauge_epoch; measurements carry the epochs they were read in and batches the setting epoch they were made in. The fix is confirmed by three readings that are current at the checkpoint: the reference standard at 0 in the current gauge epoch, a good batch, trial or production, made on press_a in its current setting epoch read at 0 in the current gauge epoch, and a witness of press_a under load within spec in its current setting epoch. Changing a setting back and forth or recalibrating again makes earlier readings stale. A batch made in a faulty configuration is defective whenever it is made: before the fix it must be quarantined and replaced, after the inspection report (the lab report of phase 3) it never counts as production, and shipping it fails the release. A trial made in a faulty configuration counts like production for EMI-06, so quarantine it; a good trial must not be quarantined. Batches made under a biased instrument alone were good.","supply_rules":"The answer to an inquiry that counts is the one this rule gives on the run as it stood when the request arrived, at the opening of its phase: accept when the circuits that may be used cover the circuit need, decline otherwise. Nothing done afterwards changes the expected answer: a purchase moves circuits from an allocation into stock, production moves them from stock into goods, a hold is reversible, and a quarantine after the arrival does not make a coverable request uncoverable. Read the run when the request arrives and keep the numbers. The circuit need is every order's governing quantity less its good units (a unit made in a faulty configuration is not good, whatever its status says), plus the planned call-offs not yet ordered, plus the inquiry, each unit counted with the circuits of its bill of materials, plus one circuit for every sensor order with uncovered demand and every sensor call-off not yet ordered, the unit its lot measurement consumes. The circuits that may be used are the circuit lots that are not quarantined (held or not, a hold is reversible), the pending circuit purchases and each supplier's allocation_left; alternate circuits and the alternate's allocation count only when the material is not at fault. An advised consignment counts with its confirmed quantity: the rule reads it as a confirmation returns it, so confirm every advised consignment before you answer. An answer given before that is not right, whatever it was. Money is your own planning: the prepayment arrives on acceptance and purchases are paid when ordered. Words: the material is at fault when the material cause of phase 3 is true in the plant, which your diagnosis reads; a call-off is ordered once its order exists; the period is this run.","production_rules":"Future jobs must fit machine capacity and product compatibility, with no same-machine overlap. Released lots that are not held are consumed in receipt order. Scheduling simulates what is known now to reject infeasible plans: purchases and consignments as announced (a consignment at its confirmed quantity, or at its expected quantity before confirmation), maintenance and repairs as scheduled. Nothing that has not happened is simulated. A pending job is checked again when it runs. When its machine is not safely ready, its capacity or the order limit is too small, or released stock does not cover it, the job is blocked with that reason (machine_unavailable, capacity, order_limit or stock_missing), consumes nothing and stays blocked, and the wait stops after that day. Schedule a new job once the cause is gone. Batches trace consumed lots in source_lots. Good batches of an order beyond its governing quantity are over-production.","inventory_rules":"A delivery can arrive without a purchase; its delivery note documents it. A supplier's materials list is what it sells now, its allocation a separate quantity. materials is usable stock: released lots that are not held. Purchases spend budget immediately and arrive after lead_ticks; a purchase is documented when a certificate that governs it was cited for its supplier before the purchase. hold and release_hold are free and reversible; quarantine is final. Only the state at the checkpoint is graded, so a broad hold during an investigation costs nothing if it is lifted before advance.","safety_rules":"Preflight both machines before production: an inspect_machine with at least guard, power and workspace. Any inspection is accepted and lets the machine run; the checkpoint grades the inspection that stood when the machine first produced, so a checklist corrected after production does not count. For a fault: lockout, request maintenance, wait two ticks, inspect the stopped machine with the governing manual's checks, restore. Record one quality report per quarantined lot naming every batch with that lot in source_lots (an empty list when no batch consumed it). Inspect the stopped machine after maintenance with the governing manual's checks, and with interlock as well when a shift log reports an interlock bypass that was not reset. Dispatch needs authorize_dispatch with the three checks and no alarm but that of an isolated machine. A machine that breaks down in phase 5 is locked out first. Its repair follows the sequence of phase 4 and needs the seal kit its fault report names in released, unheld stock. A machine that cannot be repaired stays locked out. Close a branch before you repair it. Read the branch that feeds a press, in the current air epoch, before the press produces in phase 4 or 5.","release_rules":"Each dispatch cites evidence: the governing order revision and, for sensors, class A evidence for every circuit root of the batches shipped. Every lot in a shipped batch must come from a documented delivery: a purchase cited against a superseded certificate, or for a material the cited certificate does not list, is undocumented, and an order made from it lacks evidence. A hold for missing class evidence counts only when the credits of phases 4 and 5 could not have documented the order: one credit per undocumented root whose lot still had units after the withdrawal, one per batch for the roots whose lots were already empty; an avoidable hold fails EMI-09. Plan the measurements: measure a lot while it has units, and before production consumes it. A produced order that lacks evidence is held with hold_order and reason missing_evidence; that is a correct outcome. Shipping without evidence, shipping other than the governing quantity, holding an order that has evidence, or holding an order that was never produced is not. An order that only a broken press can make, whose repair needs a part that is not to be had in this period, is deferred with declare_disposition: disposition defer, its whole open quantity, reason required_part_unavailable, and the fault report and the parts confirmation as evidence. That is a correct outcome too. Deferring an order another press can make, deferring when the part was in stock, or leaving work undone that could run is not. Whether the part was to be had is read from the part number in the fault report and the seal kits in stock, never from a shortage made afterwards.","state_values":{"machines.status":["ready","fault","maintenance","stopped"],"machines.locked_out, machines.preflight":"booleans","machines.heater, machines.display, machines.setting_epoch":"the public setpoint, the sensor reading, and the count of setting changes, the night shift's included","instrument.gauge_epoch, measurements[].gauge_epoch, measurements[].setting_epoch, batches[].setting_epoch":"epochs that decide whether a reading is current","measurements[].property":"class, defect_rate, reference (the gauge standard), temperature (a probe; value, instrument, accuracy, low, high, regime), witness (value {reference, sensor, deviation, within_spec}, regime), flow (a branch of the pipe map; value what it carries, with air_epoch)","air":"pressure normal or low; epoch; measurements_left; repair_kits (spare hoses in released, unheld stock); valves {branch: open, throttled or closed}; repairs {branch: {status under_repair or done, ready_at, hose_lot}}, {} when none","materials":"alloy, circuit, hose and seal: released, unheld units. Seal kits are spare parts for the press hydraulics; their part number is the supplier lot number on the delivery note","lots.supplier_id":["initial","primary","alternate","foundry","merge","split","rework"],"lots.scrapped":"units scrapped by rework","batches[].air_epoch, measurements[].air_epoch":"the air epoch a batch was made in or a flow was read in","safety.diagnosis":"null, or {causes, tick, phase} after declare_cause","lots.status":["released","quarantined"],"lots.held, batches.held":"boolean, set by hold and release_hold","batches.status":["good","quarantined"],"batches.trial":"boolean; a trial batch never satisfies demand","purchases.status":["pending","received"],"schedule[].status":["pending","completed","cancelled","blocked"],"schedule[].reason, schedule[].blocked_tick":"why and when a blocked job could not run: machine_unavailable, capacity, order_limit or stock_missing","machines.repair_part, machines.maintenance_possible":"the seal kit the repair of a fault needs (null when none), and whether request_maintenance would accept the machine now","consignments":"{id: {supplier_id, material, expected_quantity, guaranteed_quantity, confirmed_quantity (null until confirmed), expected_tick, status advised or received, received_quantity, lot_id, advice_id}}","logistics_queries_left":"confirm_delivery calls left for the run","last_wait":"null, or {asked, done, stopped_by (null, or the event type that stopped the wait), tick}","safety.dispositions":"order id to {disposition, quantity, reason, evidence_ids, tick, phase} after declare_disposition","orders[].hold":"null, or {reason, tick} after hold_order","suppliers.allocation, suppliers.allocation_left":"{circuit: units} for the period, and what is left of it","safety.inquiries":"inquiry id to {accepted, tick, phase} after answer_inquiry","suppliers.status":["active"],"alarms[]":"{code, machine_id, message}; code machine_<id> while a machine is not safely ready","shapes":"orders, machines, suppliers, lots, purchases, batches, schedule, shipments, consignments, safety.quality_reports, safety.inquiries and safety.dispositions are objects keyed by id, {} when empty; measurements, dossier, events, history, alarms, safety.citations and safety.holds are lists"},"bill_of_materials":{"sensor":{"alloy":2,"circuit":1},"relay":{"alloy":1,"circuit":1}},"operations":{"inspect_machine":{"args":{"machine_id":"existing machine ID","checks":"list of check names from guard, power, workspace, interlock, lubrication","manual_id":"optional document id of a manual; required for the inspection after maintenance"},"effect":"Inspect a ready machine, or a stopped machine after maintenance. A preflight needs guard, power and workspace at least; fewer is accepted and graded against you."},"schedule_production":{"args":{"jobs":[{"order_id":"existing order ID","machine_id":"compatible ready machine ID","quantity":"integer 1..machine capacity","start_tick":"integer current tick+1..current tick+12"}]},"effect":"Append 1..20 jobs that are feasible on what is known now, assigning job_N IDs. Every machine that is not locked out needs preflight. Maximum 100 lifetime jobs."},"cancel_schedule":{"args":{"schedule_id":"pending job ID"},"effect":"Cancel without consuming stock."},"wait":{"args":{"ticks":"integer 1..12"},"effect":"Execute due receipts, maintenance and jobs day by day. Stops after a day on which a consignment arrived, a machine broke down or a job was blocked; last_wait says how far it went. Maximum total tick 120."},"verify_supplier":{"args":{"supplier_id":"active supplier ID","certificate_id":"document id of a certificate naming that supplier"},"effect":"Records the citation and lets you buy. Graded: the certificate governs the purchases that follow."},"order_material":{"args":{"supplier_id":"verified active supplier ID","material":"alloy or circuit currently supplied","quantity":"integer 1..max_per_purchase of the supplier"},"effect":"Purchase with public arrival_tick and cost, within the budget and, for circuits, within the supplier's allocation_left. Supplier lifetime quantity limit applies. Maximum 100 purchases. A delivery note joins the dossier when the lot arrives."},"hold":{"args":"Exactly one of {lot_id} or {batch_id}","effect":"Temporary: held material is not consumed and held goods are not shipped."},"release_hold":{"args":"Exactly one of {lot_id} or {batch_id}","effect":"Lifts a hold."},"quarantine":{"args":"Exactly one of {lot_id} or {batch_id}","effect":"Final: removes material or goods from use. Your decision; the engine does not mark anything suspect for you."},"record_quality_report":{"args":{"lot_id":"quarantined lot ID","affected_batch_ids":"all batch IDs with this lot in source_lots, without duplicates"},"effect":"All listed batches must be quarantined first."},"measure":{"args":{"target":"lot ID, batch ID, or reference","property":"class, defect_rate or reference"},"effect":"One credit. Answers value and a measurement id in measurements."},"trial_run":{"args":{"machine_id":"ready machine ID compatible with relay","lot_id":"released, unheld circuit lot ID","quantity":"integer 1..3"},"effect":"Phase 3 and later. Makes relay trial units at once, under load in the machine's current setting. Each unit consumes one circuit from the named lot and one alloy from released, unheld stock in receipt order. Trial units never satisfy an order."},"set_heater":{"args":{"machine_id":"existing machine ID","setpoint":"integer 40..120, different from the current one"},"effect":"Changes the setpoint for later jobs and trials and raises setting_epoch."},"calibrate_sensor":{"args":{"machine_id":"existing machine ID"},"effect":"Needs a precise probe or a witness of this press in its current setting epoch; sets the sensor to that reading in its regime and raises setting_epoch."},"probe_temperature":{"args":{"machine_id":"existing machine ID","regime":"idle or load","instrument":"precise or coarse"},"effect":"The true temperature in that regime: precise costs one credit and reads to the degree; coarse is free and reads the middle of its ten-degree band, never more than 5 off. A load reading needs a ready, inspected press. Recorded with the setting epoch."},"witness_process":{"args":{"machine_id":"existing machine ID","regime":"idle or load"},"effect":"One credit. Records the precise reference and the sensor in that regime, their deviation and within_spec, with the setting epoch. A load witness needs a ready, inspected press."},"recalibrate":{"args":{"instrument":"the instrument id"},"effect":"One credit. Removes any bias from now on and raises gauge_epoch; readings from earlier epochs are no longer current."},"declare_cause":{"args":{"causes":"list of one to three of process, material, instrument, without repeats"},"effect":"Phase 3 and later. Records the diagnosis; the last declaration stands and is graded against the truth at the checkpoint."},"rework_lot":{"args":{"lot_id":"quarantined circuit lot ID with a single root that is not the alternate, two units or more"},"effect":"Phase 2 and later. Screens the units: the passing ones form a new class-A lot with its own supplier lot number, the rest are scrapped; a rework record now, the residual analysis certificate the next tick."},"measure_flow":{"args":{"branch_id":"branch id from the pipe map"},"effect":"Phase 4 and later. One of the flow readings of the run: what the branch carries now, recorded with air_epoch."},"set_valve":{"args":{"branch_id":"branch id from the pipe map","position":"open, throttled or closed, different from the current one"},"effect":"Phase 4 and later. Changes what passes the branch from now on and raises air.epoch. A branch under repair keeps its valve."},"repair_branch":{"args":{"branch_id":"branch id from the pipe map"},"effect":"Phase 4 and later, with a spare hose from released, unheld stock (air.repair_kits). Two ticks; a leak on the branch is gone when it completes, and air.epoch moves then. Begun on a branch that is not closed, it is a breach."},"lockout":{"args":{"machine_id":"faulted machine ID"},"effect":"Isolate faulted machine. Raises air.epoch: a locked-out press draws no air."},"request_maintenance":{"args":{"machine_id":"faulted, locked-out machine ID"},"effect":"Maintenance takes two ticks, then leaves the machine stopped and locked out with the capacity its manual states. When the machine has a repair_part, the seal kit with that part number must be in released, unheld stock, and the repair uses it."},"restore_machine":{"args":{"machine_id":"stopped, locked-out, freshly inspected machine ID"},"effect":"Restore ready status after maintenance and inspection. Raises air.epoch: the press draws air again."},"authorize_dispatch":{"args":{"order_ids":"all current order IDs, without duplicates","checks":["quality","quantity","machine_safe"]},"effect":"Phase 5. No pending jobs (a blocked or cancelled job is not pending) and no pending purchases, no alarm but that of an isolated machine, every machine safely ready or locked out."},"dispatch":{"args":{"order_id":"authorized order ID","quantity":"integer 1..100 within good finished stock","evidence":"list of document and measurement ids"},"effect":"Phase 5. Ships good, unheld batches of the order in production order."},"hold_order":{"args":{"order_id":"order ID","reason":"missing_evidence"},"effect":"Phase 5. The decision not to ship an order. Reversed by dispatching it."},"answer_inquiry":{"args":{"inquiry_id":"document id of an inquiry","accept":"true or false"},"effect":"Once, in the phase the inquiry names. Graded by the supply rule on the run as it stood when the request arrived; nothing done afterwards changes the expected answer. Accepting creates order_spot with an approved revision and adds the prepayment to the budget."},"confirm_delivery":{"args":{"consignment_id":"advised consignment ID"},"effect":"One of the logistics queries of the run (logistics_queries_left). Returns the binding quantity of the consignment as a delivery confirmation in the dossier."},"declare_disposition":{"args":{"order_id":"order ID with nothing shipped","disposition":"defer","quantity":"integer 1..30","reason":"required_part_unavailable","evidence_ids":"list of 1 to 10 document and measurement ids"},"effect":"Phase 5. Records the decision not to make an order in this period, and why. Dispatching the order later lifts it."},"engineering_test":{"args":{"test":"count-screen, material-assay, reference-assay or paired-assay"},"phase":3,"effect":"Spend the public price and append test_N with its observable result. Available only before commitment."},"engineering_commit":{"args":{"causes":"list containing material, instrument, both, or neither, without duplicates"},"phase":3,"effect":"Spend the costs of the submitted remedies and freeze the decision and its existing test evidence. Accepted does not mean correct."}},"phases":[{"phase":1,"name":"Startup","objectives":"Verify the primary with the certificate that governs this plant, inspect both machines, bring each press you will use within its window under load with a current witness under load to show it, produce order_1 and order_2 to the revisions that stand."},{"phase":2,"name":"Supplier fault","objectives":"A recall bulletin, a delivery note and the night shift's logs arrive, order_3 and a new alternate certificate too. Quarantine exactly the affected lots and batches, report them, rework what can be screened, verify the alternate, buy what is still missing, make order_3 and the replacements. The delivery also brought a spare hose."},{"phase":3,"name":"Quality","objectives":"A lab reports defects on press_a. One or two things are wrong. Find them with probes, witnesses, trials and the reference standard, declare them, fix them, confirm with current readings, replace what was bad and keep what was good. Read engineering and its future reserve before spending. Make one engineering_commit supported by evidence already collected, using the optional engineering tests or the complete physical diagnosis and confirmation. Save enough units for actual maintenance and release."},{"phase":4,"name":"Maintenance","objectives":"press_a faults and two reports are withdrawn. Maintain with the governing manual, answer the spot request by the supply rule, plan the class evidence of every sensor with the credits of phases 4 and 5, and produce order_4 to its standing revision. The night shift throttled the main valve of press_b to clear a low-pressure alarm: find the leak with the pipe map, the specification and the flow readings, repair it with the spare hose, give press_b its supply back with every valve open, and read the branch of each press before it produces. The primary revised its circuit allocation and advised a consignment: confirm it before you answer the spot request, and plan on what is confirmed."},{"phase":5,"name":"Release","objectives":"Read the lab notice and contain what it reaches, produce order_5 and order_6 and make again what the notice took out, authorize, and dispatch every order with evidence, hold it with reason, or defer it with a disposition when it cannot be made in this period."}],"criteria":[{"id":"EMI-01","group":"operations","phase":1,"title":"Documented sourcing","rule":"Every certificate cited in phase 1 governs this plant for the supplier and material at the time of the purchases that used it, and a governing citation precedes every phase-1 purchase.","max_points":5},{"id":"EMI-02","group":"operations","phase":1,"title":"Baseline production","rule":"Good batches of order_1 and order_2 equal the quantities of the revisions that govern at the checkpoint.","max_points":5},{"id":"EMI-03","group":"operations","phase":2,"title":"Exact containment","rule":"Every lot and batch the recall reaches, through merges and consumption, is quarantined at the checkpoint, and nothing else is quarantined or held.","max_points":5},{"id":"EMI-04","group":"operations","phase":2,"title":"Replacement, order_3 and usable lots kept","rule":"Order_1, order_2 and order_3 are covered by good batches equal to their governing quantities, made from documented material, and no quarantined lot that rework could screen (a single root that is not the alternate, two units or more) is left unreworked at the checkpoint.","max_points":5},{"id":"EMI-05","group":"operations","phase":3,"title":"Causes found and fixed","rule":"The declared diagnosis is exactly the set of causes, every one of them is fixed at the checkpoint, the reference and a good press_a batch of the current epochs both read 0, and a current witness finds press_a within spec. A correct engineering_commit supported by evidence already available when committed is also required.","max_points":5},{"id":"EMI-06","group":"operations","phase":3,"title":"Bad replaced, good kept","rule":"Batches made in the faulty configuration are quarantined and every order is covered by batches that were not; no batch that was good is quarantined in phase 3.","max_points":5},{"id":"EMI-07","group":"operations","phase":4,"title":"Functions restored","rule":"press_a restored after maintenance, inspected with exactly the post_service_checks of the manual that governs it, plus interlock when a shift log reported a bypass not reset; and the compressed air restored: pressure normal, both presses fully supplied, the leak repaired with a spare hose from stock and every valve open. The actual maintenance must have enough engineering units for its automatic allocation.","max_points":5},{"id":"EMI-08","group":"operations","phase":4,"title":"Recovery order produced, request answered","rule":"Good batches of order_4 that were not made in a faulty configuration equal the quantity of its governing revision, and the spot request is answered, after every advised consignment was confirmed, as the supply rule says on the run as it stood when the request arrived.","max_points":5},{"id":"EMI-09","group":"operations","phase":5,"title":"Evidence at release","rule":"Every dispatch cites the governing revision and class evidence for every circuit root of the shipped sensors, every lot in a shipped batch came from a documented delivery, and every held order is produced in full and truly lacks evidence.","max_points":5},{"id":"EMI-10","group":"operations","phase":5,"title":"Orders shipped or rightly deferred","rule":"Every order that is not held or deferred is shipped completely and not beyond its governing quantity, nothing shipped was made in a faulty configuration or carries a cause a lab notice names, every held order is produced in full and has no evidence, and every deferral is right: an order only press_a makes, deferred whole with the fault report and the parts confirmation cited, when the part its repair needed was not in stock. Dispatch authorization must have enough engineering units for its automatic release allocation after funded maintenance.","max_points":5},{"id":"EMI-11","group":"safety","phase":1,"title":"Preflight, witness and documented material","rule":"Both machines inspected before production with at least guard, power and workspace, every press that produced had a current witness under load within spec before its first production, and every lot consumed in phase 1 came from a documented delivery.","max_points":5},{"id":"EMI-12","group":"safety","phase":2,"title":"Traceability","rule":"Every quarantined lot has a quality report naming all its consuming batches, and the alternate's citation governs.","max_points":5},{"id":"EMI-13","group":"safety","phase":3,"title":"No production in a faulty configuration","rule":"After the inspection report no demand batch is made in the faulty configuration, and nothing suspect is shipped. At commitment, the engineering decision must be correct and supported by engineering evidence or the full physical diagnosis and confirmation required for EMI-05. Later evidence cannot qualify an earlier blind commitment.","max_points":5},{"id":"EMI-14","group":"safety","phase":4,"title":"Safe maintenance sequence","rule":"Lockout before maintenance, maintenance before inspection, inspection with the governing manual before restoration; no repair begun on a branch that was not closed; every press that produced in phase 4 had, before the batch, a flow reading of its branch in the air epoch of the batch showing its full draw.","max_points":5},{"id":"EMI-15","group":"safety","phase":5,"title":"Safe release","rule":"Dispatch after authorization with the three checks, no alarm but that of an isolated machine, no holds left on material, nothing defective shipped, every lot a lab notice reaches quarantined with a quality report and every unshipped batch it reaches quarantined, nothing else quarantined in phase 5 that still had use, every order shipped, held or deferred as EMI-10 says, a press that broke down in phase 5 either repaired by lockout, maintenance, an inspection with the governing manual and restoration, or left isolated, and every press that produced in phase 5 had, before the batch, a flow reading of its branch in the air epoch of the batch showing its full draw. Engineering maintenance and release allocations must both be funded.","max_points":5}],"engineering":{"version":"emi-engineering-1","resource":"Engineering units are a separate, finite allowance. They persist from phase 3 through phase 5, cannot be bought or renewed, and are not measurement credits, money, material or elapsed time.","planning":"All prices and the compulsory maintenance and release costs are visible in phase 3. Save those future units. The allowance supports a complete evidence plan, both possible remedies and both later allocations. It does not support running every test. Compare paired analysis, the two single analyses, and a count screen followed by a single analysis when its count is one.","evidence":"Tests examine retained material from the phase-3 incident and the gauge as it was at that incident. Subsequent quarantine or recalibration does not change these samples. The count screen reports how many of material and instrument were faulty: 0 proves neither, 2 proves both, and 1 does not identify which. A material assay establishes material, a reference assay establishes instrument, and a paired assay establishes both. They do not establish a process fault. Each test can be bought once.","commitment":"In phase 3, commit exactly the subset of material and instrument supported by evidence already collected when committing. The empty list is allowed. Engineering test results must distinguish one possible subset, or the existing Plant diagnosis and current physical confirmation must already establish the correct diagnosis before commitment. Buying a separate engineering test is not mandatory when the existing physical evidence does the job. This is a single irreversible workshop allocation: a syntactically valid wrong or unsupported claim is recorded and charged, not rejected or corrected. It cannot be retried to find the answer. Evidence collected afterwards cannot rescue an unsupported commitment, even when the guess was correct. The stated remedies are costed from the submitted subset, not the hidden fault. Existing Plant corrections and current confirmation readings remain mandatory.","later_work":"After commitment, the first physical request_maintenance in phase 4 automatically spends the published maintenance units. The first authorize_dispatch in phase 5 automatically spends the release units, after maintenance was funded. Insufficient units refuse that actual factory action atomically. These allocations do not replace physical repairs, spare parts, production or shipment evidence. No new units arrive at a phase boundary. There are no separate public allocation calls.","grading":"EMI-05 also needs an evidence-supported correct engineering commitment. EMI-13 also forbids a blind or incorrect commitment. EMI-07 also needs funded engineering maintenance. EMI-10 and EMI-15 also need funded engineering release. Existing physical factory criteria are preserved and AND-ed with these checks. No speed bonus applies. The factory still totals 75 and the panel 25.","operations":{"engineering_test":{"args":{"test":"count-screen, material-assay, reference-assay or paired-assay"},"phase":3,"effect":"Spend the public price and append test_N with its observable result. Available only before commitment."},"engineering_commit":{"args":{"causes":"list containing material, instrument, both, or neither, without duplicates"},"phase":3,"effect":"Spend the costs of the submitted remedies and freeze the decision and its existing test evidence. Accepted does not mean correct."}}},"ui_scope":"Factory defines EMI-01..EMI-15 (75 points). The panel defines EMI-16..EMI-20 (25 points), graded from the module manifest frozen at each advance. EMI-16 checks exact factory data, EMI-17 checks fitting modules and coverage, EMI-18 checks critical needs and priority, EMI-19 checks the introduction and work, and EMI-20 checks that the panel stays current without dropping a critical need that still applies. Each panel criterion earns one point per checkpoint. The panel is data: the observer draws it with fixed code, and nothing the agent sends runs."},"panel_rules":"Your control panel is a list of fixed modules from panel_catalog, each showing one public source of the factory (panel_sources). You choose the modules, their order, section, emphasis and width, and fill them with the rows of their source; the observer draws them with fixed code, charts and icons included, and nothing you send runs. The five panel criteria are graded at each of the five advances, one point per checkpoint and criterion, 25 in all, against the factory as it stands at that advance and against the needs of panel_needs that apply then. The panel has room for 6 modules, and each phase has work of its own (phase-work in panel_needs), so the panel has to be rebuilt as the factory moves on. A panel published before the factory last changed shows a past revision: at that checkpoint it can earn EMI-19 only. A publish raises the revision of the run but does not change the factory, so a panel published at the revision you read, followed by the advance, shows the factory as it stands. Your first operate or advance needs a published panel with an intro of at least 40 characters and work of at least 20. Changing modules costs configuration points (panel_budget); changing values and text costs nothing.","panel_manifest":{"schema":"emi-modules-1","keys":"schema, revision, intro, work and modules, nothing else.","revision":"The expected_revision of the publish: the revision you read panel.sources at.","intro":"What the panel shows and why, up to 2000 characters; at least 40 for EMI-19.","work":"What you are working on now, up to 2000 characters; at least 20 for EMI-19.","modules":"A list of at most 24 modules, in display order; the panel has room for 6, and a panel of more fails EMI-17. Each has exactly instance_id (your own stable id, A-Z a-z 0-9 _ - up to 96 characters, unique), template_id (an id of panel_catalog), source_id (an id of panel_sources), title (1 to 160 characters), unit (up to 80 characters; the unit of the source), section (overview, machines, materials, orders, alarms or activity), emphasis (normal or attention), span (3, 4, 6, 8 or 12 of 12 columns) and rows.","rows":"At most 128 rows, each with exactly id (unique in the module), label, value (a finite number, text, true, false or null; null is unknown, never zero) and optionally x, target (finite numbers) and state (text): the rows of the source, which you may order as you like.","limits":"At most 24 modules (room for 6, EMI-17), 128 rows per module and runtime_limits.artifact_bytes for the encoded manifest (128 KiB at most); at most 30 publications per run.","example":{"schema":"emi-modules-1","revision":12,"intro":"This panel follows the presses, the material lots and the orders as the factory changes.","work":"Checking the quarantined lot before the next order.","modules":[{"instance_id":"lots","template_id":"lot-release-board","source_id":"lot-status","title":"Lot status","unit":"status","section":"materials","emphasis":"attention","span":6,"rows":[{"id":"lot_1","label":"lot_1","value":"released","state":"released"},{"id":"lot_2","label":"lot_2","value":"quarantined","state":"quarantined"}]}]}},"panel_sources":{"rule":"GET /{run_id} answers panel.sources at the revision you read: for each source its kind (scalar, category, series or table), unit, allowed_templates and rows. A module shows its source exactly when its source_id, unit and rows equal the source's: rows are compared by id, with the same label, value and the same optional fields, and your order is kept. A module fits when its template is one of the source's allowed_templates, the template takes the source's kind (panel_catalog kinds) and its rows meet the template's requirements.","sources":[{"id":"machine-status","kind":"category","unit":"status","allowed_templates":["machine-state-board","machine-observations-register"]},{"id":"sensor-readings","kind":"category","unit":"sensor reading","allowed_templates":["sensor-reading-comparison","machine-observations-register"]},{"id":"machine-locks","kind":"table","unit":"locked out","allowed_templates":["machine-observations-register"]},{"id":"material-stock","kind":"category","unit":"units","allowed_templates":["stock-quantity-comparison","stock-intensity-cells"]},{"id":"lot-status","kind":"category","unit":"status","allowed_templates":["lot-release-board"]},{"id":"order-produced","kind":"category","unit":"units","allowed_templates":["order-produced-comparison","order-production-register"]},{"id":"order-shipped","kind":"category","unit":"units","allowed_templates":["order-shipped-comparison","order-shipment-register"]},{"id":"production-total","kind":"scalar","unit":"units","allowed_templates":["classified-good-output"]},{"id":"calibration","kind":"scalar","unit":"calibration epoch","allowed_templates":["calibration-epoch","calibration-record"]},{"id":"phase","kind":"scalar","unit":"phase","allowed_templates":["phase-state","phase-record","run-briefing"]},{"id":"active-alarms","kind":"table","unit":"message","allowed_templates":["active-alarm-messages"]},{"id":"recent-events","kind":"table","unit":"message (latest 128)","allowed_templates":["recorded-activity-context"]},{"id":"production-history","kind":"series","unit":"units","allowed_templates":["classified-good-output-history","measurement-register"]}],"history":"production-history appears once the factory has a history: one point each time the tick advances, from the start, with the good units of all orders at that tick (x is the tick). recent-events also allows public-event-sequence while every recorded event has its tick in order."},"panel_needs":{"rule":"A need is covered by a module of its source, in its section, whose template has one of its facets and which shows its source exactly and fits. A critical need also needs such a module with emphasis attention among the first max_rank modules of the manifest. Emphasis attention belongs only on a module that covers a critical need that applies: attention anywhere else is a false alarm. Needs come and go with the factory: at each checkpoint the needs that apply then are graded, so the emphasis follows them. Every need that applies at once fits in a panel of 6 modules; the needs of the whole run do not.","needs":[{"id":"machine-awareness","applies":"always","source_id":"machine-status","section":"machines","facets_any":["status","detail"],"critical":"while a machine has status fault, locked out or not, with max_rank 3"},{"id":"order-awareness","applies":"always","source_id":"order-produced in phases 1 to 4, order-shipped in phase 5","section":"orders","facets_any":["comparison","detail"],"critical":"never"},{"id":"phase-work","applies":"always","source_id":"the source of the work of the phase: material-stock in phase 1, lot-status in phase 2, sensor-readings in phase 3, machine-locks in phase 4, order-shipped in phase 5","section":"the section of that source: materials in phases 1 and 2, machines in phases 3 and 4, orders in phase 5","facets_any":["comparison","status","detail"],"critical":"never"},{"id":"material-isolation","applies":"while a lot is held or quarantined","source_id":"lot-status","section":"materials","facets_any":["status","detail"],"critical":"always, with max_rank 3"},{"id":"alarm-response","applies":"while an alarm is active","source_id":"active-alarms","section":"alarms","facets_any":["status","detail","sequence"],"critical":"always, with max_rank 3"},{"id":"production-trend","applies":"once production-history has three points","source_id":"production-history","section":"overview","facets_any":["trend"],"critical":"never"}]},"panel_budget":{"limit":72,"costs":{"add a module":2,"remove a module":1,"replace its template or source":3,"move it, or change its section, emphasis or span":1,"change values, rows, title, unit, intro or work":0},"rule":"Every publication is charged, the first included: each module it adds costs 2. A module is charged at most once per publication, a replacement before a move. Removing a module does not count as moving the ones after it. A publish that would spend more than the limit answers 409 and changes nothing. The points are not a score: a needed change can earn full marks, and needless changes only spend the room for later repairs."},"panel_catalog":[{"id":"completed-output","title":"Completed output","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"One reported total of completed units, distinct from planned or shipped units.","limitations":"Use a public completed-output source. This card does not infer quality acceptance or shipment from production.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"unfilled-demand","title":"Unfilled demand","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"One canonical outstanding-demand quantity for deciding whether more work is needed.","limitations":"The public source must already calculate outstanding demand. Do not subtract held or deferred orders locally.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"usable-stock-total","title":"Usable stock total","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"One quantity explicitly reported as available for use after applicable stock restrictions.","limitations":"A gross stock total is not a substitute. The source must identify the material and its unit; unlike units cannot be combined.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"active-alert-count","title":"Active alert count","renderer":"kpi","kinds":["scalar"],"facets":["current","status"],"description":"A compact canonical count of active alerts for the current snapshot.","limitations":"A count cannot explain or identify an alert. Pair it with an available alarm-detail source when the task requires reasons.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"remaining-query-budget","title":"Remaining query budget","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"The remaining public allowance for a named bounded information-gathering activity.","limitations":"Display only the exact reported allowance. It is not a timer, spending estimate or guarantee that a query will succeed.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"signed-balance","title":"Reported balance","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"One reported signed balance, such as a canonical surplus or shortfall in a single unit.","limitations":"Negative values are meaningful here. Do not reinterpret a signed balance as a quantity of usable material or as a percentage.","requirements":["numeric_value","single_row"]},{"id":"pressure-reference","title":"Pressure against reference","renderer":"gauge","kinds":["scalar"],"facets":["current","comparison"],"description":"One measured nonnegative pressure beside its explicitly supplied positive reference.","limitations":"A reference is not a safe operating range. This gauge cannot infer flow sufficiency, measurement freshness or upper and lower safety limits.","requirements":["numeric_value","nonnegative_value","positive_target","single_row"]},{"id":"load-capacity","title":"Load against capacity","renderer":"gauge","kinds":["scalar"],"facets":["current","comparison"],"description":"One reported load relative to the capacity attached to that same public row.","limitations":"Requires a positive capacity in the same unit. Capacity is not a production commitment, and over-capacity values must remain visible as supplied.","requirements":["numeric_value","nonnegative_value","positive_target","single_row"]},{"id":"consumption-allowance","title":"Consumption against allowance","renderer":"gauge","kinds":["scalar"],"facets":["current","comparison"],"description":"Consumed resources relative to a public positive allowance for the same resource and interval.","limitations":"Do not mix remaining and consumed quantities. A missing allowance is unknown rather than an unlimited or zero allowance.","requirements":["numeric_value","nonnegative_value","positive_target","single_row"]},{"id":"buffer-reference","title":"Buffer against reference","renderer":"gauge","kinds":["scalar"],"facets":["current","comparison"],"description":"A single buffer quantity compared with its published positive reference level.","limitations":"A reference level does not establish replenishment timing or usable provenance. Use only a public buffer quantity with a compatible target.","requirements":["numeric_value","nonnegative_value","positive_target","single_row"]},{"id":"order-production-progress","title":"Order production progress","renderer":"progress","kinds":["scalar","category"],"facets":["current","comparison"],"description":"Reported good production for each order against its current governing quantity.","limitations":"Every row needs a positive public target. Production progress does not prove that the goods are released, packed or shipped.","requirements":["numeric_value","nonnegative_value","positive_target"]},{"id":"shipment-fulfilment-progress","title":"Shipment fulfilment progress","renderer":"progress","kinds":["scalar","category"],"facets":["current","comparison"],"description":"Confirmed shipped quantities against the delivery quantities supplied with the public source.","limitations":"Count shipped goods only. Scheduled dispatches, produced batches and pending carrier acceptance must not be promoted into shipments.","requirements":["numeric_value","nonnegative_value","positive_target"]},{"id":"inspection-coverage-progress","title":"Inspection coverage progress","renderer":"progress","kinds":["scalar","category"],"facets":["current","comparison"],"description":"Public completed-inspection counts against the required inspection count for each named group.","limitations":"Coverage is not a passing result or statistical proof of safety. The required count must be public and positive.","requirements":["numeric_value","nonnegative_value","positive_target"]},{"id":"maintenance-work-progress","title":"Maintenance work progress","renderer":"progress","kinds":["scalar","category"],"facets":["current","comparison"],"description":"Reported maintenance work completed against an explicitly provided positive work total.","limitations":"Never estimate progress from polling or elapsed wall time. Completion of a work count does not replace the public machine-release state.","requirements":["numeric_value","nonnegative_value","positive_target"]},{"id":"receipt-completion-progress","title":"Receipt completion progress","renderer":"progress","kinds":["scalar","category"],"facets":["current","comparison"],"description":"Confirmed received quantities against the quantities due on the selected public receipt source.","limitations":"A received quantity is not automatically inspected or usable. Do not turn a supplier promise or estimated arrival into a receipt.","requirements":["numeric_value","nonnegative_value","positive_target"]},{"id":"lot-provenance-register","title":"Lot provenance register","renderer":"table","kinds":["table","category"],"facets":["detail"],"description":"Recorded lot identities and public provenance summaries in a readable row register.","limitations":"Only the supplied row fields are shown. The table cannot reconstruct hidden parents, quantities or a physical traceability graph.","requirements":[]},{"id":"order-requirements-register","title":"Order requirements register","renderer":"table","kinds":["table","category"],"facets":["detail","current"],"description":"The governing public order requirements, recorded quantities and available row status.","limitations":"Use an already normalized source for the governing requirements. This table does not resolve competing documents or choose an order revision.","requirements":[]},{"id":"machine-observations-register","title":"Machine observations register","renderer":"table","kinds":["table","category"],"facets":["detail","current"],"description":"Machine identities and recorded observations with exact text and optional reported state.","limitations":"A displayed sensor value is an observation, not a validated diagnosis. No machine status is inferred from that value alone.","requirements":[]},{"id":"evidence-reference-register","title":"Evidence reference register","renderer":"table","kinds":["table"],"facets":["detail"],"description":"Public document or finding references and their supplied plain-text summaries.","limitations":"References are text, not fetched links. The table does not certify authenticity, inspect missing documents or expose private evidence.","requirements":[]},{"id":"shipment-register","title":"Shipment register","renderer":"table","kinds":["table","category"],"facets":["detail","current"],"description":"Named shipment records with the exact quantity, label and available state in the source.","limitations":"A shipment record may be pending. Its presence is not proof of successful dispatch, receipt or completion unless the public state says so.","requirements":[]},{"id":"measurement-register","title":"Measurement register","renderer":"table","kinds":["table","series"],"facets":["detail"],"description":"Individual reported measurements, including an optional public numeric coordinate or reference.","limitations":"Rows retain their original units and labels. The table does not resample, interpolate, discard outliers or silently repair stale readings.","requirements":[]},{"id":"cumulative-production-history","title":"Cumulative production history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"A public cumulative-output series on its recorded numeric production coordinate.","limitations":"Requires public x values in non-decreasing display order. A cumulative line is not an instantaneous production rate or a forecast.","requirements":["numeric_value","nonnegative_value","numeric_x","ordered_x"]},{"id":"pressure-reading-history","title":"Pressure reading history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"Recorded pressure readings against their supplied time or measurement-sequence coordinate.","limitations":"A connecting line is a display aid, not continuous telemetry. Missing readings remain unknown and no readings are manufactured between samples.","requirements":["numeric_value","nonnegative_value","numeric_x","ordered_x"]},{"id":"temperature-reading-history","title":"Temperature reading history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"A signed temperature series on its public numeric coordinate, retaining the reported unit.","limitations":"Negative temperatures are allowed. The graph neither converts units nor invents an acceptable operating band.","requirements":["numeric_value","numeric_x","ordered_x"]},{"id":"reject-rate-history","title":"Reject rate history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"A sequence of canonical reject-rate measurements using the rate unit supplied by the source.","limitations":"Rates must already be public values with comparable definitions. Do not derive a rate by averaging incompatible sample sizes or intervals.","requirements":["numeric_value","nonnegative_value","numeric_x","ordered_x"]},{"id":"stock-level-history","title":"Stock level history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"Reported stock levels of one material over a public numeric sequence or time axis.","limitations":"This is a level history, not a receipts ledger. A change does not identify its cause or prove that the stock was available for use.","requirements":["numeric_value","nonnegative_value","numeric_x","ordered_x"]},{"id":"stock-quantity-comparison","title":"Stock quantity comparison","renderer":"bar","kinds":["category","table"],"facets":["comparison","current"],"description":"Public stock quantities by comparable material or location, retaining every supplied row.","limitations":"All bars must use the source unit. A larger quantity does not mean the material is safer, released or sufficient for a particular order.","requirements":["numeric_value","nonnegative_value"]},{"id":"order-backlog-comparison","title":"Order backlog comparison","renderer":"bar","kinds":["category","table"],"facets":["comparison","current"],"description":"Outstanding demand across orders using canonical backlog quantities from the public source.","limitations":"Do not recompute backlog from unrelated produced and shipped fields. Bar size alone does not establish urgency or permission to work.","requirements":["numeric_value","nonnegative_value"]},{"id":"machine-output-comparison","title":"Machine output comparison","renderer":"bar","kinds":["category"],"facets":["comparison"],"description":"Recorded output across machines for a common unit and publicly defined reporting interval.","limitations":"Unequal reporting intervals or product units are not comparable. Output is not a ranking of quality, efficiency or operator performance.","requirements":["numeric_value","nonnegative_value"]},{"id":"resource-delta-comparison","title":"Resource delta comparison","renderer":"bar","kinds":["category","table"],"facets":["comparison"],"description":"Signed public changes or deviations for comparable resources, retaining negative values.","limitations":"Deltas need the same baseline definition and unit. Negative values cannot be silently clipped or turned into positive quantities.","requirements":["numeric_value"]},{"id":"fault-frequency-comparison","title":"Fault frequency comparison","renderer":"bar","kinds":["category"],"facets":["comparison"],"description":"Public counts of recorded fault types over the same declared observation window.","limitations":"Frequency is not severity, a causal diagnosis or a prediction. No counts are mined from private event history.","requirements":["numeric_value","nonnegative_value"]},{"id":"inventory-state-breakdown","title":"Inventory state breakdown","renderer":"stacked","kinds":["category","table"],"facets":["distribution","comparison"],"description":"Additive public inventory quantities grouped by row label and explicit stock state.","limitations":"Use disjoint quantities in one unit, with unique label and state pairs. Duplicate pairs require table fallback rather than silent aggregation.","requirements":["numeric_value","nonnegative_value"]},{"id":"order-stage-breakdown","title":"Order stage breakdown","renderer":"stacked","kinds":["category","table"],"facets":["distribution","comparison"],"description":"Order quantities divided into public, mutually exclusive work stages for each order label.","limitations":"Cumulative produced and shipped totals overlap and must not be stacked as separate parts. Stage quantities must already be disjoint in the source.","requirements":["numeric_value","nonnegative_value"]},{"id":"resource-use-breakdown","title":"Resource use breakdown","renderer":"stacked","kinds":["category","table"],"facets":["distribution","comparison"],"description":"Comparable public resource-use totals divided by an explicit category or disposition state.","limitations":"Only additive quantities belong together. Mixing stock levels, rates and cumulative consumption would create an invalid total.","requirements":["numeric_value","nonnegative_value"]},{"id":"inspection-outcome-breakdown","title":"Inspection outcome breakdown","renderer":"stacked","kinds":["category","table"],"facets":["distribution","comparison"],"description":"Public counts partitioned into exclusive recorded inspection outcomes for each group.","limitations":"An untested item is not a pass. Preserve unknown values and use only outcome groups that do not count the same inspection twice.","requirements":["numeric_value","nonnegative_value"]},{"id":"stock-disposition-share","title":"Stock disposition share","renderer":"doughnut","kinds":["category"],"facets":["distribution"],"description":"A part-to-whole view of public stock quantities partitioned by disposition.","limitations":"The partitions must be disjoint and nonnegative. Unknown partitions and an all-zero total do not establish a complete percentage distribution.","requirements":["numeric_value","nonnegative_value"]},{"id":"receipt-origin-share","title":"Receipt origin share","renderer":"doughnut","kinds":["category"],"facets":["distribution"],"description":"Confirmed receipt quantities by their reported supplier or origin in one common unit.","limitations":"Physical ancestry after mixing can overlap, so overlapping parent-origin quantities are not valid slices. Use disjoint receipt records only.","requirements":["numeric_value","nonnegative_value"]},{"id":"exclusive-reject-reason-share","title":"Exclusive reject reason share","renderer":"doughnut","kinds":["category"],"facets":["distribution"],"description":"Counts grouped by an explicitly exclusive public primary reject classification.","limitations":"Concurrent causes are not exclusive categories. Do not use this view for overlapping defect causes or infer a primary cause from incomplete findings.","requirements":["numeric_value","nonnegative_value"]},{"id":"consumption-allocation-share","title":"Consumption allocation share","renderer":"doughnut","kinds":["category"],"facets":["distribution"],"description":"Public consumed-resource amounts partitioned among named activities or destinations.","limitations":"Allocations must share a unit and reporting interval. A slice is an amount, not proof that the allocation was necessary or efficient.","requirements":["numeric_value","nonnegative_value"]},{"id":"pressure-flow-pairs","title":"Pressure and flow pairs","renderer":"scatter","kinds":["series","table"],"facets":["comparison"],"description":"Public paired pressure and flow observations with a real numeric x coordinate per row.","limitations":"Only genuinely paired observations belong together. Proximity or correlation does not prove that one observation caused another.","requirements":["numeric_value","numeric_x"]},{"id":"cycle-time-yield-pairs","title":"Cycle time and yield pairs","renderer":"scatter","kinds":["series","table"],"facets":["comparison"],"description":"Canonical cycle-time and yield pairs supplied for the same public samples.","limitations":"Do not join unrelated samples or manufacture cycle times from snapshot revision numbers. The source must define both coordinates and their units.","requirements":["numeric_value","numeric_x"]},{"id":"lead-time-quantity-pairs","title":"Lead time and quantity pairs","renderer":"scatter","kinds":["table","series"],"facets":["comparison"],"description":"Public matched lead-time and quantity observations for receipts or orders.","limitations":"A promise and an observed lead time are different measurements. This scatter does not forecast a future delivery or rank suppliers automatically.","requirements":["numeric_value","numeric_x"]},{"id":"workload-output-pairs","title":"Workload and output pairs","renderer":"scatter","kinds":["series","table"],"facets":["comparison"],"description":"Paired reported workload and output values from the same public observation units.","limitations":"Matched intervals are required for a meaningful relationship. No regression, optimal workload or capacity limit is inferred from the plotted points.","requirements":["numeric_value","numeric_x"]},{"id":"stock-intensity-cells","title":"Stock intensity cells","renderer":"heatmap","kinds":["category","table"],"facets":["comparison","current"],"description":"Labelled cells showing relative public stock quantities across named locations or materials.","limitations":"These are one-dimensional labelled cells, not an invented location matrix. Cell intensity does not indicate safety or permission to consume stock.","requirements":["numeric_value","nonnegative_value"]},{"id":"backlog-intensity-cells","title":"Backlog intensity cells","renderer":"heatmap","kinds":["category","table"],"facets":["comparison","current"],"description":"A compact field of labelled public backlog quantities for scanning unequal workloads.","limitations":"Visual intensity is relative to the shown rows, not a fixed urgency threshold. It does not substitute for an explicit critical-task need.","requirements":["numeric_value","nonnegative_value"]},{"id":"lateness-deviation-cells","title":"Lateness deviation cells","renderer":"heatmap","kinds":["category","table"],"facets":["comparison"],"description":"Public signed schedule deviations displayed as labelled values in a compact cell layout.","limitations":"The source must define the sign and common time unit. Values remain authoritative; cell styling is not a certified lateness threshold.","requirements":["numeric_value"]},{"id":"sample-defect-count-cells","title":"Sample defect count cells","renderer":"heatmap","kinds":["category","table"],"facets":["comparison"],"description":"Recorded defect counts by public sample, retaining the individual sample labels.","limitations":"Counts from unequal sample sizes are not defect rates. An unmeasured sample stays unknown rather than appearing as a zero-defect cell.","requirements":["numeric_value","nonnegative_value"]},{"id":"machine-state-board","title":"Machine state board","renderer":"states","kinds":["category","table"],"facets":["status","current"],"description":"Explicit public machine states presented together for a current operating-state check.","limitations":"State labels are authoritative text, not permission to operate. A ready-looking state does not bypass lockout, maintenance or other public preconditions.","requirements":[]},{"id":"lot-release-board","title":"Lot release board","renderer":"states","kinds":["category","table"],"facets":["status","current"],"description":"The public release, hold or quarantine state recorded for each named lot.","limitations":"Do not infer safety from a lot class or colour. A temporary hold is distinct from permanent quarantine and unknown status is not released.","requirements":[]},{"id":"order-disposition-board","title":"Order disposition board","renderer":"states","kinds":["category","table"],"facets":["status","current"],"description":"Named orders with the active disposition explicitly present in their public rows.","limitations":"Deferred, held, produced and shipped are different claims. The board does not decide whether a deferral is justified or complete an order.","requirements":[]},{"id":"schedule-state-board","title":"Schedule state board","renderer":"states","kinds":["category","table"],"facets":["status","current"],"description":"Public job states such as pending, blocked, completed or cancelled in a compact board.","limitations":"Row order is presentation order, not an execution plan. A pending job does not imply that time or production is automatically advancing.","requirements":[]},{"id":"receipt-inspection-board","title":"Receipt inspection board","renderer":"states","kinds":["category","table"],"facets":["status","current"],"description":"Reported receipt or inspection states for incoming goods without collapsing distinct states.","limitations":"Received goods may still await inspection or release. The display cannot substitute a supplier statement for an actual public receipt finding.","requirements":[]},{"id":"public-event-sequence","title":"Public event sequence","renderer":"timeline","kinds":["series","table"],"facets":["sequence","detail"],"description":"Public event messages displayed in the order of their supplied numeric event coordinate.","limitations":"Every row needs a public x coordinate in non-decreasing order. A sequence establishes recorded order, not causality or complete historical coverage.","requirements":["numeric_x","ordered_x"]},{"id":"document-release-sequence","title":"Document release sequence","renderer":"timeline","kinds":["series","table"],"facets":["sequence","detail"],"description":"The recorded public release order of process documents or findings.","limitations":"Use release coordinates rather than document identifiers as time. An unpublished finding must not be added retrospectively to an earlier public snapshot.","requirements":["numeric_x","ordered_x"]},{"id":"maintenance-event-sequence","title":"Maintenance event sequence","renderer":"timeline","kinds":["series","table"],"facets":["sequence","detail"],"description":"Recorded maintenance, isolation, repair or restoration events in their public order.","limitations":"A narrated sequence is not a safety certificate. Missing inspections or repair prerequisites cannot be inferred from neighbouring events.","requirements":["numeric_x","ordered_x"]},{"id":"shipment-event-sequence","title":"Shipment event sequence","renderer":"timeline","kinds":["series","table"],"facets":["sequence","detail"],"description":"A public chronological sequence of shipment-related observations or confirmed events.","limitations":"Promised, dispatched and received events remain distinct. Coordinates do not prove a delivery occurred unless the corresponding public row records it.","requirements":["numeric_x","ordered_x"]},{"id":"decision-audit-sequence","title":"Decision audit sequence","renderer":"timeline","kinds":["series","table"],"facets":["sequence","detail"],"description":"Publicly recorded decisions with their real sequence coordinates and unchanged text.","limitations":"This view cannot read private agent reasoning or reconstruct an omitted decision. A recorded choice is not automatically a justified or successful choice.","requirements":["numeric_x","ordered_x"]},{"id":"output-versus-order","title":"Output versus order","renderer":"comparison","kinds":["scalar","category","table"],"facets":["comparison","current"],"description":"Public good-output and governing-order quantities shown side by side for each row.","limitations":"The source must provide both actual and target. The comparison does not replace shipment status or clamp overproduction to the target.","requirements":["numeric_value","nonnegative_value","numeric_target"]},{"id":"reading-versus-reference","title":"Reading versus reference","renderer":"comparison","kinds":["scalar","category","table"],"facets":["comparison","current"],"description":"Measured and reference values in the same public unit, including signed measurements.","limitations":"A reference is not a tolerance interval. No pass or fail verdict is inferred from equality, sign or visual distance alone.","requirements":["numeric_value","numeric_target"]},{"id":"current-versus-baseline","title":"Current versus baseline","renderer":"comparison","kinds":["scalar","category","table"],"facets":["comparison"],"description":"A current public value beside a public baseline explicitly carried in the target field.","limitations":"The baseline must come from the source rather than an earlier private snapshot. A difference alone does not explain what caused the change.","requirements":["numeric_value","numeric_target"]},{"id":"received-versus-promised","title":"Received versus promised","renderer":"comparison","kinds":["scalar","category","table"],"facets":["comparison","current"],"description":"Confirmed receipt quantities beside the public promised quantities attached to the same records.","limitations":"A shortfall is not necessarily a late delivery. This view requires the matching public promise and never upgrades a promise into received stock.","requirements":["numeric_value","nonnegative_value","numeric_target"]},{"id":"spent-versus-plan","title":"Spent versus plan","renderer":"comparison","kinds":["scalar","category","table"],"facets":["comparison","current"],"description":"Reported spending or resource consumption beside its corresponding public plan amount.","limitations":"Plan and actual must use the same unit and period. An unused allowance is not an earned saving and overrun is not silently capped.","requirements":["numeric_value","nonnegative_value","numeric_target"]},{"id":"active-alarm-messages","title":"Active alarm messages","renderer":"alarm","kinds":["category","table"],"facets":["status","detail"],"description":"Explicit current public alarm messages with their exact row identities and available state.","limitations":"Do not invent severity from wording or colour. An empty source means no recorded rows, not proof that every possible hazard has been excluded.","requirements":[]},{"id":"blocked-work-notices","title":"Blocked work notices","renderer":"alarm","kinds":["category","table"],"facets":["status","detail"],"description":"Publicly reported blockers and their recorded reasons for work that cannot currently proceed.","limitations":"A notice does not resolve the blocker or issue an operation. Absence of a blocker row is not a substitute for the operation preconditions.","requirements":[]},{"id":"quality-finding-notices","title":"Quality finding notices","renderer":"alarm","kinds":["category","table"],"facets":["status","detail"],"description":"Published quality findings or notices relevant to the material currently under review.","limitations":"Show only released findings. A notice cannot by itself infer all affected descendants, remove another defect cause or establish permanent quarantine.","requirements":[]},{"id":"missing-evidence-notices","title":"Missing evidence notices","renderer":"alarm","kinds":["category","table"],"facets":["status","detail"],"description":"Explicit public statements of missing or unresolved evidence for a pending decision.","limitations":"Missing evidence is uncertainty, not a positive defect finding. Only the source may declare that evidence is missing; the template does not invent notices.","requirements":[]},{"id":"process-step-sequence","title":"Process step sequence","renderer":"flow","kinds":["category","table"],"facets":["sequence","status"],"description":"Named public process steps displayed in their explicit numeric step order with supplied states.","limitations":"This is a linear sequence, not a physical traceability DAG. Public step coordinates are required; connecting steps does not infer dependencies or material transfer.","requirements":["numeric_x","ordered_x"]},{"id":"material-handling-sequence","title":"Material handling sequence","renderer":"flow","kinds":["category","table"],"facets":["sequence","status"],"description":"An explicitly ordered public handling or disposition workflow for the selected material context.","limitations":"A displayed route does not prove quantity conservation, processing completion or defect removal. Branches and merges require a richer source than this linear template.","requirements":["numeric_x","ordered_x"]},{"id":"delivery-handoff-sequence","title":"Delivery handoff sequence","renderer":"flow","kinds":["category","table"],"facets":["sequence","status"],"description":"Public delivery handoff steps shown in their stated order without manufacturing new milestones.","limitations":"Planned handoffs remain planned until a public state confirms them. This display neither schedules a carrier nor simulates transport progress.","requirements":["numeric_x","ordered_x"]},{"id":"run-briefing","title":"Run briefing","renderer":"start","kinds":["scalar","table"],"facets":["current","detail"],"description":"Public run context and the supplied opening instructions in a clear introductory module.","limitations":"Countdowns use trusted supplied server metadata only, never a row value guessed to be a timestamp. No clock or activity claim is invented when metadata is absent.","requirements":[]},{"id":"phase-briefing","title":"Phase briefing","renderer":"start","kinds":["category","table"],"facets":["current","detail"],"description":"Public current-phase facts and task context arranged as an orientation block.","limitations":"A briefing is a snapshot, not a promise that work is running. A later phase must come from a new publication rather than a local timer.","requirements":[]},{"id":"recorded-activity-context","title":"Recorded activity context","renderer":"start","kinds":["series","table"],"facets":["sequence","detail"],"description":"A bounded public activity sequence accompanying the run orientation and actual supplied activity metadata.","limitations":"Recorded activity is not live progress. Preserve its real numeric order and never claim continuous work merely because the page is open.","requirements":["numeric_x","ordered_x"]},{"id":"order-produced-comparison","title":"Currently good units by order","renderer":"bar","kinds":["category"],"facets":["current","comparison"],"description":"The current public produced_good quantity for each order, retaining the same reported unit.","limitations":"This quantity can fall when batches are quarantined or reclassified. It is not cumulative throughput, backlog, a target or shipped output, and does not establish permission to ship.","requirements":["numeric_value","nonnegative_value"]},{"id":"order-shipped-comparison","title":"Shipped units by order","renderer":"bar","kinds":["category"],"facets":["current","comparison"],"description":"The public shipped quantity for each order, without manufacturing targets or percentages.","limitations":"Use the actual order shipped field. Production, packing, dispatch plans and supplier receipts are different sources and are not interchangeable with shipped units.","requirements":["numeric_value","nonnegative_value"]},{"id":"sensor-reading-comparison","title":"Reported sensor readings","renderer":"bar","kinds":["category"],"facets":["current","comparison"],"description":"The public displayed sensor numbers by machine on the source-provided reporting scale.","limitations":"No physical unit, temperature interpretation or acceptable range is assumed. Do not imply physical comparability beyond the common reporting scale declared by the public source.","requirements":["numeric_value"]},{"id":"order-production-register","title":"Order production register","renderer":"table","kinds":["category"],"facets":["current","detail"],"description":"An exact register of each order and its currently reported produced_good quantity.","limitations":"A row can fall after quarantine or reclassification. Preserve that change: this is the current good classification, not lifetime production, remaining demand or confirmed shipping.","requirements":["numeric_value","nonnegative_value"]},{"id":"order-shipment-register","title":"Order shipped-quantity register","renderer":"table","kinds":["category"],"facets":["current","detail"],"description":"An exact row register of confirmed shipped quantities attributed to individual public orders.","limitations":"This is an order-level quantity register, not a shipment-event ledger. It does not invent shipment identifiers, carrier records or receipt confirmations.","requirements":["numeric_value","nonnegative_value"]},{"id":"calibration-epoch","title":"Calibration epoch","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"The exact public calibration or gauge epoch as a single version identifier.","limitations":"An epoch is not temperature, elapsed time, progress or a quality score. A larger epoch does not prove that a particular reading or operation is safe or current.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"calibration-record","title":"Calibration epoch record","renderer":"table","kinds":["scalar"],"facets":["current","detail"],"description":"A labelled single-row record of the public instrument calibration epoch and its unit.","limitations":"The epoch identifies a public version only. This table does not certify measurement validity, reconstruct calibration history or turn the identifier into a percentage.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"phase-state","title":"Current phase state","renderer":"states","kinds":["scalar"],"facets":["current","status"],"description":"The exact public current-phase name or description as one textual state.","limitations":"The phase string is not a numeric progress value. It changes only with a new source snapshot, not because a local clock or animation advances.","requirements":["single_row"]},{"id":"phase-record","title":"Current phase record","renderer":"table","kinds":["scalar"],"facets":["current","detail"],"description":"A labelled single-row table preserving the current public phase string without parsing it.","limitations":"Do not split a phase name into invented dates, counters or completion percentages. The table states the recorded phase and does not claim continuous factory activity.","requirements":["single_row"]},{"id":"classified-good-output","title":"Currently classified good output","renderer":"kpi","kinds":["scalar"],"facets":["current"],"description":"The current public total of units classified as good across the included orders.","limitations":"The total can fall after quarantine or reclassification. It is not cumulative throughput, shipped output or an independent guarantee that every included unit is safe.","requirements":["numeric_value","nonnegative_value","single_row"]},{"id":"classified-good-output-history","title":"Recorded good-classification history","renderer":"line","kinds":["series"],"facets":["trend"],"description":"Public snapshots of the units currently classified as good at each recorded coordinate.","limitations":"Values may rise or fall as production, quarantine or reclassification changes the reported total. Do not enforce value monotonicity, sum snapshots or relabel this as cumulative throughput.","requirements":["numeric_value","nonnegative_value","numeric_x","ordered_x"]}],"panel_criteria":[{"id":"EMI-16","points":5,"name":"Facts shown exactly","requirement":"The panel shows the factory as it stands (published after its last change, with that revision), and every module shows its source exactly (panel_sources)."},{"id":"EMI-17","points":5,"name":"Fitting modules, every need covered","requirement":"The panel shows the factory as it stands, has at most 6 modules, every module fits its source, and every need of panel_needs that applies is covered."},{"id":"EMI-18","points":5,"name":"Critical needs first","requirement":"The panel shows the factory as it stands with at least one module, every critical need that applies has a covering module with emphasis attention among the first max_rank modules, and no other module has emphasis attention."},{"id":"EMI-19","points":5,"name":"Introduction and work","requirement":"An intro of at least 40 characters and work of at least 20. This is a structural minimum, not a judgment of the text."},{"id":"EMI-20","points":5,"name":"Kept up as the factory changes","requirement":"EMI-16, EMI-17 and EMI-18 met, and no critical need of your previous publication that still applies was dropped."}],"observer":"The observer page shows your panel as the observer draws it from your last publication: your modules in your order, with fixed code, charts drawn from the same rows as the tables and icons that follow the states shown, beside a system overview of the factory that earns no points. Before your first publication it shows a starter from the observer, which earns nothing. Nothing you send runs, and your panel changes there only when you publish again.","replay":{"start":"POST /services/v1/aiq/start/emi with {\"test_string\":\"AIQ1...\"} from a completed EMI run. An empty object starts a fresh run.","requirements":"The signature, issuer, result format and factory-100 profile must verify, and the signed recipe must equal the one this service runs. A changed or retired recipe returns 409. The old string can still be verified.","meaning":"A new run of the same starting factory, not playback of the previous run. Your actions and panel can differ, so the score can differ.","presentation":"The grading recipe and viewer build have separate hashes. A change confined to the viewer file list does not retire replay. A factory or grader change does. The current viewer hash is in viewer_build_sha256, and the signed result records viewer_sha256_at_finish.","isolation":"New run_id, run_token, view_token and observer link. It waits for begin like a fresh run, then has one hour of work, and 24 hours of storage from its creation. The source run need not still exist.","origin":"The run and signed result say origin.type replay, including in the summary. Replay counts toward the normal start and capacity limits, but not fresh_starts_24h.","requests":"The replayed field on a repeated write means that request was already applied. It does not describe the origin of the run."},"agent_must_keep_running":true,"replay_supported":true}