@aipper/aiws-spec 0.0.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.
Files changed (145) hide show
  1. package/README.md +12 -0
  2. package/docs/cli-interface.md +288 -0
  3. package/docs/spec-contract.md +183 -0
  4. package/package.json +18 -0
  5. package/templates/workspace/.agents/skills/aiws-change-archive/SKILL.md +23 -0
  6. package/templates/workspace/.agents/skills/aiws-change-list/SKILL.md +18 -0
  7. package/templates/workspace/.agents/skills/aiws-change-new/SKILL.md +26 -0
  8. package/templates/workspace/.agents/skills/aiws-change-next/SKILL.md +19 -0
  9. package/templates/workspace/.agents/skills/aiws-change-start/SKILL.md +27 -0
  10. package/templates/workspace/.agents/skills/aiws-change-status/SKILL.md +19 -0
  11. package/templates/workspace/.agents/skills/aiws-change-sync/SKILL.md +19 -0
  12. package/templates/workspace/.agents/skills/aiws-change-templates-init/SKILL.md +18 -0
  13. package/templates/workspace/.agents/skills/aiws-change-templates-which/SKILL.md +18 -0
  14. package/templates/workspace/.agents/skills/aiws-change-validate/SKILL.md +23 -0
  15. package/templates/workspace/.agents/skills/aiws-hooks-install/SKILL.md +30 -0
  16. package/templates/workspace/.agents/skills/aiws-hooks-status/SKILL.md +18 -0
  17. package/templates/workspace/.agents/skills/aiws-init/SKILL.md +27 -0
  18. package/templates/workspace/.agents/skills/aiws-rollback/SKILL.md +18 -0
  19. package/templates/workspace/.agents/skills/aiws-update/SKILL.md +26 -0
  20. package/templates/workspace/.agents/skills/aiws-validate/SKILL.md +22 -0
  21. package/templates/workspace/.agents/skills/ws-analyze/SKILL.md +26 -0
  22. package/templates/workspace/.agents/skills/ws-commit/SKILL.md +50 -0
  23. package/templates/workspace/.agents/skills/ws-dev/SKILL.md +34 -0
  24. package/templates/workspace/.agents/skills/ws-migrate/SKILL.md +54 -0
  25. package/templates/workspace/.agents/skills/ws-plan/SKILL.md +39 -0
  26. package/templates/workspace/.agents/skills/ws-preflight/SKILL.md +29 -0
  27. package/templates/workspace/.agents/skills/ws-req-change/SKILL.md +33 -0
  28. package/templates/workspace/.agents/skills/ws-req-contract-sync/SKILL.md +17 -0
  29. package/templates/workspace/.agents/skills/ws-req-contract-validate/SKILL.md +12 -0
  30. package/templates/workspace/.agents/skills/ws-req-flow-sync/SKILL.md +28 -0
  31. package/templates/workspace/.agents/skills/ws-req-review/SKILL.md +32 -0
  32. package/templates/workspace/.agents/skills/ws-review/SKILL.md +24 -0
  33. package/templates/workspace/.agents/skills/ws-rule/SKILL.md +23 -0
  34. package/templates/workspace/.aiws/manifest.json +36 -0
  35. package/templates/workspace/.claude/commands/aiws-init.md +19 -0
  36. package/templates/workspace/.claude/commands/aiws-rollback.md +12 -0
  37. package/templates/workspace/.claude/commands/aiws-update.md +18 -0
  38. package/templates/workspace/.claude/commands/aiws-validate.md +13 -0
  39. package/templates/workspace/.claude/commands/ws-analyze.md +27 -0
  40. package/templates/workspace/.claude/commands/ws-dev.md +24 -0
  41. package/templates/workspace/.claude/commands/ws-migrate.md +22 -0
  42. package/templates/workspace/.claude/commands/ws-preflight.md +27 -0
  43. package/templates/workspace/.claude/commands/ws-req-change.md +34 -0
  44. package/templates/workspace/.claude/commands/ws-req-contract-sync.md +18 -0
  45. package/templates/workspace/.claude/commands/ws-req-contract-validate.md +13 -0
  46. package/templates/workspace/.claude/commands/ws-req-flow-sync.md +20 -0
  47. package/templates/workspace/.claude/commands/ws-req-review.md +33 -0
  48. package/templates/workspace/.claude/commands/ws-review.md +25 -0
  49. package/templates/workspace/.claude/commands/ws-rule.md +24 -0
  50. package/templates/workspace/.codex/prompts/aiws-init.md +23 -0
  51. package/templates/workspace/.codex/prompts/aiws-rollback.md +16 -0
  52. package/templates/workspace/.codex/prompts/aiws-update.md +22 -0
  53. package/templates/workspace/.codex/prompts/aiws-validate.md +17 -0
  54. package/templates/workspace/.codex/prompts/ws-analyze.md +32 -0
  55. package/templates/workspace/.codex/prompts/ws-dev.md +29 -0
  56. package/templates/workspace/.codex/prompts/ws-migrate.md +27 -0
  57. package/templates/workspace/.codex/prompts/ws-preflight.md +32 -0
  58. package/templates/workspace/.codex/prompts/ws-req-change.md +39 -0
  59. package/templates/workspace/.codex/prompts/ws-req-contract-sync.md +23 -0
  60. package/templates/workspace/.codex/prompts/ws-req-contract-validate.md +18 -0
  61. package/templates/workspace/.codex/prompts/ws-req-flow-sync.md +25 -0
  62. package/templates/workspace/.codex/prompts/ws-req-review.md +38 -0
  63. package/templates/workspace/.codex/prompts/ws-review.md +30 -0
  64. package/templates/workspace/.codex/prompts/ws-rule.md +29 -0
  65. package/templates/workspace/.githooks/pre-commit +32 -0
  66. package/templates/workspace/.githooks/pre-push +32 -0
  67. package/templates/workspace/.iflow/agents/feature-reviewer.md +27 -0
  68. package/templates/workspace/.iflow/agents/requirements-analyst.md +24 -0
  69. package/templates/workspace/.iflow/agents/server-commit-manager.md +28 -0
  70. package/templates/workspace/.iflow/agents/server-fix-implementer.md +31 -0
  71. package/templates/workspace/.iflow/agents/server-test-planner.md +28 -0
  72. package/templates/workspace/.iflow/agents/server-test-triager.md +30 -0
  73. package/templates/workspace/.iflow/commands/aiws-init.toml +24 -0
  74. package/templates/workspace/.iflow/commands/aiws-rollback.toml +18 -0
  75. package/templates/workspace/.iflow/commands/aiws-update.toml +23 -0
  76. package/templates/workspace/.iflow/commands/aiws-validate.toml +18 -0
  77. package/templates/workspace/.iflow/commands/server-commit.toml +27 -0
  78. package/templates/workspace/.iflow/commands/server-drain.toml +99 -0
  79. package/templates/workspace/.iflow/commands/server-fix-and-commit.toml +27 -0
  80. package/templates/workspace/.iflow/commands/server-fix.toml +65 -0
  81. package/templates/workspace/.iflow/commands/server-test-plan.toml +62 -0
  82. package/templates/workspace/.iflow/commands/server-test.toml +58 -0
  83. package/templates/workspace/.iflow/commands/server-triage.toml +38 -0
  84. package/templates/workspace/.iflow/commands/server_test-plan.toml +12 -0
  85. package/templates/workspace/.iflow/commands/server_test.toml +12 -0
  86. package/templates/workspace/.iflow/commands/ws-analyze.toml +33 -0
  87. package/templates/workspace/.iflow/commands/ws-contract-check.toml +69 -0
  88. package/templates/workspace/.iflow/commands/ws-dev.toml +34 -0
  89. package/templates/workspace/.iflow/commands/ws-doctor.toml +141 -0
  90. package/templates/workspace/.iflow/commands/ws-env-doctor.toml +74 -0
  91. package/templates/workspace/.iflow/commands/ws-feature-deliver.toml +44 -0
  92. package/templates/workspace/.iflow/commands/ws-feature-plan.toml +47 -0
  93. package/templates/workspace/.iflow/commands/ws-init.toml +53 -0
  94. package/templates/workspace/.iflow/commands/ws-memory-bank-init.toml +100 -0
  95. package/templates/workspace/.iflow/commands/ws-migrate.toml +59 -0
  96. package/templates/workspace/.iflow/commands/ws-preflight.toml +30 -0
  97. package/templates/workspace/.iflow/commands/ws-req-change.toml +52 -0
  98. package/templates/workspace/.iflow/commands/ws-req-contract-sync.toml +25 -0
  99. package/templates/workspace/.iflow/commands/ws-req-contract-validate.toml +16 -0
  100. package/templates/workspace/.iflow/commands/ws-req-flow-sync.toml +36 -0
  101. package/templates/workspace/.iflow/commands/ws-req-review.toml +56 -0
  102. package/templates/workspace/.iflow/commands/ws-review.toml +32 -0
  103. package/templates/workspace/.iflow/commands/ws-rule.toml +43 -0
  104. package/templates/workspace/.opencode/command/aiws-init.md +19 -0
  105. package/templates/workspace/.opencode/command/aiws-rollback.md +12 -0
  106. package/templates/workspace/.opencode/command/aiws-update.md +18 -0
  107. package/templates/workspace/.opencode/command/aiws-validate.md +13 -0
  108. package/templates/workspace/.opencode/command/ws-analyze.md +27 -0
  109. package/templates/workspace/.opencode/command/ws-dev.md +24 -0
  110. package/templates/workspace/.opencode/command/ws-migrate.md +22 -0
  111. package/templates/workspace/.opencode/command/ws-preflight.md +27 -0
  112. package/templates/workspace/.opencode/command/ws-req-change.md +34 -0
  113. package/templates/workspace/.opencode/command/ws-req-contract-sync.md +18 -0
  114. package/templates/workspace/.opencode/command/ws-req-contract-validate.md +13 -0
  115. package/templates/workspace/.opencode/command/ws-req-flow-sync.md +20 -0
  116. package/templates/workspace/.opencode/command/ws-req-review.md +33 -0
  117. package/templates/workspace/.opencode/command/ws-review.md +25 -0
  118. package/templates/workspace/.opencode/command/ws-rule.md +24 -0
  119. package/templates/workspace/AGENTS.md +22 -0
  120. package/templates/workspace/AI_PROJECT.md +86 -0
  121. package/templates/workspace/AI_WORKSPACE.md +167 -0
  122. package/templates/workspace/REQUIREMENTS.md +94 -0
  123. package/templates/workspace/changes/README.md +55 -0
  124. package/templates/workspace/changes/templates/design.md +29 -0
  125. package/templates/workspace/changes/templates/proposal.md +59 -0
  126. package/templates/workspace/changes/templates/tasks.md +33 -0
  127. package/templates/workspace/issues/problem-issues.csv +2 -0
  128. package/templates/workspace/manifest.json +205 -0
  129. package/templates/workspace/memory-bank/README.md +14 -0
  130. package/templates/workspace/memory-bank/architecture.md +9 -0
  131. package/templates/workspace/memory-bank/implementation-plan.md +11 -0
  132. package/templates/workspace/memory-bank/progress.md +10 -0
  133. package/templates/workspace/memory-bank/tech-stack.md +11 -0
  134. package/templates/workspace/requirements/CHANGELOG.md +13 -0
  135. package/templates/workspace/requirements/requirements-issues.csv +2 -0
  136. package/templates/workspace/secrets/test-accounts.example.json +32 -0
  137. package/templates/workspace/tools/iflow_watchdog.sh +138 -0
  138. package/templates/workspace/tools/install_iflow_watchdog_systemd_user.sh +118 -0
  139. package/templates/workspace/tools/requirements_contract.py +285 -0
  140. package/templates/workspace/tools/requirements_contract_sync.py +290 -0
  141. package/templates/workspace/tools/requirements_flow_gen.py +250 -0
  142. package/templates/workspace/tools/server_test_runner.py +1902 -0
  143. package/templates/workspace/tools/systemd/iflow-watchdog@.service +16 -0
  144. package/templates/workspace/tools/systemd/iflow-watchdog@.timer +11 -0
  145. package/templates/workspace/tools/ws_change_check.py +323 -0
@@ -0,0 +1,55 @@
1
+ # changes/(变更工件目录)
2
+
3
+ 本目录用于保存每一次“需求交付 / 问题修复”的可审计产物,避免关键约定只存在于聊天记录。
4
+
5
+ 真值文件仍然是:
6
+ - `AI_PROJECT.md`(约束真值)
7
+ - `AI_WORKSPACE.md`(运行/测试真值)
8
+ - `REQUIREMENTS.md`(需求/验收真值)
9
+
10
+ 建议结构:
11
+ ```
12
+ changes/
13
+ README.md
14
+ <change-id>/
15
+ proposal.md
16
+ design.md # 可选
17
+ tasks.md
18
+ .ws-change.json
19
+ archive/
20
+ YYYY-MM-DD-<change-id>/
21
+ ```
22
+
23
+ 常用命令(推荐使用 `aiws`;不依赖 dotfiles):
24
+ - `aiws change start <change-id>`(推荐:自动切到 `change/<change-id>` 并初始化工件目录)
25
+ - `aiws change new <change-id>`
26
+ - `aiws change list`
27
+ - `aiws change status <change-id>`
28
+ - `aiws change next <change-id>`
29
+ - `aiws change validate <change-id>`
30
+ - `aiws change sync <change-id>`
31
+ - `aiws change archive <change-id>`
32
+
33
+ Active change(推荐,团队共享):
34
+ - 使用分支名声明当前变更:`change/<change-id>`(也支持 `changes/`、`ws/`、`ws-change/`)
35
+ - 切到该分支后,可省略 `<change-id>` 执行:`aiws change status|next|validate|sync|archive`
36
+
37
+ 模板覆盖(可选):
38
+ - 在工作区创建 `changes/templates/` 可覆盖默认模板:
39
+ - `changes/templates/proposal.md`
40
+ - `changes/templates/tasks.md`
41
+ - `changes/templates/design.md`
42
+ - 快速初始化模板:`aiws change templates init`
43
+ - 查看模板来源:`aiws change templates which`
44
+
45
+ 注意:
46
+ - 不要把任何 secrets 写进 proposal/design/tasks(账号、token、内网地址等用本地私有文件/环境变量)。
47
+ - 若真值文件(`AI_PROJECT.md` / `AI_WORKSPACE.md` / `REQUIREMENTS.md`)在变更期间发生变化,严格校验/归档会要求先运行 `aiws change sync <change-id>` 确认基线。
48
+
49
+ Hooks/CI(推荐,硬约束):
50
+ - 工作区会安装 `.githooks/{pre-commit,pre-push}`(默认执行 `aiws validate .`)与门禁脚本(`tools/ws_change_check.py`、`tools/requirements_contract.py`)。
51
+ - **启用 hooks 需要本地配置**(不会自动提交到 git):
52
+ - 直接启用:`git config core.hooksPath .githooks`
53
+ - 或使用:`aiws hooks install .`(等价)
54
+ - CI 建议增加一步(对 PR 分支执行):`aiws validate .`。
55
+ - 紧急跳过(不推荐):`WS_CHANGE_HOOK_BYPASS=1 ...`(CI 不应允许跳过)。
@@ -0,0 +1,29 @@
1
+ # Design: {{CHANGE_ID}}
2
+
3
+ > Title: {{TITLE}}
4
+ >
5
+ > Created: {{CREATED_AT}}
6
+
7
+ ## Context
8
+
9
+ - <!-- WS:TODO 背景、现状、约束(语言/框架/部署/性能/安全) -->
10
+
11
+ ## Goals / Non-Goals
12
+
13
+ **Goals:**
14
+ - <!-- WS:TODO -->
15
+
16
+ **Non-Goals:**
17
+ - <!-- WS:TODO -->
18
+
19
+ ## Decisions
20
+
21
+ - <!-- WS:TODO 关键技术决策 + 为什么 -->
22
+
23
+ ## Risks / Trade-offs
24
+
25
+ - <!-- WS:TODO 风险 → 缓解 -->
26
+
27
+ ## Migration / Rollback
28
+
29
+ - <!-- WS:TODO 如涉及数据/接口迁移,写步骤;必须含回滚路径 -->
@@ -0,0 +1,59 @@
1
+ # Change Proposal: {{CHANGE_ID}}
2
+
3
+ > Title: {{TITLE}}
4
+ >
5
+ > Created: {{CREATED_AT}}
6
+
7
+ ## 目标与非目标
8
+
9
+ **目标:**
10
+ - <!-- WS:TODO 填写本次变更的目标(可验收) -->
11
+
12
+ **非目标:**
13
+ - <!-- WS:TODO 填写明确“不做什么”,防止 scope creep -->
14
+
15
+ ## 变更归因(强制二选一)
16
+
17
+ - 需求交付:`Req_ID` = <!-- WS:TODO -->
18
+ - 问题修复:`Problem_ID` = <!-- WS:TODO -->
19
+
20
+ > 备注:若“问题阻塞需求”,两边都要在各自 CSV 的 `Notes` 字段互相引用对方 ID。
21
+
22
+ ## 现状与问题
23
+
24
+ - <!-- WS:TODO 现状是什么、痛点是什么;必要时给证据(日志/截图/issue 链接) -->
25
+
26
+ ## 方案概述(What changes)
27
+
28
+ - <!-- WS:TODO 逐条写清要改什么(行为/接口/数据/配置);BREAKING 请标注 -->
29
+
30
+ ## 影响范围(Scope)
31
+
32
+ - 影响的服务/模块/目录:
33
+ - <!-- WS:TODO -->
34
+ - 可能影响的外部接口/使用方:
35
+ - <!-- WS:TODO -->
36
+
37
+ ## 风险与回滚
38
+
39
+ - 风险:
40
+ - <!-- WS:TODO -->
41
+ - 回滚方案(必须可执行):
42
+ - <!-- WS:TODO -->
43
+
44
+ ## 验证计划(必须可复现)
45
+
46
+ > 从 `AI_WORKSPACE.md` 选择最贴近本变更的验证入口,写成可直接复制执行的命令。
47
+
48
+ - 命令:
49
+ - <!-- WS:TODO 例如:`uv run tools/server_test_runner.py --workspace .` -->
50
+ - 期望结果:
51
+ - <!-- WS:TODO 例如:所有相关用例 DONE;无新增错误日志 -->
52
+
53
+ ## 真值文件/合同更新清单
54
+
55
+ - `REQUIREMENTS.md`:<!-- WS:TODO 需要/不需要;如需要,写明新增/修改的验收条款 -->
56
+ - `requirements/CHANGELOG.md`:<!-- WS:TODO 需要/不需要 -->
57
+ - `requirements/requirements-issues.csv`:<!-- WS:TODO 需要/不需要 -->
58
+ - `issues/problem-issues.csv`:<!-- WS:TODO 需要/不需要 -->
59
+ - 证据落盘(`.agentdocs/tmp/...`):<!-- WS:TODO 计划输出哪些报告/日志 -->
@@ -0,0 +1,33 @@
1
+ # Tasks: {{CHANGE_ID}}
2
+
3
+ > Title: {{TITLE}}
4
+ >
5
+ > Created: {{CREATED_AT}}
6
+
7
+ ## 0. Preflight
8
+
9
+ - [ ] 0.1 阅读并遵守 `AI_PROJECT.md` / `AI_WORKSPACE.md` / `REQUIREMENTS.md`
10
+ - [ ] 0.2 运行门禁校验:`aiws validate .`(或 `npx -y @aipper/aiws validate .`)
11
+ - [ ] 0.3 若真值文件发生变化(例如你更新了 REQUIREMENTS.md),同步基线:`aiws change sync {{CHANGE_ID}}`
12
+
13
+ ## 1. 需求/问题合同(如适用)
14
+
15
+ - [ ] 1.1 需求交付:补齐/更新 `REQUIREMENTS.md` 验收条款(或确认不需要)
16
+ - [ ] 1.2 同步 `requirements/requirements-issues.csv`(或更新 `issues/problem-issues.csv`)
17
+ - [ ] 1.3 记录到 `requirements/CHANGELOG.md`(如需求发生变化)
18
+
19
+ ## 2. 实现
20
+
21
+ - [ ] 2.1 <!-- WS:TODO -->
22
+ - [ ] 2.2 <!-- WS:TODO -->
23
+
24
+ ## 3. 验证(必须可复现)
25
+
26
+ - [ ] 3.1 <!-- WS:TODO 写具体命令(来自 AI_WORKSPACE.md) -->
27
+ - [ ] 3.2 <!-- WS:TODO 写期望结果(可判断 DONE/FAIL) -->
28
+
29
+ ## 4. 交付与归档
30
+
31
+ - [ ] 4.1 证据落盘到 `.agentdocs/tmp/...`(报告/日志/请求响应等)
32
+ - [ ] 4.2 交叉审计(可选但推荐):在 AI 工具内运行 `/ws-review`(或按 `AI_PROJECT.md` 手工审计)
33
+ - [ ] 4.3 归档:`aiws change archive {{CHANGE_ID}}`
@@ -0,0 +1,2 @@
1
+ Problem_ID,Type,Severity,Title,Symptom,Repro,Root_Cause,Fix_Plan,Files,Tests,Evidence,Status,Owner,Created_At,Updated_At,Notes
2
+ PROB-000,BUG,P2,示例:/api/system/menu/routes 返回 500,"访问 routes 接口报 500;日志提示参数解析错误","curl -sS -H 'Authorization: Bearer <token>' 'http://localhost:8080/api/system/menu/routes?x=1'","Controller 入参类型与前端实际 query 不一致","对齐入参定义并补充单测;复测 runner 端点状态更新为 DONE","server/src/...","uv run tools/server_test_runner.py --workspace . --service backend --max-endpoints 10",".agentdocs/tmp/server-test/report.json",TODO,ab,YYYY-MM-DDTHH:MM:SSZ,YYYY-MM-DDTHH:MM:SSZ,"若该问题阻塞某个需求交付,在 requirements/requirements-issues.csv 的 Notes 里关联 Problem_ID"
@@ -0,0 +1,205 @@
1
+ {
2
+ "template_id": "workspace",
3
+ "template_version": 2,
4
+ "defaults": {
5
+ "include_optional": true,
6
+ "tools": ["claude", "opencode", "codex", "iflow"]
7
+ },
8
+ "required": [
9
+ "AGENTS.md",
10
+ "AI_PROJECT.md",
11
+ "AI_WORKSPACE.md",
12
+ "REQUIREMENTS.md",
13
+ ".gitignore",
14
+ ".aiws/manifest.json",
15
+ ".githooks/pre-commit",
16
+ ".githooks/pre-push",
17
+ "changes/README.md",
18
+ "requirements/CHANGELOG.md",
19
+ "requirements/requirements-issues.csv",
20
+ "issues/problem-issues.csv",
21
+ ".agents/skills/**",
22
+ "tools/ws_change_check.py",
23
+ "tools/requirements_contract.py",
24
+ ".claude/commands/aiws-init.md",
25
+ ".claude/commands/aiws-update.md",
26
+ ".claude/commands/aiws-validate.md",
27
+ ".claude/commands/aiws-rollback.md",
28
+ ".claude/commands/ws-preflight.md",
29
+ ".claude/commands/ws-migrate.md",
30
+ ".claude/commands/ws-dev.md",
31
+ ".claude/commands/ws-analyze.md",
32
+ ".claude/commands/ws-review.md",
33
+ ".claude/commands/ws-rule.md",
34
+ ".claude/commands/ws-req-review.md",
35
+ ".claude/commands/ws-req-change.md",
36
+ ".claude/commands/ws-req-contract-sync.md",
37
+ ".claude/commands/ws-req-contract-validate.md",
38
+ ".claude/commands/ws-req-flow-sync.md",
39
+ ".opencode/command/aiws-init.md",
40
+ ".opencode/command/aiws-update.md",
41
+ ".opencode/command/aiws-validate.md",
42
+ ".opencode/command/aiws-rollback.md",
43
+ ".opencode/command/ws-preflight.md",
44
+ ".opencode/command/ws-migrate.md",
45
+ ".opencode/command/ws-dev.md",
46
+ ".opencode/command/ws-analyze.md",
47
+ ".opencode/command/ws-review.md",
48
+ ".opencode/command/ws-rule.md",
49
+ ".opencode/command/ws-req-review.md",
50
+ ".opencode/command/ws-req-change.md",
51
+ ".opencode/command/ws-req-contract-sync.md",
52
+ ".opencode/command/ws-req-contract-validate.md",
53
+ ".opencode/command/ws-req-flow-sync.md",
54
+ ".iflow/commands/aiws-init.toml",
55
+ ".iflow/commands/aiws-update.toml",
56
+ ".iflow/commands/aiws-validate.toml",
57
+ ".iflow/commands/aiws-rollback.toml",
58
+ ".iflow/commands/server-test-plan.toml",
59
+ ".iflow/commands/server-test.toml",
60
+ ".iflow/commands/server-triage.toml",
61
+ ".iflow/commands/server-fix.toml",
62
+ ".iflow/commands/server-fix-and-commit.toml",
63
+ ".iflow/commands/server-drain.toml",
64
+ ".iflow/commands/server-commit.toml",
65
+ ".iflow/commands/server_test-plan.toml",
66
+ ".iflow/commands/server_test.toml",
67
+ ".iflow/commands/ws-preflight.toml",
68
+ ".iflow/commands/ws-migrate.toml",
69
+ ".iflow/commands/ws-dev.toml",
70
+ ".iflow/commands/ws-analyze.toml",
71
+ ".iflow/commands/ws-review.toml",
72
+ ".iflow/commands/ws-rule.toml",
73
+ ".iflow/commands/ws-contract-check.toml",
74
+ ".iflow/commands/ws-doctor.toml",
75
+ ".iflow/commands/ws-env-doctor.toml",
76
+ ".iflow/commands/ws-init.toml",
77
+ ".iflow/commands/ws-memory-bank-init.toml",
78
+ ".iflow/commands/ws-feature-plan.toml",
79
+ ".iflow/commands/ws-feature-deliver.toml",
80
+ ".iflow/commands/ws-req-review.toml",
81
+ ".iflow/commands/ws-req-change.toml",
82
+ ".iflow/commands/ws-req-contract-sync.toml",
83
+ ".iflow/commands/ws-req-contract-validate.toml",
84
+ ".iflow/commands/ws-req-flow-sync.toml"
85
+ ],
86
+ "optional": [
87
+ ".iflow/agents/**",
88
+ "memory-bank/**",
89
+ "secrets/test-accounts.example.json",
90
+ "changes/templates/proposal.md",
91
+ "changes/templates/tasks.md",
92
+ "changes/templates/design.md",
93
+ "tools/requirements_contract_sync.py",
94
+ "tools/requirements_flow_gen.py",
95
+ "tools/server_test_runner.py",
96
+ "tools/iflow_watchdog.sh",
97
+ "tools/install_iflow_watchdog_systemd_user.sh"
98
+ ],
99
+ "update": {
100
+ "replace_file": [
101
+ ".aiws/manifest.json",
102
+ ".githooks/pre-commit",
103
+ ".githooks/pre-push",
104
+ "tools/ws_change_check.py",
105
+ "tools/requirements_contract.py",
106
+ ".agents/skills/aiws-init/SKILL.md",
107
+ ".agents/skills/aiws-rollback/SKILL.md",
108
+ ".agents/skills/aiws-update/SKILL.md",
109
+ ".agents/skills/aiws-validate/SKILL.md",
110
+ ".agents/skills/aiws-hooks-install/SKILL.md",
111
+ ".agents/skills/aiws-hooks-status/SKILL.md",
112
+ ".agents/skills/aiws-change-list/SKILL.md",
113
+ ".agents/skills/aiws-change-new/SKILL.md",
114
+ ".agents/skills/aiws-change-start/SKILL.md",
115
+ ".agents/skills/aiws-change-status/SKILL.md",
116
+ ".agents/skills/aiws-change-next/SKILL.md",
117
+ ".agents/skills/aiws-change-sync/SKILL.md",
118
+ ".agents/skills/aiws-change-validate/SKILL.md",
119
+ ".agents/skills/aiws-change-archive/SKILL.md",
120
+ ".agents/skills/aiws-change-templates-which/SKILL.md",
121
+ ".agents/skills/aiws-change-templates-init/SKILL.md",
122
+ ".agents/skills/ws-analyze/SKILL.md",
123
+ ".agents/skills/ws-commit/SKILL.md",
124
+ ".agents/skills/ws-dev/SKILL.md",
125
+ ".agents/skills/ws-migrate/SKILL.md",
126
+ ".agents/skills/ws-plan/SKILL.md",
127
+ ".agents/skills/ws-preflight/SKILL.md",
128
+ ".agents/skills/ws-req-change/SKILL.md",
129
+ ".agents/skills/ws-req-contract-sync/SKILL.md",
130
+ ".agents/skills/ws-req-contract-validate/SKILL.md",
131
+ ".agents/skills/ws-req-flow-sync/SKILL.md",
132
+ ".agents/skills/ws-req-review/SKILL.md",
133
+ ".agents/skills/ws-review/SKILL.md",
134
+ ".agents/skills/ws-rule/SKILL.md",
135
+ ".iflow/commands/aiws-init.toml",
136
+ ".iflow/commands/aiws-update.toml",
137
+ ".iflow/commands/aiws-validate.toml",
138
+ ".iflow/commands/aiws-rollback.toml",
139
+ ".iflow/commands/server-test-plan.toml",
140
+ ".iflow/commands/server-test.toml",
141
+ ".iflow/commands/server-triage.toml",
142
+ ".iflow/commands/server-fix.toml",
143
+ ".iflow/commands/server-fix-and-commit.toml",
144
+ ".iflow/commands/server-drain.toml",
145
+ ".iflow/commands/server-commit.toml",
146
+ ".iflow/commands/server_test-plan.toml",
147
+ ".iflow/commands/server_test.toml",
148
+ ".iflow/commands/ws-preflight.toml",
149
+ ".iflow/commands/ws-migrate.toml",
150
+ ".iflow/commands/ws-dev.toml",
151
+ ".iflow/commands/ws-analyze.toml",
152
+ ".iflow/commands/ws-review.toml",
153
+ ".iflow/commands/ws-rule.toml",
154
+ ".iflow/commands/ws-contract-check.toml",
155
+ ".iflow/commands/ws-doctor.toml",
156
+ ".iflow/commands/ws-env-doctor.toml",
157
+ ".iflow/commands/ws-init.toml",
158
+ ".iflow/commands/ws-memory-bank-init.toml",
159
+ ".iflow/commands/ws-feature-plan.toml",
160
+ ".iflow/commands/ws-feature-deliver.toml",
161
+ ".iflow/commands/ws-req-review.toml",
162
+ ".iflow/commands/ws-req-change.toml",
163
+ ".iflow/commands/ws-req-contract-sync.toml",
164
+ ".iflow/commands/ws-req-contract-validate.toml",
165
+ ".iflow/commands/ws-req-flow-sync.toml"
166
+ ],
167
+ "managed_blocks": {
168
+ "AGENTS.md": ["agents"],
169
+ "AI_PROJECT.md": ["ai-project:core"],
170
+ "AI_WORKSPACE.md": ["ai-workspace:core"],
171
+ "REQUIREMENTS.md": ["requirements:contract"],
172
+ ".gitignore": ["gitignore"],
173
+ ".claude/commands/aiws-init.md": ["claude:aiws-init"],
174
+ ".claude/commands/aiws-update.md": ["claude:aiws-update"],
175
+ ".claude/commands/aiws-validate.md": ["claude:aiws-validate"],
176
+ ".claude/commands/aiws-rollback.md": ["claude:aiws-rollback"],
177
+ ".claude/commands/ws-preflight.md": ["claude:ws-preflight"],
178
+ ".claude/commands/ws-migrate.md": ["claude:ws-migrate"],
179
+ ".claude/commands/ws-dev.md": ["claude:ws-dev"],
180
+ ".claude/commands/ws-analyze.md": ["claude:ws-analyze"],
181
+ ".claude/commands/ws-review.md": ["claude:ws-review"],
182
+ ".claude/commands/ws-rule.md": ["claude:ws-rule"],
183
+ ".claude/commands/ws-req-review.md": ["claude:ws-req-review"],
184
+ ".claude/commands/ws-req-change.md": ["claude:ws-req-change"],
185
+ ".claude/commands/ws-req-contract-sync.md": ["claude:ws-req-contract-sync"],
186
+ ".claude/commands/ws-req-contract-validate.md": ["claude:ws-req-contract-validate"],
187
+ ".claude/commands/ws-req-flow-sync.md": ["claude:ws-req-flow-sync"],
188
+ ".opencode/command/aiws-init.md": ["opencode:aiws-init"],
189
+ ".opencode/command/aiws-update.md": ["opencode:aiws-update"],
190
+ ".opencode/command/aiws-validate.md": ["opencode:aiws-validate"],
191
+ ".opencode/command/aiws-rollback.md": ["opencode:aiws-rollback"],
192
+ ".opencode/command/ws-preflight.md": ["opencode:ws-preflight"],
193
+ ".opencode/command/ws-migrate.md": ["opencode:ws-migrate"],
194
+ ".opencode/command/ws-dev.md": ["opencode:ws-dev"],
195
+ ".opencode/command/ws-analyze.md": ["opencode:ws-analyze"],
196
+ ".opencode/command/ws-review.md": ["opencode:ws-review"],
197
+ ".opencode/command/ws-rule.md": ["opencode:ws-rule"],
198
+ ".opencode/command/ws-req-review.md": ["opencode:ws-req-review"],
199
+ ".opencode/command/ws-req-change.md": ["opencode:ws-req-change"],
200
+ ".opencode/command/ws-req-contract-sync.md": ["opencode:ws-req-contract-sync"],
201
+ ".opencode/command/ws-req-contract-validate.md": ["opencode:ws-req-contract-validate"],
202
+ ".opencode/command/ws-req-flow-sync.md": ["opencode:ws-req-flow-sync"]
203
+ }
204
+ }
205
+ }
@@ -0,0 +1,14 @@
1
+ # Memory Bank(工作区上下文)
2
+
3
+ 目的:给 iFlow/Codex/Claude 一个“固定且可持续更新”的上下文集合,避免每次会话重新讲一遍导致跑偏。
4
+
5
+ 在你的工作区中:
6
+ - `REQUIREMENTS.md` 仍是**需求真值**(不要复制到这里)。
7
+ - `AI_PROJECT.md` / `AI_WORKSPACE.md` 是**边界与运行真值**。
8
+ - 本目录补齐的是“实现过程中的稳定上下文”(更偏工程视角)。
9
+
10
+ 建议规则:
11
+ - 改代码前:先看 `REQUIREMENTS.md` + `AI_PROJECT.md` + `AI_WORKSPACE.md`,再结合本目录的 `architecture.md`/`progress.md`。
12
+ - 每次完成一个可验证的小步:更新 `progress.md`(写清:做了什么、证据路径、下一步)。
13
+ - 发生重大结构变化:更新 `architecture.md`(只写高层关系,不要堆细节)。
14
+
@@ -0,0 +1,9 @@
1
+ # Architecture
2
+
3
+ 目标:记录“模块关系与关键边界”,让新的会话可以快速对齐代码布局。
4
+
5
+ 建议包含:
6
+ - 目录/模块分层(例如 server/web/app)
7
+ - 核心数据流(请求入口 → service → repo → DB)
8
+ - 关键约束(鉴权、request-id、幂等、事务)
9
+
@@ -0,0 +1,11 @@
1
+ # Implementation Plan
2
+
3
+ 目标:把需求拆成可验证的小步(每步都有验证命令与期望结果)。
4
+
5
+ 模板(示例字段):
6
+ - Step 1: …
7
+ - Scope:
8
+ - Files:
9
+ - Verify: `...`
10
+ - Expected:
11
+
@@ -0,0 +1,10 @@
1
+ # Progress
2
+
3
+ 每次完成一个可验证小步就追加一条:
4
+
5
+ - YYYY-MM-DD HH:MM: 做了什么(关联 Issue_ID/验收项)
6
+ - Changed: `path/to/file`
7
+ - Verify: `command`
8
+ - Evidence: `path/to/log_or_report`
9
+ - Next:
10
+
@@ -0,0 +1,11 @@
1
+ # Tech Stack
2
+
3
+ 填写原则:只写“确实在用且影响决策”的信息,避免长篇大论。
4
+
5
+ 建议包含:
6
+ - 语言/运行时版本(例如 Java/Node/Python)
7
+ - 构建工具链(Gradle/Maven、pnpm、uv 等)
8
+ - 关键框架与约束(Spring Boot、Ktor、Vue、React 等)
9
+ - 数据层(DB/Redis/MQ)与迁移方式
10
+ - 本地/测试环境切换方式(引用 `AI_WORKSPACE.md` 的命令即可)
11
+
@@ -0,0 +1,13 @@
1
+ # Requirements Changelog
2
+
3
+ 本文件记录“需求变更历史”。`REQUIREMENTS.md` 始终表示“当前有效需求”,变更过程在此追踪。
4
+
5
+ 规则:
6
+ - 任何需求变更必须追加一条记录(不要覆盖历史)。
7
+ - 记录应可审计:说明变更内容、原因、影响范围、关联 issues/PR。
8
+ - 不要写入 secrets。
9
+
10
+ | 日期 | 变更内容 | 原因/背景 | 影响范围(模块/接口) | 关联 issues/PR | 记录人 |
11
+ |---|---|---|---|---|---|
12
+ | YYYY-MM-DD | | | | | |
13
+
@@ -0,0 +1,2 @@
1
+ Req_ID,Title,Change_Type,Module,CRUD,Actor,Scenario,Preconditions,Inputs,Outputs,Data_Model,Business_Logic,API_Impact,NonFunctional,Spec_Status,Impl_Status,Tests,Evidence,Owner,Created_At,Updated_At,Notes
2
+ REQ-000,示例:用户列表分页支持按部门筛选,ADD,system/user,R,admin,管理员在用户管理页按部门筛选列表,已登录且有 system:user:list 权限,"deptId=10&page=1&pageSize=20",返回包含 deptId=10 的用户列表,"user,dept 表(字段:dept_id)","查询条件增加 deptId;默认不传不筛选;分页参数边界:page>=1&pageSize<=100",GET /api/system/user/list 新增 query 参数 deptId(可选),响应字段不变,性能:分页查询需走索引;安全:权限不变,READY,TODO,"uv run tools/server_test_runner.py --workspace . --service demo-spring --max-endpoints 10",.agentdocs/tmp/server-test/report.json,ab,YYYY-MM-DDTHH:MM:SSZ,YYYY-MM-DDTHH:MM:SSZ,
@@ -0,0 +1,32 @@
1
+ {
2
+ "base_url": "http://127.0.0.1:8080",
3
+ "services": {
4
+ "backend": {
5
+ "base_url": "http://127.0.0.1:8080"
6
+ }
7
+ },
8
+ "test_resource_ids": {
9
+ "id": "1"
10
+ },
11
+ "auth": {
12
+ "type": "login",
13
+ "login_path": "/login",
14
+ "username_field": "username",
15
+ "password_field": "password",
16
+ "token_json_path": "token",
17
+ "header_name": "Authorization",
18
+ "scheme": "Bearer"
19
+ },
20
+ "accounts": [
21
+ {
22
+ "name": "smoke-user",
23
+ "username": "user@example.com",
24
+ "password": "<password>"
25
+ }
26
+ ],
27
+ "openapi_auth": {
28
+ "type": "basic",
29
+ "username": "<doc-user>",
30
+ "password": "<doc-pass>"
31
+ }
32
+ }
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # iFlow unattended watchdog for AI Workspace (Arch Linux/systemd friendly).
5
+ #
6
+ # Goal:
7
+ # - Run /server-drain in a loop (low output, small batches).
8
+ # - If drain reports BLOCKED (exit 3) or crashes, run /server-fix in a fresh iFlow process (bounded).
9
+ # - Keep outputs in .agentdocs/tmp/server-test/ to avoid blowing up interactive sessions.
10
+ #
11
+ # Safety:
12
+ # - Intended for test environments only.
13
+ # - Requires explicit IFLOW_WATCHDOG_YOLO=1 to run with --yolo.
14
+
15
+ die() { echo "error: $*" >&2; exit 2; }
16
+ need_file() { [[ -f "$1" ]] || die "missing: $1"; }
17
+ have() { command -v "$1" >/dev/null 2>&1; }
18
+
19
+ root="${IFLOW_WATCHDOG_ROOT:-.}"
20
+ cd "$root"
21
+
22
+ need_file "AI_WORKSPACE.md"
23
+ need_file "REQUIREMENTS.md"
24
+ need_file "tools/server_test_runner.py"
25
+ need_file "secrets/test-accounts.json"
26
+
27
+ have iflow || die "missing: iflow"
28
+ have uv || die "missing: uv (runner requires uv)"
29
+
30
+ csv="issues/server-api-issues.csv"
31
+ workspace_dir="$(pwd)"
32
+ log_dir="${IFLOW_WATCHDOG_LOG_DIR:-$workspace_dir/.agentdocs/tmp/server-test}"
33
+ mkdir -p "$log_dir"
34
+
35
+ fatal_log="$log_dir/watchdog-fatal.log"
36
+ timestamp() { date +"%Y-%m-%dT%H:%M:%S%z"; }
37
+ say() { printf "[%s] %s\n" "$(timestamp)" "$*"; }
38
+ fatal() { say "fatal: $*" | tee -a "$fatal_log" >&2; exit 2; }
39
+
40
+ yolo="${IFLOW_WATCHDOG_YOLO:-0}"
41
+ if [[ "$yolo" != "1" ]]; then
42
+ fatal "unattended mode requires IFLOW_WATCHDOG_YOLO=1 (this will use iflow --yolo; test env only)"
43
+ fi
44
+
45
+ if ! iflow --version >/dev/null 2>&1; then
46
+ fatal "iflow command failed (check auth/config/environment)"
47
+ fi
48
+
49
+ date_suffix="$(date +%Y%m%d)"
50
+ drain_log="${IFLOW_WATCHDOG_DRAIN_LOG:-$log_dir/iflow-drain-$date_suffix.log}"
51
+ fix_log="${IFLOW_WATCHDOG_FIX_LOG:-$log_dir/iflow-fix-$date_suffix.log}"
52
+ find "$log_dir" -maxdepth 1 -type f -name "iflow-*.log" -mtime +7 -delete 2>/dev/null || true
53
+
54
+ lock_dir="$log_dir/.watchdog.lock"
55
+ pid_file="$lock_dir/pid"
56
+ if ! mkdir "$lock_dir" 2>/dev/null; then
57
+ other_pid="$(cat "$pid_file" 2>/dev/null || true)"
58
+ fatal "another watchdog is running (lock: $lock_dir pid=${other_pid:-unknown})"
59
+ fi
60
+ printf "%s\n" "$$" >"$pid_file" 2>/dev/null || true
61
+
62
+ cleanup() {
63
+ say "cleanup: stopping child iflow processes (if any)" >>"$fatal_log" 2>/dev/null || true
64
+ pkill -P $$ iflow 2>/dev/null || true
65
+ rm -f "$pid_file" 2>/dev/null || true
66
+ rmdir "$lock_dir" 2>/dev/null || true
67
+ }
68
+ trap cleanup EXIT INT TERM
69
+
70
+ drain_timeout="${IFLOW_WATCHDOG_DRAIN_TIMEOUT:-7200}"
71
+ fix_timeout="${IFLOW_WATCHDOG_FIX_TIMEOUT:-3600}"
72
+ drain_max_turns="${IFLOW_WATCHDOG_DRAIN_MAX_TURNS:-6}"
73
+ fix_max_turns="${IFLOW_WATCHDOG_FIX_MAX_TURNS:-12}"
74
+ drain_max_tokens="${IFLOW_WATCHDOG_DRAIN_MAX_TOKENS:-15000}"
75
+ fix_max_tokens="${IFLOW_WATCHDOG_FIX_MAX_TOKENS:-30000}"
76
+
77
+ max_cycles="${IFLOW_WATCHDOG_MAX_CYCLES:-200}"
78
+ sleep_s="${IFLOW_WATCHDOG_SLEEP_S:-10}"
79
+ fix_retry_max="${IFLOW_WATCHDOG_FIX_RETRY_MAX:-3}"
80
+ fix_retry_file="$log_dir/.fix-retry-count"
81
+
82
+ drain_max_endpoints="${IFLOW_DRAIN_MAX_ENDPOINTS:-30}"
83
+ drain_sleep_s="${IFLOW_DRAIN_SLEEP_S:-0}"
84
+
85
+ csv_has_blocked() { [[ -f "$csv" ]] && grep -qE ",BLOCKED," "$csv"; }
86
+
87
+ run_drain() {
88
+ say "run: /server-drain (max_endpoints=$drain_max_endpoints)"
89
+ IFLOW_DRAIN_MAX_ENDPOINTS="$drain_max_endpoints" \
90
+ IFLOW_DRAIN_SLEEP_S="$drain_sleep_s" \
91
+ iflow --yolo -p "/server-drain" --timeout "$drain_timeout" --max-turns "$drain_max_turns" --max-tokens "$drain_max_tokens" >>"$drain_log" 2>&1
92
+ }
93
+
94
+ run_fix() {
95
+ say "run: /server-fix"
96
+ retry_count="$(cat "$fix_retry_file" 2>/dev/null || echo 0)"
97
+ if [[ "$retry_count" -ge "$fix_retry_max" ]]; then
98
+ fatal "fix reached retry limit ($fix_retry_max); check $fix_log"
99
+ fi
100
+ if iflow --yolo -p "/server-fix" --timeout "$fix_timeout" --max-turns "$fix_max_turns" --max-tokens "$fix_max_tokens" >>"$fix_log" 2>&1; then
101
+ rm -f "$fix_retry_file" 2>/dev/null || true
102
+ else
103
+ echo $((retry_count + 1)) >"$fix_retry_file" 2>/dev/null || true
104
+ fi
105
+ }
106
+
107
+ say "watchdog: start (cycles=$max_cycles sleep_s=$sleep_s)"
108
+ say "logs: drain=$drain_log fix=$fix_log"
109
+
110
+ cycle=1
111
+ while [[ "$cycle" -le "$max_cycles" ]]; do
112
+ if csv_has_blocked; then
113
+ say "state: BLOCKED detected in $csv (trigger fix)"
114
+ run_fix
115
+ fi
116
+
117
+ set +e
118
+ run_drain
119
+ rc=$?
120
+ set -e
121
+
122
+ if [[ "$rc" == "0" ]]; then
123
+ say "done: drain finished with all DONE/SKIP"
124
+ exit 0
125
+ fi
126
+
127
+ if [[ "$rc" == "3" ]] || csv_has_blocked; then
128
+ say "blocked: drain reported BLOCKED (rc=$rc), trigger fix"
129
+ run_fix
130
+ else
131
+ say "warn: drain exited rc=$rc without BLOCKED; will retry"
132
+ fi
133
+
134
+ sleep "$sleep_s" || true
135
+ cycle=$((cycle + 1))
136
+ done
137
+
138
+ fatal "reached max cycles ($max_cycles); check logs under $log_dir"