Demo

The sources' own worked example, run by a reference engine. Not a product.

What you are looking at

Every business application tracks objects through a lifecycle: a customer is signed up, then verified, then active. Almost every system does that with a status column somebody's code has to keep right.

PMDA does it the other way round. An object's State is computed from its data, by rule: an Artist with a createdDate is a Created Artist, one with an activatedDate is Active. Nothing is stored, so nothing goes stale. And every change to an object passes through one gate declared in the model: a Filter says when an Operation is offered, Derivations fill in values, Conditions say what the result must satisfy.

This page runs the sources' own worked example against a small engine that implements exactly what the specification currently says. Pick a scenario, then change anything and watch both panels recompute.

Data determines State; an Operation passes through a gate to reach a new State State is computed createdDate ✓ activatedDate ✓ artisticName ✓ Created Artist has a createdDate Active Artist has an activatedDate Every Operation passes one gate Create Artefact Filter Derive Conditions Guarantee Created Artefact

Why it matters

One model decides, not scattered code.
What is allowed, what is required and what is filled in are all declared next to the object they govern. Change the model and the application follows. shown below
Status is never stale.
There is no status column to migrate or reconcile; an object is whatever its data says it is. shown below
Every refusal names its rule.
A rejected change carries the Condition that rejected it, in the message the model author wrote. shown below
Replayable, deterministic behaviour.
The method's headline claim. Not yet provable as written: the sources leave one rule undefined and two formulas read the clock. Both are on this page. open, Q-G-0001, Q-G-0034

Pick a scenario

Each one sets the data, the Operation and the Authorization, then runs. Everything below stays editable afterwards; the moment you change something it is your scenario.

State is computed, never stored

The engine holds no status field. It reads the object's data against each State's restriction and reports every State that holds. Edit the data on the right and the set on the left recomputes.

computing…

    Its data

    The names and dates are the demo's own; no source gives instance data. Only the model is Guil's.

    Relations

    Every transition passes through the same gate

    An Operation is a request to move an object to a State. The gate below is the method's answer, step by step. Click a step to read what it checked.

    No transcribed table pairs an Operation with the State it achieves; the pairing in the Operation list is read off the sources' naming convention (Create → Created, Instantiate → New, Activate → Active). Q-G-0041.

    What the sources leave open

    A reference implementation surfaces what prose hides. Four things this page shows that the blog and the patent do not settle:

    • Which State an object is in when several restrictions hold. The State panel shows the set; the repair previews show the two candidate rules. Q-G-0001.
    • Whether the example can be replayed. Both worked Derivation formulas read the clock or the acting user, so the demo makes you supply them. Q-G-0034.
    • Five Conditions that attach to nothing. The source spells their State "Create Artist" and "CreatedUser"; no State has either name. Q-G-0042.
    • Five Conditions that cannot be evaluated. Their "enforces property" cell holds a State name instead. Q-G-0040.

    The model, as transcribed

    Show the four tables the engine runs against

    Parsed from the three figure transcripts, not retyped. Every row links to the cell it was read from; a row marked UNCERTAIN is a cell the transcript itself could not read with confidence, and one marked RECONSTRUCTED is our extrapolation, not a source.

    Verification status of the three source transcripts: conditions-validates-state (unverified), derivation-garantees-states (unverified), filter-and-operations (unverified). No human has re-read the source images against any of the transcribed text below. An UNCERTAIN mark is the transcriber's own flag, raised at transcription time — it is not the product of a review. The absence of a mark is not verification. An unmarked row has not been checked any more than a marked one; it simply was not flagged as uncertain by whoever transcribed it. See /evidence for the verification ladder in full.

    States

    NameThingRestrictionsSource
    New Artist Artist has no createdDate BLG:business-capability-definition-using-pciml-in-detail
    Created Artist Artist has createdDate BLG:business-capability-definition-using-pciml-in-detail
    Active Artist Artist has activatedDate BLG:business-capability-definition-using-pciml-in-detail
    New User User has no createdDate RECONSTRUCTED — not in any source
    Created User User has createdDate RECONSTRUCTED — not in any source
    New Artefact Artefact has no createdDate RECONSTRUCTED — not in any source
    Created Artefact Artefact has createdDate RECONSTRUCTED — not in any source

    Filters

    IDOperationSubjectPredicateObjectSource
    Filter 1Create Artist New Artist IMG:filter-and-operations#r3
    Filter 2Instantiate User Created Artist IMG:filter-and-operations#r4
    Filter 3Create User Created ArtisthasUser New User IMG:filter-and-operations#r5
    Filter 4Activate Artist Created ArtisthasUser Created User IMG:filter-and-operations#r6
    Filter 5Instantiate Artefact Active Artist IMG:filter-and-operations#r7
    Filter 6Create Artefact Active ArtistisAuthorOf New Artefact IMG:filter-and-operations#r8
    Filter 7Publish Artefact Active ArtistisAuthorOf Created Artefact IMG:filter-and-operations#r9

    Conditions

    NameTarget StateTypeEnforcesSource
    New Artist requires artistID New Artist Error artistID IMG:conditions-validates-state#r3
    Created Artist requires firstName Create Artistno State of this name — nearest "Created Artist". Q-G-0042 Error firstName IMG:conditions-validates-state#r4 UNCERTAIN
    Created Artist requires lastName Create Artistno State of this name — nearest "Created Artist". Q-G-0042 Error lastName IMG:conditions-validates-state#r5 UNCERTAIN
    Created Artist requires artisticName Create Artistno State of this name — nearest "Created Artist". Q-G-0042 Error artisticName IMG:conditions-validates-state#r6 UNCERTAIN
    Active Artist requires hasUser Active Artist Error hasUser IMG:conditions-validates-state#r7
    Created User requires userName CreatedUserno State of this name — nearest "Created User". Q-G-0042 Error userName IMG:conditions-validates-state#r8 UNCERTAIN
    Created User requires password CreatedUserno State of this name — nearest "Created User". Q-G-0042 Error password IMG:conditions-validates-state#r9 UNCERTAIN
    New Artefact requires artefactID New Artefact Error New Artefactnames a State, not a property — unevaluable, Q-G-0040 IMG:conditions-validates-state#r10 UNCERTAIN
    CreatedArtefact requires hasPhoto Created Artefact Error Created Artefactnames a State, not a property — unevaluable, Q-G-0040 IMG:conditions-validates-state#r11 UNCERTAIN
    CreatedArtefact requires isTaggedWith Created Artefact Warning Created Artefactnames a State, not a property — unevaluable, Q-G-0040 IMG:conditions-validates-state#r12 UNCERTAIN
    CreatedArtefact requires artefactName Created Artefact Error Created Artefactnames a State, not a property — unevaluable, Q-G-0040 IMG:conditions-validates-state#r13 UNCERTAIN
    CreatedArtefact requires artefactDescription Created Artefact Error Created Artefactnames a State, not a property — unevaluable, Q-G-0040 IMG:conditions-validates-state#r14 UNCERTAIN

    Derivations

    NameTarget StateFormulaWrites Enforced OnSource
    CreatedDate Default ValueCreated Artefact afn:now() ambient — breaks replay, Q-G-0034 createdDateArtistandArtefactPublishingAuthorization IMG:derivation-garantees-states#r3 UNCERTAIN
    CreatedBy Default ValueCreated Artefact pmda:User() ambient — breaks replay, Q-G-0034 createdByArtistandArtefactPublishingAuthorization IMG:derivation-garantees-states#r4 UNCERTAIN