FICTIONAL / SYNTHETIC DEPLOYMENT MODEL. "Forge Property Management" is an invented customer. No real customer data was used and no real production results are claimed. All figures come from a deterministic synthetic corpus and stated illustrative assumptions.
100,000 Work Order Simulation

Architecture

← Back to case study

Architecture — Forge PM Work Order Simulation

FICTIONAL / SYNTHETIC DEPLOYMENT MODEL. No real customer data is used.

How it fits together

src/enterprise-synth.mjs   ──>  100,000 labeled synthetic work orders (seeded)
                                 │
                                 ▼
../work-order-agents (the real, verified ecosystem, imported unchanged)
  bootstrap.startStack({})
     ├─ openDatabase()        real PostgreSQL engine (PGlite, in-process)
     └─ startDispatchServer() real gRPC/HTTP2 dispatch service (loopback)
  createPipeline()  ──>  for each order:
     classify ─> route ─> validate ─> action
                                 │
                                 ▼
verify.mjs   ──>  streams metrics, persistence checks, idempotency,
                  ROI (src/roi.mjs), and writes verification-report.* + evidence/
                                 │
                                 ▼
build-deliverables.mjs  ──>  report/impact-study.md + certification-report.md
publish.mjs             ──>  ../../published/forge-pm-work-order-sim/ (public page)

Design principles

  1. Reuse, don't re-implement. The simulation imports the *already-verified*

agent ecosystem (../work-order-agents/src) unmodified. This study adds scale, an enterprise dataset, and an ROI model around it — it does not change agent behaviour. The runtime dependencies (@electric-sql/pglite, @grpc/grpc-js, @grpc/proto-loader) resolve from that package.

  1. Determinism is a proof requirement. A single seed (20260625) drives the

entire 100,000-order corpus. The corpus carries a content fingerprint, so any engineer who runs the generator gets byte-identical inputs and therefore the same metrics.

  1. Ground-truth answer key. Every synthetic order is labeled with its true

trade, priority, region, and the expected validation outcome and disposition, so accuracy, recall, precision, and the false-auto-action rate are measured against a known answer — not asserted.

  1. Live infrastructure, synthetic input. Persistence and dispatch are real

(real SQL transactions over PGlite; real gRPC over HTTP/2). Only the *inbound volume* is synthetic. Swapping in real orders would change inputs, not wiring.

  1. Transparent economics. The ROI model shows its arithmetic on every line and

reads its only measured input — the auto-action rate — from the simulation.

The synthetic order "kinds"

KindModelsExpected disposition
cleanclear single-trade request, validAUTO_DISPATCH
emergencyclean but P1 (safety)AUTO_DISPATCH (escalated)
ambiguoustwo trades, weak signalHUMAN_EXCEPTION
highCostestimate over the auto-approval capHUMAN_EXCEPTION
duplicateresubmission of an earlier orderHUMAN_EXCEPTION
missingLocno resolvable unit/zone (blocking)REJECTED
missingFielddescription too short to action (blocking)REJECTED

Module map

  • src/enterprise-synth.mjs — portfolio model (19 fictional properties, 42,000

units across 4 states), trade vocabulary, vendor pools, SLA requirements, and the seeded generator + dataset-row + fingerprint helpers.

  • src/roi.mjscomputeRoi(assumptions, sim) returns the full manual-vs-agent

model with formulas; usd() formats currency.

  • verify.mjs — the simulation runner + 25 MUST_PASS checks + report writers.
  • build-deliverables.mjs — renders the executive + certification reports from

verification-report.json.

  • publish.mjs — builds the public case-study page from the verified report.