Files
freemo c4f71e930d
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 21s
CI / build (pull_request) Successful in 23s
CI / typecheck (pull_request) Successful in 39s
CI / security (pull_request) Successful in 50s
CI / integration_tests (pull_request) Successful in 4m4s
CI / unit_tests (pull_request) Successful in 9m15s
CI / docker (pull_request) Successful in 1m0s
CI / benchmark-regression (pull_request) Successful in 23m41s
CI / coverage (pull_request) Successful in 43m24s
CI / lint (push) Successful in 22s
CI / build (push) Successful in 24s
CI / quality (push) Successful in 27s
CI / typecheck (push) Successful in 44s
CI / benchmark-regression (push) Has been skipped
CI / security (push) Successful in 55s
CI / integration_tests (push) Successful in 4m16s
CI / benchmark-publish (push) Successful in 14m39s
CI / unit_tests (push) Successful in 24m24s
CI / docker (push) Successful in 1m1s
CI / coverage (push) Successful in 45m36s
feat(concurrency): add plan resume
Implement step-level progress persistence and plan resume with graceful
shutdown handling.

- Add ResumeCheckpoint, ResumeMetadata, ResumeEligibility, ResumeSummary
  domain models (resume.py)
- Add PlanResumeService with validate_eligibility(), build_resume_summary(),
  resume_plan(dry_run), record_step_checkpoint(), record_shutdown()
- Add last_completed_step and last_checkpoint_id fields to Plan model
- Add 'plan resume' CLI command with --dry-run flag
- Update plan lifecycle docs (ADR-006) with resume behavior section
- Add Behave tests (24 scenarios in plan_resume.feature)
- Add Robot Framework integration tests (10 tests)
- Add ASV benchmarks for resume overhead

Closes #328
2026-02-25 14:00:04 -05:00

82 lines
4.0 KiB
Plaintext

*** Settings ***
Documentation Integration tests for plan resume functionality.
... Covers resume eligibility validation, checkpoint recording,
... dry-run preview, live resume, and graceful shutdown.
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER_SCRIPT} robot/helper_plan_resume.py
*** Test Cases ***
Resume Eligibility For Errored Plan
[Documentation] Verify errored plans are eligible for resume
[Tags] resume eligibility critical
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} eligibility-errored cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} eligibility-errored-ok
Resume Eligibility Rejects Terminal Plans
[Documentation] Verify applied/cancelled/constrained plans cannot be resumed
[Tags] resume eligibility terminal
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} eligibility-terminal cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} eligibility-terminal-ok
Record Step Checkpoints
[Documentation] Verify step-level checkpoints are recorded correctly
[Tags] resume checkpoint
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} record-checkpoints cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} record-checkpoints-ok
Dry Run Resume Shows Resume Point
[Documentation] Verify dry-run shows resume summary without changing state
[Tags] resume dry-run
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} dry-run-resume cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} dry-run-resume-ok
Live Resume Resets Errored Plan
[Documentation] Verify live resume transitions errored plan to processing
[Tags] resume live critical
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} live-resume cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} live-resume-ok
Graceful Shutdown Recording
[Documentation] Verify graceful shutdown marks metadata as interrupted
[Tags] resume shutdown
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} graceful-shutdown cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} graceful-shutdown-ok
Resume Metadata Properties
[Documentation] Verify ResumeMetadata model computed properties
[Tags] resume model
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} metadata-properties cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} metadata-properties-ok
Resume Summary CLI Dictionary
[Documentation] Verify ResumeSummary.as_cli_dict() returns correct keys
[Tags] resume cli
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} summary-cli-dict cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} summary-cli-dict-ok
Resume Validation Errors
[Documentation] Verify proper error handling for invalid inputs
[Tags] resume errors
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} validation-errors cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} validation-errors-ok
Resume Checkpoint With Sandbox Ref
[Documentation] Verify checkpoint records sandbox reference correctly
[Tags] resume checkpoint sandbox
${result}= Run Process ${PYTHON} ${HELPER_SCRIPT} checkpoint-sandbox cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} checkpoint-sandbox-ok