mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-13 02:41:50 +08:00
Fix session management location inference and ccw command usage
This commit addresses multiple issues in session management and command documentation: Session Management Fixes: - Add auto-inference of location from type parameter in session.ts - When --type lite-plan/lite-fix is specified, automatically set location accordingly - Preserve explicit --location parameter when provided - Update session-manager.ts to support type-based location inference - Fix metadata filename selection (session-metadata.json vs workflow-session.json) Command Documentation Fixes: - Add missing --mode analysis parameter (3 locations): * commands/memory/docs.md * commands/workflow/lite-execute.md (2 instances) - Add missing --mode write parameter (4 locations): * commands/workflow/tools/task-generate-agent.md - Remove non-existent subcommands (3 locations): * commands/workflow/session/complete.md (manifest, project) - Update session command syntax to use simplified format: * Changed from 'ccw session manifest read' to 'test -f' checks * Changed from 'ccw session project read' to 'test -f' checks Documentation Updates: - Update lite-plan.md and lite-fix.md to use --type parameter - Update session/start.md to document lite-plan and lite-fix types - Sync all fixes to skills/command-guide/reference directory (84 files) All ccw command usage across the codebase is now consistent and correct. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -74,7 +74,7 @@ SlashCommand(command="/workflow:session:start --type docs --new \"{project_name}
|
||||
|
||||
```bash
|
||||
# Update workflow-session.json with docs-specific fields
|
||||
ccw session update {sessionId} --type session --content '{"target_path":"{target_path}","project_root":"{project_root}","project_name":"{project_name}","mode":"full","tool":"gemini","cli_execute":false}'
|
||||
ccw session {sessionId} write workflow-session.json '{"target_path":"{target_path}","project_root":"{project_root}","project_name":"{project_name}","mode":"full","tool":"gemini","cli_execute":false}'
|
||||
```
|
||||
|
||||
### Phase 2: Analyze Structure
|
||||
@@ -136,7 +136,7 @@ bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${proj
|
||||
|
||||
```bash
|
||||
# Count existing docs from doc-planning-data.json
|
||||
ccw session read WFS-docs-{timestamp} --type process --filename doc-planning-data.json --raw | jq '.existing_docs.file_list | length'
|
||||
ccw session WFS-docs-{timestamp} read .process/doc-planning-data.json --raw | jq '.existing_docs.file_list | length'
|
||||
# Or read entire process file and parse
|
||||
```
|
||||
|
||||
@@ -191,10 +191,10 @@ Large Projects (single dir >10 docs):
|
||||
|
||||
```bash
|
||||
# 1. Get top-level directories from doc-planning-data.json
|
||||
ccw session read WFS-docs-{timestamp} --type process --filename doc-planning-data.json --raw | jq -r '.top_level_dirs[]'
|
||||
ccw session WFS-docs-{timestamp} read .process/doc-planning-data.json --raw | jq -r '.top_level_dirs[]'
|
||||
|
||||
# 2. Get mode from workflow-session.json
|
||||
ccw session read WFS-docs-{timestamp} --type session --raw | jq -r '.mode // "full"'
|
||||
ccw session WFS-docs-{timestamp} read workflow-session.json --raw | jq -r '.mode // "full"'
|
||||
|
||||
# 3. Check for HTTP API
|
||||
bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo "NO_API")
|
||||
@@ -223,7 +223,7 @@ bash(grep -r "router\.|@Get\|@Post" src/ 2>/dev/null && echo "API_FOUND" || echo
|
||||
|
||||
**Task ID Calculation**:
|
||||
```bash
|
||||
group_count=$(ccw session read WFS-docs-{timestamp} --type process --filename doc-planning-data.json --raw | jq '.groups.count')
|
||||
group_count=$(ccw session WFS-docs-{timestamp} read .process/doc-planning-data.json --raw | jq '.groups.count')
|
||||
readme_id=$((group_count + 1)) # Next ID after groups
|
||||
arch_id=$((group_count + 2))
|
||||
api_id=$((group_count + 3))
|
||||
@@ -239,7 +239,7 @@ api_id=$((group_count + 3))
|
||||
| **CLI** | true | implementation_approach | write | --mode write | Execute CLI commands, validate output |
|
||||
|
||||
**Command Patterns**:
|
||||
- Gemini/Qwen: `ccw cli exec "..." --tool gemini --cd dir`
|
||||
- Gemini/Qwen: `ccw cli exec "..." --tool gemini --mode analysis --cd dir`
|
||||
- CLI Mode: `ccw cli exec "..." --tool gemini --mode write --cd dir`
|
||||
- Codex: `ccw cli exec "..." --tool codex --mode write --cd dir`
|
||||
|
||||
@@ -286,8 +286,8 @@ api_id=$((group_count + 3))
|
||||
"step": "load_precomputed_data",
|
||||
"action": "Load Phase 2 analysis and extract group directories",
|
||||
"commands": [
|
||||
"ccw session read ${session_id} --type process --filename doc-planning-data.json",
|
||||
"ccw session read ${session_id} --type process --filename doc-planning-data.json --raw | jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories'"
|
||||
"ccw session ${session_id} read .process/doc-planning-data.json",
|
||||
"ccw session ${session_id} read .process/doc-planning-data.json --raw | jq '.groups.assignments[] | select(.group_id == \"${group_number}\") | .directories'"
|
||||
],
|
||||
"output_to": "phase2_context",
|
||||
"note": "Single JSON file contains all Phase 2 analysis results"
|
||||
|
||||
@@ -149,7 +149,7 @@ Parse user input (supports: number "1", full ID "WFS-auth-system", or partial "a
|
||||
|
||||
#### Step 1.3: Load Session Metadata
|
||||
```bash
|
||||
ccw session read ${sessionId} --type session
|
||||
ccw session ${sessionId} read workflow-session.json
|
||||
```
|
||||
|
||||
**Output**: Store session metadata in memory
|
||||
|
||||
@@ -591,12 +591,12 @@ ccw cli exec "[Verify plan acceptance criteria at ${plan.json}]" --tool codex --
|
||||
const reviewId = `${sessionId}-review`
|
||||
|
||||
// First review pass with fixed ID
|
||||
const reviewResult = Bash(`ccw cli exec "[Review prompt]" --tool gemini --id ${reviewId}`)
|
||||
const reviewResult = Bash(`ccw cli exec "[Review prompt]" --tool gemini --mode analysis --id ${reviewId}`)
|
||||
|
||||
// If issues found, continue review dialog with fixed ID chain
|
||||
if (hasUnresolvedIssues(reviewResult)) {
|
||||
// Resume with follow-up questions
|
||||
Bash(`ccw cli exec "Clarify the security concerns you mentioned" --resume ${reviewId} --tool gemini --id ${reviewId}-followup`)
|
||||
Bash(`ccw cli exec "Clarify the security concerns you mentioned" --resume ${reviewId} --tool gemini --mode analysis --id ${reviewId}-followup`)
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -72,31 +72,62 @@ Phase 5: Dispatch
|
||||
### Phase 1: Intelligent Multi-Angle Diagnosis
|
||||
|
||||
**Session Setup** (MANDATORY - follow exactly):
|
||||
|
||||
**Option 1: Using CLI Command** (Recommended for simplicity):
|
||||
```bash
|
||||
# Generate session ID
|
||||
bug_slug=$(echo "${bug_description}" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '-' | cut -c1-40)
|
||||
date_str=$(date -u '+%Y-%m-%d')
|
||||
session_id="${bug_slug}-${date_str}"
|
||||
|
||||
# Initialize lite-fix session (location auto-inferred from type)
|
||||
ccw session init "${session_id}" \
|
||||
--type lite-fix \
|
||||
--content "{\"description\":\"${bug_description}\",\"severity\":\"${severity}\"}"
|
||||
|
||||
|
||||
|
||||
# Get session folder
|
||||
session_folder=".workflow/.lite-fix/${session_id}"
|
||||
echo "Session initialized: ${session_id} at ${session_folder}"
|
||||
```
|
||||
|
||||
**Option 2: Using session_manager Tool** (For programmatic access):
|
||||
```javascript
|
||||
// Helper: Get UTC+8 (China Standard Time) ISO string
|
||||
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
||||
|
||||
const bugSlug = bug_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
||||
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-11-29
|
||||
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-12-17
|
||||
|
||||
const sessionId = `${bugSlug}-${dateStr}` // e.g., "user-avatar-upload-fails-2025-12-17"
|
||||
|
||||
const sessionId = `${bugSlug}-${dateStr}` // e.g., "user-avatar-upload-fails-2025-11-29"
|
||||
|
||||
// Initialize session via session_manager tool
|
||||
const initResult = await ccw_tool_exec('session_manager', {
|
||||
operation: 'init',
|
||||
session_id: sessionId,
|
||||
location: 'lite-fix',
|
||||
metadata: {
|
||||
description: bug_description,
|
||||
severity: severity, // Set after severity assessment
|
||||
created_at: getUtc8ISOString()
|
||||
}
|
||||
})
|
||||
|
||||
const sessionFolder = initResult.result.path
|
||||
console.log(`Session initialized: ${sessionId} at ${sessionFolder}`)
|
||||
```
|
||||
|
||||
**Session File Structure**:
|
||||
- `session-metadata.json` - Session metadata (created at init, contains description, severity, status)
|
||||
- `fix-plan.json` - Actual fix planning content (created later in Phase 3, contains fix tasks, diagnosis results)
|
||||
|
||||
**Metadata Field Usage**:
|
||||
- `description`: Displayed in dashboard session list (replaces session ID as title)
|
||||
- `severity`: Used for fix planning strategy selection (Low/Medium → Direct Claude, High/Critical → Agent)
|
||||
- `created_at`: Displayed in dashboard timeline
|
||||
- `status`: Updated through workflow (diagnosing → fixing → completed)
|
||||
- Custom fields: Any additional fields in metadata are saved and accessible programmatically
|
||||
|
||||
**Accessing Session Data**:
|
||||
```bash
|
||||
# Read session metadata
|
||||
ccw session ${session_id} read session-metadata.json
|
||||
|
||||
# Read fix plan content (after Phase 3 completion)
|
||||
ccw session ${session_id} read fix-plan.json
|
||||
```
|
||||
|
||||
**Diagnosis Decision Logic**:
|
||||
```javascript
|
||||
const hotfixMode = $ARGUMENTS.includes('--hotfix') || $ARGUMENTS.includes('-h')
|
||||
|
||||
@@ -72,31 +72,59 @@ Phase 5: Dispatch
|
||||
### Phase 1: Intelligent Multi-Angle Exploration
|
||||
|
||||
**Session Setup** (MANDATORY - follow exactly):
|
||||
|
||||
**Option 1: Using CLI Command** (Recommended for simplicity):
|
||||
```bash
|
||||
# Generate session ID
|
||||
task_slug=$(echo "${task_description}" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '-' | cut -c1-40)
|
||||
date_str=$(date -u '+%Y-%m-%d')
|
||||
session_id="${task_slug}-${date_str}"
|
||||
|
||||
# Initialize lite-plan session (location auto-inferred from type)
|
||||
ccw session init "${session_id}" \
|
||||
--type lite-plan \
|
||||
--content "{\"description\":\"${task_description}\",\"complexity\":\"${complexity}\"}"
|
||||
|
||||
# Get session folder
|
||||
session_folder=".workflow/.lite-plan/${session_id}"
|
||||
echo "Session initialized: ${session_id} at ${session_folder}"
|
||||
```
|
||||
|
||||
**Option 2: Using session_manager Tool** (For programmatic access):
|
||||
```javascript
|
||||
// Helper: Get UTC+8 (China Standard Time) ISO string
|
||||
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
||||
|
||||
const taskSlug = task_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
||||
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-11-29
|
||||
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-12-17
|
||||
|
||||
const sessionId = `${taskSlug}-${dateStr}` // e.g., "implement-jwt-refresh-2025-12-17"
|
||||
|
||||
const sessionId = `${taskSlug}-${dateStr}` // e.g., "implement-jwt-refresh-2025-11-29"
|
||||
|
||||
// Initialize session via session_manager tool
|
||||
const initResult = await ccw_tool_exec('session_manager', {
|
||||
operation: 'init',
|
||||
session_id: sessionId,
|
||||
location: 'lite-plan',
|
||||
metadata: {
|
||||
description: task_description,
|
||||
complexity: complexity, // Set after complexity assessment
|
||||
created_at: getUtc8ISOString()
|
||||
}
|
||||
})
|
||||
|
||||
const sessionFolder = initResult.result.path
|
||||
console.log(`Session initialized: ${sessionId} at ${sessionFolder}`)
|
||||
```
|
||||
|
||||
**Session File Structure**:
|
||||
- `session-metadata.json` - Session metadata (created at init, contains description, complexity, status)
|
||||
- `plan.json` - Actual planning content (created later in Phase 3, contains tasks, steps, dependencies)
|
||||
|
||||
**Metadata Field Usage**:
|
||||
- `description`: Displayed in dashboard session list (replaces session ID as title)
|
||||
- `complexity`: Used for planning strategy selection (Low → Direct Claude, Medium/High → Agent)
|
||||
- `created_at`: Displayed in dashboard timeline
|
||||
- Custom fields: Any additional fields in metadata are saved and accessible programmatically
|
||||
|
||||
**Accessing Session Data**:
|
||||
```bash
|
||||
# Read session metadata
|
||||
ccw session ${session_id} read session-metadata.json
|
||||
|
||||
# Read plan content (after Phase 3 completion)
|
||||
ccw session ${session_id} read plan.json
|
||||
```
|
||||
|
||||
**Exploration Decision Logic**:
|
||||
```javascript
|
||||
needsExploration = (
|
||||
|
||||
@@ -112,14 +112,18 @@ After bash validation, the model takes control to:
|
||||
|
||||
1. **Load Context**: Read completed task summaries and changed files
|
||||
```bash
|
||||
# Load implementation summaries
|
||||
ccw session read ${sessionId} --type summary --raw
|
||||
# Load implementation summaries (iterate through .summaries/ directory)
|
||||
for summary in .workflow/active/${sessionId}/.summaries/*.md; do
|
||||
cat "$summary"
|
||||
done
|
||||
|
||||
# Load test results (if available)
|
||||
ccw session read ${sessionId} --type summary --filename "TEST-FIX-*.md" --raw 2>/dev/null
|
||||
for test_summary in .workflow/active/${sessionId}/.summaries/TEST-FIX-*.md 2>/dev/null; do
|
||||
cat "$test_summary"
|
||||
done
|
||||
|
||||
# Get session created_at for git log filter
|
||||
created_at=$(ccw session read ${sessionId} --type session --raw | jq -r .created_at)
|
||||
created_at=$(ccw session ${sessionId} read workflow-session.json | jq -r .created_at)
|
||||
git log --since="$created_at" --name-only --pretty=format: | sort -u
|
||||
```
|
||||
|
||||
@@ -170,11 +174,13 @@ After bash validation, the model takes control to:
|
||||
- Verify all requirements and acceptance criteria met:
|
||||
```bash
|
||||
# Load task requirements and acceptance criteria
|
||||
ccw session read ${sessionId} --type task --raw | jq -r '
|
||||
"Task: " + .id + "\n" +
|
||||
"Requirements: " + (.context.requirements | join(", ")) + "\n" +
|
||||
"Acceptance: " + (.context.acceptance | join(", "))
|
||||
'
|
||||
for task_file in .workflow/active/${sessionId}/.task/*.json; do
|
||||
cat "$task_file" | jq -r '
|
||||
"Task: " + .id + "\n" +
|
||||
"Requirements: " + (.context.requirements | join(", ")) + "\n" +
|
||||
"Acceptance: " + (.context.acceptance | join(", "))
|
||||
'
|
||||
done
|
||||
|
||||
# Check implementation summaries against requirements
|
||||
ccw cli exec "
|
||||
|
||||
@@ -34,7 +34,7 @@ ccw session list --location active
|
||||
#### Step 1.2: Check for Existing Archiving Marker (Resume Detection)
|
||||
```bash
|
||||
# Check if session is already being archived (marker file exists)
|
||||
ccw session read WFS-session-name --type process --filename .archiving 2>/dev/null && echo "RESUMING" || echo "NEW"
|
||||
ccw session WFS-session-name read .process/.archiving 2>/dev/null && echo "RESUMING" || echo "NEW"
|
||||
```
|
||||
|
||||
**If RESUMING**:
|
||||
@@ -47,7 +47,7 @@ ccw session read WFS-session-name --type process --filename .archiving 2>/dev/nu
|
||||
#### Step 1.3: Create Archiving Marker
|
||||
```bash
|
||||
# Mark session as "archiving in progress"
|
||||
ccw session write WFS-session-name --type process --filename .archiving --content ''
|
||||
ccw session WFS-session-name write .process/.archiving ''
|
||||
```
|
||||
**Purpose**:
|
||||
- Prevents concurrent operations on this session
|
||||
@@ -171,8 +171,8 @@ ccw session archive WFS-session-name
|
||||
|
||||
#### Step 3.2: Update Manifest
|
||||
```bash
|
||||
# Read current manifest using ccw (or create empty array if not exists)
|
||||
ccw session read manifest --type manifest --raw 2>/dev/null || echo "[]"
|
||||
# Check if manifest exists
|
||||
test -f .workflow/archives/manifest.json && echo "EXISTS" || echo "NOT_FOUND"
|
||||
```
|
||||
|
||||
**JSON Update Logic**:
|
||||
@@ -221,8 +221,8 @@ rm .workflow/archives/WFS-session-name/.process/.archiving 2>/dev/null || true
|
||||
|
||||
#### Step 4.1: Check Project State Exists
|
||||
```bash
|
||||
# Check project state using ccw
|
||||
ccw session read project --type project 2>/dev/null && echo "EXISTS" || echo "SKIP"
|
||||
# Check if project.json exists
|
||||
test -f .workflow/project.json && echo "EXISTS" || echo "SKIP"
|
||||
```
|
||||
|
||||
**If SKIP**: Output warning and skip Phase 4
|
||||
@@ -249,11 +249,6 @@ const featureId = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 5
|
||||
|
||||
#### Step 4.3: Update project.json
|
||||
|
||||
```bash
|
||||
# Read current project state using ccw
|
||||
ccw session read project --type project --raw
|
||||
```
|
||||
|
||||
**JSON Update Logic**:
|
||||
```javascript
|
||||
// Read existing project.json (created by /workflow:init)
|
||||
|
||||
@@ -30,7 +30,7 @@ ccw session stats WFS-session
|
||||
|
||||
### Step 3: Read Session Metadata
|
||||
```bash
|
||||
ccw session read WFS-session --type session
|
||||
ccw session WFS-session read workflow-session.json
|
||||
# Returns: session_id, status, project, created_at, etc.
|
||||
```
|
||||
|
||||
@@ -39,8 +39,8 @@ ccw session read WFS-session --type session
|
||||
### Basic Operations
|
||||
- **List all sessions**: `ccw session list`
|
||||
- **List active only**: `ccw session list --location active`
|
||||
- **Read session data**: `ccw session read WFS-xxx --type session`
|
||||
- **Get task stats**: `ccw session stats WFS-xxx`
|
||||
- **Read session data**: `ccw session WFS-xxx read workflow-session.json`
|
||||
- **Get task stats**: `ccw session WFS-xxx stats`
|
||||
|
||||
## Simple Output Format
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ ccw session list --location active
|
||||
|
||||
### Step 2: Check Session Status
|
||||
```bash
|
||||
ccw session read WFS-session --type session
|
||||
ccw session WFS-session read workflow-session.json
|
||||
# Check .status field in response
|
||||
```
|
||||
|
||||
@@ -35,17 +35,15 @@ ccw session list --location active
|
||||
|
||||
### Step 4: Update Session Status to Active
|
||||
```bash
|
||||
ccw session status WFS-session active
|
||||
# Or with full update:
|
||||
ccw session update WFS-session --type session --content '{"status":"active","resumed_at":"2025-12-10T08:00:00Z"}'
|
||||
ccw session WFS-session status active
|
||||
```
|
||||
|
||||
## Simple Commands
|
||||
|
||||
### Basic Operations
|
||||
- **List sessions**: `ccw session list --location active`
|
||||
- **Check status**: `ccw session read WFS-xxx --type session`
|
||||
- **Update status**: `ccw session status WFS-xxx active`
|
||||
- **Check status**: `ccw session WFS-xxx read workflow-session.json`
|
||||
- **Update status**: `ccw session WFS-xxx status active`
|
||||
|
||||
### Resume Result
|
||||
```
|
||||
|
||||
@@ -30,10 +30,17 @@ The `--type` parameter classifies sessions for CCW dashboard organization:
|
||||
| `tdd` | TDD-based development | `/workflow:tdd-plan` |
|
||||
| `test` | Test generation/fix sessions | `/workflow:test-fix-gen` |
|
||||
| `docs` | Documentation sessions | `/memory:docs` |
|
||||
| `lite-plan` | Lightweight planning workflow | `/workflow:lite-plan` |
|
||||
| `lite-fix` | Lightweight bug fix workflow | `/workflow:lite-fix` |
|
||||
|
||||
**Special Behavior for `lite-plan` and `lite-fix`**:
|
||||
- These types automatically infer the storage location (`.workflow/.lite-plan/` or `.workflow/.lite-fix/`)
|
||||
- No need to specify `--location` parameter when using these types
|
||||
- Alternative: Use `--location lite-plan` or `--location lite-fix` directly
|
||||
|
||||
**Validation**: If `--type` is provided with invalid value, return error:
|
||||
```
|
||||
ERROR: Invalid session type. Valid types: workflow, review, tdd, test, docs
|
||||
ERROR: Invalid session type. Valid types: workflow, review, tdd, test, docs, lite-plan, lite-fix
|
||||
```
|
||||
|
||||
## Step 0: Initialize Project State (First-time Only)
|
||||
@@ -75,7 +82,7 @@ ccw session list --location active
|
||||
|
||||
### Step 2: Display Session Metadata
|
||||
```bash
|
||||
ccw session read WFS-promptmaster-platform --type session
|
||||
ccw session WFS-promptmaster-platform read workflow-session.json
|
||||
```
|
||||
|
||||
### Step 4: User Decision
|
||||
@@ -102,7 +109,7 @@ ccw session list --location active
|
||||
# Pattern: WFS-{lowercase-slug-from-description}
|
||||
|
||||
# Create session with ccw (creates directories + metadata atomically)
|
||||
ccw session init WFS-implement-oauth2-auth --type workflow --content '{"project":"implement OAuth2 auth","status":"planning"}'
|
||||
ccw session init WFS-implement-oauth2-auth --type workflow
|
||||
```
|
||||
|
||||
**Output**: `SESSION_ID: WFS-implement-oauth2-auth`
|
||||
@@ -113,7 +120,7 @@ ccw session init WFS-implement-oauth2-auth --type workflow --content '{"project"
|
||||
ccw session list --location active
|
||||
|
||||
# Read session metadata for relevance check
|
||||
ccw session read WFS-promptmaster-platform --type session
|
||||
ccw session WFS-promptmaster-platform read workflow-session.json
|
||||
|
||||
# If task contains project keywords → Reuse session
|
||||
# If task unrelated → Create new session (use Step 2a)
|
||||
@@ -149,10 +156,41 @@ ccw session list --location active
|
||||
|
||||
### Step 2: Create Session Structure
|
||||
```bash
|
||||
# Single command creates directories (.process, .task, .summaries) + metadata
|
||||
ccw session init WFS-fix-login-bug --type workflow --content '{"project":"fix login bug","status":"planning"}'
|
||||
# Basic init - creates directories + default metadata
|
||||
ccw session init WFS-fix-login-bug --type workflow
|
||||
|
||||
# Advanced init - with custom metadata
|
||||
ccw session init WFS-oauth-implementation --type workflow --content '{"description":"OAuth2 authentication system","priority":"high","complexity":"medium"}'
|
||||
```
|
||||
|
||||
**Default Metadata** (auto-generated):
|
||||
```json
|
||||
{
|
||||
"session_id": "WFS-fix-login-bug",
|
||||
"type": "workflow",
|
||||
"status": "planning",
|
||||
"created_at": "2025-12-17T..."
|
||||
}
|
||||
```
|
||||
|
||||
**Custom Metadata** (merged with defaults):
|
||||
```json
|
||||
{
|
||||
"session_id": "WFS-oauth-implementation",
|
||||
"type": "workflow",
|
||||
"status": "planning",
|
||||
"created_at": "2025-12-17T...",
|
||||
"description": "OAuth2 authentication system",
|
||||
"priority": "high",
|
||||
"complexity": "medium"
|
||||
}
|
||||
```
|
||||
|
||||
**Field Usage**:
|
||||
- `description`: Displayed in dashboard (replaces session_id as title)
|
||||
- `status`: Can override default "planning" (e.g., "active", "implementing")
|
||||
- Custom fields: Any additional fields are saved and accessible programmatically
|
||||
|
||||
**Output**: `SESSION_ID: WFS-fix-login-bug`
|
||||
|
||||
## Execution Guideline
|
||||
|
||||
@@ -77,18 +77,32 @@ find .workflow/active/ -name "WFS-*" -type d | head -1 | sed 's/.*\///'
|
||||
|
||||
```bash
|
||||
# Load all task JSONs
|
||||
ccw session read {sessionId} --type task
|
||||
for task_file in .workflow/active/{sessionId}/.task/*.json; do
|
||||
cat "$task_file"
|
||||
done
|
||||
|
||||
# Extract task IDs
|
||||
ccw session read {sessionId} --type task --raw | jq -r '.id'
|
||||
for task_file in .workflow/active/{sessionId}/.task/*.json; do
|
||||
cat "$task_file" | jq -r '.id'
|
||||
done
|
||||
|
||||
# Check dependencies - read tasks and filter for IMPL/REFACTOR
|
||||
ccw session read {sessionId} --type task --task-id "IMPL-*" --raw | jq -r '.context.depends_on[]?'
|
||||
ccw session read {sessionId} --type task --task-id "REFACTOR-*" --raw | jq -r '.context.depends_on[]?'
|
||||
for task_file in .workflow/active/{sessionId}/.task/IMPL-*.json; do
|
||||
cat "$task_file" | jq -r '.context.depends_on[]?'
|
||||
done
|
||||
|
||||
for task_file in .workflow/active/{sessionId}/.task/REFACTOR-*.json; do
|
||||
cat "$task_file" | jq -r '.context.depends_on[]?'
|
||||
done
|
||||
|
||||
# Check meta fields
|
||||
ccw session read {sessionId} --type task --raw | jq -r '.meta.tdd_phase'
|
||||
ccw session read {sessionId} --type task --raw | jq -r '.meta.agent'
|
||||
for task_file in .workflow/active/{sessionId}/.task/*.json; do
|
||||
cat "$task_file" | jq -r '.meta.tdd_phase'
|
||||
done
|
||||
|
||||
for task_file in .workflow/active/{sessionId}/.task/*.json; do
|
||||
cat "$task_file" | jq -r '.meta.agent'
|
||||
done
|
||||
```
|
||||
|
||||
**Validation**:
|
||||
|
||||
@@ -307,10 +307,10 @@ Each task JSON MUST include:
|
||||
4. **merge_fork**: Task has multiple parents - merges all parent contexts into new conversation
|
||||
|
||||
**Execution Command Patterns**:
|
||||
- new: `ccw cli exec "[prompt]" --tool [tool] --id [cli_execution_id]`
|
||||
- resume: `ccw cli exec "[prompt]" --resume [resume_from] --tool [tool]`
|
||||
- fork: `ccw cli exec "[prompt]" --resume [resume_from] --id [cli_execution_id] --tool [tool]`
|
||||
- merge_fork: `ccw cli exec "[prompt]" --resume [merge_from.join(',')] --id [cli_execution_id] --tool [tool]`
|
||||
- new: `ccw cli exec "[prompt]" --tool [tool] --mode write --id [cli_execution_id]`
|
||||
- resume: `ccw cli exec "[prompt]" --resume [resume_from] --tool [tool] --mode write`
|
||||
- fork: `ccw cli exec "[prompt]" --resume [resume_from] --id [cli_execution_id] --tool [tool] --mode write`
|
||||
- merge_fork: `ccw cli exec "[prompt]" --resume [merge_from.join(',')] --id [cli_execution_id] --tool [tool] --mode write`
|
||||
|
||||
## QUALITY STANDARDS
|
||||
Hard Constraints:
|
||||
|
||||
Reference in New Issue
Block a user