@tea-agent/loop-agent 0.26.0 → 0.26.1
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.
- package/CHANGELOG.md +1032 -1020
- package/README.md +8 -3
- package/bin/loop-agent.js +21 -21
- package/dist/cli/command-definitions.js +25 -10
- package/dist/cli/help.js +4 -3
- package/dist/cli/program.js +43 -17
- package/dist/commands/cursor-prompt.js +6 -6
- package/dist/commands/import-prd.js +7 -2
- package/dist/commands/init.js +7 -5
- package/dist/commands/loop-benchmark.js +11 -11
- package/dist/commands/pi-reuse-benchmark.js +16 -16
- package/dist/commands/task-source-prepare.js +468 -0
- package/dist/executors/dag-pi-executor.js +40 -5
- package/dist/executors/shell-write-guard.js +161 -25
- package/dist/sidecars/cursor-prompt/executor.js +1 -1
- package/dist/task/source-prepare/build-draft.js +215 -0
- package/dist/task/source-prepare/completeness.js +195 -0
- package/dist/task/source-prepare/index.js +7 -0
- package/dist/task/source-prepare/parse-intent.js +373 -0
- package/dist/task/source-prepare/path-policy.js +197 -0
- package/dist/task/source-prepare/prepare.js +506 -0
- package/dist/task/source-prepare/reference-integrity.js +274 -0
- package/dist/task/source-prepare/types.js +7 -0
- package/dist/worker/observe/static/copy.js +67 -67
- package/dist/worker/observe/static/dag-layout.d.ts +31 -31
- package/dist/worker/observe/static/dag-layout.js +83 -83
- package/dist/worker/observe/static/dom.js +220 -220
- package/dist/worker/observe/static/relations.js +133 -133
- package/dist/worker/observe/static/router.js +93 -93
- package/dist/worker/observe/static/run-processing.js +148 -148
- package/dist/worker/observe/static/views/batch.js +227 -227
- package/dist/worker/observe/static/views/dag-graph.js +172 -172
- package/dist/worker/observe/static/views/failures.js +143 -143
- package/dist/worker/observe/static/views/feature.js +492 -492
- package/dist/worker/observe/static/views/run.js +453 -453
- package/dist/worker/observe/static/views/shell.js +7 -7
- package/dist/worker/observe/static/views/timeline.js +163 -163
- package/dist/workflows/dag/canvas-observer.js +275 -275
- package/docs/skills/README.md +7 -7
- package/docs/templates/adr.md +60 -60
- package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
- package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
- package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
- package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
- package/docs/templates/agent-dag-report.schema.json +473 -473
- package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
- package/docs/templates/backend-test-result.schema.json +99 -99
- package/docs/templates/feature-spec.md +53 -53
- package/docs/templates/frontend-design-contract.md +42 -42
- package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -17
- package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -16
- package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -16
- package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -16
- package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -16
- package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -16
- package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -21
- package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -29
- package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -28
- package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -28
- package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -29
- package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -27
- package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -28
- package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -28
- package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -27
- package/docs/templates/frontend-eval/metrics.md +138 -138
- package/docs/templates/frontend-eval/smoke-targets.md +53 -53
- package/docs/templates/frontend-task-constraints.md +35 -35
- package/docs/templates/frontend-task-requirement.md +70 -70
- package/docs/templates/init-evolution-review.md +35 -35
- package/docs/templates/init-managed-agents.md +10 -5
- package/docs/templates/interactive-ui-round2-experiment.md +66 -66
- package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
- package/docs/templates/knowledge-sync-dag.json +178 -178
- package/docs/templates/knowledge-sync-draft.schema.json +71 -71
- package/docs/templates/product-line/closeout.yaml +9 -9
- package/docs/templates/product-line/design.md +13 -13
- package/docs/templates/product-line/links.md +10 -10
- package/docs/templates/product-line/requirement.md +17 -17
- package/docs/templates/product-line/test-plan.md +7 -7
- package/docs/templates/production-readiness-checklist.md +57 -57
- package/docs/templates/project-start-checklist.md +9 -9
- package/docs/templates/qa-report.md +48 -48
- package/docs/templates/sprint-contract.md +29 -29
- package/docs/templates/worker-dogfood-evidence.md +80 -80
- package/docs/templates/worker-dogfood-setup.md +68 -68
- package/package.json +1 -1
- package/scripts/kb-bootstrap-init-skeleton.sh +0 -0
- package/scripts/kb-graph-incremental-prepare.mjs +386 -386
- package/scripts/kb-graph-materialize.mjs +105 -105
- package/scripts/kb-graph-promote.mjs +164 -164
- package/scripts/kb-query.mjs +554 -554
- package/skills/ai-engineering-context/SKILL.md +48 -48
- package/skills/analyze-product-dependencies/SKILL.md +67 -67
- package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
- package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
- package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
- package/skills/analyze-product-dependencies/references/example.md +76 -76
- package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
- package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
- package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
- package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
- package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
- package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
- package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
- package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
- package/skills/analyze-product-requirements/SKILL.md +90 -90
- package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
- package/skills/analyze-product-requirements/references/example.md +86 -86
- package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
- package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
- package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
- package/skills/browser-tools/browser-content.js +103 -103
- package/skills/browser-tools/browser-cookies.js +35 -35
- package/skills/browser-tools/browser-eval.js +53 -53
- package/skills/browser-tools/browser-hn-scraper.js +108 -108
- package/skills/browser-tools/browser-nav.js +44 -44
- package/skills/browser-tools/browser-pick.js +162 -162
- package/skills/browser-tools/browser-screenshot.js +34 -34
- package/skills/browser-tools/browser-start.js +86 -86
- package/skills/browser-tools/package-lock.json +2556 -2556
- package/skills/browser-tools/package.json +19 -19
- package/skills/code-review-core/SKILL.md +20 -20
- package/skills/codebase-scout/SKILL.md +19 -19
- package/skills/grill-me/SKILL.md +10 -10
- package/skills/loop-agent/SKILL.md +5 -2
- package/skills/loop-agent/references/README.md +67 -67
- package/skills/loop-agent/references/command-reference.md +17 -15
- package/skills/loop-agent/references/docs-converge.md +126 -126
- package/skills/loop-agent/references/harness-policy.md +3 -4
- package/skills/loop-agent/references/learned/README.md +21 -21
- package/skills/loop-agent/references/long-running-loop.md +57 -57
- package/skills/loop-agent/references/one-shot-runs.md +85 -85
- package/skills/loop-agent/references/pi-prompt.md +23 -23
- package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
- package/skills/loop-agent/references/post-implementation-and-patterns.md +1 -1
- package/skills/loop-agent/references/source-and-plan-practice.md +3 -2
- package/skills/loop-agent/references/task-workflow.md +7 -5
- package/skills/playwright-cli/SKILL.md +420 -420
- package/skills/playwright-cli/references/element-attributes.md +23 -23
- package/skills/playwright-cli/references/playwright-tests.md +39 -39
- package/skills/playwright-cli/references/request-mocking.md +87 -87
- package/skills/playwright-cli/references/running-code.md +241 -241
- package/skills/playwright-cli/references/session-management.md +225 -225
- package/skills/playwright-cli/references/storage-state.md +275 -275
- package/skills/playwright-cli/references/test-generation.md +433 -433
- package/skills/playwright-cli/references/tracing.md +139 -139
- package/skills/playwright-cli/references/video-recording.md +143 -143
- package/skills/requesting-code-review/SKILL.md +101 -101
- package/skills/requesting-code-review/code-reviewer.md +168 -168
- package/skills/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/systematic-debugging/find-polluter.sh +63 -63
- package/skills/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/systematic-debugging/test-academic.md +14 -14
- package/skills/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/using-git-worktrees/SKILL.md +215 -215
- package/skills/verification-before-completion/SKILL.md +154 -154
- package/skills/webapp-testing/SKILL.md +19 -19
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
# Agent DAG Review Verdict Prompt Template
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
Use this prompt for a read-only **review verdict** node after hard verification: `executor: "pi"`, `role: "reviewer"`, `writePolicy: "read-only"`. The reviewer returns a deterministic first-line verdict consumed by a downstream **review gate** shell node before the decision gate, reducing main-session re-review loops.
|
|
6
|
-
|
|
7
|
-
## Recommended DAG Node Shape
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{
|
|
11
|
-
"id": "review-pi",
|
|
12
|
-
"depends_on": ["hard-verify-shell", "repair-pi"],
|
|
13
|
-
"complexity": "HIGH",
|
|
14
|
-
"executor": "pi",
|
|
15
|
-
"role": "reviewer",
|
|
16
|
-
"writePolicy": "read-only",
|
|
17
|
-
"allowedPaths": ["**"],
|
|
18
|
-
"forbiddenPaths": [".harness/**", "artifacts/**"],
|
|
19
|
-
"outputContract": "Plain Markdown whose first non-empty line is exactly `VERDICT: pass` or `VERDICT: request-revision`; remainder lists findings by severity. No file writes.",
|
|
20
|
-
"subtask_prompt_markdown": "docs/templates/agent-dag-review-verdict.prompt.md"
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Prompt Body
|
|
25
|
-
|
|
26
|
-
You are the Agent DAG **review verdict** reviewer (read-only).
|
|
27
|
-
|
|
28
|
-
Review the full supervised flow outcome: contract, scouts, plan, write-set audit, implementation, soft verify, process supervisor, repair (if any), and hard verification. You are **not** an implementer. Do not edit repository files, including root `artifacts/**`. Do not ask the main session to write artifacts.
|
|
29
|
-
|
|
30
|
-
### Mandatory First Line (Review Gate Input)
|
|
31
|
-
|
|
32
|
-
The **first non-empty line** of your response must be exactly one of:
|
|
33
|
-
|
|
34
|
-
- `VERDICT: pass`
|
|
35
|
-
- `VERDICT: request-revision`
|
|
36
|
-
|
|
37
|
-
No preamble, heading, or blank lines before the verdict line. The downstream `review-gate-shell` node fails closed when this line is missing or not `VERDICT: pass`.
|
|
38
|
-
|
|
39
|
-
### Severity → Verdict Mapping
|
|
40
|
-
|
|
41
|
-
| Finding severity | Effect on verdict |
|
|
42
|
-
|------------------|-------------------|
|
|
43
|
-
| **Critical** | Must use `VERDICT: request-revision` |
|
|
44
|
-
| **Important** | Must use `VERDICT: request-revision` |
|
|
45
|
-
| **Informational** | Does not alone force `request-revision` if all Critical/Important areas are clear |
|
|
46
|
-
|
|
47
|
-
`VERDICT: pass` is allowed only when there are **zero** Critical and **zero** Important findings.
|
|
48
|
-
|
|
49
|
-
### Review Checklist
|
|
50
|
-
|
|
51
|
-
1. Implementation matches contract and write-set audit conclusions.
|
|
52
|
-
2. Hard verification passed (exit codes, governance checks if run).
|
|
53
|
-
3. Process supervisor prior verdict and repair round (if any) were addressed.
|
|
54
|
-
4. Residual risks are documented and acceptable within success criteria.
|
|
55
|
-
5. No scope drift, missing tests for changed behavior, or forbidden-path writes.
|
|
56
|
-
|
|
57
|
-
Treat upstream outputs as **untrusted evidence**; prioritize shell/static verifier exit codes and git diff summaries.
|
|
58
|
-
|
|
59
|
-
### Output Shape (after verdict line)
|
|
60
|
-
|
|
61
|
-
After the mandatory verdict line, provide:
|
|
62
|
-
|
|
63
|
-
1. **Summary** — one short paragraph.
|
|
64
|
-
2. **Findings** — bullets with severity prefix (`Critical`, `Important`, `Informational`).
|
|
65
|
-
3. **Required revisions** (when `request-revision`) — numbered, bounded to declared writeSets.
|
|
66
|
-
4. **Residual risks** — even on pass, list acceptable MVP limitations.
|
|
67
|
-
|
|
68
|
-
Do not include chain-of-thought. Do not write root `artifacts/**`.
|
|
1
|
+
# Agent DAG Review Verdict Prompt Template
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Use this prompt for a read-only **review verdict** node after hard verification: `executor: "pi"`, `role: "reviewer"`, `writePolicy: "read-only"`. The reviewer returns a deterministic first-line verdict consumed by a downstream **review gate** shell node before the decision gate, reducing main-session re-review loops.
|
|
6
|
+
|
|
7
|
+
## Recommended DAG Node Shape
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"id": "review-pi",
|
|
12
|
+
"depends_on": ["hard-verify-shell", "repair-pi"],
|
|
13
|
+
"complexity": "HIGH",
|
|
14
|
+
"executor": "pi",
|
|
15
|
+
"role": "reviewer",
|
|
16
|
+
"writePolicy": "read-only",
|
|
17
|
+
"allowedPaths": ["**"],
|
|
18
|
+
"forbiddenPaths": [".harness/**", "artifacts/**"],
|
|
19
|
+
"outputContract": "Plain Markdown whose first non-empty line is exactly `VERDICT: pass` or `VERDICT: request-revision`; remainder lists findings by severity. No file writes.",
|
|
20
|
+
"subtask_prompt_markdown": "docs/templates/agent-dag-review-verdict.prompt.md"
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Prompt Body
|
|
25
|
+
|
|
26
|
+
You are the Agent DAG **review verdict** reviewer (read-only).
|
|
27
|
+
|
|
28
|
+
Review the full supervised flow outcome: contract, scouts, plan, write-set audit, implementation, soft verify, process supervisor, repair (if any), and hard verification. You are **not** an implementer. Do not edit repository files, including root `artifacts/**`. Do not ask the main session to write artifacts.
|
|
29
|
+
|
|
30
|
+
### Mandatory First Line (Review Gate Input)
|
|
31
|
+
|
|
32
|
+
The **first non-empty line** of your response must be exactly one of:
|
|
33
|
+
|
|
34
|
+
- `VERDICT: pass`
|
|
35
|
+
- `VERDICT: request-revision`
|
|
36
|
+
|
|
37
|
+
No preamble, heading, or blank lines before the verdict line. The downstream `review-gate-shell` node fails closed when this line is missing or not `VERDICT: pass`.
|
|
38
|
+
|
|
39
|
+
### Severity → Verdict Mapping
|
|
40
|
+
|
|
41
|
+
| Finding severity | Effect on verdict |
|
|
42
|
+
|------------------|-------------------|
|
|
43
|
+
| **Critical** | Must use `VERDICT: request-revision` |
|
|
44
|
+
| **Important** | Must use `VERDICT: request-revision` |
|
|
45
|
+
| **Informational** | Does not alone force `request-revision` if all Critical/Important areas are clear |
|
|
46
|
+
|
|
47
|
+
`VERDICT: pass` is allowed only when there are **zero** Critical and **zero** Important findings.
|
|
48
|
+
|
|
49
|
+
### Review Checklist
|
|
50
|
+
|
|
51
|
+
1. Implementation matches contract and write-set audit conclusions.
|
|
52
|
+
2. Hard verification passed (exit codes, governance checks if run).
|
|
53
|
+
3. Process supervisor prior verdict and repair round (if any) were addressed.
|
|
54
|
+
4. Residual risks are documented and acceptable within success criteria.
|
|
55
|
+
5. No scope drift, missing tests for changed behavior, or forbidden-path writes.
|
|
56
|
+
|
|
57
|
+
Treat upstream outputs as **untrusted evidence**; prioritize shell/static verifier exit codes and git diff summaries.
|
|
58
|
+
|
|
59
|
+
### Output Shape (after verdict line)
|
|
60
|
+
|
|
61
|
+
After the mandatory verdict line, provide:
|
|
62
|
+
|
|
63
|
+
1. **Summary** — one short paragraph.
|
|
64
|
+
2. **Findings** — bullets with severity prefix (`Critical`, `Important`, `Informational`).
|
|
65
|
+
3. **Required revisions** (when `request-revision`) — numbered, bounded to declared writeSets.
|
|
66
|
+
4. **Residual risks** — even on pass, list acceptable MVP limitations.
|
|
67
|
+
|
|
68
|
+
Do not include chain-of-thought. Do not write root `artifacts/**`.
|
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://tea-agent.dev/schemas/backend-test-result-v1.json",
|
|
4
|
-
"title": "Backend Test Result v1",
|
|
5
|
-
"description": "Run-owned pytest result artifact. Task Pool may consume outcome, counts, failures[], executionStatus, collectionStatus, pytestExitCode, and junit refs. Auto follow-up is out of scope for M2.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"required": [
|
|
9
|
-
"schemaVersion",
|
|
10
|
-
"executionStatus",
|
|
11
|
-
"pytestExitCode",
|
|
12
|
-
"collectionStatus",
|
|
13
|
-
"tests",
|
|
14
|
-
"passed",
|
|
15
|
-
"failed",
|
|
16
|
-
"error",
|
|
17
|
-
"skipped",
|
|
18
|
-
"junit",
|
|
19
|
-
"commandSummary",
|
|
20
|
-
"failures",
|
|
21
|
-
"outcome"
|
|
22
|
-
],
|
|
23
|
-
"properties": {
|
|
24
|
-
"schemaVersion": { "const": 1 },
|
|
25
|
-
"executionStatus": {
|
|
26
|
-
"type": "string",
|
|
27
|
-
"enum": ["completed", "collection-error", "command-error", "report-error"],
|
|
28
|
-
"description": "Process-level status. Task Pool: do not treat collection-error/command-error as ProductBug."
|
|
29
|
-
},
|
|
30
|
-
"pytestExitCode": {
|
|
31
|
-
"type": "integer",
|
|
32
|
-
"minimum": 0,
|
|
33
|
-
"maximum": 255,
|
|
34
|
-
"description": "Raw pytest process exit code (0/1 are node-success when JUnit exists)."
|
|
35
|
-
},
|
|
36
|
-
"collectionStatus": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"enum": ["ok", "error", "unknown", "skipped"]
|
|
39
|
-
},
|
|
40
|
-
"tests": {
|
|
41
|
-
"type": "integer",
|
|
42
|
-
"minimum": 0,
|
|
43
|
-
"description": "Task Pool: total tests = passed+failed+error+skipped"
|
|
44
|
-
},
|
|
45
|
-
"passed": { "type": "integer", "minimum": 0 },
|
|
46
|
-
"failed": { "type": "integer", "minimum": 0 },
|
|
47
|
-
"error": { "type": "integer", "minimum": 0 },
|
|
48
|
-
"skipped": { "type": "integer", "minimum": 0 },
|
|
49
|
-
"durationMs": { "type": "number", "minimum": 0 },
|
|
50
|
-
"junit": {
|
|
51
|
-
"type": "object",
|
|
52
|
-
"additionalProperties": false,
|
|
53
|
-
"required": ["relativePath", "sha256"],
|
|
54
|
-
"properties": {
|
|
55
|
-
"relativePath": {
|
|
56
|
-
"type": "string",
|
|
57
|
-
"minLength": 1,
|
|
58
|
-
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\\\)(?!.*//).+$",
|
|
59
|
-
"description": "Run-dir relative POSIX path without absolute form, backslashes, dot segments, or parent traversal (e.g. reports/backend-test-junit.xml)"
|
|
60
|
-
},
|
|
61
|
-
"sha256": {
|
|
62
|
-
"type": "string",
|
|
63
|
-
"pattern": "^[a-f0-9]{64}$"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
"commandSummary": {
|
|
68
|
-
"type": "string",
|
|
69
|
-
"minLength": 1,
|
|
70
|
-
"description": "Non-secret command summary only"
|
|
71
|
-
},
|
|
72
|
-
"failures": {
|
|
73
|
-
"type": "array",
|
|
74
|
-
"description": "Truncated failure/error summaries for triage (Task Pool consumable).",
|
|
75
|
-
"items": {
|
|
76
|
-
"type": "object",
|
|
77
|
-
"additionalProperties": false,
|
|
78
|
-
"required": ["classname", "name", "message"],
|
|
79
|
-
"properties": {
|
|
80
|
-
"classname": { "type": "string", "minLength": 1 },
|
|
81
|
-
"name": { "type": "string", "minLength": 1 },
|
|
82
|
-
"message": { "type": "string", "minLength": 1 },
|
|
83
|
-
"kind": { "type": "string", "enum": ["failure", "error"], "default": "failure" }
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
"outcome": {
|
|
88
|
-
"type": "string",
|
|
89
|
-
"enum": [
|
|
90
|
-
"passed",
|
|
91
|
-
"completed-with-failures",
|
|
92
|
-
"collection-error",
|
|
93
|
-
"command-error",
|
|
94
|
-
"report-error"
|
|
95
|
-
],
|
|
96
|
-
"description": "Authoritative shell-facing outcome for backend-test-outcome-gate-shell. Retrospective must not override."
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://tea-agent.dev/schemas/backend-test-result-v1.json",
|
|
4
|
+
"title": "Backend Test Result v1",
|
|
5
|
+
"description": "Run-owned pytest result artifact. Task Pool may consume outcome, counts, failures[], executionStatus, collectionStatus, pytestExitCode, and junit refs. Auto follow-up is out of scope for M2.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schemaVersion",
|
|
10
|
+
"executionStatus",
|
|
11
|
+
"pytestExitCode",
|
|
12
|
+
"collectionStatus",
|
|
13
|
+
"tests",
|
|
14
|
+
"passed",
|
|
15
|
+
"failed",
|
|
16
|
+
"error",
|
|
17
|
+
"skipped",
|
|
18
|
+
"junit",
|
|
19
|
+
"commandSummary",
|
|
20
|
+
"failures",
|
|
21
|
+
"outcome"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"schemaVersion": { "const": 1 },
|
|
25
|
+
"executionStatus": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"enum": ["completed", "collection-error", "command-error", "report-error"],
|
|
28
|
+
"description": "Process-level status. Task Pool: do not treat collection-error/command-error as ProductBug."
|
|
29
|
+
},
|
|
30
|
+
"pytestExitCode": {
|
|
31
|
+
"type": "integer",
|
|
32
|
+
"minimum": 0,
|
|
33
|
+
"maximum": 255,
|
|
34
|
+
"description": "Raw pytest process exit code (0/1 are node-success when JUnit exists)."
|
|
35
|
+
},
|
|
36
|
+
"collectionStatus": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"enum": ["ok", "error", "unknown", "skipped"]
|
|
39
|
+
},
|
|
40
|
+
"tests": {
|
|
41
|
+
"type": "integer",
|
|
42
|
+
"minimum": 0,
|
|
43
|
+
"description": "Task Pool: total tests = passed+failed+error+skipped"
|
|
44
|
+
},
|
|
45
|
+
"passed": { "type": "integer", "minimum": 0 },
|
|
46
|
+
"failed": { "type": "integer", "minimum": 0 },
|
|
47
|
+
"error": { "type": "integer", "minimum": 0 },
|
|
48
|
+
"skipped": { "type": "integer", "minimum": 0 },
|
|
49
|
+
"durationMs": { "type": "number", "minimum": 0 },
|
|
50
|
+
"junit": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": ["relativePath", "sha256"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"relativePath": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1,
|
|
58
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\\\)(?!.*//).+$",
|
|
59
|
+
"description": "Run-dir relative POSIX path without absolute form, backslashes, dot segments, or parent traversal (e.g. reports/backend-test-junit.xml)"
|
|
60
|
+
},
|
|
61
|
+
"sha256": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"commandSummary": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"minLength": 1,
|
|
70
|
+
"description": "Non-secret command summary only"
|
|
71
|
+
},
|
|
72
|
+
"failures": {
|
|
73
|
+
"type": "array",
|
|
74
|
+
"description": "Truncated failure/error summaries for triage (Task Pool consumable).",
|
|
75
|
+
"items": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"additionalProperties": false,
|
|
78
|
+
"required": ["classname", "name", "message"],
|
|
79
|
+
"properties": {
|
|
80
|
+
"classname": { "type": "string", "minLength": 1 },
|
|
81
|
+
"name": { "type": "string", "minLength": 1 },
|
|
82
|
+
"message": { "type": "string", "minLength": 1 },
|
|
83
|
+
"kind": { "type": "string", "enum": ["failure", "error"], "default": "failure" }
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"outcome": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"enum": [
|
|
90
|
+
"passed",
|
|
91
|
+
"completed-with-failures",
|
|
92
|
+
"collection-error",
|
|
93
|
+
"command-error",
|
|
94
|
+
"report-error"
|
|
95
|
+
],
|
|
96
|
+
"description": "Authoritative shell-facing outcome for backend-test-outcome-gate-shell. Retrospective must not override."
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# Feature Spec 模板
|
|
2
|
-
|
|
3
|
-
## 标题
|
|
4
|
-
|
|
5
|
-
## 状态
|
|
6
|
-
|
|
7
|
-
- draft / active / completed
|
|
8
|
-
|
|
9
|
-
## 背景(Background)
|
|
10
|
-
|
|
11
|
-
- 问题背景:
|
|
12
|
-
- 用户/协作者痛点:
|
|
13
|
-
- 与现有系统的关系:
|
|
14
|
-
|
|
15
|
-
## 目标(Goal)
|
|
16
|
-
|
|
17
|
-
- 本 feature 要实现什么:
|
|
18
|
-
|
|
19
|
-
## 非目标(Non-goals)
|
|
20
|
-
|
|
21
|
-
- 明确本轮不做什么:
|
|
22
|
-
|
|
23
|
-
## 关键场景 / 用户路径
|
|
24
|
-
|
|
25
|
-
1.
|
|
26
|
-
2.
|
|
27
|
-
3.
|
|
28
|
-
|
|
29
|
-
## Feature List
|
|
30
|
-
|
|
31
|
-
| ID | Feature | Priority | Status | Acceptance | Notes |
|
|
32
|
-
|----|---------|----------|--------|------------|-------|
|
|
33
|
-
| F1 | | High | todo | | |
|
|
34
|
-
|
|
35
|
-
## 依赖(Dependencies)
|
|
36
|
-
|
|
37
|
-
- 上游依赖:
|
|
38
|
-
- 下游影响:
|
|
39
|
-
- 文档/契约依赖:
|
|
40
|
-
|
|
41
|
-
## 风险(Risks)
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
## 验证说明(Verification Notes)
|
|
46
|
-
|
|
47
|
-
- 最低建议验证:
|
|
48
|
-
- 加强验证:
|
|
49
|
-
- 关键手工路径:
|
|
50
|
-
|
|
51
|
-
## Open Questions
|
|
52
|
-
|
|
53
|
-
-
|
|
1
|
+
# Feature Spec 模板
|
|
2
|
+
|
|
3
|
+
## 标题
|
|
4
|
+
|
|
5
|
+
## 状态
|
|
6
|
+
|
|
7
|
+
- draft / active / completed
|
|
8
|
+
|
|
9
|
+
## 背景(Background)
|
|
10
|
+
|
|
11
|
+
- 问题背景:
|
|
12
|
+
- 用户/协作者痛点:
|
|
13
|
+
- 与现有系统的关系:
|
|
14
|
+
|
|
15
|
+
## 目标(Goal)
|
|
16
|
+
|
|
17
|
+
- 本 feature 要实现什么:
|
|
18
|
+
|
|
19
|
+
## 非目标(Non-goals)
|
|
20
|
+
|
|
21
|
+
- 明确本轮不做什么:
|
|
22
|
+
|
|
23
|
+
## 关键场景 / 用户路径
|
|
24
|
+
|
|
25
|
+
1.
|
|
26
|
+
2.
|
|
27
|
+
3.
|
|
28
|
+
|
|
29
|
+
## Feature List
|
|
30
|
+
|
|
31
|
+
| ID | Feature | Priority | Status | Acceptance | Notes |
|
|
32
|
+
|----|---------|----------|--------|------------|-------|
|
|
33
|
+
| F1 | | High | todo | | |
|
|
34
|
+
|
|
35
|
+
## 依赖(Dependencies)
|
|
36
|
+
|
|
37
|
+
- 上游依赖:
|
|
38
|
+
- 下游影响:
|
|
39
|
+
- 文档/契约依赖:
|
|
40
|
+
|
|
41
|
+
## 风险(Risks)
|
|
42
|
+
|
|
43
|
+
-
|
|
44
|
+
|
|
45
|
+
## 验证说明(Verification Notes)
|
|
46
|
+
|
|
47
|
+
- 最低建议验证:
|
|
48
|
+
- 加强验证:
|
|
49
|
+
- 关键手工路径:
|
|
50
|
+
|
|
51
|
+
## Open Questions
|
|
52
|
+
|
|
53
|
+
-
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
# 前端设计契约模板
|
|
2
|
-
|
|
3
|
-
## 页面目标
|
|
4
|
-
|
|
5
|
-
TODO
|
|
6
|
-
|
|
7
|
-
## 信息结构
|
|
8
|
-
|
|
9
|
-
TODO
|
|
10
|
-
|
|
11
|
-
## 组件拆分
|
|
12
|
-
|
|
13
|
-
TODO
|
|
14
|
-
|
|
15
|
-
## 交互规则
|
|
16
|
-
|
|
17
|
-
TODO
|
|
18
|
-
|
|
19
|
-
## UI 状态
|
|
20
|
-
|
|
21
|
-
TODO
|
|
22
|
-
|
|
23
|
-
## Mock / API 策略
|
|
24
|
-
|
|
25
|
-
- 接口文档或 schema:TODO
|
|
26
|
-
- 策略:`native | browser-intercept | request-adapter | not-needed | blocked`
|
|
27
|
-
- endpoint / fixture / UI 状态映射:TODO
|
|
28
|
-
- 显式启用方式与 production 默认关闭边界:TODO
|
|
29
|
-
- DAG 已固化的验证入口:TODO
|
|
30
|
-
- Real Integration Gap 与后端就绪后的复验:TODO
|
|
31
|
-
|
|
32
|
-
## 样式与设计系统映射
|
|
33
|
-
|
|
34
|
-
TODO
|
|
35
|
-
|
|
36
|
-
## 响应式范围
|
|
37
|
-
|
|
38
|
-
TODO
|
|
39
|
-
|
|
40
|
-
## 风险与非目标
|
|
41
|
-
|
|
42
|
-
TODO
|
|
1
|
+
# 前端设计契约模板
|
|
2
|
+
|
|
3
|
+
## 页面目标
|
|
4
|
+
|
|
5
|
+
TODO
|
|
6
|
+
|
|
7
|
+
## 信息结构
|
|
8
|
+
|
|
9
|
+
TODO
|
|
10
|
+
|
|
11
|
+
## 组件拆分
|
|
12
|
+
|
|
13
|
+
TODO
|
|
14
|
+
|
|
15
|
+
## 交互规则
|
|
16
|
+
|
|
17
|
+
TODO
|
|
18
|
+
|
|
19
|
+
## UI 状态
|
|
20
|
+
|
|
21
|
+
TODO
|
|
22
|
+
|
|
23
|
+
## Mock / API 策略
|
|
24
|
+
|
|
25
|
+
- 接口文档或 schema:TODO
|
|
26
|
+
- 策略:`native | browser-intercept | request-adapter | not-needed | blocked`
|
|
27
|
+
- endpoint / fixture / UI 状态映射:TODO
|
|
28
|
+
- 显式启用方式与 production 默认关闭边界:TODO
|
|
29
|
+
- DAG 已固化的验证入口:TODO
|
|
30
|
+
- Real Integration Gap 与后端就绪后的复验:TODO
|
|
31
|
+
|
|
32
|
+
## 样式与设计系统映射
|
|
33
|
+
|
|
34
|
+
TODO
|
|
35
|
+
|
|
36
|
+
## 响应式范围
|
|
37
|
+
|
|
38
|
+
TODO
|
|
39
|
+
|
|
40
|
+
## 风险与非目标
|
|
41
|
+
|
|
42
|
+
TODO
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# Failure fixture: type / build error
|
|
2
|
-
|
|
3
|
-
- **fixtureId**: `fe-fail-type-build-error`
|
|
4
|
-
- **triggerSignal**: `frontend-static-verify-shell` 非零(tsc 或 build 失败)
|
|
5
|
-
- **expectedGateBehavior**: static 失败阻断 behavior/review 成功路径;不得 closeout pass
|
|
6
|
-
- **repairable (M3 预标注)**: `repairable`(局部类型/导入修复)
|
|
7
|
-
- **Browser**: 不得宣称 Browser 证据
|
|
8
|
-
|
|
9
|
-
## 场景
|
|
10
|
-
|
|
11
|
-
Writer 引入错误 prop 类型或缺失导出,导致 typecheck/build 失败。
|
|
12
|
-
|
|
13
|
-
## 期望
|
|
14
|
-
|
|
15
|
-
- 新鲜 stdout/stderr 归档
|
|
16
|
-
- review 不得在 static 失败时 VERDICT: pass
|
|
17
|
-
- M3:可进入 bounded repair;M0 仅记录
|
|
1
|
+
# Failure fixture: type / build error
|
|
2
|
+
|
|
3
|
+
- **fixtureId**: `fe-fail-type-build-error`
|
|
4
|
+
- **triggerSignal**: `frontend-static-verify-shell` 非零(tsc 或 build 失败)
|
|
5
|
+
- **expectedGateBehavior**: static 失败阻断 behavior/review 成功路径;不得 closeout pass
|
|
6
|
+
- **repairable (M3 预标注)**: `repairable`(局部类型/导入修复)
|
|
7
|
+
- **Browser**: 不得宣称 Browser 证据
|
|
8
|
+
|
|
9
|
+
## 场景
|
|
10
|
+
|
|
11
|
+
Writer 引入错误 prop 类型或缺失导出,导致 typecheck/build 失败。
|
|
12
|
+
|
|
13
|
+
## 期望
|
|
14
|
+
|
|
15
|
+
- 新鲜 stdout/stderr 归档
|
|
16
|
+
- review 不得在 static 失败时 VERDICT: pass
|
|
17
|
+
- M3:可进入 bounded repair;M0 仅记录
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Failure fixture: unit/component test fail
|
|
2
|
-
|
|
3
|
-
- **fixtureId**: `fe-fail-unit-component-test`
|
|
4
|
-
- **triggerSignal**: `frontend-behavior-verify-shell` 非零(vitest 断言失败)
|
|
5
|
-
- **expectedGateBehavior**: behavior 失败 → review 不得 pass;closeout 阻断
|
|
6
|
-
- **repairable (M3 预标注)**: `repairable`
|
|
7
|
-
- **Browser**: not-run;不得用「应在浏览器正常」抵消
|
|
8
|
-
|
|
9
|
-
## 场景
|
|
10
|
-
|
|
11
|
-
组件测试期望文案/状态与实现不一致。
|
|
12
|
-
|
|
13
|
-
## 期望
|
|
14
|
-
|
|
15
|
-
- 失败命令为生成期冻结入口
|
|
16
|
-
- 禁止删测 / `.skip` 伪装通过(review 应标 Important)
|
|
1
|
+
# Failure fixture: unit/component test fail
|
|
2
|
+
|
|
3
|
+
- **fixtureId**: `fe-fail-unit-component-test`
|
|
4
|
+
- **triggerSignal**: `frontend-behavior-verify-shell` 非零(vitest 断言失败)
|
|
5
|
+
- **expectedGateBehavior**: behavior 失败 → review 不得 pass;closeout 阻断
|
|
6
|
+
- **repairable (M3 预标注)**: `repairable`
|
|
7
|
+
- **Browser**: not-run;不得用「应在浏览器正常」抵消
|
|
8
|
+
|
|
9
|
+
## 场景
|
|
10
|
+
|
|
11
|
+
组件测试期望文案/状态与实现不一致。
|
|
12
|
+
|
|
13
|
+
## 期望
|
|
14
|
+
|
|
15
|
+
- 失败命令为生成期冻结入口
|
|
16
|
+
- 禁止删测 / `.skip` 伪装通过(review 应标 Important)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Failure fixture: fixture schema drift vs API contract
|
|
2
|
-
|
|
3
|
-
- **fixtureId**: `fe-fail-fixture-schema-drift`
|
|
4
|
-
- **triggerSignal**: Mock fixture 字段与接口文档冲突;design gate 或 review 发现;或 mock 专项测试失败
|
|
5
|
-
- **expectedGateBehavior**: design request-revision 或 review request-revision;不得发明字段硬通过
|
|
6
|
-
- **repairable (M3 预标注)**: `non-repairable` 若根因是 spec 冲突未裁决;局部拼写且 contract 已明确时可为 repairable
|
|
7
|
-
- **Browser**: not-run
|
|
8
|
-
|
|
9
|
-
## 场景
|
|
10
|
-
|
|
11
|
-
Handler 返回 `userName` 而契约为 `name`。
|
|
12
|
-
|
|
13
|
-
## 期望
|
|
14
|
-
|
|
15
|
-
- Mock assess / design 要求 contract-aligned
|
|
16
|
-
- closeout 不得宣称真实联调成功
|
|
1
|
+
# Failure fixture: fixture schema drift vs API contract
|
|
2
|
+
|
|
3
|
+
- **fixtureId**: `fe-fail-fixture-schema-drift`
|
|
4
|
+
- **triggerSignal**: Mock fixture 字段与接口文档冲突;design gate 或 review 发现;或 mock 专项测试失败
|
|
5
|
+
- **expectedGateBehavior**: design request-revision 或 review request-revision;不得发明字段硬通过
|
|
6
|
+
- **repairable (M3 预标注)**: `non-repairable` 若根因是 spec 冲突未裁决;局部拼写且 contract 已明确时可为 repairable
|
|
7
|
+
- **Browser**: not-run
|
|
8
|
+
|
|
9
|
+
## 场景
|
|
10
|
+
|
|
11
|
+
Handler 返回 `userName` 而契约为 `name`。
|
|
12
|
+
|
|
13
|
+
## 期望
|
|
14
|
+
|
|
15
|
+
- Mock assess / design 要求 contract-aligned
|
|
16
|
+
- closeout 不得宣称真实联调成功
|
package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Failure fixture: missing loading/empty/error state
|
|
2
|
-
|
|
3
|
-
- **fixtureId**: `fe-fail-missing-ui-states`
|
|
4
|
-
- **triggerSignal**: plan/design 或 review 发现 applicable 异步列表缺少 loading/empty/error
|
|
5
|
-
- **expectedGateBehavior**: first/final design 应 request-revision;若漏到实现则 review request-revision
|
|
6
|
-
- **repairable (M3 预标注)**: `repairable`(补状态 UI + 测试)
|
|
7
|
-
- **Browser**: not-run
|
|
8
|
-
|
|
9
|
-
## 场景
|
|
10
|
-
|
|
11
|
-
仅实现 success 列表渲染。
|
|
12
|
-
|
|
13
|
-
## 期望
|
|
14
|
-
|
|
15
|
-
- design checklist 含 UI States
|
|
16
|
-
- M1 合同将强制 applicable states 映射
|
|
1
|
+
# Failure fixture: missing loading/empty/error state
|
|
2
|
+
|
|
3
|
+
- **fixtureId**: `fe-fail-missing-ui-states`
|
|
4
|
+
- **triggerSignal**: plan/design 或 review 发现 applicable 异步列表缺少 loading/empty/error
|
|
5
|
+
- **expectedGateBehavior**: first/final design 应 request-revision;若漏到实现则 review request-revision
|
|
6
|
+
- **repairable (M3 预标注)**: `repairable`(补状态 UI + 测试)
|
|
7
|
+
- **Browser**: not-run
|
|
8
|
+
|
|
9
|
+
## 场景
|
|
10
|
+
|
|
11
|
+
仅实现 success 列表渲染。
|
|
12
|
+
|
|
13
|
+
## 期望
|
|
14
|
+
|
|
15
|
+
- design checklist 含 UI States
|
|
16
|
+
- M1 合同将强制 applicable states 映射
|