Reference case · second domain
Coding agent
The second domain tests whether Lyotic is only Systead’s architecture. The objects and effects are different: an issue, code, failing events, a patch. The contract is the same, and the same resolver runs it.
Illustrative, not a real repository. Press Choose on the recommended option and Approve v2 inside the object; CI finishes on its own.
Mapping the model
| Lyotic | Inventory case | Coding case |
|---|---|---|
| Work Object | Item A2 across ERP, Excel, Shopify, Amazon | Issue #812 across GitHub, Sentry, Support |
| Observation | Field values with meanings | A support ticket, 212 error events, the stored coupon, a line of code |
| Claim | “These four numbers are the same quantity” | “The coupon has expired” (the agent’s), “Lookup is case-sensitive” (the code’s) |
| Proposed Action | Mapping rule v3 | Patch v2 on fix/coupon-case |
| Authority | Ops may edit mappings; delegated to fix the sync relation | Writable branch and file scope; merge and deploy are not delegated |
| Execution | Per marketplace | Push to the branch; the CI run |
| Verification | Read-backs; reservations not observable | Named tests and the full suite; the reporter’s checkout not observable |
Five results, never one
| Result | Axis | At the end of the walk |
|---|---|---|
| Patch applied | Execution | |
| Named tests passed | Verification, scoped | |
| Review approved | Authority of a different action (merge) | |
| Deployed | A different action, not delegated | |
| Reporter’s problem solved | Verification outside the observable scope |
Tests passing does not let the interface say the user’s problem is solved. The resolver keeps the Case open while open loops remain, allows the scoped word verified, and still forbids resolved. That is the test of generalisation: not the same component names in another field, but the same distinctions and contracts working there.
Run it
import { resolve } from '@lyotic/core';
import { buildSteps } from '@lyotic/core/fixtures/coding-case';
buildSteps().map((s) => [s.id, resolve(s.state).mode, resolve(s.state).work]);
// compare/open · decide/awaiting-judgment · authorize · execute · verify · compact/open