The OPM language
OPL sentences
OPL, the Object-Process Language, says the board in sentences, one fact per sentence. Spoletta writes the OPL of every board as you draw it. It is the fastest way to check a flow says what you meant.
Reading a flow's OPL
Press OPL in the board's toolbar. The panel lists the sentences, with Refresh and Copy. Objects come first, then processes from top to bottom as the board places them, then the start, the end, and each zoomed board indented beneath its flow process.
Release manager is a person.
Release exhibits version and previous.
Notes can be approved, changes requested or rejected.
Pick release is a human process, which a person carries out.
Release manager handles Pick release.
Pick release has a person fill in Release.
Draft is an agent process, which an AI agent carries out.
Draft takes Release.
Draft yields Notes.
Approve is a human process, which a person carries out.
Release manager handles Approve.
Approve decides whether Notes is approved, changes requested or rejected.
Revise is an agent process, which an AI agent carries out.
Notes entering changes requested triggers Revise.
Revise yields Notes.
Post is an agent process, which an AI agent carries out.
Notes entering approved triggers Post.
The flow starts with Pick release.
Why it matters
- Checking. Mistakes show up as missing or surprising sentences. No The flow starts with… means no start; an agent that takes something no sentence says is generated or filled in will get it empty.
- Agents. Tick Tell it about the flow it works in, in OPL on an agent and its prompt includes the flow's OPL, so it knows where its step fits.
- Designing. Write a flow as sentences first and read them to whoever asked for it. People check sentences far more easily than diagrams.
Every sentence
| Construct | Sentence |
|---|---|
| person | Editor is a person. |
| list | Exceptions is a list of items, at least 1. |
| specialization | Bug is a Ticket. |
| stored | Exceptions is stored, so each run keeps what it generated of it. |
| shared | Exception is shared, so every flow using it reads and writes the same records. |
| states | Post can be good or weak. |
| rule | Ticket is urgent when priority <= 2. |
| attributes | Ticket exhibits key and summary. |
| aggregated parts | Release consists of a list of Change. |
| kind | Fix is an agent process, which an AI agent carries out. |
| procedure | Triage is a procedure, which runs the flow Triage ticket. |
| agent link | Editor handles Review. |
| event | Post entering weak triggers Write. |
| condition | Fix occurs if Ticket is bug, and is skipped otherwise. |
| instrument | Fix requires Guide, which it doesn't change. |
| consumption | Ship consumes Token. |
| query | Summarize looks up the latest 5 stored records of Review in approved where score >= 4. |
| plain input | Fix takes Exception. |
| review | Critic decides whether Post is good or weak. |
| decided output | Triage yields Ticket as bug or feature, deciding which. |
| entry | Request has a person fill in Ticket. |
| effect | Edit affects Notes. |
| output in a state | Draft yields Notes as draft. |
| output | Fix yields Patch. |
| quorum | Summarize needs 2 of what it takes, and is skipped once it can't get them. |
| rounds | Critic runs at most 3 rounds. |
| timeout | Fix fails after 900 seconds. |
| retries | Fix is tried again up to 2 times when it fails. |
| failure | Escalate handles a failure of Fix. |
| next | Open PR follows Fix. |
| start | The flow starts with Request. |
| end objects | The flow ends with Report. |
| zoom | Each exception zooms into: |