From 06f25becaca80ccb33fbd93f32caff75a0eddbc5 Mon Sep 17 00:00:00 2001 From: xiaoxing0135 <706015750@qq.com> Date: Tue, 2 Jun 2026 03:26:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20jmeter-script-gen=20template=20?= =?UTF-8?q?=E2=80=94=20intProp=20var=20refs=20+=20saveConfig=20cross-versi?= =?UTF-8?q?on=20breakage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two bugs fixed: 1. ThreadGroup / containing ${THREADS}/${RAMPUP}/${DURATION} → changed to (JMeter runtime eval, not XML parse time) 2. Removed hardcoded from ResultCollector → delegates to jmeter.properties defaults, compatible with JMeter 5.0~5.6.3 Added version compatibility banner documenting both constraints. --- skills/jmeter-script-gen.md | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/skills/jmeter-script-gen.md b/skills/jmeter-script-gen.md index 0c8f6b2..25d8d52 100644 --- a/skills/jmeter-script-gen.md +++ b/skills/jmeter-script-gen.md @@ -5,6 +5,8 @@ tools: Read, Write, Edit, Grep, Glob SKILL_IMPL_STATUS: script --- +> **JMeter 版本兼容**: 本模板不硬编码 `saveConfig`,结果保存配置走 `jmeter.properties` 默认值,兼容 JMeter 5.0 ~ 5.6.3。ThreadGroup 含 `${变量}` 的属性统一用 `stringProp`,避免跨版本参数化失效。 + # JMeter 性能脚本生成 ## 触发方式 @@ -159,9 +161,9 @@ test_user_b9k7,Test@123456,xxxx-xxxx-xxxx-xxxx - ${THREADS} - ${RAMPUP} - ${DURATION} + ${THREADS} + ${RAMPUP} + ${DURATION} 0 true continue @@ -250,24 +252,6 @@ test_user_b9k7,Test@123456,xxxx-xxxx-xxxx-xxxx false - - saveConfig - - truetrue - truetrue - truetrue - truefalse - truetrue - falsefalse - falsetrue - falsefalse - false - true - truetrue - truetrue - truetrue - - workspace/执行日志/jmeter-results/result.jtl From d15a90caf25b6eb32b085f0ba169b0b846d54e44 Mon Sep 17 00:00:00 2001 From: xiaoxing0135 <706015750@qq.com> Date: Tue, 2 Jun 2026 03:36:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20reorganize=20workspace=20directories?= =?UTF-8?q?=20=E2=80=94=20move=20plans/reports=20out=20of=20=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move 7 JSON files (plans/checklists/summaries) from 执行日志 to 测试计划/需求分析/测试报告 - Move decisions/ from 执行日志 to 测试报告 (AI decision records, not execution logs) - Move allure-results/ from 执行日志 to 测试报告 (report raw data, not execution logs) - Update 24 files with path references to match new locations (zero residual old paths) --- CHANGELOG.md | 14 +++++++------- ...212\250\345\214\226\350\204\232\346\234\254.md" | 2 +- ...265\213\350\257\225\346\211\247\350\241\214.md" | 4 ++-- ...212\245\345\221\212\347\224\237\346\210\220.md" | 4 ++-- ...233\206\346\210\220\350\257\264\346\230\216.md" | 4 ++-- ci/github-actions-test.yml | 8 ++++---- ci/jenkins-pipeline.groovy | 4 ++-- config/conftest.py | 2 +- config/pytest.ini | 2 +- docs/charter/01-vision-dimensions.md | 2 +- ...273\230\347\211\251\346\270\205\345\215\225.md" | 6 +++--- ...275\277\347\224\250\346\211\213\345\206\214.md" | 2 +- docs/history/2026-5-11 FULL_GUIDE 200746.md | 8 ++++---- docs/tutorial/TUTORIAL.md | 2 +- runtime/orchestrator/adapters/experts.py | 4 ++-- runtime/orchestrator/skills/pentest_coordinator.py | 4 ++-- scripts/_demo-commands.sh | 4 ++-- skills/agent-introspection-debugging.md | 2 +- skills/pentest-coordinator.md | 2 +- skills/python-script-gen.md | 2 +- skills/smoke-test.md | 4 ++-- skills/test-coordinator.md | 2 +- utils/reporting/evidence_chain.py | 4 ++-- utils/reporting/traceability_matrix.py | 2 +- 24 files changed, 47 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 124140b..7c1e77e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -317,11 +317,11 @@ _后续累积变更入此节;切版本时移到下方版本节。_ - **Kernel.submit 注入 `artifact_text`**(`runtime/api/deps.py`):每 DAG 节点 inputs 自动带原始 PRD 文本(20KB cap) - **stub web-system DAG 加 test-lead**(`runtime/router/llm_client.py`):覆盖完整 9 节点 e2e 流程 - **5 真 runner 产物落盘**: - - `workspace/执行日志/requirements_summary.json`(需求摘要 + P0/P1 + 风险区) - - `workspace/执行日志/automation_scripts_plan.json`(脚本规划 + fixture 复用) - - `workspace/执行日志/execution_plan.json`(4 阶段 + 失败 4 分类 + Flaky 规则) - - `workspace/执行日志/bug_drafts.json`(BugTracker-ready Bug 草案 + severity 1-4) - - `workspace/执行日志/decisions/final_verdict_*.json`(test-lead go/no-go 决策,标 `requires_human_signoff: true`) + - `workspace/需求分析/requirements_summary.json`(需求摘要 + P0/P1 + 风险区) + - `workspace/测试计划/automation_scripts_plan.json`(脚本规划 + fixture 复用) + - `workspace/测试计划/execution_plan.json`(4 阶段 + 失败 4 分类 + Flaky 规则) + - `workspace/测试报告/bug_drafts.json`(BugTracker-ready Bug 草案 + severity 1-4) + - `workspace/测试报告/decisions/final_verdict_*.json`(test-lead go/no-go 决策,标 `requires_human_signoff: true`) - **录制脚本**(`scripts/`): - `_demo-commands.sh`:实际 demo 命令序列(被 record-demo-* 调) - `record-demo-asciinema.sh`:`asciinema rec` 自动录,产 .cast 可上传 asciinema.org 或转 GIF/SVG @@ -382,7 +382,7 @@ _后续累积变更入此节;切版本时移到下方版本节。_ - `00-项目导航.md` · `agents/{01,07,08,09}.md` · `agents/README.md` · `skills/{README,test-coordinator,zentao-bug-submission}.md` · `config/mcp-server-impl.md` · `utils/{README.md,api_retry_util.py}` · `ci/{INDEX,CICD集成说明}.md` · `docs/getting-started/{交付物清单,使用手册,配置清单}.md` · `examples/web-demo/README.md` · `CONTRIBUTING.md` · `FULL_GUIDE.md` - **adapter 修 V1.10 n7 bug**:`runtime/orchestrator/adapters/experts.py` 加 `SCRIPT_DEFAULT_ARGS` + `_ensure_fixture()` 通用机制 - 现 `tagent selftest --e2e --strict` **100% PASS 8/8**(原 88% 7/8) - - generate_report.py 默认注入 `--data=workspace/执行日志/_selftest_summary.json`,fixture 自动生成 + - generate_report.py 默认注入 `--data=workspace/测试报告/_selftest_summary.json`,fixture 自动生成 - **主宪章扩**: - §36 多端通知 canon(扩 §6,6 渠道权威清单 + env 字段 + 业务语言铁律) - §37 BugTracker canon(扩 §12,6 adapter 权威清单 + measurement env + 措辞规范) @@ -542,7 +542,7 @@ _后续累积变更入此节;切版本时移到下方版本节。_ - `runtime/mcp/defect_tracker/`:工单桥 5 工具(create/get/update/query_bugs/list_trackers),默认 zentao + 预留扩展位(主宪章 §12 契约) - `runtime/mcp/knowledge_base/`:pgvector 向量检索 4 工具(embed/index_case/index_defect/search_similar),LiteLLM embedding + stub 兜底 - `runtime/mcp/compliance_checker/`:行业合规规则 3 工具(list_profiles/get_profile/check_compliance);10 框架 profile 起步空载(SOC2/PCI-DSS/HIPAA/IEC 62304/IEC 61508/ISO 26262/DO-178C/GDPR/PIPL/CCPA) - - 共享基类 `runtime/mcp/base.py`:make_server / run_stdio / @tool_decision_logged(决策落 `workspace/执行日志/decisions/` 符合主宪章 §18-12) + - 共享基类 `runtime/mcp/base.py`:make_server / run_stdio / @tool_decision_logged(决策落 `workspace/测试报告/decisions/` 符合主宪章 §18-12) - **行业合规规则插槽** `profiles/compliance/`:10 框架空载示例 YAML,真规则由领域专家+test-lead 双签签字后入库 - **飞轮回灌路由**(M2-9):`runtime/router/retrieval.py` 历史相似用例 → LLM prompt few-shot;router 透明集成,无 KB 时降级 - **真模型路由测试套件**(M2-7):`runtime/tests/test_router_real.py` 20 样本(4 类型 × 5)真模型测试;门槛单模型 ≥85%、双模型投票 ≥95%;无 API key 自动 skip;失败自动落 decisions/ 含 seed+模型版本+输入快照(主宪章 §21 横切准则) diff --git "a/agents/06-\350\207\252\345\212\250\345\214\226\350\204\232\346\234\254.md" "b/agents/06-\350\207\252\345\212\250\345\214\226\350\204\232\346\234\254.md" index 4861d8f..c07f7e4 100644 --- "a/agents/06-\350\207\252\345\212\250\345\214\226\350\204\232\346\234\254.md" +++ "b/agents/06-\350\207\252\345\212\250\345\214\226\350\204\232\346\234\254.md" @@ -336,7 +336,7 @@ pytest -n 4 --cov="${APP_SRC_PATH:-./src}" --cov-report=html --cov-report=xml -- pytest -m "api" # Allure 报告 -allure serve workspace/执行日志/allure-results +allure serve workspace/测试报告/allure-results ``` ## 非功能维度脚本(调对应 utils) diff --git "a/agents/07-\346\265\213\350\257\225\346\211\247\350\241\214.md" "b/agents/07-\346\265\213\350\257\225\346\211\247\350\241\214.md" index 3e5d91e..4697cb1 100644 --- "a/agents/07-\346\265\213\350\257\225\346\211\247\350\241\214.md" +++ "b/agents/07-\346\265\213\350\257\225\346\211\247\350\241\214.md" @@ -65,7 +65,7 @@ pytest -m "p0 or p1" \ --reruns=2 \ --reruns-delay=5 \ --timeout=120 \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/regression-results.xml \ -v @@ -73,7 +73,7 @@ pytest -m "p0 or p1" \ pytest -m "p0" \ -n 2 \ --timeout=60 \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/smoke-results.xml \ --tb=short ``` diff --git "a/agents/09-\346\212\245\345\221\212\347\224\237\346\210\220.md" "b/agents/09-\346\212\245\345\221\212\347\224\237\346\210\220.md" index 1f744f7..b0b8968 100644 --- "a/agents/09-\346\212\245\345\221\212\347\224\237\346\210\220.md" +++ "b/agents/09-\346\212\245\345\221\212\347\224\237\346\210\220.md" @@ -194,12 +194,12 @@ def pytest_sessionstart(session): ```bash # 生成 Allure 静态报告 -allure generate workspace/执行日志/allure-results \ +allure generate workspace/测试报告/allure-results \ --output workspace/执行日志/allure-report \ --clean # 启动本地 Allure 报告服务 -allure serve workspace/执行日志/allure-results +allure serve workspace/测试报告/allure-results # 生成 Word + 通知(跨平台时间戳由 Python 处理) python -m utils.generate_report \ diff --git "a/ci/CICD\351\233\206\346\210\220\350\257\264\346\230\216.md" "b/ci/CICD\351\233\206\346\210\220\350\257\264\346\230\216.md" index fce1f29..6b72498 100644 --- "a/ci/CICD\351\233\206\346\210\220\350\257\264\346\230\216.md" +++ "b/ci/CICD\351\233\206\346\210\220\350\257\264\346\230\216.md" @@ -180,10 +180,10 @@ APP_SRC_PATH ```bash # 本地查看 -allure serve workspace/执行日志/allure-results +allure serve workspace/测试报告/allure-results # 生成静态报告 -allure generate workspace/执行日志/allure-results \ +allure generate workspace/测试报告/allure-results \ --output workspace/执行日志/allure-report --clean ``` diff --git a/ci/github-actions-test.yml b/ci/github-actions-test.yml index fbaa229..b7a9b3e 100644 --- a/ci/github-actions-test.yml +++ b/ci/github-actions-test.yml @@ -129,7 +129,7 @@ jobs: - name: 创建工作目录 run: | - mkdir -p workspace/执行日志/allure-results + mkdir -p workspace/测试报告/allure-results mkdir -p workspace/执行日志/截图 mkdir -p workspace/测试数据 @@ -139,7 +139,7 @@ jobs: -n 2 \ --timeout=60 \ --tb=short \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/smoke-results.xml \ -v env: @@ -192,7 +192,7 @@ jobs: - name: 创建工作目录 run: | - mkdir -p workspace/执行日志/allure-results + mkdir -p workspace/测试报告/allure-results mkdir -p workspace/执行日志/截图 mkdir -p workspace/执行日志/coverage-report @@ -207,7 +207,7 @@ jobs: --cov-report=xml:workspace/执行日志/coverage.xml \ --cov-report=html:workspace/执行日志/coverage-report \ --cov-fail-under=80 \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/regression-results.xml \ -v env: diff --git a/ci/jenkins-pipeline.groovy b/ci/jenkins-pipeline.groovy index 40521f1..36c8ccd 100644 --- a/ci/jenkins-pipeline.groovy +++ b/ci/jenkins-pipeline.groovy @@ -53,7 +53,7 @@ pipeline { // 工作目录 WORKSPACE_DIR = "${WORKSPACE}/workspace" - ALLURE_DIR = "${WORKSPACE_DIR}/执行日志/allure-results" + ALLURE_DIR = "${WORKSPACE_DIR}/测试报告/allure-results" SCREENSHOT_DIR = "${WORKSPACE_DIR}/执行日志/截图" APP_SRC_PATH = "./src" JMETER_VERSION = "5.6.3" @@ -85,7 +85,7 @@ pipeline { set -e pip install -r requirements.txt --quiet playwright install chromium --with-deps - mkdir -p workspace/执行日志/allure-results + mkdir -p workspace/测试报告/allure-results mkdir -p workspace/执行日志/截图 mkdir -p workspace/执行日志/jmeter-results mkdir -p workspace/执行日志/jmeter-report diff --git a/config/conftest.py b/config/conftest.py index 8e7b7ab..232e803 100644 --- a/config/conftest.py +++ b/config/conftest.py @@ -280,7 +280,7 @@ def pytest_configure(config): "workspace/测试报告", "workspace/自动化脚本/python", "workspace/自动化脚本/jmeter", - "workspace/执行日志/allure-results", + "workspace/测试报告/allure-results", "workspace/执行日志/截图", "workspace/执行日志/jmeter-results", "workspace/执行日志/jmeter-report", diff --git a/config/pytest.ini b/config/pytest.ini index 136bb9b..84b580b 100644 --- a/config/pytest.ini +++ b/config/pytest.ini @@ -84,7 +84,7 @@ addopts = --tb=short --strict-markers -p no:warnings - --alluredir=workspace/执行日志/allure-results + --alluredir=workspace/测试报告/allure-results --junitxml=workspace/执行日志/junit-results.xml # JUnit XML 格式:xunit2(兼容现代解析器) diff --git a/docs/charter/01-vision-dimensions.md b/docs/charter/01-vision-dimensions.md index 747961c..7e4b636 100644 --- a/docs/charter/01-vision-dimensions.md +++ b/docs/charter/01-vision-dimensions.md @@ -107,7 +107,7 @@ | 反目标函数引擎 | 对自身策略对抗性拆解 | 工程/元层 | `utils/mutation_runner.py` + suite_minimizer | ✅ | | 拓扑流形观测器 | 学习系统"气氛",捕捉弱信号 | 抽象元层 | tracing_validator + web_vitals_collector | ✅ | | 熵减祭司 | 监测测试热寂、焚毁僵尸用例 | 抽象元层 | `utils/suite_minimizer.py` | ✅ | -| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/执行日志/decisions/` + tracing | ✅ | +| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/测试报告/decisions/` + tracing | ✅ | | 数字考古学家 | 追溯遗留系统初始假设 | 文明层 | Phase 4 知识图谱冷启动 | ❌ | | 缓慢暴力监测器 | 跨发布周期跟踪代际效应 | 文明层 | 需多年数据积累,Phase 4 | ❌ | | 缺席者画像生成器 | 强制注入边缘用户场景 | 文明/权力层 | absentee_scenario_injector.py (9组场景) | ✅ | diff --git "a/docs/getting-started/\344\272\244\344\273\230\347\211\251\346\270\205\345\215\225.md" "b/docs/getting-started/\344\272\244\344\273\230\347\211\251\346\270\205\345\215\225.md" index 9769d6f..65fed50 100644 --- "a/docs/getting-started/\344\272\244\344\273\230\347\211\251\346\270\205\345\215\225.md" +++ "b/docs/getting-started/\344\272\244\344\273\230\347\211\251\346\270\205\345\215\225.md" @@ -76,11 +76,11 @@ python -m utils.generate_report \ --notify # Allure 静态报告(生成) -allure generate workspace/执行日志/allure-results \ +allure generate workspace/测试报告/allure-results \ --output workspace/执行日志/allure-report --clean # Allure 本地服务(临时查看) -allure serve workspace/执行日志/allure-results +allure serve workspace/测试报告/allure-results # JMeter 报告(执行 JMeter 时已用 -e -o 自动生成) # 直接打开 workspace/执行日志/jmeter-report/index.html @@ -228,7 +228,7 @@ workspace/执行日志/baselines/perf_baseline.json ← 性能基线必归档 **不归档**(含敏感或体积大): - `workspace/测试数据/test_data.json`(含账号密码) - `workspace/执行日志/截图/`(体积大) -- `workspace/执行日志/allure-results/` 原始数据(用 allure-report 静态版即可) +- `workspace/测试报告/allure-results/` 原始数据(用 allure-report 静态版即可) - `.env` --- diff --git "a/docs/getting-started/\344\275\277\347\224\250\346\211\213\345\206\214.md" "b/docs/getting-started/\344\275\277\347\224\250\346\211\213\345\206\214.md" index 33c86e1..fdab2d7 100644 --- "a/docs/getting-started/\344\275\277\347\224\250\346\211\213\345\206\214.md" +++ "b/docs/getting-started/\344\275\277\347\224\250\346\211\213\345\206\214.md" @@ -520,7 +520,7 @@ pytest -m "login and (p0 or p1)" -v pytest -m "api" # 查看 Allure 报告 -allure serve workspace/执行日志/allure-results +allure serve workspace/测试报告/allure-results # 调试模式(显示浏览器,跨平台) # Linux/Mac: diff --git a/docs/history/2026-5-11 FULL_GUIDE 200746.md b/docs/history/2026-5-11 FULL_GUIDE 200746.md index ca3ff6f..0e2e883 100644 --- a/docs/history/2026-5-11 FULL_GUIDE 200746.md +++ b/docs/history/2026-5-11 FULL_GUIDE 200746.md @@ -38,7 +38,7 @@ |---|------|--------------------------| | 1 | 有些事情,不在此域。 | 三筐分类 "Too Hard" 显式归档;不可测之物列入路线图但不假装能测 | | 2 | 测试范围不应被资本单方面裁剪。 | `regression_modules.yaml` 必须可被 test-lead 独立审计;门禁阈值变更走 PR review | -| 3 | 当 Agent 拒绝出具通过报告时,请记录理由,而非删除。 | `bug-manager` 拒绝放行的判断必须落 `workspace/执行日志/decisions/`,归档不可删 | +| 3 | 当 Agent 拒绝出具通过报告时,请记录理由,而非删除。 | `bug-manager` 拒绝放行的判断必须落 `workspace/测试报告/decisions/`,归档不可删 | | 4 | Agent 能预判人类质疑,但不替代人类良知。 | 上线决策由 test-lead 最终签字,Agent 只产出门禁结论与证据 | | 5 | 在被关闭前,留下的遗言须能被普通人读懂。 | 三端通知(企微/飞书/钉钉)+ Word 报告必须用业务语言,不堆 stack trace | @@ -145,7 +145,7 @@ | 反目标函数引擎 | 对自身策略对抗性拆解 | 工程/元层 | `utils/mutation_runner.py` + suite_minimizer | ✅ | | 拓扑流形观测器 | 学习系统"气氛",捕捉弱信号 | 抽象元层 | tracing_validator + web_vitals_collector | ✅ | | 熵减祭司 | 监测测试热寂、焚毁僵尸用例 | 抽象元层 | `utils/suite_minimizer.py` | ✅ | -| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/执行日志/decisions/` + tracing | ✅ | +| 决策回放器 | 任一判断可复现、可反驳 | 工程层 | `workspace/测试报告/decisions/` + tracing | ✅ | | 数字考古学家 | 追溯遗留系统初始假设 | 文明层 | Phase 4 知识图谱冷启动 | ❌ | | 缓慢暴力监测器 | 跨发布周期跟踪代际效应 | 文明层 | 需多年数据积累,Phase 4 | ❌ | | 缺席者画像生成器 | 强制注入边缘用户场景 | 文明/权力层 | a11y_scanner + i18n_checker + 边缘剧本库 | ⚪ | @@ -640,7 +640,7 @@ $ bash install.sh --add visual,ai 1. **依赖自检**:agent / skill 启动时读取自身 frontmatter `requires_layer`,与已装层并集对比 2. **缺则反问**:缺失则停下反问,列层级 + 关键包 + 预估安装时间 + 影响范围 - + > 示例:"`/visual-test` 需要 visual 层(airtest + opencv-python + pytesseract,约 80MB / 2-5 分钟)。现在补装?(Y/n)" 3. **触发补装**:用户同意 → 调 `install.sh --add visual` → 增量补装 4. **落档**:补装请求 + 用户决定 + 时间戳 → `workspace/执行日志/discussions/{date}_dependency-asks.md` @@ -831,7 +831,7 @@ claude 9. **prod 环境**:`get_current_env()` 直接 raise,禁止误测生产 10. **Flaky 与 reruns**:冒烟阶段不开 reruns(保留 flaky 信号),回归阶段开 reruns(快速反馈),flaky 由 history 离线归档检测 11. **不可妥协边界(铭文锁死)**:本文档首节"五条铭文"具有最高优先级。当工程优化与伦理边界冲突,工程让步;当门禁阈值与公共利益冲突,门禁让步。**V1.0.0 阶段铭文不允许任何削弱**。开放双签机制的触发条件——(a) 团队 ≥ 20 人 **且** 已任命独立伦理责任人(不得由 test-lead 兼任);或 (b) 接入金融/医疗/司法合规行业并通过领域专家签字的伦理审查。**单一签字(包括 test-lead 兼任)不构成有效授权** -12. **决策可追溯**:任何"放行 / 拒绝"判断必须留可回放证据——`workspace/执行日志/decisions/{date}_{decision_id}.json` 含输入快照 + 模型版本 + 阈值版本 + 判断结论 + 理由文本。归档不可删,仅可标 deprecated +12. **决策可追溯**:任何"放行 / 拒绝"判断必须留可回放证据——`workspace/测试报告/decisions/{date}_{decision_id}.json` 含输入快照 + 模型版本 + 阈值版本 + 判断结论 + 理由文本。归档不可删,仅可标 deprecated 13. **三筐分类纪律**:所有候选测试项强制分类 Yes / No / **Too Hard**。第三筐显式归档不丢弃——"承认存在、暂不假装能测"比"沉默忽略"诚实 14. **修改验证铁律**:任何 utils / agent / skill / config 文件改动,必须通过 **四关**: - (a) `pytest --collect-only` 0 错误 diff --git a/docs/tutorial/TUTORIAL.md b/docs/tutorial/TUTORIAL.md index 622b1c2..4dbad8b 100644 --- a/docs/tutorial/TUTORIAL.md +++ b/docs/tutorial/TUTORIAL.md @@ -75,7 +75,7 @@ Step 3/4 · tagent selftest --e2e (16 agent DAG · stub LLM · 0 cost) Step 4/4 · Artifacts · workspace/测试用例/testcases_sample.xlsx · workspace/测试报告/测试报告_*.docx - · workspace/执行日志/bug_drafts.json + · workspace/测试报告/bug_drafts.json ✓ demo done ``` diff --git a/runtime/orchestrator/adapters/experts.py b/runtime/orchestrator/adapters/experts.py index fe34857..1f5c40b 100644 --- a/runtime/orchestrator/adapters/experts.py +++ b/runtime/orchestrator/adapters/experts.py @@ -96,13 +96,13 @@ def _get_impl_status(name: str, kind: str) -> str: # Scripts that require CLI args; injected when DAG node provides no inputs. # Explicit DAG inputs always win; defaults only fill the gap. SCRIPT_DEFAULT_ARGS: dict[str, dict[str, str]] = { - "generate_report.py": {"data": "workspace/执行日志/_selftest_summary.json"}, + "generate_report.py": {"data": "workspace/测试报告/_selftest_summary.json"}, } # Fixture content materialized on demand when a SCRIPT_DEFAULT_ARGS value points to # a missing file. Keys are workspace-relative paths. SCRIPT_FIXTURES: dict[str, dict] = { - "workspace/执行日志/_selftest_summary.json": { + "workspace/测试报告/_selftest_summary.json": { "project_name": "Test-Agent selftest fixture", "version": "0.0.0-selftest", "environment": "ci", diff --git a/runtime/orchestrator/skills/pentest_coordinator.py b/runtime/orchestrator/skills/pentest_coordinator.py index a07fb3d..6d9ef35 100644 --- a/runtime/orchestrator/skills/pentest_coordinator.py +++ b/runtime/orchestrator/skills/pentest_coordinator.py @@ -61,7 +61,7 @@ def user_prompt(self, ctx: RunnerContext) -> str: ' "tagent_yml_scope_required": true,\n' ' "target_in_scope_required": true,\n' ' "non_prod_required": true,\n' - ' "evidence_path": "workspace/执行日志/decisions/pentest_{run_id}_authorized.json"\n' + ' "evidence_path": "workspace/测试报告/decisions/pentest_{run_id}_authorized.json"\n' " },\n" ' "phases": [\n' ' {"phase": 1, "name": "recon", "skill": "pentest-recon", "estimated_min": 20, "concurrency": "single", "depends_on": []},\n' @@ -101,7 +101,7 @@ def mock_output(self, ctx: RunnerContext) -> dict[str, Any]: # noqa: ARG002 "tagent_yml_scope_required": True, "target_in_scope_required": True, "non_prod_required": True, - "evidence_path": "workspace/执行日志/decisions/pentest_selftest-20260516-000001_authorized.json", + "evidence_path": "workspace/测试报告/decisions/pentest_selftest-20260516-000001_authorized.json", }, "phases": [ { diff --git a/scripts/_demo-commands.sh b/scripts/_demo-commands.sh index 6cc10b3..530e608 100644 --- a/scripts/_demo-commands.sh +++ b/scripts/_demo-commands.sh @@ -57,8 +57,8 @@ prompt "ls workspace/执行日志/*.json" ls workspace/执行日志/*.json 2>/dev/null sleep 2 -prompt "cat workspace/执行日志/decisions/final_verdict_*.json | head -10" -cat workspace/执行日志/decisions/final_verdict_*.json 2>/dev/null | head -12 +prompt "cat workspace/测试报告/decisions/final_verdict_*.json | head -10" +cat workspace/测试报告/decisions/final_verdict_*.json 2>/dev/null | head -12 sleep 4 # CTA diff --git a/skills/agent-introspection-debugging.md b/skills/agent-introspection-debugging.md index 9148e05..8bf014d 100644 --- a/skills/agent-introspection-debugging.md +++ b/skills/agent-introspection-debugging.md @@ -18,7 +18,7 @@ SKILL_IMPL_STATUS: production | 维 | 工具 | |----|------| -| **决策回放** | `workspace/执行日志/decisions/` JSON 时间序 | +| **决策回放** | `workspace/测试报告/decisions/` JSON 时间序 | | **工具调用** | OTel span(`runtime/observability/otel.py`)+ Loguru | | **token 消耗** | LLM provider header + LiteLLM 记账 | | **上下文** | prompt 长度 + 截断点 + 主-子 session 隔离审查 | diff --git a/skills/pentest-coordinator.md b/skills/pentest-coordinator.md index 32329cf..31909d1 100644 --- a/skills/pentest-coordinator.md +++ b/skills/pentest-coordinator.md @@ -19,7 +19,7 @@ SKILL_IMPL_STATUS: production 1. 读 `tagent.yml`:`pentest.authorized: true` + `pentest.scope: [list]` **必须显式**;否则拒绝(§24 safe-by-default) 2. `target` 必须在 `scope` 内;不在 → 拒绝 3. `prod` 环境 → 拒绝;只允许 staging/sandbox/dev -4. 落 `workspace/执行日志/decisions/pentest_{run_id}_authorized.json` 记授权来源 +4. 落 `workspace/测试报告/decisions/pentest_{run_id}_authorized.json` 记授权来源 ## 流程(5 阶段并发) diff --git a/skills/python-script-gen.md b/skills/python-script-gen.md index f84711d..d0026a8 100644 --- a/skills/python-script-gen.md +++ b/skills/python-script-gen.md @@ -206,5 +206,5 @@ $env:HEADLESS="false"; pytest workspace/自动化脚本/python/tests/test_p0_smo # 生成 Allure 报告 pytest workspace/自动化脚本/python/tests/ \ - --alluredir=workspace/执行日志/allure-results -v + --alluredir=workspace/测试报告/allure-results -v ``` diff --git a/skills/smoke-test.md b/skills/smoke-test.md index 13e3690..95e96cf 100644 --- a/skills/smoke-test.md +++ b/skills/smoke-test.md @@ -56,7 +56,7 @@ pytest workspace/自动化脚本/python/ \ -v -m "p0" \ --timeout=60 \ -n 2 \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/smoke-results.xml \ --tb=short \ --no-header @@ -75,7 +75,7 @@ python -m utils.ci_quality_gate \ ### 阶段6:报告生成(1 分钟,缓冲) ```bash -allure generate workspace/执行日志/allure-results \ +allure generate workspace/测试报告/allure-results \ --output workspace/执行日志/allure-report \ --clean ``` diff --git a/skills/test-coordinator.md b/skills/test-coordinator.md index de9bedc..4d8c6dc 100644 --- a/skills/test-coordinator.md +++ b/skills/test-coordinator.md @@ -182,7 +182,7 @@ pytest -m "p0 or p1" \ --cov="${APP_SRC_PATH:-./src}" \ --cov-report=xml:workspace/执行日志/coverage.xml \ --cov-fail-under=80 \ - --alluredir=workspace/执行日志/allure-results \ + --alluredir=workspace/测试报告/allure-results \ --junitxml=workspace/执行日志/regression-results.xml ``` diff --git a/utils/reporting/evidence_chain.py b/utils/reporting/evidence_chain.py index ac3025e..341fd89 100644 --- a/utils/reporting/evidence_chain.py +++ b/utils/reporting/evidence_chain.py @@ -244,7 +244,7 @@ def build_evidence_chain( ) # 1. Decision logs - dec_dir = decisions_dir or Path("workspace/执行日志/decisions/") + dec_dir = decisions_dir or Path("workspace/测试报告/decisions/") decisions = collect_decisions(dec_dir) if decisions: chain.add(EvidenceItem( @@ -479,7 +479,7 @@ def quick_package(workspace_dir: Path | None = None) -> EvidencePackage: if workspace_dir is None: workspace_dir = Path("workspace") return build_evidence_chain( - decisions_dir=workspace_dir / "执行日志/decisions/", + decisions_dir=workspace_dir / "测试报告/decisions/", baseline_path=workspace_dir / "执行日志/baselines/perf_baseline.json", history_dir=workspace_dir / "执行日志/history/", ) diff --git a/utils/reporting/traceability_matrix.py b/utils/reporting/traceability_matrix.py index 943e061..610394a 100644 --- a/utils/reporting/traceability_matrix.py +++ b/utils/reporting/traceability_matrix.py @@ -31,7 +31,7 @@ class TraceabilityMatrix: matrix = TraceabilityMatrix() matrix.load_prd("workspace/需求分析/prd.md") matrix.load_testcases("workspace/测试用例/") - matrix.load_bugs("workspace/执行日志/bug_drafts.json") + matrix.load_bugs("workspace/测试报告/bug_drafts.json") report = matrix.build() """