An asset maintenance workflow can fail before anyone picks up a tool.
A vibration event arrives twice after a delivery retry. A preventive inspection is already open on the same conveyor drive. The first reading breaches the threshold that was effective when the event occurred. An older reading then arrives after the repair has been completed. If the software treats every message as a new fact, it can create duplicate work, apply today's rule to yesterday's evidence, or silently reopen a machine that has already passed through completion and return-to-service decisions.
That is not a reminder problem. It is an authority problem.
In week 14 of our case-study series, SwarmCraft structured and completed a 65-task customer-owned asset maintenance operation for Harbourline Foods, a fictional three-site food manufacturer. The application replaces MaintainX as the maintenance system of record inside the agreed boundary: canonical assets, observations, anomaly evaluation, preventive and corrective work, parts coordination, downtime, technician evidence, completion, return to service, migration evidence, access decisions, and append-only history.
The project goes beyond wrapping another computerized maintenance management system (CMMS) with forms and notifications. It takes ownership of the records that make the maintenance operation coherent.
If you want the category landscape first, start with Best asset management software. For the cost and duplication problem around the category, read Why asset software sprawl hides in requests, reminders, and maintenance. The MaintainX alternatives article approaches the same decision from the switching side.
The case for replacing the maintenance record
The replacement case is not based on a hypothetical dislike of SaaS. Maintenance practitioners describe concrete friction.
In one Industrial Maintenance discussion about replacing MaintainX, the original poster reports weak parts search, inaccessible asset history on iPads, and limited control over work-order forms. Other participants describe preventive-maintenance configuration and asset ordering problems. A recent MaintainX review on G2 raises a closely related operational issue: requester visibility can lead to duplicate work orders, while reporting and consolidated exports still require work.
Those accounts are anecdotes, not a statistical verdict. They are useful because they expose the same boundary we tested: parts, asset history, work relationships, requester visibility, and reporting are not isolated features when they all shape one maintenance decision.
MaintainX itself documents a capable REST API, signed webhooks, and separate data exports for requests, work orders, assets, locations, parts, meters, costs, and other record types in its export guidance. That breadth makes migration possible, but it also shows why replacement is not a single CSV import. The objects, relationships, files, quantities, currencies, timestamps, decisions, and open states have to arrive as one trustworthy operation.
The operation boundary we chose
The application owns the maintenance record. Adjacent specialist systems exchange bounded facts without gaining authority over it.
| Owned by the asset maintenance operation | Adjacent authority |
|---|---|
| Canonical asset identity, hierarchy, lifecycle history, source identifiers, and migration provenance | Finance retains fixed-asset, depreciation, tax, payment, and ledger authority |
| Raw telemetry deliveries, governed observations, deduplication, source-time ordering, threshold versions, and anomaly records | PLC, SCADA, gateways, and sensors retain machine-signal and control responsibilities |
| Preventive inspections, corrective work, versioned relationships, assignments, and status history | Production planning retains schedule authority and supplies bounded downtime context |
| Parts reservations, transfer movements, installed and returned quantities, and operational cost provenance | Procurement and enterprise inventory retain purchasing, supplier, receipt, valuation, and enterprise stock authority |
| Technician readings, photographs, procedure evidence, deviations, labour, completion review, and return-to-service decisions | External isolation, permit, lockout, competent-person, and physical safety procedures remain mandatory |
| Migration batches, mappings, validation, reconciliation, exceptions, cutover evidence, and rollback evidence | Identity providers authenticate people; HR retains employment and competency records |
| Organisation-, site-, asset-, work-, cost-, migration-, export-, and audit-scoped access decisions | No browser role or AI output grants authority in an adjacent domain |
This is a MaintainX replacement with a disciplined perimeter. The boundary follows the complete maintenance operation rather than the incumbent's product catalogue.
Project stats
| Measure | Week 14 evidence |
|---|---|
| SwarmCraft project | Asset Maintenance |
| Planned implementation scope | 65 tasks |
| Final board state | 65 Done; zero Todo, Doing, Checking, Reviewing, blocked, or manual-review tasks |
| Build runner | OpenAI Codex CLI |
| Agent executions | 65 |
| Build-lane runtime | 9h 52m 7.6s |
| Target repository | 515 tracked files and 52,060 tracked text lines after evidence and design-system recovery |
| Repository history | 65 task commits plus two reviewed evidence and design-system commits after the baseline |
| Database | PostgreSQL 17 with 14 versioned Flyway migrations |
| Unit and component verification | 167 API tests and 35 web tests passing |
| Service-boundary verification | 52 PostgreSQL integration tests passing |
| Browser verification | 24 Playwright scenarios passing, including six axe-tagged accessibility checks |
| Maintained product evidence | 17 deterministic screenshots |
| Delivery target | Customer-managed cloud environment |
The initial driver completed every selected task in 65 agent requests. A later human-directed recovery fixed one ambiguous database trigger, repaired brittle browser assertions, established a repository-native design system, regenerated all screenshot evidence, and brought every recorded test tier to green on 6 September 2026.

This is a substantial production-shaped foundation, not evidence of a completed customer cutover. The target has no live MaintainX account, customer mappings, production identity configuration, industrial connector, model provider, object store, or rehearsed production recovery environment. Those are named adoption tasks on top of an implemented and tested operational boundary.
The asset maintenance workflow we built
The story follows one Packaging Line 3 conveyor drive from evidence to repair and then through a late-event reconciliation.
Eight actors have distinct responsibilities.
| Role | Responsibility in the owned operation |
|---|---|
| Production line operator or maintenance requester | Reports permitted symptoms and follows related work without seeing restricted cost or audit data |
| Maintenance technician | Executes assigned work, records readings and procedure evidence, and submits completion without approving downtime or return to service |
| Reliability engineer | Interprets observations, relates preventive and corrective work, dispositions AI advice, and decides how late evidence should be reconciled |
| Maintenance planner | Coordinates scope, skill, parts readiness, procedure version, and the requested downtime window |
| Production supervisor and downtime approver | Approves, rejects, reschedules, delegates, or lets a downtime decision expire |
| Storeroom and inter-site parts coordinator | Reserves, dispatches, receives, installs, returns, releases, and reconciles exact quantities |
| Maintenance manager and return-to-service approver | Reviews technical completion and records the separate maintenance return-to-service disposition |
| Organisation administrator, migration operator, or auditor | Governs access, migration evidence, cutover readiness, exports, and append-only decision history |
Asset maintenance workflow steps
The implemented asset maintenance process follows this sequence:
- Establish the canonical conveyor-drive identity, hierarchy, criticality, lifecycle, external references, effective maintenance plan, threshold versions, and procedure versions.
- Admit each telemetry delivery as immutable raw evidence with a source identifier, sequence, observed time, unit, value, quality, and delivery identity.
- Preserve both deliveries when a retry occurs, but create only one governed observation for the same source event.
- Evaluate that observation under the threshold and suppression versions effective at its original
observedAttime. - Open one anomaly and surface the already-open preventive inspection without merging its lifecycle into corrective work.
- Let bounded AI summarise cited readings, history, procedure context, likely fault, missing evidence, and candidate parts.
- Require the reliability engineer to consider or dismiss that advice and separately create governed corrective work with a reason, priority, required skill, procedure version, and evidence contract.
- Reserve the bearing at its source site, dispatch and receive the cross-site transfer, and preserve quantity, decimal scale, operational unit cost, currency, valuation date, and source provenance.
- Request a downtime window with asset criticality, current condition, scope, parts readiness, duration estimate, and consequence.
- Allow the assigned technician to start only after the part, procedure, evidence requirements, and approved window are visible.
- Capture readings, procedure steps, photographs, findings, failure code, labour, downtime, installed and returned parts, notes, and deviations.
- Reject incomplete completion submissions without changing authoritative work state.
- Record maintenance approval of technical completion and a distinct authorised return-to-service decision.
- Consume the installed bearing transactionally, release unused quantity, and retain operational cost provenance.
- Accept the late vibration observation after repair, evaluate it under historical rules, and route it to reconciliation without silently reopening the asset or creating another work order.
- Append the reconciliation decision and preserve the complete source-time-ordered asset history.
These asset maintenance workflow steps form a practical asset maintenance workflow template: delivery is not observation, observation is not anomaly, anomaly is not work, AI advice is not diagnosis, completion is not return to service, and a late event is not permission to rewrite history.
One event arrived twice, but work happened once
The first browser journey retains the original vibration delivery, a second delivery of the same source event, and an exact replay. It then shows the one governed observation and the threshold evaluation that produced one anomaly.

The distinction matters for connected maintenance. MaintainX's own webhook guidance tells integrators to acknowledge quickly, process asynchronously, implement retries, and make handlers idempotent. The owned API goes further by preserving the raw delivery attempts while suppressing duplicate consequences. It can explain both what arrived and why only one item of governed work followed.
The preventive inspection remains related but separate. A reliability engineer can decide that it supplies enough scope, link it to corrective work, or record why new corrective work is required. A shared asset does not collapse two different purposes into one generic work order.
AI assists diagnosis without acquiring authority
The AI surface receives an allow-listed evidence packet. Each output section must cite the supplied evidence identifiers and carry explicit uncertainty, provider, model version, and prompt version. Unknown citations, unexpected fields, missing uncertainty, and language that claims approval or machine-control authority are rejected.

The reliability engineer can record that the advice was considered or dismissed. That disposition does not approve a bearing diagnosis, create work, reserve a part, approve downtime, complete a repair, or return the conveyor drive to service. Deterministic code and accountable people retain those powers.
That is the useful AI distinction for this asset management workflow. AI compresses the reading work across telemetry, history, procedures, related work, and parts context. It does not become the maintenance system of record.
The repair is a governed chain, not a green status
The corrective path joins several records without allowing one to impersonate another:
- the bearing reservation and cross-site transfer retain exact movement and provenance;
- production approves a bounded downtime window;
- only the assigned technician can start and submit the work;
- completion eligibility is recalculated by the API from persisted evidence;
- maintenance reviews technical completion; and
- return to service is requested and decided separately.

The browser also proves the failure path. A missing photograph, wrong reading unit, incomplete procedure step, absent parts evidence, or missing reason produces a deterministic completion_ineligible response. The rejected attempt remains visible and work stays in progress. A browser button cannot manufacture eligibility.
Return to service is deliberately narrow. It is the maintenance operation's recorded disposition after approved completion and acknowledged external prerequisites. It does not start the conveyor, override isolation, or claim physical safety.
Late evidence does not rewrite a completed repair
The final twist is an older source observation that arrives after completion. The API accepts the distinct observation, marks it late and out of order, evaluates it against the versions effective at the time it occurred, and appends a review-required reconciliation with automaticAssetAction: none.

The reliability engineer can record that it was already covered, new evidence, a sensor fault, or a separate anomaly. Until that governed decision occurs, the system does not reopen the asset, duplicate the repair, or revise an earlier decision.
This is where an owned equipment maintenance workflow earns its value. The current state remains readable, while the full append-only history can still answer what happened, when the source says it happened, when the application learned about it, which rules applied, and whose decision changed the operation.
Migrating amounts is part of migrating authority
The migration workspace is one of the strongest parts of the build because it refuses to reduce the MaintainX replacement to record counts.
The inventory covers sites, locations, hierarchy, identifiers, criticality, procedures and versions, preventive maintenance, meters and readings, requests, work relationships, parts, files, users, roles, integrations, open exceptions, and audit references. Each export records its identity and time, schema version, file hashes, row and attachment counts, currencies, decimal scales, relationships, unsupported fields, and known limitations.

The parallel comparison then places retained source values beside proposed canonical records. It samples status history, hierarchy, file integrity, exact quantities, amounts with currencies, and open relationships. An unresolved parent mapping or amount mismatch stays visible instead of being coerced into a plausible-looking destination.

The tested presentation carries amount migration explicitly:
- quantities use decimal rather than binary floating-point semantics;
- unit, scale, and source authority travel with every quantity;
- money retains currency, precision, valuation date, and source provenance;
- reconciliation compares amount totals by currency rather than inventing a converted grand total; and
- operational maintenance cost never pretends to be an accounting-ledger balance.
The cutover surface remains blocked until required comparisons, exception dispositions, and governing decisions exist. Its disabled action is not decorative; Playwright asserts that missing authority cannot be supplied by the browser.

The designed transition uses one writer at every moment: inventory, dry runs, correction, repeatable reruns, parallel comparison, a source-side write freeze, final delta import, reconciliation, explicit activation, integration redirect, monitored operation, and retained rollback evidence. The current target implements the read-only migration and comparison contract plus the browser proof. Live extraction, customer mapping, canonical migration writes, durable activation records, and production execution still require customer-specific implementation and rehearsal.
What the custom asset maintenance operation includes
| Capability | Week 14 implementation | Next responsible work for live operation |
|---|---|---|
| Canonical assets | Stable asset identity, lifecycle history, external identifiers, and effective-dated same-site hierarchy | Load and verify the customer's agreed asset population, criticality, lifecycle, and hierarchy rules |
| Observation intake | Immutable raw deliveries, governed observations, duplicate and replay disposition, source-time ordering, and reconciliation | Connect and certify real telemetry contracts, field limits, units, service levels, and replay retention |
| Anomaly evaluation | Versioned thresholds and suppression windows selected at observed time | Approve customer thresholds, sensor quality rules, suppression policy, and accountable owners |
| Preventive and corrective work | Separate lifecycles, versioned relationships, governed assignment, and append-only status history | Configure customer plans, priorities, skills, escalation, and service expectations |
| AI advisory | Durable provider boundary, allow-listed cited evidence, structured output validation, uncertainty, provenance, and human disposition | Select a provider, configure secrets, evaluate models, define freshness policy, and monitor quality |
| Parts coordination | Exact reservations, releases, transfers, installed and returned quantities, decimal cost provenance, and retry-safe commands | Integrate approved catalogue, stock, procurement, and finance-reference contracts |
| Downtime and execution | Human downtime decisions, technician-only execution, evidence-gated completion, completion review, and return-to-service disposition | Encode local procedures, delegation, competency, isolation, permit, safety, and production prerequisites |
| Migration | Inventory, deterministic source adapter, mapping and validation evidence, parallel comparison, exceptions, cutover and rollback presentation | Implement customer extraction, mappings, writes, activation controls, rehearsals, reconciliation thresholds, and retirement |
| Security and audit | Opaque sessions, server-side permissions, safe denials, immutable audit evidence, and organisation/site/record scoping | Configure production OIDC, access reviews, retention, threat modelling, penetration testing, and audit export |
| Operations | Health and readiness separation, durable recovery contracts, CI gates, containers, Kubernetes reference, and runbooks | Select cloud services, compose durable repositories and adapters, load test, deploy, restore-test, and operate |
Technology implemented
| Layer | Week 14 implementation |
|---|---|
| Browser application | React 19, TypeScript 5.9, and Vite 6 with responsive maintenance, migration, role-preview, decision-history, and failure-state surfaces |
| Design system | Repository-native typed foundations, semantic status language, reusable components, accessibility guidance, and a standalone review workbench |
| API | Native Node.js modular application with server-authoritative workflow and provider-neutral ports |
| Persistence | PostgreSQL 17 and 14 versioned Flyway migrations, including database-enforced immutable and append-only rules |
| Reliability | Stable source identities, idempotent commands and consumers, transactional-outbox boundaries, retry, timeout, dead-letter, health, and recovery states |
| AI boundary | Structured cited outputs, field-level context control, provider and prompt provenance, schema checks, authority-language rejection, and retained disposition history |
| Security | OIDC-ready and local authentication composition, opaque sessions, server-side authorisation, scoped audit events, and safe structured logging |
| Delivery | pnpm monorepo, separate non-root production images, Docker Compose, customer-managed Kubernetes reference, CI evidence gates, and operational runbooks |
| Verification | Node test runner, Vitest, PostgreSQL integration fixtures, Playwright, axe-core, deterministic screenshots, and design-system build |
What the browser evidence proves
The maintained browser and API-backed system evidence covers:
- duplicate and replay deliveries producing one governed observation;
- source-time threshold selection and one anomaly;
- separate preventive and corrective work lifecycles;
- cited AI advice with no authoritative side effect;
- exact parts reservation and cross-site transfer;
- downtime, technician evidence, completion, and return-to-service gates;
- rejected incomplete completion with unchanged work state;
- a late observation routed to reconciliation with no silent reopen;
- server-side access denial with unchanged protected records;
- degraded telemetry intake followed by exactly-once recovery;
- migration inventory, exception ownership, parallel comparison, amounts, quantities, files, cutover readiness, and rollback evidence;
- responsive layout at 390 pixels; and
- six representative axe-tagged accessibility checks.
The screenshots use deterministic fictional data. They prove what the target implements and what the tests assert. They do not prove a Harbourline Foods deployment, a live MaintainX migration, legal compliance, physical machine safety, or achieved production recovery objectives.
How SwarmCraft structured the build
SwarmCraft created the 65-task Asset Maintenance project before implementation. The plan moved from living discovery records and repository foundations through identity, permissions, PostgreSQL, canonical assets, observations, anomaly rules, preventive and corrective work, parts, governed execution, migration, browser evidence, accessibility, production packaging, CI, observability, cutover, and recovery.
That sequence matters. The design did not begin with a dashboard and add authority later. Stable identity, record classification, history, permissions, amounts, and failure semantics were established before the user-facing maintenance and migration surfaces that depend on them.
The post-build design-system pass corrected an equally important weakness. The initial interface had grown feature by feature without one visual consumer contract. The recovered target now declares a single design-system entry point, typed exports, semantic colours, status language, spacing and typography foundations, accessibility rules, an inventory, adoption guidance, and a runnable workbench. The refreshed screenshots therefore show one calm industrial operating language rather than a pile of locally styled AI-generated panels.
What this says about AI-built workflow software
AI contributed in two different places, and they should not be confused.
First, an AI build agent turned a detailed operational scenario into 65 independently completed tasks across product code, database migrations, tests, infrastructure, and runbooks. The output became credible only when repository evidence, database constraints, browser assertions, and human review exposed and repaired its gaps.
Second, the product contains a bounded AI advisory surface. It can retrieve approved context and prepare a cited diagnostic briefing. It cannot change a canonical asset, set a threshold, approve its own diagnosis, create authoritative work without a governed rule or human decision, approve downtime, consume stock, close work, return equipment to service, or issue an industrial-control command.
That separation is the opportunity. AI can make a specialised owned API and interface economically practical, then assist inside the operation without becoming its authority.
Replace the record, then own the responsibility
The Week 14 result is not a nicer request form around MaintainX. It is an owned maintenance operation with one canonical asset identity and one reproducible path from machine evidence to accountable work.
The replacement becomes credible when the organisation can answer these questions from its own records:
- Which asset did the evidence belong to?
- Which source event arrived, how many delivery attempts occurred, and which observation became governed?
- Which rule versions were effective at the event's source time?
- Why did preventive and corrective work remain related but separate?
- What did AI suggest, which evidence did it cite, and what did a person decide?
- Which part quantity moved, at what operational unit cost and currency, and with what provenance?
- Who approved downtime, completion, and return to service for their separate purposes?
- What changed when late evidence arrived—and what deliberately did not?
- Did every migrated record, relationship, file, quantity, amount, currency, open state, and sampled history reconcile?
- At the activation instant, which system was the sole writer and what evidence supports recovery if cutover fails?
Owning those answers is what turns asset maintenance automation into an asset maintenance system of record.
Use Deep Discovery to plan the MaintainX replacement
A MaintainX replacement crosses source inventory, asset identity, history, telemetry, work, parts, amounts, access, integrations, cutover, continuity, and operational responsibility. Deep Discovery is the route for mapping those records and controls into a coherent owned operation. It is currently available through a limited account-enabled rollout.
The goal is not another maintenance dashboard. It is a complete asset maintenance workflow that the organisation can operate, explain, recover, and improve on its own terms.
