Skip to content

Validation

Epilogue Tracker includes a validation command that checks your work model for completeness and consistency.

Running Validation

bash
et validate

Successful output:

Validation Report
=================

Loaded: 3 actor(s), 8 goal(s), 15 interaction(s), 4 journey(s)

✓ No issues found. All relationships are valid.

What Gets Validated

Actors

CheckTypeDescription
Has goalsWarningActor should have at least one goal assigned
Goals existErrorReferenced goals must exist

Goals

CheckTypeDescription
Has actorWarningGoal should be linked to an actor (orphan check)
Actor existsErrorReferenced actor must exist
Has interactionsWarningGoal should have interactions supporting it

Interactions

CheckTypeDescription
Has goalWarningInteraction should link to a goal
Goal existsErrorReferenced goal must exist
Actor existsErrorperformed_by actor must exist

Journeys

CheckTypeDescription
Actor existsErrorReferenced actor must exist
Goal existsErrorReferenced goal must exist
Steps existErrorAll interaction steps must exist
Goal alignmentWarningGoal's actor should match journey's actor
Step alignmentWarningStep's performed_by should match journey's actor

Understanding Output

Errors vs Warnings

Errors indicate broken references: something points to an entity that doesn't exist:

Errors:
  ✗ [goal/checkout] References non-existent actor 'customer'
  ✗ [journey/flow] References non-existent interaction step 'missing'

Errors cause et validate to exit with code 1.

Warnings indicate potential issues: things that work but might not be intentional:

Warnings:
  ! [actor/admin] Actor has no goals assigned
  ! [interaction/api_call] Interaction is not linked to any goal
  ! [goal/orphan] Goal is not linked to any actor (orphan goal)

Warnings don't affect the exit code.

JSON Output

For programmatic use:

bash
et validate --json
json
{
  "valid": false,
  "issues": [
    {
      "type": "error",
      "entity": "goal",
      "id": "checkout",
      "message": "References non-existent actor 'missing_actor'"
    },
    {
      "type": "warning",
      "entity": "interaction",
      "id": "orphan_task",
      "message": "Interaction is not linked to any goal"
    }
  ],
  "summary": {
    "actors": 2,
    "goals": 5,
    "interactions": 10,
    "journeys": 2,
    "errors": 1,
    "warnings": 1
  }
}

Fixing Common Issues

Orphan Goals

Warning: goal 'feedback' is not linked to any actor

Fix by assigning an actor:

bash
et update goal feedback --actor customer

Unlinked Interactions

Warning: interaction 'api_call' is not linked to any goal

Fix by linking to a goal:

bash
et update interaction api_call --goal relevant_goal

Or if there's no relevant goal, create one:

bash
et create goal --id "new_goal" --description "..." --actor "..."
et update interaction api_call --goal new_goal

Missing References

Error: goal 'checkout' references non-existent actor 'old_customer'

Fix by updating the reference:

bash
et update goal checkout --actor customer

Or create the missing entity:

bash
et create actor --id "old_customer" --name "..." --description "..."

Journey Misalignment

Warning: journey 'checkout_flow' - Step 'admin_action' is performed by 'admin', not journey actor 'customer'

This might be intentional (some journeys involve multiple actors) or might indicate an error. Review and either:

  • Update the interaction's performed_by if it's wrong
  • Accept the warning if the cross-actor step is intentional

CI/CD Integration

Use validation in your CI pipeline:

bash
#!/bin/bash
et validate
if [ $? -ne 0 ]; then
  echo "Validation failed! Fix errors before merging."
  exit 1
fi

Best Practices

  1. Run validation often: After any changes to the model
  2. Fix errors immediately: Broken references cause problems
  3. Review warnings: They often indicate work without clear user value
  4. Validate before commits: Keep the model healthy in version control

Next Steps

Work matters when it helps real people achieve their goals.