@xulthekl/team-flow 0.26.1 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/always/phase-guard.md +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/marketplace.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.github/plugin/marketplace.json +2 -2
- package/.zcode/hooks.json +8 -0
- package/.zcode/rules/phase-guard.mdc +33 -0
- package/.zcode/skills/workflow-start/SKILL.md +175 -0
- package/AGENTS.md +1 -1
- package/GEMINI.md +1 -1
- package/HANDOFF.md +1 -1
- package/INSTALL.md +1 -1
- package/README.md +1 -1
- package/docs/README_en.md +1 -1
- package/docs/solutions/INDEX.md +1 -0
- package/docs/solutions/cross-phase/2026-07-30-no-summary.md +17 -0
- package/gemini-extension.json +1 -1
- package/hooks/session-start +59 -1
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/check-version-consistency.mjs +11 -51
- package/scripts/install-zcode.mjs +6 -4
- package/scripts/lib/cmd-doctor.mjs +1 -1
- package/skills/bug-investigator/SKILL.md +1 -1
- package/skills/build-executor/SKILL.md +19 -19
- package/skills/build-executor/implementer-prompt.md +1 -1
- package/skills/build-executor/references/execution-modes.md +6 -6
- package/skills/build-executor/task-reviewer-prompt.md +1 -1
- package/skills/code-reviewer/SKILL.md +2 -2
- package/skills/code-reviewer/code-reviewer-prompt.md +1 -1
- package/skills/contract-builder/SKILL.md +6 -6
- package/skills/need-explorer/SKILL.md +2 -2
- package/skills/release-archivist/SKILL.md +12 -12
- package/skills/release-archivist/references/closing-procedures.md +8 -8
- package/skills/spec-merger/SKILL.md +2 -2
- package/skills/spec-writer/SKILL.md +3 -3
- package/skills/workflow-orchestrator/references/s2-prd-prototype-loop.md +1 -1
- package/skills/workflow-orchestrator/references/s4-split-validate.md +1 -1
- package/skills/workflow-orchestrator/references/s5-monitoring.md +1 -1
- package/skills/workflow-start/SKILL.md +16 -16
- package/skills/workflow-start/references/routing-rules.md +17 -17
- package/tests/lib/platform-runtime-distribution.test.mjs +17 -10
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
{
|
|
10
10
|
"name": "team-flow",
|
|
11
11
|
"description": "8-state spec workflow + compound global compounding + architecture-design (4A/DDD) + local HTML prototype + product-level orchestration + bootstrap + e2e + session handoff + workflow feedback. 23 skills + 8 agents with embedded TDD, SDD, code review, debugging, delta spec sync, and design-system-driven prototyping.",
|
|
12
|
-
"version": "0.
|
|
12
|
+
"version": "0.27.0",
|
|
13
13
|
"source": "./",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "LT",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "team-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 23 skills + 8 agents, one install.",
|
|
5
5
|
"source": "./",
|
|
6
6
|
"author": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "team-flow",
|
|
3
3
|
"displayName": "team-flow",
|
|
4
4
|
"description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 23 skills + 8 agents, one install.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.27.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "LT",
|
|
8
8
|
"url": "https://github.com/LT"
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Unified workflow plugins and skills for AI coding agents (team-flow: team-flow + compound + architecture-design + prototype).",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.27.0"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "team-flow",
|
|
14
14
|
"description": "Unified workflow with planning artifacts, execution contracts, TDD, review gates, systematic debugging, delta spec sync, architecture-design, and local HTML prototyping.",
|
|
15
|
-
"version": "0.
|
|
15
|
+
"version": "0.27.0",
|
|
16
16
|
"source": ".",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "LT",
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: team-flow phase guard — 防止阶段漂移和未授权实现
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Phase Guard
|
|
7
|
+
|
|
8
|
+
## 入口规则
|
|
9
|
+
|
|
10
|
+
- 所有工作必须从 "/workflow-start" 入口开始。
|
|
11
|
+
- 在 .team-flow.yaml 中确认当前 state 和 workflow 模式之前,不要开始写代码。
|
|
12
|
+
|
|
13
|
+
## 全局禁止
|
|
14
|
+
|
|
15
|
+
- 没有 execution-contract.md 或未经用户明确批准,不得进入实现。
|
|
16
|
+
- full/hotfix 必须先运行 tf execution plan <change-dir> ...;没有 current execution plan 不得开始实现。
|
|
17
|
+
- 只有 all pass review receipts 后才可 closing;不得把未审查的 wave 当作完成。
|
|
18
|
+
- 上述 plan/receipt gates 仅适用于 full/hotfix;tweak 免除这些 gates (tweak exempt)。
|
|
19
|
+
- 执行过程中如果发现需求/范围变化,必须回退到 specifying 或 bridging,而不是直接改代码。
|
|
20
|
+
- 不要直接调用执行类 skill(如 "/build-executor"),必须通过入口路由。
|
|
21
|
+
|
|
22
|
+
## 决策点协议
|
|
23
|
+
|
|
24
|
+
- DP-0:设计前确认
|
|
25
|
+
- DP-1:需求确认
|
|
26
|
+
- DP-2:工件审查
|
|
27
|
+
- DP-3:是否批准 execution contract?
|
|
28
|
+
- DP-4:先运行 tf execution recommend,展示可用模式与推荐;用户用 --confirm 确认,非推荐选择额外使用 --acknowledge-recommendation
|
|
29
|
+
- DP-5:调试升级
|
|
30
|
+
- DP-6:验证失败
|
|
31
|
+
- DP-7:是否收口归档?
|
|
32
|
+
|
|
33
|
+
> 本文件由 scripts/install-zcode.mjs 生成;对具体变更的 guard 内容请运行 tf inject <change-dir> 更新。
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workflow-start
|
|
3
|
+
description: Primary entry point for the team-flow state-machine workflow. Invoke when the user is inside an active team-flow change directory (look for .team-flow.yaml, changes/<name>/, proposal.md, specs/, design.md, tasks.md, or execution-contract.md) and asks to start, continue, resume, implement, plan, or figure out the next workflow step. Also invoke when the user explicitly asks to start a new team-flow change or route through the team-flow workflow. Do not invoke for unrelated coding tasks that happen to use words like start, continue, implement, or plan.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Workflow Start
|
|
7
|
+
|
|
8
|
+
Primary entry point for `team-flow`. Jobs: inspect change context, check for updates, confirm DP-0, determine state, route to correct skill, block invalid transitions.
|
|
9
|
+
|
|
10
|
+
## Use This Skill When
|
|
11
|
+
|
|
12
|
+
Only invoke when team-flow context is present: `.team-flow.yaml` exists, artifacts like `proposal.md`/`specs/`/`design.md`/`tasks.md`/`execution-contract.md` are present, or user explicitly invokes team-flow by name. When in doubt, check for `.team-flow.yaml` first.
|
|
13
|
+
|
|
14
|
+
Do NOT invoke for: general coding tasks outside team-flow changes, casual questions, unrelated work.
|
|
15
|
+
|
|
16
|
+
## States
|
|
17
|
+
|
|
18
|
+
`exploring` → `specifying` → `bridging` → `approved-for-build` → `executing` → `closing`, with `debugging` side-path from `executing`, and `abandoned` as terminal. If a transition is ambiguous, run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' runtime asset read docs/state-machine.md`.
|
|
19
|
+
|
|
20
|
+
## Initialization
|
|
21
|
+
|
|
22
|
+
1. **Update check**: Run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' runtime check-update`. Exit 0 → continue. Exit 1 → non-blocking upgrade reminder. Exit 2 → skip.
|
|
23
|
+
2. **Inspect change folder**: Check for `proposal.md`, `specs/`, `design.md`, `tasks.md`, `execution-contract.md`. Answer: Is the change fuzzy? Artifacts missing/unstable? Contract exist? User approved contract? Execution in progress or blocked? In verification/wrap-up?
|
|
24
|
+
3. **Overlay recovery scan**: Run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' handoff list <change-dir> --json` and `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' checkpoint list <change-dir> --json`. A `result-ready` handoff requires explicit review and `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' handoff resolve` before resuming the affected work. An `active` handoff is non-blocking side work. Show a non-stale checkpoint as recovery context; show a stale checkpoint only as historical evidence.
|
|
25
|
+
4. **Execution-control recovery scan**: For `approved-for-build`, `executing`, `debugging`, or `closing`, run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution show <change-dir> --json`. Treat only `current: true` plus `waves[].eligible: true` as permission to start a wave; report plan revision, mode, next eligible wave, and every wave's receipt/blockers. A missing, invalid, or stale plan blocks implementation and routes to `build-executor`; do not infer progress from chat history.
|
|
26
|
+
|
|
27
|
+
## DP-0: User Confirmation Gate
|
|
28
|
+
|
|
29
|
+
Run DP-0 when: change folder doesn't exist, planning artifacts missing/empty, or `dp_0_confirmed` ≠ `true`. Skip if `dp_0_confirmed` is `true`.
|
|
30
|
+
|
|
31
|
+
### Upstream Inheritance (v0.9)
|
|
32
|
+
|
|
33
|
+
若 `change-brief.md` 存在且 `upstream_source == orchestrator`(本 change 由 orchestrator S4 分发),**继承** brief 的 scope/约束/AC 为默认值,DP-0 从"从零问"改为"一次确认继承或修正",**不**重新问"你想做什么"。否则(手动新建 / hotfix / 单 change 快速通道 / 存量 change 无 brief)照常 DP-0。**主信号 = brief 文件存在**(非 yaml 字段——可天然排除无 brief 的快速通道,且对存量手动 change 零误伤);双源冲突以 `prd/vN/plan.md` 为准并触发 Brief drift(见「Staleness Detection」)。完整判定伪代码与主信号理由见 `references/routing-rules.md`「DP-0」。
|
|
34
|
+
|
|
35
|
+
Ask (manual path): change name + one-sentence intent, known constraints, related optimizations (include or stay focused?), communication preference (ask per decision or draft for review).
|
|
36
|
+
|
|
37
|
+
After confirmation:
|
|
38
|
+
```bash
|
|
39
|
+
node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' state set <change-dir> dp_0_decisions "<summary>"
|
|
40
|
+
node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' state set <change-dir> dp_0_result confirmed
|
|
41
|
+
node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' state set <change-dir> dp_0_confirmed true
|
|
42
|
+
node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' state set <change-dir> dp_0_timestamp $(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Config-aware routing: check `artifacts.order` and `artifacts.skip` from project config.
|
|
46
|
+
|
|
47
|
+
## Mode Detection
|
|
48
|
+
|
|
49
|
+
If workflow is `auto`/`null`/unset: run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' runtime infer <change-dir>`. Inference: **hotfix** (≤2 tasks, ≤2 files, no schema/API/new modules), **tweak** (≤4 tasks, config/doc only), **full** (anything larger). Persist with `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' state set <dir> workflow <mode>`.
|
|
50
|
+
|
|
51
|
+
Validate mode against artifact content. If hotfix/tweak criteria not met → upgrade to `full` and output reason. Don't overwrite explicit mode unless user asks.
|
|
52
|
+
|
|
53
|
+
## Routing Rules
|
|
54
|
+
|
|
55
|
+
### Route to need-explorer
|
|
56
|
+
Change is fuzzy, scope unclear, comparing options, no stable change name.
|
|
57
|
+
|
|
58
|
+
### Route to architecture-design (v0.9 §26)
|
|
59
|
+
Guard: `arch_design_decision` in `.team-flow.yaml` is `null` → must run before spec-writer. Dispatch `architecture-design` as sub-agent; after return, run reasonableness check and write yaml. Full protocol in `references/routing-rules.md`「Route to architecture-design」.
|
|
60
|
+
|
|
61
|
+
### Route to spec-writer
|
|
62
|
+
Guard: `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' runtime guard check <dir> exploring specifying --json` → fail = BLOCK. **arch_design_decision must not be null** → fail = BLOCK (v0.9 §26). User knows what they want, artifacts missing/incomplete.
|
|
63
|
+
|
|
64
|
+
### Route to contract-builder
|
|
65
|
+
Guard: `... check <dir> specifying bridging --json` → fail = BLOCK. Artifacts exist, implementation requested, contract missing/stale. Include `DP-3: 契约批准`.
|
|
66
|
+
|
|
67
|
+
### Route to build-executor
|
|
68
|
+
Contract exists and approved, contract matches artifacts. Include `DP-4: 执行模式选择`: propose waves, run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution recommend <change-dir> [--wave ...]`, show the user every available mode plus evidence and the recommendation, then obtain a clear selection. The command saves a current receipt; before the first implementation edit, `build-executor` must run `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution plan <change-dir> --mode <selected> --confirm ...` (and `--acknowledge-recommendation` when the selected mode differs from the recommendation) using matching artifacts, contract, and waves, then `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution show <change-dir> --json`; report the saved revision, selected mode, recommendation alignment, ordered waves, and actual concurrent-dispatch capability. A revision must repeat recommend and confirmation. Do not transition to `executing` until `show` reports `current: true`; then run `... check <dir> approved-for-build executing --json` → fail = BLOCK.
|
|
69
|
+
|
|
70
|
+
### Route to bug-investigator
|
|
71
|
+
Execution hit blockage: test failure, unexpected behavior, build error, task cannot proceed. After debugging, route back to build-executor.
|
|
72
|
+
|
|
73
|
+
### Route to code-reviewer
|
|
74
|
+
The current planned wave is implemented and ready for spec-compliance + code-quality verification. A reviewer must write an `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution review <change-dir> --wave <id> --base <sha> --head <sha> --report <path> --verdict <pass|fail>` receipt before any dependent wave or closing transition.
|
|
75
|
+
|
|
76
|
+
### Route to release-archivist
|
|
77
|
+
Guard: `... check <dir> executing closing --json` → fail = BLOCK. Implementation complete, verification complete/nearly complete. Include `DP-7: 归档确认`.
|
|
78
|
+
|
|
79
|
+
### Route to spec-merger
|
|
80
|
+
Delta specs exist that need merging, change closing with ADDED/MODIFIED/REMOVED/RENAMED specs.
|
|
81
|
+
|
|
82
|
+
### Route to abandoned
|
|
83
|
+
User explicitly requests, bug-investigator escalates after 3+ failures AND user chooses, scope change makes change no longer worthwhile AND user confirms. Block from `closing` or `abandoned`.
|
|
84
|
+
|
|
85
|
+
### Optional Prototype Handoff
|
|
86
|
+
|
|
87
|
+
When the user's brief explicitly contains UI, screen, interaction, layout, UX,
|
|
88
|
+
or product-experience uncertainty, ask once whether a prototype would reduce
|
|
89
|
+
uncertainty. Do not create a prototype handoff or enter a prototype worktree
|
|
90
|
+
until the user confirms. After confirmation:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' handoff create <change-dir> \
|
|
94
|
+
--type prototype --objective "<confirmed objective>" \
|
|
95
|
+
--expected-output "<expected evidence>" --acceptance "<completion criterion>"
|
|
96
|
+
tf isolate <change-dir> prototype-<handoff-id>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Never suggest or enter this route automatically for backend, CLI, configuration,
|
|
100
|
+
or internal-refactor work. Never pass `--force` to `tf isolate` for prototype
|
|
101
|
+
work.
|
|
102
|
+
|
|
103
|
+
### Fast-Path Routing
|
|
104
|
+
|
|
105
|
+
**DP-0 处理**(v0.22.5 F03 修复):hotfix/tweak 路径隐式跳过 DP-0(`dp_0_confirmed` 保持 `null`),因为意图已明确(修复/微调),无需从零探索。contract-builder 的 DP-3 审批成为唯一门禁。
|
|
106
|
+
|
|
107
|
+
- **Hotfix**: Route to contract-builder (minimal), skip need-explorer + spec-writer, guard check `exploring bridging --workflow hotfix`, then `bridging -> approved-for-build`, after DP-3 → build-executor (recommend, show, and confirm an execution mode), after → release-archivist (lightweight). Hotfix may skip `proposal.md`, `design.md`, `tasks.md`, and `specs/`, but it still requires a fresh minimal `execution-contract.md`, DP-3 approval, and a current execution plan before build. **architecture-design 不豁免**(v0.9 §26):同样过 architecture-design 子代理判断门,快速判定是否涉及架构变更(hotfix 可能正是架构缺陷导致)
|
|
108
|
+
- **Tweak**: Route to build-executor (direct edit), skip need-explorer + spec-writer + contract-builder, guard check `exploring approved-for-build --workflow tweak`, after → release-archivist (lightweight). **architecture-design 不豁免**(v0.9 §26):同样过 architecture-design 子代理判断门
|
|
109
|
+
|
|
110
|
+
Post-transition: 💡 `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' inject <change-dir>` to update phase-guard artifacts.
|
|
111
|
+
|
|
112
|
+
## Staleness Detection
|
|
113
|
+
|
|
114
|
+
Use content inspection, not timestamps.
|
|
115
|
+
|
|
116
|
+
**Stale contract**: proposal scope expanded beyond contract scope fence, or contract references capabilities no longer in proposal → route back to `contract-builder`.
|
|
117
|
+
|
|
118
|
+
**Stale planning artifacts**: capability in proposal has no spec file, or spec exists for capability not in proposal → drift detected.
|
|
119
|
+
|
|
120
|
+
**Stale tasks**: requirement in specs has no corresponding task → stale tasks.
|
|
121
|
+
|
|
122
|
+
**Brief drift (advisory, v0.9, 不阻断)**: change-brief.md 是上游输入(非 team-flow 产物),**不**混入上述三条产物互查、**不**进入 `artifacts_hash`。当 brief 的 `plan_hash` 与当前 `prd/vN/plan.md` 不一致,或 brief AC 列表与 PRD 功能清单明显出入 → 提示"产品层已变更,brief 可能过期,建议回 orchestrator 重新分发(S4→S3 环路)",**不**触发产物重审。
|
|
123
|
+
|
|
124
|
+
## Guardrails
|
|
125
|
+
|
|
126
|
+
- No implementation before planning artifacts or contract exist
|
|
127
|
+
- No implementation for full/hotfix without a current `node '/Users/litong/Documents/work/code/practice/team-flow-workspace/team-flow/.zcode/team-flow/scripts/team-flow.mjs' execution plan`; no state transition based on an unverified DP-4 string
|
|
128
|
+
- No "continue" without state inspection
|
|
129
|
+
- No implementation past stale contract
|
|
130
|
+
- No implementation past bug without investigation
|
|
131
|
+
- No closure without all planned wave review receipts recorded as `pass`
|
|
132
|
+
- No closure with unsynced delta specs
|
|
133
|
+
- No transitions from `abandoned` (terminal)
|
|
134
|
+
- No transition to `abandoned` from `closing` or `abandoned`
|
|
135
|
+
- No auto-abandon without user confirmation
|
|
136
|
+
- No merging delta specs from abandoned change
|
|
137
|
+
- **No routing to spec-writer without architecture-design gate pass** (v0.9 §26): `arch_design_decision` must be `required` or `skipped` (not `null`). hotfix/tweak 不豁免
|
|
138
|
+
|
|
139
|
+
## State Writes (v0.22.5 F06 修复)
|
|
140
|
+
|
|
141
|
+
workflow-start 负责写入以下字段到 `.team-flow.yaml`:
|
|
142
|
+
|
|
143
|
+
**核心状态字段**:
|
|
144
|
+
- `state`:当前状态(exploring/specifying/bridging/approved-for-build/executing/debugging/closing/abandoned)
|
|
145
|
+
- `workflow`:工作流类型(auto/full/hotfix/tweak)
|
|
146
|
+
|
|
147
|
+
**决策点字段**(各阶段确认后写入):
|
|
148
|
+
- `dp_0_*`:need-explorer 完成后的需求澄清决策
|
|
149
|
+
- `dp_1_*`:spec-writer 完成后的规格决策
|
|
150
|
+
- `dp_2_*`:contract-builder 完成后的契约决策
|
|
151
|
+
- `dp_3_*`:build-executor 完成后的执行决策
|
|
152
|
+
- `dp_5_*`:code-reviewer 完成后的审查决策
|
|
153
|
+
- `dp_6_*`:release-archivist 完成后的发布决策
|
|
154
|
+
- `dp_7_*`:其他决策点
|
|
155
|
+
|
|
156
|
+
**架构设计门控字段**(v0.9 §26,v0.22.5 F02 修复):
|
|
157
|
+
- `arch_design_decision`:`required` | `skipped`(architecture-design 子代理返回,workflow-start 经 reasonableness check 后写入)
|
|
158
|
+
- `arch_design_reason`:判断理由
|
|
159
|
+
- `arch_design_timestamp`:ISO 8601 时间戳(UTC)
|
|
160
|
+
- `arch_design_artifacts`:产出路径列表(required 时必填,skipped 时为空)
|
|
161
|
+
|
|
162
|
+
**职责边界**:architecture-design 负责判断+产出,workflow-start 负责 reasonableness check + 状态写入。详细写入命令见 `references/routing-rules.md`「Route to architecture-design」。
|
|
163
|
+
|
|
164
|
+
## Output Standard
|
|
165
|
+
|
|
166
|
+
Always state: (1) current detected state, (2) why (cite file/content/condition), (3) which skill should run next. If blocking, explain missing artifact/approval.
|
|
167
|
+
|
|
168
|
+
Decision point references when routing:
|
|
169
|
+
- architecture-design → DP-A(架构设计判断门,v0.9 §26), contract-builder → DP-3, build-executor → DP-4, bug-investigator (escalation) → DP-5, release-archivist (verification failure) → DP-6, release-archivist → DP-7
|
|
170
|
+
|
|
171
|
+
## Exception Handling
|
|
172
|
+
|
|
173
|
+
- **Parse failures**: Fall back to content-level detection if `.team-flow.yaml` is malformed
|
|
174
|
+
- **Missing files**: Route to the skill that generates the missing files
|
|
175
|
+
- **User interruption**: Re-inspect change directory content (not cached state) on resume
|
package/AGENTS.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
- **team-flow**(本插件):Claude Code / Cursor 等宿主的插件实体(`plugin.json` name = `team-flow`),包含 23 个 skills + 8 个 agents + hooks + templates
|
|
16
16
|
- **@xulthekl/team-flow**(npm 底座包):team-flow 的 CLI 工具层(`package.json` name = `@xulthekl/team-flow`,bin = `tf` / `team-flow`),提供状态机、校验、复利 CLI 等运行时能力
|
|
17
|
-
- 关系:team-flow 插件 **包含** @xulthekl/team-flow npm 包作为底座(同一仓库、同一版本)。skills 中的 `
|
|
17
|
+
- 关系:team-flow 插件 **包含** @xulthekl/team-flow npm 包作为底座(同一仓库、同一版本)。skills 中的 `tf ...` 调用的是已全局安装的 @xulthekl/team-flow CLI,版本由 session-start hook 自动同步
|
|
18
18
|
- 历史身份(已废弃):`spec-superflow`(npm 包名,0.11.0 后停止发布)/ `ssf`(CLI 前缀)/ `.spec-superflow.yaml`(状态文件)—— 详见设计增强方案 v0.9 §27
|
|
19
19
|
|
|
20
20
|
## Commands
|
package/GEMINI.md
CHANGED
|
@@ -8,7 +8,7 @@ The workflow is self-contained and does not require OpenSpec or Superpowers at r
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
<!-- team-flow-phase-guard-start -->
|
|
11
|
-
# team-flow v0.
|
|
11
|
+
# team-flow v0.27.0 | 阶段: {{state}} | 工作流: {{workflow}}
|
|
12
12
|
当前阶段允许的操作由 workflow-start 路由规则定义。
|
|
13
13
|
禁止跨越 DP gate 进入下一阶段。变更范围以 execution-contract.md 的 Intent Lock 为准。
|
|
14
14
|
<!-- team-flow-phase-guard-end -->
|
package/HANDOFF.md
CHANGED
|
@@ -111,7 +111,7 @@ team-flow/
|
|
|
111
111
|
2. **npm 包名 = `@xulthekl/team-flow`**(scoped,解决 publish 权限冲突;author = `xulthekl`)。
|
|
112
112
|
3. **compound 范围 = 核心子集(C 方案,6 个)**,非全量 33。理由:避免 27 个嵌套 agent 全部并入导致膨胀;6 个核心已覆盖「头脑风暴→PRD→全局复利→策略→创意→验证」主链路。
|
|
113
113
|
4. **compound 的 agent 随所属 skill 自动并入**:嵌套在各 skill 内部的 `references/agents/*.md`,作为运行时子代理,非独立顶层 agents。
|
|
114
|
-
5. **CLI = `tf`**(bin 同时暴露 `team-flow` 别名)。
|
|
114
|
+
5. **CLI = `tf`**(bin 同时暴露 `team-flow` 别名)。CLI 调用统一用 `tf <subcmd>`(全局安装后直接可用,版本由 session-start hook 自动同步)。
|
|
115
115
|
6. **状态文件 = `.team-flow.yaml`**(扁平,每 change 一份)。
|
|
116
116
|
7. **配置文件 = `team-flow.config.json`**(插件层扩展字段:`prd.template` / `prototype.designSystem` / `prototype.entry`)。
|
|
117
117
|
8. **版本同步机制**:`npm run version <x.y.z>` 自动更新 package.json + 所有 manifest + 所有 skill npx 引用 + phase-guard.md / llms.txt / GEMINI.md 版本戳。
|
package/INSTALL.md
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# team-flow
|
|
2
2
|
|
|
3
|
-
> 当前版本:`v0.
|
|
3
|
+
> 当前版本:`v0.27.0`
|
|
4
4
|
|
|
5
5
|
> 统一插件:**team-flow**(spec 驱动开发)+ **compound-engineering 核心子集**(全局复利)+ **architecture-design**(4A+DDD 增量设计)+ **prototype**(本地 HTML 原型)+ **e2e**(AC 驱动 E2E)+ **workflow-orchestrator**(产品级编排)+ **workflow-bootstrap**(既有项目接入)。一次安装,七套能力协同。
|
|
6
6
|
|
package/docs/README_en.md
CHANGED
|
@@ -126,7 +126,7 @@ npm install -g team-flow
|
|
|
126
126
|
|
|
127
127
|
### Version
|
|
128
128
|
|
|
129
|
-
- Current: `v0.
|
|
129
|
+
- Current: `v0.27.0`
|
|
130
130
|
- v0.9.1 highlights: DP-4 execution-mode recommendations, a portable runtime across 17 platforms, and a raw-package smoke with no plugin-root variable.
|
|
131
131
|
- Self-contained — no OpenSpec or Superpowers runtime required
|
|
132
132
|
- Upstream: [Fission-AI/OpenSpec](https://github.com/Fission-AI/OpenSpec), [obra/superpowers](https://github.com/obra/superpowers)
|
package/docs/solutions/INDEX.md
CHANGED
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
<!-- 每条一行,按 severity 降序,≤150 行硬上限 -->
|
|
3
3
|
| date | phase | domain | type | severity | summary | file |
|
|
4
4
|
|------|-------|--------|------|----------|---------|------|
|
|
5
|
+
| 2026-07-30 | cross-phase | general | insight | medium | (no summary) | cross-phase/2026-07-30-no-summary.md |
|
|
5
6
|
| 2026-07-29 | cross-phase | general | insight | medium | (no summary) | cross-phase/2026-07-29-no-summary.md |
|
|
6
7
|
| 2026-07-28 | cross-phase | general | insight | medium | (no summary) | cross-phase/2026-07-28-no-summary.md |
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "team-flow",
|
|
3
3
|
"description": "Unified workflow plugin: team-flow (spec-driven dev) + compound-engineering core subset + architecture-design (4A/DDD) + prototype (local HTML). 17 skills, one install.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.27.0",
|
|
5
5
|
"contextFileName": "GEMINI.md"
|
|
6
6
|
}
|
package/hooks/session-start
CHANGED
|
@@ -1,5 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# v0.
|
|
2
|
+
# v0.27.0: auto-sync CLI version with plugin version
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
# ═══════════════════════════════════════════════════════════════
|
|
6
|
+
# Step 1: Auto-sync CLI version with plugin version
|
|
7
|
+
# ═══════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
sync_tf_version() {
|
|
10
|
+
# Find plugin.json from plugin root
|
|
11
|
+
local plugin_json=""
|
|
12
|
+
local plugin_root="${CURSOR_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
|
|
13
|
+
|
|
14
|
+
if [ -n "$plugin_root" ] && [ -f "$plugin_root/plugin.json" ]; then
|
|
15
|
+
plugin_json="$plugin_root/plugin.json"
|
|
16
|
+
else
|
|
17
|
+
# Fallback: search common plugin directories
|
|
18
|
+
for dir in ".cursor" ".claude" ".cline" ".kiro" ".windsurf"; do
|
|
19
|
+
if [ -f "$dir/plugin.json" ]; then
|
|
20
|
+
plugin_json="$dir/plugin.json"
|
|
21
|
+
break
|
|
22
|
+
fi
|
|
23
|
+
done
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Read plugin version from plugin.json
|
|
27
|
+
local plugin_version=""
|
|
28
|
+
if [ -n "$plugin_json" ]; then
|
|
29
|
+
plugin_version=$(grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' "$plugin_json" | head -1 | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+')
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# If plugin.json not found or version not extracted, skip sync
|
|
33
|
+
if [ -z "$plugin_version" ]; then
|
|
34
|
+
return 0
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Get installed tf version
|
|
38
|
+
local installed_version=""
|
|
39
|
+
if command -v tf &>/dev/null; then
|
|
40
|
+
installed_version=$(tf --version 2>/dev/null | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1)
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# Compare versions and sync if needed
|
|
44
|
+
if [ "$installed_version" != "$plugin_version" ]; then
|
|
45
|
+
echo "🔄 team-flow CLI version mismatch: ${installed_version:-not installed} → $plugin_version"
|
|
46
|
+
echo " Auto-installing @xulthekl/team-flow@$plugin_version..."
|
|
47
|
+
npm install -g "@xulthekl/team-flow@$plugin_version" --prefer-offline 2>/dev/null || {
|
|
48
|
+
echo "⚠️ Auto-install failed. Please run manually:"
|
|
49
|
+
echo " npm install -g @xulthekl/team-flow@$plugin_version"
|
|
50
|
+
}
|
|
51
|
+
fi
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# Run version sync (suppress output for clean hook execution)
|
|
55
|
+
sync_tf_version >/dev/null 2>&1 || true
|
|
56
|
+
|
|
57
|
+
# ═══════════════════════════════════════════════════════════════
|
|
58
|
+
# Step 2: Inject workflow context
|
|
59
|
+
# ═══════════════════════════════════════════════════════════════
|
|
60
|
+
|
|
3
61
|
msg="<EXTREMELY_IMPORTANT>\nYou have team-flow installed. Invoke /team-flow:workflow-start or /team-flow:workflow-orchestrator ONLY when active team-flow artifacts exist (\`.team-flow.yaml\`, \`proposal.md\`, \`execution-contract.md\`, \`specs/\`) or the user explicitly requests it. For ordinary coding tasks, do NOT invoke them.\n</EXTREMELY_IMPORTANT>\n<EXTREMELY_IMPORTANT>\n## Workspace Directory Rule\n\"Base directory for this skill\" = skill source location (read SKILL.md/references/ ONLY). User project = \`pwd\`. ALL project artifacts (changes/, prd/, docs/, .team-flow/, etc.) MUST operate under \`pwd\`, NEVER the skill base directory. Run \`pwd\` first in every skill execution.\n</EXTREMELY_IMPORTANT>"
|
|
4
62
|
|
|
5
63
|
# Three platforms share the same message, only output format differs.
|
package/llms.txt
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Overview
|
|
4
4
|
spec-superflow is a self-contained workflow integration plugin for Claude Code, Cursor, OpenAI Codex CLI/App, GitHub Copilot CLI, Gemini CLI, OpenCode, WorkBuddy, and Trae. It merges spec-driven planning artifacts (proposal, specs, design, tasks) with disciplined execution guardrails (TDD, review gates, controlled handoff) into one unified workflow.
|
|
5
5
|
|
|
6
|
-
Current version: v0.
|
|
6
|
+
Current version: v0.27.0.
|
|
7
7
|
|
|
8
8
|
## Key Documents
|
|
9
9
|
- README.md: Chinese homepage with full usage guide and FAQ
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xulthekl/team-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Unified plugin (23 skills + 8 agents) integrating team-flow, compound-engineering, architecture-design, prototype, design-system, workflow-orchestrator, workflow-bootstrap, e2e, session-handoff, workflow-feedback for multi-agent coding tools.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "team-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Unified workflow plugin: team-flow (spec-driven dev: TDD/SDD/code-review/debugging) + compound-engineering core subset (brainstorm/plan/compound/strategy/ideate/proof, global compounding) + architecture-design (4A+DDD incremental design & global compounding) + prototype (local HTML prototype, zero external deps) + e2e (Playwright E2E, AC-driven) + workflow-orchestrator (product-level workflow orchestration) + workflow-bootstrap (existing project onboarding) + session-handoff (context transfer) + workflow-feedback (issue tracking). 23 skills + 8 agents, one install.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "LT"
|
|
@@ -67,7 +67,7 @@ const TEXT_CHECKS = [
|
|
|
67
67
|
{ file: 'README.md', extract: /当前版本:`v(\d+\.\d+\.\d+)`/ },
|
|
68
68
|
{ file: 'INSTALL.md', extract: /当前发布版本:\*\*v(\d+\.\d+\.\d+)\*\*/ },
|
|
69
69
|
{ file: 'docs/README_en.md', extract: /Current: `v(\d+\.\d+\.\d+)`/ },
|
|
70
|
-
{ file: 'hooks/session-start', extract: /# v(\d+\.\d+\.\d+)
|
|
70
|
+
{ file: 'hooks/session-start', extract: /# v(\d+\.\d+\.\d+):/ },
|
|
71
71
|
{ file: 'llms.txt', extract: /Current version: v(\d+\.\d+\.\d+)\./ },
|
|
72
72
|
{ file: '.claude/always/phase-guard.md', extract: /# team-flow v(\d+\.\d+\.\d+) \|/ },
|
|
73
73
|
{ file: 'GEMINI.md', extract: /# team-flow v(\d+\.\d+\.\d+) \|/ },
|
|
@@ -88,28 +88,11 @@ for (const check of TEXT_CHECKS) {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
'skills/build-executor/task-reviewer-prompt.md',
|
|
97
|
-
'skills/code-reviewer/code-reviewer-prompt.md',
|
|
98
|
-
]);
|
|
99
|
-
for (const file of RUNTIME_FILES) {
|
|
100
|
-
const fp = join(ROOT, file);
|
|
101
|
-
if (!existsSync(fp)) {
|
|
102
|
-
errors.push({ file, found: 'FILE_NOT_FOUND', expected: CANONICAL });
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
const versions = [...readFileSync(fp, 'utf8').matchAll(/npx --yes --package @xulthekl\/team-flow@(\d+\.\d+\.\d+) tf/g)]
|
|
106
|
-
.map(match => match[1]);
|
|
107
|
-
if (versions.length === 0) {
|
|
108
|
-
errors.push({ file, found: 'RUNTIME_PREFIX_NOT_FOUND', expected: CANONICAL });
|
|
109
|
-
} else if (versions.some(version => version !== CANONICAL)) {
|
|
110
|
-
errors.push({ file, found: [...new Set(versions)].join(', '), expected: CANONICAL });
|
|
111
|
-
}
|
|
112
|
-
}
|
|
91
|
+
// ── Runtime npx version consistency (DISABLED) ──
|
|
92
|
+
// v0.27.0: Skills no longer embed npx version references.
|
|
93
|
+
// CLI version is now synced via session-start hook (reads plugin.json version).
|
|
94
|
+
// This check is disabled to avoid false positives.
|
|
95
|
+
const RUNTIME_FILES = [];
|
|
113
96
|
|
|
114
97
|
// ── Skill count consistency ──
|
|
115
98
|
// Count actual skill directories under skills/ and compare against the count
|
|
@@ -182,35 +165,12 @@ for (const check of SKILL_COUNT_TEXT_CHECKS) {
|
|
|
182
165
|
}
|
|
183
166
|
}
|
|
184
167
|
|
|
185
|
-
// ── npx version reference consistency ──
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
const SKILL_MD_FILES =
|
|
190
|
-
.map(entry => `skills/${entry.name}/SKILL.md`)
|
|
191
|
-
.filter(file => existsSync(join(ROOT, file)));
|
|
192
|
-
|
|
193
|
-
// Also scan references/ subdirectories for stale npx refs
|
|
168
|
+
// ── npx version reference consistency (DISABLED) ──
|
|
169
|
+
// v0.27.0: Skills no longer embed npx version references.
|
|
170
|
+
// CLI version is now synced via session-start hook (reads plugin.json version).
|
|
171
|
+
// This check is disabled to avoid false positives.
|
|
172
|
+
const SKILL_MD_FILES = [];
|
|
194
173
|
const REFERENCES_FILES = [];
|
|
195
|
-
function scanDir(dir, prefix = '') {
|
|
196
|
-
const entries = readdirSync(dir, { withFileTypes: true });
|
|
197
|
-
for (const entry of entries) {
|
|
198
|
-
const fullPath = join(dir, entry.name);
|
|
199
|
-
const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
200
|
-
if (entry.isDirectory()) {
|
|
201
|
-
scanDir(fullPath, relPath);
|
|
202
|
-
} else if (entry.name.endsWith('.md')) {
|
|
203
|
-
REFERENCES_FILES.push(relPath);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
const refsDir = join(ROOT, 'skills');
|
|
208
|
-
for (const skillEntry of skillDirs) {
|
|
209
|
-
const refsPath = join(refsDir, skillEntry.name, 'references');
|
|
210
|
-
if (existsSync(refsPath)) {
|
|
211
|
-
scanDir(refsPath, `skills/${skillEntry.name}/references`);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
174
|
|
|
215
175
|
const ALL_SCANNABLE_FILES = [...SKILL_MD_FILES, ...REFERENCES_FILES];
|
|
216
176
|
|
|
@@ -104,9 +104,10 @@ async function copySkillsWithRoot(sourceSkills, targetSkills, pluginRootAbs) {
|
|
|
104
104
|
if (content.includes('${CLAUDE_PLUGIN_ROOT}')) {
|
|
105
105
|
content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, pluginRootAbs);
|
|
106
106
|
}
|
|
107
|
+
// v0.27.0: Replace bare `tf` commands with local node path for ZCODE platform
|
|
107
108
|
content = content.replace(
|
|
108
|
-
|
|
109
|
-
`node ${shellQuote(join(pluginRootAbs, 'scripts', 'team-flow.mjs'))}`,
|
|
109
|
+
/\btf\s+(?=state|execution|checkpoint|handoff|runtime|validate|doctor|config|version|list|inject|audit|sync|prototype-sync|arch-merge|solutions)/g,
|
|
110
|
+
`node ${shellQuote(join(pluginRootAbs, 'scripts', 'team-flow.mjs'))} `,
|
|
110
111
|
);
|
|
111
112
|
writeFileSync(skillMd, content, 'utf-8');
|
|
112
113
|
}
|
|
@@ -118,9 +119,10 @@ async function copySkillsWithRoot(sourceSkills, targetSkills, pluginRootAbs) {
|
|
|
118
119
|
if (content.includes('${CLAUDE_PLUGIN_ROOT}')) {
|
|
119
120
|
content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, pluginRootAbs);
|
|
120
121
|
}
|
|
122
|
+
// v0.27.0: Replace bare `tf` commands with local node path for ZCODE platform
|
|
121
123
|
content = content.replace(
|
|
122
|
-
|
|
123
|
-
`node ${shellQuote(join(pluginRootAbs, 'scripts', 'team-flow.mjs'))}`,
|
|
124
|
+
/\btf\s+(?=state|execution|checkpoint|handoff|runtime|validate|doctor|config|version|list|inject|audit|sync|prototype-sync|arch-merge|solutions)/g,
|
|
125
|
+
`node ${shellQuote(join(pluginRootAbs, 'scripts', 'team-flow.mjs'))} `,
|
|
124
126
|
);
|
|
125
127
|
writeFileSync(subPath, content, 'utf-8');
|
|
126
128
|
}
|
|
@@ -116,7 +116,7 @@ function checkRuntimeDistribution(root) {
|
|
|
116
116
|
return { pass: false, message: 'runtime distribution cannot be checked: package.json or skills/ is missing; reinstall team-flow' };
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
const canonicalPrefix =
|
|
119
|
+
const canonicalPrefix = "tf";
|
|
120
120
|
const issues = [];
|
|
121
121
|
for (const name of readdirSync(skillsDir)) {
|
|
122
122
|
if (!RUNTIME_SKILLS.has(name)) continue;
|
|
@@ -49,7 +49,7 @@ Scientific method: form a single hypothesis ("I think X is the root cause becaus
|
|
|
49
49
|
|
|
50
50
|
### DP-5: Debug Escalation (3+ Failures)
|
|
51
51
|
|
|
52
|
-
3+ failed fixes = architectural problem. Each fix revealing new problems elsewhere = wrong architecture. Record: `
|
|
52
|
+
3+ failed fixes = architectural problem. Each fix revealing new problems elsewhere = wrong architecture. Record: `tf state set <change-dir> dp_5_result <decision>`. Discuss with user before attempting more fixes.
|
|
53
53
|
|
|
54
54
|
## Red Flags — Return to Phase 1
|
|
55
55
|
|