joinedhistorian · MES batch records · ERP lots · 3 systems, one expressionlineageplc.line3_tags → mes.batches → erp.material_lots → yield_by_lotcacheHIT on 6 of 7 hops · recomputed only last night’s batches
[ 01 / questions the plant asks every day ]
Answers from the historian, the MES, and the ERP at once. Every hop verifiable.
An agent that reads across OT and IT is only useful if the plant manager, the quality lead, and the auditor can all click through to the source.
01
“Why did yield drop on Line 3 last night?”An agent traces it across the historian, batch records, and the ERP, then shows the exact lot, machine, and shift behind the number. Root cause in minutes, not a day of digging.
02
“Which material lot caused the defect spike?”Link the bad parts back through genealogy to the supplier lot, the line, and the operator. Every hop verifiable.
03
“Three machines just went down. Re-plan the shift.”Re-sequence around what is actually running right now, using live floor state instead of a plan that broke two hours in. Built on live data, not yesterday’s.
04
“Pull the full batch record for the auditor.”Every figure ties back to its source with a complete audit trail, the defensible lineage MedTech, food, and coatings plants live and die on. Audit-ready by default.
05
“Are our plants measuring OEE the same way?”One definition in the Ledger, so every site and every agent answers from the same trusted metric. No more apples to oranges.
[ 02 / the ot–it seam ]
Three systems, three clocks, three sets of keys. The answer lives in the join.
The historian speaks in seconds and tag IDs. The MES speaks in batches and shifts. The ERP speaks in orders and lots. Every useful question crosses at least two of them, and that crossing is where numbers usually stop being trustworthy.
Historianclock: seconds
PLC and SCADA tags · one row per second
tagL3_EXTRUDER_TEMP_PV
ts02:10:14.250
value218.4 °C
keyline_id · tag_id
MESclock: batches
batch and shift records · one row per event
batchB-2026-0918-C
shiftC · 22:00–06:00
yield91.2 %
keybatch_id · line_id
ERPclock: orders
orders, materials, suppliers · one row per transaction
orderSO-88213
material lot4471 · supplier B
received09/16
keyorder_id · lot_id
one expression · time-aligned · keys resolved · cached
alignmenttag seconds bucketed to batch windows · shift boundaries respecteddriftL3_EXTRUDER_TEMP renamed on 09/12 · caught at compile · patched by R. Mota
defined onceYield, OEE, and scrap rate are Ledger definitions, not per-site spreadsheets. Every plant and every agent answers from the same one.
joined by xorq, not by handTime alignment and key resolution happen in the expression, so the join is reproducible and its lineage is recorded.
breaks loudly, earlyA renamed tag or a changed ERP column fails at compile time with the field named, not in a dashboard three days later.
[ 03 / where xorq fits in the plant stack ]
Above your data, below your AI. Nothing else moves.
Xorq runs where the data already lives: the historian, the MES, the ERP, the warehouse, the files on S3. Dashboards, chat agents, and custom apps read from one verified Ledger.
consumption
DashboardsOEE · yield · downtime
Chat agentsplant manager · quality lead
Custom appsshift planning · genealogy
Claude · Cursorengineers · xorq plugin
questions ↓ · verified answers ↑
xorq execution system
LedgerSemantic artifacts, lineage, cache, verification. OEE defined once, answered the same way at every site.
X-EngineDeclarative pipelines compiled to whichever system holds the data. Drift in a PLC tag or ERP column caught at compile time.
GateAn engineer approves the patch. A person signs the batch record. The Ledger remembers who.
real queries ↓ · rows stay where they are
PLCs · SCADAhistorian tags
MESbatch logs · OEE · approvals
ERPorders · material lots
QualityLIMS · inspections
WarehouseSnowflake · Postgres
FilesS3 · CSV · Parquet
your OT + IT systems · 20+ backends
// a 30-minute discovery call
Start with one pipeline in your plant.
Bring one pipeline that breaks regularly, or one line where traceability matters. In a 30-minute call we walk through what Xorq would do with it.
Copy our address and paste it into whichever email client you use.
consent — cookies.txt
$
We use cookieless analytics to measure traffic. With your consent, we also enable product
analytics, session recording, and Google Ads conversion tracking, which store data in
your browser. Read our
Privacy Policy.