Renames `plan lifecycle-list` to `plan list` and `plan lifecycle-apply` to `plan apply` to align with the specification's canonical command names. Removes legacy V2 plan commands that occupied those names.
- Renamed CLI command registrations from lifecycle-list/lifecycle-apply to list/apply
- Removed legacy V2 apply and list commands (~200 lines)
- Updated apply shortcut in main.py to delegate to v3 lifecycle
- Added defensive null check for plan existence in apply command
- Updated 63+ test, doc, and benchmark files for consistency
Closes#881
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Implement WF04 E2E test coverage for multi-project dependency update
using the supervised automation profile. A parent plan targets four
projects (common-lib + 3 services), spawns child subplans per project,
executes in dependency order, validates per project, and applies in
dependency order.
Key components:
- Robot test (robot/e2e/wf04_multi_project.robot): full supervised
workflow exercising plan use, strategize, execute, validate, apply,
and final status. JSON output parsing via raw_decode for resilience.
Test-level guard skips the entire test (visible SKIPPED in CI) when
the LLM produces zero subplans, preventing silent AC-4/5/6/7 bypass.
Count Decision Nodes keyword delegates to the Python helper to avoid
duplicating recursive tree-walking logic.
- Snapshot helper (robot/e2e/wf04_snapshot_helper.py): collects
deterministic parent/subplan metadata from the lifecycle service.
Timestamps normalised to UTC. Depth-guarded count_decision_nodes()
function (max_depth=50) for safe reuse from Robot keywords.
sys.path.append (not insert) to avoid shadowing the standard library.
- Behave unit tests (features/wf04_snapshot_helper.feature + steps):
17 scenarios covering _iso(), _enum_value(), count_decision_nodes(),
and _build_snapshot() with mocked lifecycle service. Includes tests
for no-subplans (verifies plan_id, project_scopes, validation_summary),
with-subplans (verifies concrete mapped project names and subplan_count),
child-plan-is-None (verifies empty-string defaults), unmapped resources,
and exact-match aware-datetime UTC normalisation.
ISSUES CLOSED: #750