Three issues prevented the behave suite from running:
1. plan_persistence_steps.py and plan_repository_steps.py both defined
@then('the retrieved plan description should be "..."'), causing an
AmbiguousStep error that broke all ~50 feature files. Renamed the
persistence step to "the persisted plan description should be".
2. The three-level hierarchy scenario used plan IDs containing O, I,
and L which are excluded from the ULID charset. Replaced with valid
characters (O->0, I->0, L->K).
3. resource_repository_steps.py flushed but never committed the edge
row, so the delete method's separate session could not see it.