docs(#114): upgrade DevHarness workflow baseline
This commit is contained in:
+36
-14
@@ -3,8 +3,8 @@
|
||||
子命令:
|
||||
check 检查必需文件、核心文档和既有任务快照结构
|
||||
sync 从 Gitea Wiki 单向导出或校验核心 docs 镜像
|
||||
archive 按用户明确要求在 Gitea Wiki 创建历史任务快照
|
||||
export 人工按需把历史任务快照导出到 docs/task
|
||||
archive 按用户明确要求在 Gitea Wiki 创建可选任务快照
|
||||
export 人工按需把已有任务快照导出到 docs/task
|
||||
|
||||
各子命令的实现逻辑取自原来的 check_harness.py、sync_wiki_docs.py、
|
||||
new_task_archive.py 和 export_task_archives.py,行为未改变。
|
||||
@@ -51,6 +51,7 @@ CORE_PAGE_PATHS = {
|
||||
"PDD-Detail-Rule-Migration-Analysis": (
|
||||
"docs/11-pdd-detail-rule-migration-analysis.md"
|
||||
),
|
||||
"Deployment-Template": "docs/templates/deployment.md",
|
||||
"Task-Archive-Template": "docs/templates/task-archive.md",
|
||||
}
|
||||
# 按 GoAuto 实际文档结构定义,不照抄 DevHarness 模板章节名。
|
||||
@@ -75,9 +76,10 @@ CORE_DOCUMENT_REQUIREMENTS = {
|
||||
"docs/01-workflow.md": (
|
||||
"## 事实来源",
|
||||
"## 权威源与事实边界",
|
||||
"## Gitea 交互与工单最小读取",
|
||||
"## 新项目 Wiki 初始化门禁",
|
||||
"## 工单与设计证据双门禁",
|
||||
"### 本地 HTML 审核快照",
|
||||
"### 线上原型审核与按需导出",
|
||||
"## 任务层级与状态",
|
||||
"## 单元任务闭环",
|
||||
"## 标准任务节奏",
|
||||
@@ -99,6 +101,7 @@ CORE_DOCUMENT_REQUIREMENTS = {
|
||||
"## 术语",
|
||||
),
|
||||
"docs/04-local-development-and-verification.md": (
|
||||
"## Windows PowerShell 与 UTF-8",
|
||||
"## 通用检查",
|
||||
"## 服务端验证",
|
||||
"## Web 验证",
|
||||
@@ -123,6 +126,7 @@ REQUIRED_FILES = (
|
||||
"README.md",
|
||||
"docs/00-project-profile.md",
|
||||
"docs/01-workflow.md",
|
||||
"docs/templates/deployment.md",
|
||||
"docs/templates/task-archive.md",
|
||||
*CORE_DOCUMENT_REQUIREMENTS,
|
||||
"wiki-docs.json",
|
||||
@@ -225,10 +229,10 @@ def check_task_template(errors: list[str], root: Path = ROOT) -> None:
|
||||
"## 设计与原型门禁",
|
||||
"- 修改类型:纯显示文案 / 小范围 UI / 新组件 / 新页面或独立用户功能 / 重大交互或导航 / 非 UI / 恢复既有行为的 Bug",
|
||||
"- 所需设计证据:无 / 标注截图 / 低保真图 / 已确认原型 / 架构、API、数据、状态或流程设计 / 原设计或复现证据",
|
||||
"- 可编辑设计源链接、版本或事实来源:",
|
||||
"- 本地 HTML 审核快照路径和版本(不适用时说明原因):",
|
||||
"- 本地浏览方式和资源完整性检查:",
|
||||
"- 版本、revision 或确认日期:",
|
||||
"- 可编辑设计源、线上原型链接和访问检查:",
|
||||
"- 审核版本、revision、复制版本或确认日期及识别方式:",
|
||||
"- 本地 HTML 导出:未要求 / 用户明确要求 / 项目规则要求",
|
||||
"- 本地 HTML 路径、版本和资源检查(仅显式导出时填写):",
|
||||
"- 状态:无 / 草稿 / 已确认 / 已废弃",
|
||||
"- 确认人、确认时间和覆盖范围:",
|
||||
"- 无需 UI 原型或无需任何原型的原因:",
|
||||
@@ -244,6 +248,11 @@ def check_task_template(errors: list[str], root: Path = ROOT) -> None:
|
||||
"- [ ] 更新已有交付文档,受众与页面:",
|
||||
"- [ ] 新增交付文档,受众与页面:",
|
||||
"- [ ] 需要目标岗位或客户代表验证:是 / 否;验证方式:",
|
||||
"## 任务记录与可选快照",
|
||||
"- 单次任务事实来源:当前 Gitea 工单正文与评论",
|
||||
"- [ ] 默认不创建任务快照",
|
||||
"- [ ] 用户明确要求专项快照;用途和范围:",
|
||||
"- [ ] 项目专用规则要求任务快照;规则入口:",
|
||||
)
|
||||
for section in missing_sections(content, required):
|
||||
errors.append(f"单元任务模板缺少:{section}")
|
||||
@@ -268,16 +277,27 @@ def check_agent_efficiency_rules(errors: list[str], root: Path = ROOT) -> None:
|
||||
"Wiki 同步由长期事实变化触发,不由任务完成触发",
|
||||
"标准流程不创建 Wiki 任务归档",
|
||||
"工单默认只在开始实施、集中回写待验收、验收关闭三个节点更新",
|
||||
"### Gitea 交互与工单最小读取",
|
||||
"查询、创建、更新、评论、状态变更及关闭操作",
|
||||
"优先关注当前状态、最新评论和首个未完成步骤",
|
||||
"连接器不支持评论分页或增量读取时允许读取完整工单",
|
||||
"不得为规避完整读取而新增本地工单、缓存或第二事实来源",
|
||||
"「当前实现」",
|
||||
"「目标契约」",
|
||||
"### 新项目 Wiki 初始化门禁",
|
||||
"`Home` 不存在时必须先创建 `Home`",
|
||||
"不得把模板自带的本地 `docs/` 当作新项目 Wiki 已初始化的证据",
|
||||
"提交只包含当前工单相关文件",
|
||||
"不得仅为设置编码重复启动一层 PowerShell",
|
||||
"文件解码和控制台输出分别处理",
|
||||
"不得默认使用 `-ExecutionPolicy Bypass`",
|
||||
"### 工单与设计证据双门禁",
|
||||
"新页面、独立用户功能、重大交互或导航变化",
|
||||
"`prototypes/<工单号>/<版本>/index.html`",
|
||||
"已确认的 HTML 快照不得原位覆盖",
|
||||
"默认直接通过 QuantUX 或其他设计工具的线上链接审核",
|
||||
"已确认的本地快照不得原位覆盖",
|
||||
"`导出原型 #N`",
|
||||
"`导出全部原型`",
|
||||
"代码组件名、类名、变量、国际化键、API 字段和数据库字段不是显示文案",
|
||||
"### 自然语言快捷指令",
|
||||
"`只分析`",
|
||||
@@ -287,6 +307,8 @@ def check_agent_efficiency_rules(errors: list[str], root: Path = ROOT) -> None:
|
||||
"`继续工单 #N`",
|
||||
"`检查工单 #N`",
|
||||
"`同步文档`",
|
||||
"`导出原型 #N`",
|
||||
"`导出全部原型`",
|
||||
"`导出任务归档`",
|
||||
"`导出全部任务归档`",
|
||||
"`#N 验收通过`",
|
||||
@@ -400,7 +422,7 @@ def check_wiki_mirrors(errors: list[str]) -> None:
|
||||
errors.append(f"{mapping.path} 缺少 synchronized_at")
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- 按需历史任务快照
|
||||
# ---------------------------------------------------------------- 按需任务快照
|
||||
|
||||
def safe_title(title: str) -> str:
|
||||
"""把标题转换为适合 Wiki 页面名和 Windows 文件名的短文本。"""
|
||||
@@ -425,7 +447,7 @@ def build_archive(
|
||||
return content.replace("<页面名>", page_name, 1)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- 历史任务快照导出
|
||||
# ---------------------------------------------------------------- 任务快照导出
|
||||
|
||||
TASK_PAGE_PATTERN = re.compile(r"^Task-(?P<number>\d+)-(?P<title>.+)$")
|
||||
|
||||
@@ -602,7 +624,7 @@ def run_archive(args: argparse.Namespace) -> int:
|
||||
return 1
|
||||
|
||||
print(f"已创建 Wiki:{page.html_url}")
|
||||
print("未导出本地历史快照;用户明确要求时运行 harness.py export")
|
||||
print("未导出本地任务快照;用户明确要求时运行 harness.py export")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -615,7 +637,7 @@ def run_export(args: argparse.Namespace) -> int:
|
||||
return 1
|
||||
for message in messages:
|
||||
print(message)
|
||||
print("历史任务快照全量导出完成" if args.all else "历史任务快照增量导出完成")
|
||||
print("任务快照全量导出完成" if args.all else "任务快照增量导出完成")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -643,7 +665,7 @@ def main() -> int:
|
||||
)
|
||||
p_sync.set_defaults(func=run_sync)
|
||||
|
||||
p_archive = sub.add_parser("archive", help="按需在 Gitea Wiki 创建历史任务快照")
|
||||
p_archive = sub.add_parser("archive", help="显式在 Gitea Wiki 创建可选任务快照")
|
||||
p_archive.add_argument("issue_number", help="Gitea 工单号,例如 123")
|
||||
p_archive.add_argument("title", help="简短任务标题")
|
||||
p_archive.add_argument(
|
||||
@@ -651,7 +673,7 @@ def main() -> int:
|
||||
)
|
||||
p_archive.set_defaults(func=run_archive)
|
||||
|
||||
p_export = sub.add_parser("export", help="人工按需导出 Gitea Wiki 历史任务快照")
|
||||
p_export = sub.add_parser("export", help="人工按需导出 Gitea Wiki 任务快照")
|
||||
p_export.add_argument(
|
||||
"--all",
|
||||
action="store_true",
|
||||
|
||||
Reference in New Issue
Block a user