mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-11 02:33:51 +08:00
Merge pull request #17 from catlog22/claude/optimize-doc-phase2-filename-012ABaeYT56XeMJ73zUeA3kt
Optimize JSON filename in doc command phase2
This commit is contained in:
@@ -89,7 +89,7 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null | xargs cat 2>/dev/null; fi)
|
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null | xargs cat 2>/dev/null; fi)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Data Processing**: Parse bash outputs, calculate statistics, use **Write tool** to create `${session_dir}/.process/phase2-analysis.json` with structure:
|
**Data Processing**: Parse bash outputs, calculate statistics, use **Write tool** to create `${session_dir}/.process/doc-planning-data.json` with structure:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,7 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
|
|
||||||
**Then** use **Edit tool** to update `workflow-session.json` adding analysis field.
|
**Then** use **Edit tool** to update `workflow-session.json` adding analysis field.
|
||||||
|
|
||||||
**Output**: Single `phase2-analysis.json` with all analysis data (no temp files or Python scripts).
|
**Output**: Single `doc-planning-data.json` with all analysis data (no temp files or Python scripts).
|
||||||
|
|
||||||
**Auto-skipped**: Tests (`**/test/**`, `**/*.test.*`), Build (`**/node_modules/**`, `**/dist/**`), Config (root-level files), Vendor directories.
|
**Auto-skipped**: Tests (`**/test/**`, `**/*.test.*`), Build (`**/node_modules/**`, `**/dist/**`), Config (root-level files), Vendor directories.
|
||||||
|
|
||||||
@@ -127,8 +127,8 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
**Commands**:
|
**Commands**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Count existing docs from phase2-analysis.json
|
# Count existing docs from doc-planning-data.json
|
||||||
bash(cat .workflow/active/WFS-docs-{timestamp}/.process/phase2-analysis.json | jq '.existing_docs.file_list | length')
|
bash(cat .workflow/active/WFS-docs-{timestamp}/.process/doc-planning-data.json | jq '.existing_docs.file_list | length')
|
||||||
```
|
```
|
||||||
|
|
||||||
**Data Processing**: Use count result, then use **Edit tool** to update `workflow-session.json`:
|
**Data Processing**: Use count result, then use **Edit tool** to update `workflow-session.json`:
|
||||||
@@ -182,8 +182,8 @@ Large Projects (single dir >10 docs):
|
|||||||
**Commands**:
|
**Commands**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Get top-level directories from phase2-analysis.json
|
# 1. Get top-level directories from doc-planning-data.json
|
||||||
bash(cat .workflow/active/WFS-docs-{timestamp}/.process/phase2-analysis.json | jq -r '.top_level_dirs[]')
|
bash(cat .workflow/active/WFS-docs-{timestamp}/.process/doc-planning-data.json | jq -r '.top_level_dirs[]')
|
||||||
|
|
||||||
# 2. Get mode from workflow-session.json
|
# 2. Get mode from workflow-session.json
|
||||||
bash(cat .workflow/active/WFS-docs-{timestamp}/workflow-session.json | jq -r '.mode // "full"')
|
bash(cat .workflow/active/WFS-docs-{timestamp}/workflow-session.json | jq -r '.mode // "full"')
|
||||||
@@ -201,7 +201,7 @@ bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo
|
|||||||
- If total ≤10 docs: create group
|
- If total ≤10 docs: create group
|
||||||
- If total >10 docs: split to 1 dir/group or subdivide
|
- If total >10 docs: split to 1 dir/group or subdivide
|
||||||
- If single dir >10 docs: split by subdirectories
|
- If single dir >10 docs: split by subdirectories
|
||||||
3. Use **Edit tool** to update `phase2-analysis.json` adding groups field:
|
3. Use **Edit tool** to update `doc-planning-data.json` adding groups field:
|
||||||
```json
|
```json
|
||||||
"groups": {
|
"groups": {
|
||||||
"count": 3,
|
"count": 3,
|
||||||
@@ -215,7 +215,7 @@ bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo
|
|||||||
|
|
||||||
**Task ID Calculation**:
|
**Task ID Calculation**:
|
||||||
```bash
|
```bash
|
||||||
group_count=$(jq '.groups.count' .workflow/active/WFS-docs-{timestamp}/.process/phase2-analysis.json)
|
group_count=$(jq '.groups.count' .workflow/active/WFS-docs-{timestamp}/.process/doc-planning-data.json)
|
||||||
readme_id=$((group_count + 1)) # Next ID after groups
|
readme_id=$((group_count + 1)) # Next ID after groups
|
||||||
arch_id=$((group_count + 2))
|
arch_id=$((group_count + 2))
|
||||||
api_id=$((group_count + 3))
|
api_id=$((group_count + 3))
|
||||||
@@ -237,7 +237,7 @@ api_id=$((group_count + 3))
|
|||||||
|
|
||||||
**Generation Process**:
|
**Generation Process**:
|
||||||
1. Read configuration values (tool, cli_execute, mode) from workflow-session.json
|
1. Read configuration values (tool, cli_execute, mode) from workflow-session.json
|
||||||
2. Read group assignments from phase2-analysis.json
|
2. Read group assignments from doc-planning-data.json
|
||||||
3. Generate Level 1 tasks (IMPL-001 to IMPL-N, one per group)
|
3. Generate Level 1 tasks (IMPL-001 to IMPL-N, one per group)
|
||||||
4. Generate Level 2+ tasks if mode=full (README, ARCHITECTURE, HTTP API)
|
4. Generate Level 2+ tasks if mode=full (README, ARCHITECTURE, HTTP API)
|
||||||
|
|
||||||
@@ -262,14 +262,14 @@ api_id=$((group_count + 3))
|
|||||||
},
|
},
|
||||||
"context": {
|
"context": {
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"Process directories from group ${group_number} in phase2-analysis.json",
|
"Process directories from group ${group_number} in doc-planning-data.json",
|
||||||
"Generate docs to .workflow/docs/${project_name}/ (mirrored structure)",
|
"Generate docs to .workflow/docs/${project_name}/ (mirrored structure)",
|
||||||
"Code folders: API.md + README.md; Navigation folders: README.md only",
|
"Code folders: API.md + README.md; Navigation folders: README.md only",
|
||||||
"Use pre-analyzed data from Phase 2 (no redundant analysis)"
|
"Use pre-analyzed data from Phase 2 (no redundant analysis)"
|
||||||
],
|
],
|
||||||
"focus_paths": ["${group_dirs_from_json}"],
|
"focus_paths": ["${group_dirs_from_json}"],
|
||||||
"precomputed_data": {
|
"precomputed_data": {
|
||||||
"phase2_analysis": "${session_dir}/.process/phase2-analysis.json"
|
"phase2_analysis": "${session_dir}/.process/doc-planning-data.json"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flow_control": {
|
"flow_control": {
|
||||||
@@ -278,8 +278,8 @@ api_id=$((group_count + 3))
|
|||||||
"step": "load_precomputed_data",
|
"step": "load_precomputed_data",
|
||||||
"action": "Load Phase 2 analysis and extract group directories",
|
"action": "Load Phase 2 analysis and extract group directories",
|
||||||
"commands": [
|
"commands": [
|
||||||
"bash(cat ${session_dir}/.process/phase2-analysis.json)",
|
"bash(cat ${session_dir}/.process/doc-planning-data.json)",
|
||||||
"bash(jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories' ${session_dir}/.process/phase2-analysis.json)"
|
"bash(jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories' ${session_dir}/.process/doc-planning-data.json)"
|
||||||
],
|
],
|
||||||
"output_to": "phase2_context",
|
"output_to": "phase2_context",
|
||||||
"note": "Single JSON file contains all Phase 2 analysis results"
|
"note": "Single JSON file contains all Phase 2 analysis results"
|
||||||
@@ -324,7 +324,7 @@ api_id=$((group_count + 3))
|
|||||||
{
|
{
|
||||||
"step": 2,
|
"step": 2,
|
||||||
"title": "Batch generate documentation via CLI",
|
"title": "Batch generate documentation via CLI",
|
||||||
"command": "bash(dirs=$(jq -r '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories[]' ${session_dir}/.process/phase2-analysis.json); for dir in $dirs; do cd \"$dir\" && gemini --approval-mode yolo -p \"PURPOSE: Generate module docs\\nTASK: Create documentation\\nMODE: write\\nCONTEXT: @**/* [phase2_context]\\nEXPECTED: API.md and README.md\\nRULES: Mirror structure\" || echo \"Failed: $dir\"; cd -; done)",
|
"command": "bash(dirs=$(jq -r '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories[]' ${session_dir}/.process/doc-planning-data.json); for dir in $dirs; do cd \"$dir\" && gemini --approval-mode yolo -p \"PURPOSE: Generate module docs\\nTASK: Create documentation\\nMODE: write\\nCONTEXT: @**/* [phase2_context]\\nEXPECTED: API.md and README.md\\nRULES: Mirror structure\" || echo \"Failed: $dir\"; cd -; done)",
|
||||||
"depends_on": [1],
|
"depends_on": [1],
|
||||||
"output": "generated_docs"
|
"output": "generated_docs"
|
||||||
}
|
}
|
||||||
@@ -464,7 +464,7 @@ api_id=$((group_count + 3))
|
|||||||
├── IMPL_PLAN.md
|
├── IMPL_PLAN.md
|
||||||
├── TODO_LIST.md
|
├── TODO_LIST.md
|
||||||
├── .process/
|
├── .process/
|
||||||
│ └── phase2-analysis.json # All Phase 2 analysis data (replaces 7+ files)
|
│ └── doc-planning-data.json # All Phase 2 analysis data (replaces 7+ files)
|
||||||
└── .task/
|
└── .task/
|
||||||
├── IMPL-001.json # Small: all modules | Large: group 1
|
├── IMPL-001.json # Small: all modules | Large: group 1
|
||||||
├── IMPL-00N.json # (Large only: groups 2-N)
|
├── IMPL-00N.json # (Large only: groups 2-N)
|
||||||
@@ -473,7 +473,7 @@ api_id=$((group_count + 3))
|
|||||||
└── IMPL-{N+3}.json # HTTP API (optional)
|
└── IMPL-{N+3}.json # HTTP API (optional)
|
||||||
```
|
```
|
||||||
|
|
||||||
**phase2-analysis.json Structure**:
|
**doc-planning-data.json Structure**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null | xargs cat 2>/dev/null; fi)
|
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null | xargs cat 2>/dev/null; fi)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Data Processing**: Parse bash outputs, calculate statistics, use **Write tool** to create `${session_dir}/.process/phase2-analysis.json` with structure:
|
**Data Processing**: Parse bash outputs, calculate statistics, use **Write tool** to create `${session_dir}/.process/doc-planning-data.json` with structure:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,7 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
|
|
||||||
**Then** use **Edit tool** to update `workflow-session.json` adding analysis field.
|
**Then** use **Edit tool** to update `workflow-session.json` adding analysis field.
|
||||||
|
|
||||||
**Output**: Single `phase2-analysis.json` with all analysis data (no temp files or Python scripts).
|
**Output**: Single `doc-planning-data.json` with all analysis data (no temp files or Python scripts).
|
||||||
|
|
||||||
**Auto-skipped**: Tests (`**/test/**`, `**/*.test.*`), Build (`**/node_modules/**`, `**/dist/**`), Config (root-level files), Vendor directories.
|
**Auto-skipped**: Tests (`**/test/**`, `**/*.test.*`), Build (`**/node_modules/**`, `**/dist/**`), Config (root-level files), Vendor directories.
|
||||||
|
|
||||||
@@ -127,8 +127,8 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
|||||||
**Commands**:
|
**Commands**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Count existing docs from phase2-analysis.json
|
# Count existing docs from doc-planning-data.json
|
||||||
bash(cat .workflow/WFS-docs-{timestamp}/.process/phase2-analysis.json | jq '.existing_docs.file_list | length')
|
bash(cat .workflow/WFS-docs-{timestamp}/.process/doc-planning-data.json | jq '.existing_docs.file_list | length')
|
||||||
```
|
```
|
||||||
|
|
||||||
**Data Processing**: Use count result, then use **Edit tool** to update `workflow-session.json`:
|
**Data Processing**: Use count result, then use **Edit tool** to update `workflow-session.json`:
|
||||||
@@ -182,8 +182,8 @@ Large Projects (single dir >10 docs):
|
|||||||
**Commands**:
|
**Commands**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Get top-level directories from phase2-analysis.json
|
# 1. Get top-level directories from doc-planning-data.json
|
||||||
bash(cat .workflow/WFS-docs-{timestamp}/.process/phase2-analysis.json | jq -r '.top_level_dirs[]')
|
bash(cat .workflow/WFS-docs-{timestamp}/.process/doc-planning-data.json | jq -r '.top_level_dirs[]')
|
||||||
|
|
||||||
# 2. Get mode from workflow-session.json
|
# 2. Get mode from workflow-session.json
|
||||||
bash(cat .workflow/WFS-docs-{timestamp}/workflow-session.json | jq -r '.mode // "full"')
|
bash(cat .workflow/WFS-docs-{timestamp}/workflow-session.json | jq -r '.mode // "full"')
|
||||||
@@ -201,7 +201,7 @@ bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo
|
|||||||
- If total ≤10 docs: create group
|
- If total ≤10 docs: create group
|
||||||
- If total >10 docs: split to 1 dir/group or subdivide
|
- If total >10 docs: split to 1 dir/group or subdivide
|
||||||
- If single dir >10 docs: split by subdirectories
|
- If single dir >10 docs: split by subdirectories
|
||||||
3. Use **Edit tool** to update `phase2-analysis.json` adding groups field:
|
3. Use **Edit tool** to update `doc-planning-data.json` adding groups field:
|
||||||
```json
|
```json
|
||||||
"groups": {
|
"groups": {
|
||||||
"count": 3,
|
"count": 3,
|
||||||
@@ -215,7 +215,7 @@ bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo
|
|||||||
|
|
||||||
**Task ID Calculation**:
|
**Task ID Calculation**:
|
||||||
```bash
|
```bash
|
||||||
group_count=$(jq '.groups.count' .workflow/WFS-docs-{timestamp}/.process/phase2-analysis.json)
|
group_count=$(jq '.groups.count' .workflow/WFS-docs-{timestamp}/.process/doc-planning-data.json)
|
||||||
readme_id=$((group_count + 1)) # Next ID after groups
|
readme_id=$((group_count + 1)) # Next ID after groups
|
||||||
arch_id=$((group_count + 2))
|
arch_id=$((group_count + 2))
|
||||||
api_id=$((group_count + 3))
|
api_id=$((group_count + 3))
|
||||||
@@ -237,7 +237,7 @@ api_id=$((group_count + 3))
|
|||||||
|
|
||||||
**Generation Process**:
|
**Generation Process**:
|
||||||
1. Read configuration values (tool, cli_execute, mode) from workflow-session.json
|
1. Read configuration values (tool, cli_execute, mode) from workflow-session.json
|
||||||
2. Read group assignments from phase2-analysis.json
|
2. Read group assignments from doc-planning-data.json
|
||||||
3. Generate Level 1 tasks (IMPL-001 to IMPL-N, one per group)
|
3. Generate Level 1 tasks (IMPL-001 to IMPL-N, one per group)
|
||||||
4. Generate Level 2+ tasks if mode=full (README, ARCHITECTURE, HTTP API)
|
4. Generate Level 2+ tasks if mode=full (README, ARCHITECTURE, HTTP API)
|
||||||
|
|
||||||
@@ -262,14 +262,14 @@ api_id=$((group_count + 3))
|
|||||||
},
|
},
|
||||||
"context": {
|
"context": {
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"Process directories from group ${group_number} in phase2-analysis.json",
|
"Process directories from group ${group_number} in doc-planning-data.json",
|
||||||
"Generate docs to .workflow/docs/${project_name}/ (mirrored structure)",
|
"Generate docs to .workflow/docs/${project_name}/ (mirrored structure)",
|
||||||
"Code folders: API.md + README.md; Navigation folders: README.md only",
|
"Code folders: API.md + README.md; Navigation folders: README.md only",
|
||||||
"Use pre-analyzed data from Phase 2 (no redundant analysis)"
|
"Use pre-analyzed data from Phase 2 (no redundant analysis)"
|
||||||
],
|
],
|
||||||
"focus_paths": ["${group_dirs_from_json}"],
|
"focus_paths": ["${group_dirs_from_json}"],
|
||||||
"precomputed_data": {
|
"precomputed_data": {
|
||||||
"phase2_analysis": "${session_dir}/.process/phase2-analysis.json"
|
"phase2_analysis": "${session_dir}/.process/doc-planning-data.json"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flow_control": {
|
"flow_control": {
|
||||||
@@ -278,8 +278,8 @@ api_id=$((group_count + 3))
|
|||||||
"step": "load_precomputed_data",
|
"step": "load_precomputed_data",
|
||||||
"action": "Load Phase 2 analysis and extract group directories",
|
"action": "Load Phase 2 analysis and extract group directories",
|
||||||
"commands": [
|
"commands": [
|
||||||
"bash(cat ${session_dir}/.process/phase2-analysis.json)",
|
"bash(cat ${session_dir}/.process/doc-planning-data.json)",
|
||||||
"bash(jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories' ${session_dir}/.process/phase2-analysis.json)"
|
"bash(jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories' ${session_dir}/.process/doc-planning-data.json)"
|
||||||
],
|
],
|
||||||
"output_to": "phase2_context",
|
"output_to": "phase2_context",
|
||||||
"note": "Single JSON file contains all Phase 2 analysis results"
|
"note": "Single JSON file contains all Phase 2 analysis results"
|
||||||
@@ -324,7 +324,7 @@ api_id=$((group_count + 3))
|
|||||||
{
|
{
|
||||||
"step": 2,
|
"step": 2,
|
||||||
"title": "Batch generate documentation via CLI",
|
"title": "Batch generate documentation via CLI",
|
||||||
"command": "bash(dirs=$(jq -r '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories[]' ${session_dir}/.process/phase2-analysis.json); for dir in $dirs; do cd \"$dir\" && gemini --approval-mode yolo -p \"PURPOSE: Generate module docs\\nTASK: Create documentation\\nMODE: write\\nCONTEXT: @**/* [phase2_context]\\nEXPECTED: API.md and README.md\\nRULES: Mirror structure\" || echo \"Failed: $dir\"; cd -; done)",
|
"command": "bash(dirs=$(jq -r '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories[]' ${session_dir}/.process/doc-planning-data.json); for dir in $dirs; do cd \"$dir\" && gemini --approval-mode yolo -p \"PURPOSE: Generate module docs\\nTASK: Create documentation\\nMODE: write\\nCONTEXT: @**/* [phase2_context]\\nEXPECTED: API.md and README.md\\nRULES: Mirror structure\" || echo \"Failed: $dir\"; cd -; done)",
|
||||||
"depends_on": [1],
|
"depends_on": [1],
|
||||||
"output": "generated_docs"
|
"output": "generated_docs"
|
||||||
}
|
}
|
||||||
@@ -464,7 +464,7 @@ api_id=$((group_count + 3))
|
|||||||
├── IMPL_PLAN.md
|
├── IMPL_PLAN.md
|
||||||
├── TODO_LIST.md
|
├── TODO_LIST.md
|
||||||
├── .process/
|
├── .process/
|
||||||
│ └── phase2-analysis.json # All Phase 2 analysis data (replaces 7+ files)
|
│ └── doc-planning-data.json # All Phase 2 analysis data (replaces 7+ files)
|
||||||
└── .task/
|
└── .task/
|
||||||
├── IMPL-001.json # Small: all modules | Large: group 1
|
├── IMPL-001.json # Small: all modules | Large: group 1
|
||||||
├── IMPL-00N.json # (Large only: groups 2-N)
|
├── IMPL-00N.json # (Large only: groups 2-N)
|
||||||
@@ -473,7 +473,7 @@ api_id=$((group_count + 3))
|
|||||||
└── IMPL-{N+3}.json # HTTP API (optional)
|
└── IMPL-{N+3}.json # HTTP API (optional)
|
||||||
```
|
```
|
||||||
|
|
||||||
**phase2-analysis.json Structure**:
|
**doc-planning-data.json Structure**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
Reference in New Issue
Block a user