ace-test-runner-e2e 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ace-defaults/e2e-runner/config.yml +70 -0
- data/.ace-defaults/nav/protocols/guide-sources/ace-test-runner-e2e.yml +11 -0
- data/.ace-defaults/nav/protocols/skill-sources/ace-test-runner-e2e.yml +19 -0
- data/.ace-defaults/nav/protocols/tmpl-sources/ace-test-runner-e2e.yml +12 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-test-runner-e2e.yml +11 -0
- data/CHANGELOG.md +1166 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +15 -0
- data/exe/ace-test-e2e +15 -0
- data/exe/ace-test-e2e-sh +67 -0
- data/exe/ace-test-e2e-suite +13 -0
- data/handbook/guides/e2e-testing.g.md +124 -0
- data/handbook/guides/scenario-yml-reference.g.md +182 -0
- data/handbook/guides/tc-authoring.g.md +131 -0
- data/handbook/skills/as-e2e-create/SKILL.md +30 -0
- data/handbook/skills/as-e2e-fix/SKILL.md +35 -0
- data/handbook/skills/as-e2e-manage/SKILL.md +31 -0
- data/handbook/skills/as-e2e-plan-changes/SKILL.md +30 -0
- data/handbook/skills/as-e2e-review/SKILL.md +35 -0
- data/handbook/skills/as-e2e-rewrite/SKILL.md +31 -0
- data/handbook/skills/as-e2e-run/SKILL.md +48 -0
- data/handbook/skills/as-e2e-setup-sandbox/SKILL.md +34 -0
- data/handbook/templates/ace-taskflow-fixture.template.md +322 -0
- data/handbook/templates/agent-experience-report.template.md +89 -0
- data/handbook/templates/metadata.template.yml +49 -0
- data/handbook/templates/scenario.yml.template.yml +60 -0
- data/handbook/templates/tc-file.template.md +45 -0
- data/handbook/templates/test-report.template.md +94 -0
- data/handbook/workflow-instructions/e2e/analyze-failures.wf.md +126 -0
- data/handbook/workflow-instructions/e2e/create.wf.md +395 -0
- data/handbook/workflow-instructions/e2e/execute.wf.md +253 -0
- data/handbook/workflow-instructions/e2e/fix.wf.md +166 -0
- data/handbook/workflow-instructions/e2e/manage.wf.md +179 -0
- data/handbook/workflow-instructions/e2e/plan-changes.wf.md +255 -0
- data/handbook/workflow-instructions/e2e/review.wf.md +286 -0
- data/handbook/workflow-instructions/e2e/rewrite.wf.md +281 -0
- data/handbook/workflow-instructions/e2e/run.wf.md +355 -0
- data/handbook/workflow-instructions/e2e/setup-sandbox.wf.md +461 -0
- data/lib/ace/test/end_to_end_runner/atoms/display_helpers.rb +234 -0
- data/lib/ace/test/end_to_end_runner/atoms/prompt_builder.rb +199 -0
- data/lib/ace/test/end_to_end_runner/atoms/result_parser.rb +166 -0
- data/lib/ace/test/end_to_end_runner/atoms/skill_prompt_builder.rb +166 -0
- data/lib/ace/test/end_to_end_runner/atoms/skill_result_parser.rb +244 -0
- data/lib/ace/test/end_to_end_runner/atoms/suite_report_prompt_builder.rb +103 -0
- data/lib/ace/test/end_to_end_runner/atoms/tc_fidelity_validator.rb +39 -0
- data/lib/ace/test/end_to_end_runner/atoms/test_case_parser.rb +108 -0
- data/lib/ace/test/end_to_end_runner/cli/commands/run_suite.rb +130 -0
- data/lib/ace/test/end_to_end_runner/cli/commands/run_test.rb +156 -0
- data/lib/ace/test/end_to_end_runner/models/test_case.rb +47 -0
- data/lib/ace/test/end_to_end_runner/models/test_result.rb +115 -0
- data/lib/ace/test/end_to_end_runner/models/test_scenario.rb +90 -0
- data/lib/ace/test/end_to_end_runner/molecules/affected_detector.rb +92 -0
- data/lib/ace/test/end_to_end_runner/molecules/config_loader.rb +75 -0
- data/lib/ace/test/end_to_end_runner/molecules/failure_finder.rb +203 -0
- data/lib/ace/test/end_to_end_runner/molecules/fixture_copier.rb +35 -0
- data/lib/ace/test/end_to_end_runner/molecules/pipeline_executor.rb +121 -0
- data/lib/ace/test/end_to_end_runner/molecules/pipeline_prompt_bundler.rb +182 -0
- data/lib/ace/test/end_to_end_runner/molecules/pipeline_report_generator.rb +321 -0
- data/lib/ace/test/end_to_end_runner/molecules/pipeline_sandbox_builder.rb +131 -0
- data/lib/ace/test/end_to_end_runner/molecules/progress_display_manager.rb +172 -0
- data/lib/ace/test/end_to_end_runner/molecules/report_writer.rb +259 -0
- data/lib/ace/test/end_to_end_runner/molecules/scenario_loader.rb +254 -0
- data/lib/ace/test/end_to_end_runner/molecules/setup_executor.rb +181 -0
- data/lib/ace/test/end_to_end_runner/molecules/simple_display_manager.rb +72 -0
- data/lib/ace/test/end_to_end_runner/molecules/suite_progress_display_manager.rb +223 -0
- data/lib/ace/test/end_to_end_runner/molecules/suite_report_writer.rb +277 -0
- data/lib/ace/test/end_to_end_runner/molecules/suite_simple_display_manager.rb +116 -0
- data/lib/ace/test/end_to_end_runner/molecules/test_discoverer.rb +136 -0
- data/lib/ace/test/end_to_end_runner/molecules/test_executor.rb +332 -0
- data/lib/ace/test/end_to_end_runner/organisms/suite_orchestrator.rb +830 -0
- data/lib/ace/test/end_to_end_runner/organisms/test_orchestrator.rb +442 -0
- data/lib/ace/test/end_to_end_runner/version.rb +9 -0
- data/lib/ace/test/end_to_end_runner.rb +71 -0
- metadata +220 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-manage
|
|
3
|
+
description: Orchestrate the 3-stage E2E test lifecycle pipeline (review → plan → rewrite)
|
|
4
|
+
# bundle: wfi://e2e/manage
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
- Write
|
|
11
|
+
- Glob
|
|
12
|
+
- Grep
|
|
13
|
+
- Skill
|
|
14
|
+
argument-hint: "<package> [--dry-run] [--run-tests]"
|
|
15
|
+
last_modified: 2026-02-11
|
|
16
|
+
source: ace-test-runner-e2e
|
|
17
|
+
integration:
|
|
18
|
+
targets:
|
|
19
|
+
- claude
|
|
20
|
+
- codex
|
|
21
|
+
- gemini
|
|
22
|
+
- opencode
|
|
23
|
+
- pi
|
|
24
|
+
providers: {}
|
|
25
|
+
skill:
|
|
26
|
+
kind: workflow
|
|
27
|
+
execution:
|
|
28
|
+
workflow: wfi://e2e/manage
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
Load and run `ace-bundle wfi://e2e/manage` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-plan-changes
|
|
3
|
+
description: Analyze coverage matrix and produce a concrete E2E test change plan
|
|
4
|
+
# bundle: wfi://e2e/plan-changes
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
- Skill
|
|
13
|
+
argument-hint: "<package> [--review-report <path>] [--scope <scenario-id>]"
|
|
14
|
+
last_modified: 2026-02-11
|
|
15
|
+
source: ace-test-runner-e2e
|
|
16
|
+
integration:
|
|
17
|
+
targets:
|
|
18
|
+
- claude
|
|
19
|
+
- codex
|
|
20
|
+
- gemini
|
|
21
|
+
- opencode
|
|
22
|
+
- pi
|
|
23
|
+
providers: {}
|
|
24
|
+
skill:
|
|
25
|
+
kind: workflow
|
|
26
|
+
execution:
|
|
27
|
+
workflow: wfi://e2e/plan-changes
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Load and run `ace-bundle wfi://e2e/plan-changes` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-review
|
|
3
|
+
description: Deep exploration producing a coverage matrix of functionality, unit tests, and E2E tests
|
|
4
|
+
# bundle: wfi://e2e/review
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
argument-hint: "<package> [--scope <scenario-id>]"
|
|
13
|
+
last_modified: 2026-02-11
|
|
14
|
+
source: ace-test-runner-e2e
|
|
15
|
+
integration:
|
|
16
|
+
targets:
|
|
17
|
+
- claude
|
|
18
|
+
- codex
|
|
19
|
+
- gemini
|
|
20
|
+
- opencode
|
|
21
|
+
- pi
|
|
22
|
+
providers: {}
|
|
23
|
+
assign:
|
|
24
|
+
source: wfi://e2e/review
|
|
25
|
+
steps:
|
|
26
|
+
- name: verify-e2e
|
|
27
|
+
description: Review E2E coverage for modified packages and run targeted scenarios
|
|
28
|
+
tags: [testing, e2e, verification]
|
|
29
|
+
skill:
|
|
30
|
+
kind: workflow
|
|
31
|
+
execution:
|
|
32
|
+
workflow: wfi://e2e/review
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
Load and run `ace-bundle wfi://e2e/review` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-rewrite
|
|
3
|
+
description: Execute a change plan — delete, create, modify, and consolidate E2E tests
|
|
4
|
+
# bundle: wfi://e2e/rewrite
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
- Write
|
|
11
|
+
- Glob
|
|
12
|
+
- Grep
|
|
13
|
+
- Skill
|
|
14
|
+
argument-hint: "<package> [--plan <path>] [--dry-run]"
|
|
15
|
+
last_modified: 2026-02-11
|
|
16
|
+
source: ace-test-runner-e2e
|
|
17
|
+
integration:
|
|
18
|
+
targets:
|
|
19
|
+
- claude
|
|
20
|
+
- codex
|
|
21
|
+
- gemini
|
|
22
|
+
- opencode
|
|
23
|
+
- pi
|
|
24
|
+
providers: {}
|
|
25
|
+
skill:
|
|
26
|
+
kind: workflow
|
|
27
|
+
execution:
|
|
28
|
+
workflow: wfi://e2e/rewrite
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
Load and run `ace-bundle wfi://e2e/rewrite` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-run
|
|
3
|
+
description: Execute an E2E test scenario
|
|
4
|
+
# bundle: wfi://e2e/run
|
|
5
|
+
# agent: general-purpose
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Bash(ace-bundle:*)
|
|
9
|
+
- Read
|
|
10
|
+
- Write
|
|
11
|
+
- Glob
|
|
12
|
+
- Grep
|
|
13
|
+
argument-hint: "[package] [test-id] [--run-id ID] [--sandbox PATH] [--env K=V]"
|
|
14
|
+
last_modified: 2026-02-11
|
|
15
|
+
source: ace-test-runner-e2e
|
|
16
|
+
skill:
|
|
17
|
+
kind: workflow
|
|
18
|
+
execution:
|
|
19
|
+
workflow: wfi://e2e/run
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<!-- Route to the appropriate workflow based on arguments -->
|
|
23
|
+
<!-- --sandbox present → focused execution workflow (pre-populated sandbox) -->
|
|
24
|
+
<!-- --sandbox absent → full workflow (locate, setup, execute) -->
|
|
25
|
+
|
|
26
|
+
If `$ARGUMENTS` contains `--sandbox`:
|
|
27
|
+
read and run `ace-bundle wfi://e2e/execute`
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Otherwise:
|
|
31
|
+
|
|
32
|
+
read and run `ace-bundle wfi://e2e/run`
|
|
33
|
+
|
|
34
|
+
ARGUMENTS: $ARGUMENTS
|
|
35
|
+
|
|
36
|
+
## Execution Context
|
|
37
|
+
|
|
38
|
+
- `/as-e2e-run ...` is a chat slash command, not a shell command.
|
|
39
|
+
- Do **not** run `/ace-...` in bash (this causes `command not found` and no reports).
|
|
40
|
+
- If slash commands are unavailable in the current environment, report that limitation explicitly in `Issues`.
|
|
41
|
+
|
|
42
|
+
## Subagent Return Contract
|
|
43
|
+
|
|
44
|
+
When invoked as a subagent (via a batch orchestrator such as `/as-assign-run-in-batches`), return a structured summary instead of verbose output:
|
|
45
|
+
|
|
46
|
+
Return `Test ID`, `Status`, `Passed`, `Failed`, `Total`, `Report Paths`, and `Issues`.
|
|
47
|
+
|
|
48
|
+
Do NOT include full report contents. Reports are written to disk; return only paths and summary counts for aggregation by the orchestrator.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: as-e2e-setup-sandbox
|
|
3
|
+
description: Standardized sandbox setup for safe E2E tests with external APIs
|
|
4
|
+
# bundle: wfi://e2e/setup-sandbox
|
|
5
|
+
# context: no-fork
|
|
6
|
+
# agent: general-purpose
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools:
|
|
9
|
+
- Bash(ace-bundle:*)
|
|
10
|
+
- Bash(ace-test:*)
|
|
11
|
+
- Bash(ace-nav:*)
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
- Edit
|
|
15
|
+
- Grep
|
|
16
|
+
- Glob
|
|
17
|
+
argument-hint: [test-id | scenario]
|
|
18
|
+
last_modified: 2026-02-01
|
|
19
|
+
source: ace-test-runner-e2e
|
|
20
|
+
integration:
|
|
21
|
+
targets:
|
|
22
|
+
- claude
|
|
23
|
+
- codex
|
|
24
|
+
- gemini
|
|
25
|
+
- opencode
|
|
26
|
+
- pi
|
|
27
|
+
providers: {}
|
|
28
|
+
skill:
|
|
29
|
+
kind: workflow
|
|
30
|
+
execution:
|
|
31
|
+
workflow: wfi://e2e/setup-sandbox
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
Load and run `ace-bundle wfi://e2e/setup-sandbox` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: template
|
|
3
|
+
title: ACE Taskflow Test Fixture Template
|
|
4
|
+
purpose: Documentation for ace-test-runner-e2e/handbook/templates/ace-taskflow-fixture.template.md
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-02-25
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ACE Taskflow Test Fixture Template
|
|
11
|
+
|
|
12
|
+
This template provides scaffolding for E2E tests that need valid ace-taskflow structures.
|
|
13
|
+
|
|
14
|
+
## Basic Task Fixture
|
|
15
|
+
|
|
16
|
+
Create a minimal valid taskflow structure:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Create release directory structure
|
|
20
|
+
mkdir -p "$REPO_DIR/.ace-taskflow/v.test/tasks/001-feature"
|
|
21
|
+
|
|
22
|
+
# Create a valid task file
|
|
23
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/tasks/001-feature/001-test-task.s.md" << 'EOF'
|
|
24
|
+
---
|
|
25
|
+
id: v.test+task.001
|
|
26
|
+
status: pending
|
|
27
|
+
priority: medium
|
|
28
|
+
estimate: 1h
|
|
29
|
+
dependencies: []
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# Test Task Title
|
|
33
|
+
|
|
34
|
+
## Objective
|
|
35
|
+
|
|
36
|
+
This is a test task for E2E testing purposes.
|
|
37
|
+
|
|
38
|
+
## Implementation Plan
|
|
39
|
+
|
|
40
|
+
### Execution Steps
|
|
41
|
+
|
|
42
|
+
- [ ] Step 1: First action
|
|
43
|
+
- [ ] Step 2: Second action
|
|
44
|
+
|
|
45
|
+
## Acceptance Criteria
|
|
46
|
+
|
|
47
|
+
- [ ] Criterion 1
|
|
48
|
+
- [ ] Criterion 2
|
|
49
|
+
EOF
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Task with Worktree Metadata
|
|
53
|
+
|
|
54
|
+
For tests involving ace-git-worktree:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/tasks/001-feature/001-test-task.s.md" << 'EOF'
|
|
58
|
+
---
|
|
59
|
+
id: v.test+task.001
|
|
60
|
+
status: in-progress
|
|
61
|
+
priority: medium
|
|
62
|
+
estimate: 1h
|
|
63
|
+
dependencies: []
|
|
64
|
+
worktree:
|
|
65
|
+
branch: 001-test-task
|
|
66
|
+
path: "../project-task.001"
|
|
67
|
+
created_at: '2026-01-15 10:00:00'
|
|
68
|
+
updated_at: '2026-01-15 10:00:00'
|
|
69
|
+
target_branch: main
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
# Test Task with Worktree
|
|
73
|
+
|
|
74
|
+
## Objective
|
|
75
|
+
|
|
76
|
+
Task with worktree metadata for worktree-related E2E tests.
|
|
77
|
+
|
|
78
|
+
## Implementation Plan
|
|
79
|
+
|
|
80
|
+
### Execution Steps
|
|
81
|
+
|
|
82
|
+
- [ ] Step 1: Work in worktree
|
|
83
|
+
|
|
84
|
+
## Acceptance Criteria
|
|
85
|
+
|
|
86
|
+
- [ ] Worktree created
|
|
87
|
+
EOF
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Parent Task with Subtasks (Orchestrator)
|
|
91
|
+
|
|
92
|
+
For tests involving task hierarchies:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Create parent task directory
|
|
96
|
+
mkdir -p "$REPO_DIR/.ace-taskflow/v.test/tasks/100-parent-feature"
|
|
97
|
+
|
|
98
|
+
# Create orchestrator task
|
|
99
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/tasks/100-parent-feature/100-orchestrator.s.md" << 'EOF'
|
|
100
|
+
---
|
|
101
|
+
id: v.test+task.100
|
|
102
|
+
status: pending
|
|
103
|
+
priority: high
|
|
104
|
+
estimate: 8h
|
|
105
|
+
dependencies: []
|
|
106
|
+
subtasks:
|
|
107
|
+
- 100.01
|
|
108
|
+
- 100.02
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# Parent Feature Task
|
|
112
|
+
|
|
113
|
+
## Objective
|
|
114
|
+
|
|
115
|
+
Orchestrator task that coordinates subtasks.
|
|
116
|
+
|
|
117
|
+
## Subtasks
|
|
118
|
+
|
|
119
|
+
- 100.01: First subtask
|
|
120
|
+
- 100.02: Second subtask
|
|
121
|
+
|
|
122
|
+
## Acceptance Criteria
|
|
123
|
+
|
|
124
|
+
- [ ] All subtasks completed
|
|
125
|
+
EOF
|
|
126
|
+
|
|
127
|
+
# Create first subtask
|
|
128
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/tasks/100-parent-feature/100.01-first-subtask.s.md" << 'EOF'
|
|
129
|
+
---
|
|
130
|
+
id: v.test+task.100.01
|
|
131
|
+
status: pending
|
|
132
|
+
priority: medium
|
|
133
|
+
estimate: 2h
|
|
134
|
+
dependencies: []
|
|
135
|
+
parent: 100
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# First Subtask
|
|
139
|
+
|
|
140
|
+
## Objective
|
|
141
|
+
|
|
142
|
+
First part of the parent feature.
|
|
143
|
+
|
|
144
|
+
## Implementation Plan
|
|
145
|
+
|
|
146
|
+
- [ ] Implement first component
|
|
147
|
+
|
|
148
|
+
## Acceptance Criteria
|
|
149
|
+
|
|
150
|
+
- [ ] First component done
|
|
151
|
+
EOF
|
|
152
|
+
|
|
153
|
+
# Create second subtask
|
|
154
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/tasks/100-parent-feature/100.02-second-subtask.s.md" << 'EOF'
|
|
155
|
+
---
|
|
156
|
+
id: v.test+task.100.02
|
|
157
|
+
status: pending
|
|
158
|
+
priority: medium
|
|
159
|
+
estimate: 2h
|
|
160
|
+
dependencies:
|
|
161
|
+
- 100.01
|
|
162
|
+
parent: 100
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
# Second Subtask
|
|
166
|
+
|
|
167
|
+
## Objective
|
|
168
|
+
|
|
169
|
+
Second part of the parent feature, depends on first.
|
|
170
|
+
|
|
171
|
+
## Implementation Plan
|
|
172
|
+
|
|
173
|
+
- [ ] Implement second component
|
|
174
|
+
|
|
175
|
+
## Acceptance Criteria
|
|
176
|
+
|
|
177
|
+
- [ ] Second component done
|
|
178
|
+
EOF
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Release Configuration
|
|
182
|
+
|
|
183
|
+
For tests that need a complete release setup:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Create release.yml
|
|
187
|
+
cat > "$REPO_DIR/.ace-taskflow/v.test/release.yml" << 'EOF'
|
|
188
|
+
id: v.test
|
|
189
|
+
title: Test Release
|
|
190
|
+
status: active
|
|
191
|
+
started: 2026-01-01
|
|
192
|
+
EOF
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Complete Test Setup Example
|
|
196
|
+
|
|
197
|
+
Combining all patterns:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Create isolated git repository
|
|
201
|
+
REPO_DIR="$TEST_DIR/test-repo"
|
|
202
|
+
mkdir -p "$REPO_DIR"
|
|
203
|
+
cd "$REPO_DIR"
|
|
204
|
+
git init --quiet .
|
|
205
|
+
git config user.email "test@example.com"
|
|
206
|
+
git config user.name "Test User"
|
|
207
|
+
|
|
208
|
+
# Create taskflow structure
|
|
209
|
+
mkdir -p .ace-taskflow/v.test/tasks/001-feature
|
|
210
|
+
|
|
211
|
+
# Create release configuration
|
|
212
|
+
cat > .ace-taskflow/v.test/release.yml << 'EOF'
|
|
213
|
+
id: v.test
|
|
214
|
+
title: Test Release
|
|
215
|
+
status: active
|
|
216
|
+
started: 2026-01-01
|
|
217
|
+
EOF
|
|
218
|
+
|
|
219
|
+
# Create task
|
|
220
|
+
cat > .ace-taskflow/v.test/tasks/001-feature/001-test-task.s.md << 'EOF'
|
|
221
|
+
---
|
|
222
|
+
id: v.test+task.001
|
|
223
|
+
status: pending
|
|
224
|
+
priority: medium
|
|
225
|
+
estimate: 1h
|
|
226
|
+
dependencies: []
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
# Test Task
|
|
230
|
+
|
|
231
|
+
## Objective
|
|
232
|
+
|
|
233
|
+
Test task for E2E testing.
|
|
234
|
+
|
|
235
|
+
## Implementation Plan
|
|
236
|
+
|
|
237
|
+
- [ ] Do something
|
|
238
|
+
|
|
239
|
+
## Acceptance Criteria
|
|
240
|
+
|
|
241
|
+
- [ ] Done
|
|
242
|
+
EOF
|
|
243
|
+
|
|
244
|
+
# Commit the structure
|
|
245
|
+
git add .ace-taskflow/
|
|
246
|
+
git commit -m "Add taskflow structure" --quiet
|
|
247
|
+
|
|
248
|
+
# Set PROJECT_ROOT_PATH for isolated testing
|
|
249
|
+
export PROJECT_ROOT_PATH="$REPO_DIR"
|
|
250
|
+
|
|
251
|
+
# Now ace-taskflow commands will use this isolated structure
|
|
252
|
+
# ace-task show 001 # Should find the test task
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## YAML Frontmatter Reference
|
|
256
|
+
|
|
257
|
+
### Required Fields
|
|
258
|
+
|
|
259
|
+
| Field | Type | Description |
|
|
260
|
+
|-------|------|-------------|
|
|
261
|
+
| `id` | string | Task ID in format `v.{version}+task.{number}` |
|
|
262
|
+
| `status` | enum | One of: `pending`, `in-progress`, `done`, `blocked` |
|
|
263
|
+
| `priority` | enum | One of: `high`, `medium`, `low` |
|
|
264
|
+
|
|
265
|
+
### Optional Fields
|
|
266
|
+
|
|
267
|
+
| Field | Type | Description |
|
|
268
|
+
|-------|------|-------------|
|
|
269
|
+
| `estimate` | string | Time estimate (e.g., `2h`, `1d`) |
|
|
270
|
+
| `dependencies` | array | Task IDs this task depends on |
|
|
271
|
+
| `parent` | string | Parent task number for subtasks |
|
|
272
|
+
| `subtasks` | array | Child task numbers for orchestrators |
|
|
273
|
+
| `worktree` | object | Worktree metadata if task uses worktree |
|
|
274
|
+
|
|
275
|
+
### Status Values
|
|
276
|
+
|
|
277
|
+
- `pending` - Not started
|
|
278
|
+
- `in-progress` - Currently being worked on
|
|
279
|
+
- `done` - Completed
|
|
280
|
+
- `blocked` - Cannot proceed due to external blocker
|
|
281
|
+
|
|
282
|
+
## Common Patterns
|
|
283
|
+
|
|
284
|
+
### Testing Task Selection
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
# Verify ace-taskflow can find the task
|
|
288
|
+
ace-task show 001
|
|
289
|
+
# Should output task details
|
|
290
|
+
|
|
291
|
+
# Verify task file path
|
|
292
|
+
ace-task show 001 --path
|
|
293
|
+
# Should output: .ace-taskflow/v.test/tasks/001-feature/001-test-task.s.md
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Testing Status Updates
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# Create task in pending state
|
|
300
|
+
# ... create task fixture ...
|
|
301
|
+
|
|
302
|
+
# Mark as in-progress
|
|
303
|
+
ace-task start 001
|
|
304
|
+
# Verify status changed
|
|
305
|
+
|
|
306
|
+
# Mark as done
|
|
307
|
+
ace-task done 001
|
|
308
|
+
# Verify status changed
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Testing Worktree Integration
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Create task with worktree metadata
|
|
315
|
+
# ... create task fixture with worktree ...
|
|
316
|
+
|
|
317
|
+
# Create corresponding worktree
|
|
318
|
+
git worktree add "../project-task.001" -b 001-test-task
|
|
319
|
+
|
|
320
|
+
# Verify worktree detection
|
|
321
|
+
ace-git-worktree list
|
|
322
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: template
|
|
3
|
+
title: "Agent Experience Report: {test-id}"
|
|
4
|
+
purpose: Documentation for ace-test-runner-e2e/handbook/templates/agent-experience-report.template.md
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-02-14
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Experience Report: {test-id}
|
|
11
|
+
|
|
12
|
+
## Summary
|
|
13
|
+
|
|
14
|
+
{Brief 2-3 sentence summary of the test execution experience. Note overall friction level: smooth, minor issues, significant friction, or blocking issues. If no friction was encountered, state "No significant friction encountered" and briefly note what worked well.}
|
|
15
|
+
|
|
16
|
+
## Friction Points
|
|
17
|
+
|
|
18
|
+
| Severity | Category | Issue | Suggested Fix |
|
|
19
|
+
|----------|----------|-------|---------------|
|
|
20
|
+
| high/medium/low | docs/tool/cli | {Brief description} | {Actionable fix} |
|
|
21
|
+
|
|
22
|
+
### Documentation Gaps
|
|
23
|
+
|
|
24
|
+
{List any documentation that was missing, unclear, incomplete, or outdated. Include specific files/sections where improvements would help.}
|
|
25
|
+
|
|
26
|
+
- {Documentation gap 1}
|
|
27
|
+
- {Documentation gap 2}
|
|
28
|
+
|
|
29
|
+
### Tool Behavior Issues
|
|
30
|
+
|
|
31
|
+
{Describe any unexpected tool behavior, confusing error messages, or surprising results. Include the command and what was unexpected.}
|
|
32
|
+
|
|
33
|
+
- {Tool issue 1}
|
|
34
|
+
- {Tool issue 2}
|
|
35
|
+
|
|
36
|
+
### API/CLI Friction
|
|
37
|
+
|
|
38
|
+
{Note any API or CLI friction: inconsistent flags, missing options, awkward workflows, or verbose output.}
|
|
39
|
+
|
|
40
|
+
- {CLI friction 1}
|
|
41
|
+
- {CLI friction 2}
|
|
42
|
+
|
|
43
|
+
## Root Cause Analysis
|
|
44
|
+
|
|
45
|
+
{For any failures or significant friction, analyze WHY the issue occurred, not just WHAT happened. Consider: missing validation, unclear error messages, documentation gaps, design decisions, edge cases.}
|
|
46
|
+
|
|
47
|
+
### {Issue 1 Title}
|
|
48
|
+
|
|
49
|
+
**What happened:** {Description}
|
|
50
|
+
**Why it happened:** {Root cause analysis}
|
|
51
|
+
**Impact:** {How it affected test execution}
|
|
52
|
+
|
|
53
|
+
## Improvement Suggestions
|
|
54
|
+
|
|
55
|
+
{Concrete, actionable suggestions for improving the developer/agent experience. Prioritize by impact.}
|
|
56
|
+
|
|
57
|
+
### High Priority
|
|
58
|
+
|
|
59
|
+
- [ ] {Suggestion 1}
|
|
60
|
+
- [ ] {Suggestion 2}
|
|
61
|
+
|
|
62
|
+
### Medium Priority
|
|
63
|
+
|
|
64
|
+
- [ ] {Suggestion 3}
|
|
65
|
+
|
|
66
|
+
### Low Priority
|
|
67
|
+
|
|
68
|
+
- [ ] {Suggestion 4}
|
|
69
|
+
|
|
70
|
+
## Workarounds Used
|
|
71
|
+
|
|
72
|
+
{Document any workarounds the agent had to employ to complete the test. These indicate areas needing improvement.}
|
|
73
|
+
|
|
74
|
+
- **Issue:** {What required a workaround}
|
|
75
|
+
**Workaround:** {What was done instead}
|
|
76
|
+
|
|
77
|
+
## Positive Observations
|
|
78
|
+
|
|
79
|
+
{Note what worked well, was well-documented, or provided good DX. This helps identify patterns to replicate.}
|
|
80
|
+
|
|
81
|
+
- {Positive observation 1}
|
|
82
|
+
- {Positive observation 2}
|
|
83
|
+
|
|
84
|
+
## Recommendations for Test Scenario
|
|
85
|
+
|
|
86
|
+
{Suggestions for improving this specific test scenario based on execution experience.}
|
|
87
|
+
|
|
88
|
+
- {Recommendation 1}
|
|
89
|
+
- {Recommendation 2}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# E2E Test Run Metadata
|
|
2
|
+
# Generated by ace-test-runner-e2e workflow
|
|
3
|
+
|
|
4
|
+
# Run identification
|
|
5
|
+
run-id: "{run-id}"
|
|
6
|
+
test-id: "{test-id}"
|
|
7
|
+
package: "{package}"
|
|
8
|
+
|
|
9
|
+
# Per-TC identification (TS-format)
|
|
10
|
+
scenario_id: "{scenario-id}" # TS-{AREA}-{NNN} for TS-format, null for MT-format
|
|
11
|
+
tc_id: "{tc-id}" # TC-{NNN} for per-TC execution, null for full scenario
|
|
12
|
+
tc_independent: false # true if TC can run in isolation without prior state
|
|
13
|
+
setup_method: "agent" # "agent" (agent-driven) or "deterministic" (Ruby SetupExecutor)
|
|
14
|
+
|
|
15
|
+
# Execution details
|
|
16
|
+
agent: "{agent-name}"
|
|
17
|
+
started: "{start-timestamp}" # ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
|
|
18
|
+
completed: "{end-timestamp}" # ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
|
|
19
|
+
duration: "{duration-seconds}s"
|
|
20
|
+
|
|
21
|
+
# Test results
|
|
22
|
+
status: "pass|fail|partial|incomplete"
|
|
23
|
+
results:
|
|
24
|
+
passed: 0
|
|
25
|
+
failed: 0
|
|
26
|
+
total: 0
|
|
27
|
+
|
|
28
|
+
# Git context
|
|
29
|
+
git:
|
|
30
|
+
branch: "{branch-name}"
|
|
31
|
+
commit: "{commit-sha}"
|
|
32
|
+
dirty: false
|
|
33
|
+
|
|
34
|
+
# Tool versions
|
|
35
|
+
tools:
|
|
36
|
+
ruby: "{ruby-version}"
|
|
37
|
+
# Add other relevant tool versions
|
|
38
|
+
# standardrb: "{version}"
|
|
39
|
+
# rubocop: "{version}"
|
|
40
|
+
|
|
41
|
+
# Environment
|
|
42
|
+
environment:
|
|
43
|
+
os: "{os-name}"
|
|
44
|
+
arch: "{architecture}"
|
|
45
|
+
|
|
46
|
+
# Cleanup status
|
|
47
|
+
cleanup:
|
|
48
|
+
enabled: false
|
|
49
|
+
completed: false
|