From 4d755ff9b41ef53ac094f34e1c2ce9de858cb342 Mon Sep 17 00:00:00 2001 From: catlog22 Date: Fri, 27 Feb 2026 11:43:44 +0800 Subject: [PATCH] feat(workflow): add lightweight interactive planning workflow with in-memory execution and code exploration - Introduced `lite-plan` command for intelligent task analysis and planning. - Implemented dynamic exploration and clarification phases based on task complexity. - Added support for auto mode and forced exploration flags. - Defined output artifacts and session structure for planning results. - Enhanced execution process with context handoff to `lite-execute`. chore(temp): create temporary memory content and import script - Added `.temp-memory-content.txt` to store session details and execution plan. - Implemented `temp-import-memory.cjs` to handle memory import using core-memory command. - Ensured cleanup of temporary files after execution. --- .../schemas/explore-json-schema.json | 29 ++ .claude/agents/cli-explore-agent.md | 15 +- .claude/agents/cli-lite-planning-agent.md | 3 +- .claude/skills/team-lifecycle-v4/SKILL.md | 465 ++++++++++++++++++ .../team-lifecycle-v4/roles/analyst/role.md | 159 ++++++ .../roles/architect/commands/assess.md | 193 ++++++++ .../team-lifecycle-v4/roles/architect/role.md | 103 ++++ .../roles/coordinator/commands/dispatch.md | 139 ++++++ .../roles/coordinator/commands/monitor.md | 191 +++++++ .../roles/coordinator/role.md | 176 +++++++ .../roles/executor/commands/implement.md | 166 +++++++ .../team-lifecycle-v4/roles/executor/role.md | 103 ++++ .../roles/fe-developer/role.md | 111 +++++ .../fe-qa/commands/pre-delivery-checklist.md | 152 ++++++ .../team-lifecycle-v4/roles/fe-qa/role.md | 113 +++++ .../roles/planner/commands/explore.md | 172 +++++++ .../team-lifecycle-v4/roles/planner/role.md | 127 +++++ .../roles/reviewer/commands/code-review.md | 163 ++++++ .../roles/reviewer/commands/spec-quality.md | 202 ++++++++ .../team-lifecycle-v4/roles/reviewer/role.md | 133 +++++ .../roles/tester/commands/validate.md | 152 ++++++ .../team-lifecycle-v4/roles/tester/role.md | 108 ++++ .../roles/writer/commands/generate-doc.md | 187 +++++++ .../team-lifecycle-v4/roles/writer/role.md | 135 +++++ .../specs/document-standards.md | 192 ++++++++ .../team-lifecycle-v4/specs/quality-gates.md | 207 ++++++++ .../team-lifecycle-v4/specs/team-config.json | 169 +++++++ .../subagents/discuss-subagent.md | 134 +++++ .../subagents/explore-subagent.md | 172 +++++++ .../templates/architecture-doc.md | 254 ++++++++++ .../templates/epics-template.md | 196 ++++++++ .../templates/product-brief.md | 133 +++++ .../templates/requirements-prd.md | 224 +++++++++ .../workflow-lite-plan/phases/01-lite-plan.md | 2 + .temp-memory-content.txt | 105 ++++ assets/wechat-group-qr.jpg | Bin 0 -> 169793 bytes assets/wechat-group-qr.png | Bin 230912 -> 0 bytes .../src/components/mcp/CcwToolsMcpCard.tsx | 13 +- .../components/specs/GlobalSettingsTab.tsx | 11 +- .../components/specs/InjectionControlTab.tsx | 143 ++++-- .../terminal-dashboard/IssuePanel.tsx | 11 +- ccw/frontend/src/locales/en/mcp-manager.json | 1 + ccw/frontend/src/locales/zh/mcp-manager.json | 1 + ccw/frontend/src/pages/IssueManagerPage.tsx | 60 ++- ccw/frontend/src/pages/SpecsSettingsPage.tsx | 8 +- ccw/src/commands/serve.ts | 59 ++- ccw/src/commands/stop.ts | 9 +- temp-import-memory.cjs | 140 ++++++ 48 files changed, 5659 insertions(+), 82 deletions(-) create mode 100644 .claude/skills/team-lifecycle-v4/SKILL.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/analyst/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/architect/commands/assess.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/architect/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/coordinator/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/executor/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/fe-developer/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/fe-qa/commands/pre-delivery-checklist.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/fe-qa/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/planner/commands/explore.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/planner/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/reviewer/commands/code-review.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/reviewer/commands/spec-quality.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/reviewer/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/tester/commands/validate.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/tester/role.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/writer/commands/generate-doc.md create mode 100644 .claude/skills/team-lifecycle-v4/roles/writer/role.md create mode 100644 .claude/skills/team-lifecycle-v4/specs/document-standards.md create mode 100644 .claude/skills/team-lifecycle-v4/specs/quality-gates.md create mode 100644 .claude/skills/team-lifecycle-v4/specs/team-config.json create mode 100644 .claude/skills/team-lifecycle-v4/subagents/discuss-subagent.md create mode 100644 .claude/skills/team-lifecycle-v4/subagents/explore-subagent.md create mode 100644 .claude/skills/team-lifecycle-v4/templates/architecture-doc.md create mode 100644 .claude/skills/team-lifecycle-v4/templates/epics-template.md create mode 100644 .claude/skills/team-lifecycle-v4/templates/product-brief.md create mode 100644 .claude/skills/team-lifecycle-v4/templates/requirements-prd.md create mode 100644 .temp-memory-content.txt create mode 100644 assets/wechat-group-qr.jpg delete mode 100644 assets/wechat-group-qr.png create mode 100644 temp-import-memory.cjs diff --git a/.ccw/workflows/cli-templates/schemas/explore-json-schema.json b/.ccw/workflows/cli-templates/schemas/explore-json-schema.json index ecbbd739..9f71282b 100644 --- a/.ccw/workflows/cli-templates/schemas/explore-json-schema.json +++ b/.ccw/workflows/cli-templates/schemas/explore-json-schema.json @@ -63,6 +63,35 @@ "type": "array", "items": {"type": "string"}, "description": "Key symbols (functions, classes, types) in this file relevant to the task. Example: ['AuthService', 'login', 'TokenPayload']" + }, + "key_code": { + "type": "array", + "items": { + "type": "object", + "required": ["symbol", "description"], + "properties": { + "symbol": { + "type": "string", + "description": "Symbol identifier (function, class, method, type). Example: 'AuthService.login()'" + }, + "location": { + "type": "string", + "description": "Line range in file. Example: 'L45-L78'" + }, + "description": { + "type": "string", + "minLength": 10, + "description": "What this code does and why it matters. Example: 'JWT token generation with bcrypt verification, returns {token, refreshToken} pair'" + } + }, + "additionalProperties": false + }, + "description": "Key code constructs with descriptions. Richer complement to key_symbols. Populate for files with relevance >= 0.7." + }, + "topic_relation": { + "type": "string", + "minLength": 15, + "description": "How this file relates to the exploration ANGLE/TOPIC. Must reference the angle explicitly. Example: 'Security exploration targets this file because JWT generation lacks token rotation'. Distinct from rationale (WHY selected) - topic_relation explains the CONNECTION to the exploration perspective." } }, "additionalProperties": false diff --git a/.claude/agents/cli-explore-agent.md b/.claude/agents/cli-explore-agent.md index b72493de..775affd8 100644 --- a/.claude/agents/cli-explore-agent.md +++ b/.claude/agents/cli-explore-agent.md @@ -123,7 +123,10 @@ RULES: {from prompt, if template specified} | analysis=READ-ONLY 2. Gemini results: Semantic understanding, design intent → `discovery_source: "cli-analysis"` 3. ACE search: Semantic code search → `discovery_source: "ace-search"` 4. Dependency tracing: Import/export graph → `discovery_source: "dependency-trace"` -5. Merge with source attribution and generate rationale for each file +5. Merge with source attribution and generate for each file: + - `rationale`: WHY the file was selected (selection basis) + - `topic_relation`: HOW the file connects to the exploration angle/topic + - `key_code`: Detailed descriptions of key symbols with locations (for relevance >= 0.7) --- @@ -155,6 +158,12 @@ Every file entry MUST have: - BAD: "Related to auth" or "Relevant file" - `role` (required, enum): Structural classification of why it was selected - `discovery_source` (optional but recommended): How the file was found +- `key_code` (strongly recommended for relevance >= 0.7): Array of {symbol, location?, description} + - GOOD: [{"symbol": "AuthService.login()", "location": "L45-L78", "description": "JWT token generation with bcrypt verification, returns token pair"}] + - BAD: [{"symbol": "login", "description": "login function"}] +- `topic_relation` (strongly recommended for relevance >= 0.7): Connection from exploration angle perspective + - GOOD: "Security exploration targets this file because JWT generation lacks token rotation" + - BAD: "Related to security" **Step 4: Pre-Output Validation Checklist** @@ -168,6 +177,8 @@ Before writing ANY JSON output, verify: - [ ] Data types correct (string, integer, array, object) - [ ] Every file in relevant_files has: path + relevance + rationale + role - [ ] Every rationale is specific (>10 chars, not generic) +- [ ] Files with relevance >= 0.7 have key_code with symbol + description (minLength 10) +- [ ] Files with relevance >= 0.7 have topic_relation explaining connection to angle (minLength 15) --- @@ -216,6 +227,8 @@ Brief summary: 9. **Every file MUST have rationale**: Specific selection basis tied to the topic (not generic) 10. **Every file MUST have role**: Classify as modify_target/dependency/pattern_reference/test_target/type_definition/integration_point/config/context_only 11. **Track discovery source**: Record how each file was found (bash-scan/cli-analysis/ace-search/dependency-trace/manual) +12. **Populate key_code for high-relevance files**: relevance >= 0.7 → key_code array with symbol, location, description +13. **Populate topic_relation for high-relevance files**: relevance >= 0.7 → topic_relation explaining file-to-angle connection **Bash Tool**: - Use `run_in_background=false` for all Bash/CLI calls to ensure foreground execution diff --git a/.claude/agents/cli-lite-planning-agent.md b/.claude/agents/cli-lite-planning-agent.md index 893a8f8f..fe699cda 100644 --- a/.claude/agents/cli-lite-planning-agent.md +++ b/.claude/agents/cli-lite-planning-agent.md @@ -504,7 +504,7 @@ function parseCLIOutput(cliOutput) { ```javascript // NOTE: relevant_files items are structured objects: -// {path, relevance, rationale, role, discovery_source?, key_symbols?} +// {path, relevance, rationale, role, discovery_source?, key_symbols?, key_code?, topic_relation?} function buildEnrichedContext(explorationsContext, explorationAngles) { const enriched = { relevant_files: [], patterns: [], dependencies: [], integration_points: [], constraints: [] } @@ -566,6 +566,7 @@ function inferAction(title) { } // NOTE: relevant_files items are structured objects with .path property +// New fields: key_code? (array of {symbol, location?, description}), topic_relation? (string) function inferFile(task, ctx) { const files = ctx?.relevant_files || [] const getPath = f => typeof f === 'string' ? f : f.path diff --git a/.claude/skills/team-lifecycle-v4/SKILL.md b/.claude/skills/team-lifecycle-v4/SKILL.md new file mode 100644 index 00000000..7a1e4446 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/SKILL.md @@ -0,0 +1,465 @@ +--- +name: team-lifecycle-v4 +description: Unified team skill for full lifecycle - spec/impl/test. Optimized cadence with inline discuss subagent and shared explore. All roles invoke this skill with --role arg for role-specific execution. Triggers on "team lifecycle". +allowed-tools: TeamCreate(*), TeamDelete(*), SendMessage(*), TaskCreate(*), TaskUpdate(*), TaskList(*), TaskGet(*), Task(*), AskUserQuestion(*), TodoWrite(*), Read(*), Write(*), Edit(*), Bash(*), Glob(*), Grep(*) +--- + +# Team Lifecycle v4 + +Unified team skill: specification -> implementation -> testing -> review. Optimized from v3 with **inline discuss subagent** and **shared explore utility**, halving spec pipeline beats from 12 to 6. + +## Key Changes from v3 + +| Change | Before (v3) | After (v4) | Impact | +|--------|------------|------------|--------| +| Discuss | Standalone role, 6 separate beats | Inline subagent called by produce roles | Spec beats: 12 -> 6 | +| Explorer | Standalone service role | Shared Explore subagent with cache | Eliminates spawn overhead | +| Explore cache | Per-role, no sharing | Centralized `explorations/` with cache-index | Avoids duplicate exploration | +| Worker advance | Always callback coordinator | Fast-advance for simple successors | Fewer coordinator wakes | + +## Architecture + +``` ++---------------------------------------------------+ +| Skill(skill="team-lifecycle-v4") | +| args="task description" or args="--role=xxx" | ++-------------------+-------------------------------+ + | Role Router + +---- --role present? ----+ + | NO | YES + v v + Orchestration Mode Role Dispatch + (auto -> coordinator) (route to role.md) + | + +----+----+-------+-------+-------+-------+ + v v v v v v + coordinator analyst writer planner executor tester + ^ ^ + on-demand by coordinator + +---------+ +--------+ + |architect| |reviewer| + +---------+ +--------+ + +-------------+ +-----+ + |fe-developer | |fe-qa| + +-------------+ +-----+ + + Subagents (callable by any role, not team members): + [discuss-subagent] - multi-perspective critique + [explore-subagent] - codebase exploration with cache +``` + +## Role Router + +### Input Parsing + +Parse `$ARGUMENTS` to extract `--role`. If absent -> Orchestration Mode (auto route to coordinator). + +### Role Registry + +| Role | File | Task Prefix | Type | Compact | +|------|------|-------------|------|---------| +| coordinator | [roles/coordinator/role.md](roles/coordinator/role.md) | (none) | orchestrator | compact must re-read | +| analyst | [roles/analyst/role.md](roles/analyst/role.md) | RESEARCH-* | pipeline | compact must re-read | +| writer | [roles/writer/role.md](roles/writer/role.md) | DRAFT-* | pipeline | compact must re-read | +| planner | [roles/planner/role.md](roles/planner/role.md) | PLAN-* | pipeline | compact must re-read | +| executor | [roles/executor/role.md](roles/executor/role.md) | IMPL-* | pipeline | compact must re-read | +| tester | [roles/tester/role.md](roles/tester/role.md) | TEST-* | pipeline | compact must re-read | +| reviewer | [roles/reviewer/role.md](roles/reviewer/role.md) | REVIEW-* + QUALITY-* | pipeline | compact must re-read | +| architect | [roles/architect/role.md](roles/architect/role.md) | ARCH-* | consulting (on-demand) | compact must re-read | +| fe-developer | [roles/fe-developer/role.md](roles/fe-developer/role.md) | DEV-FE-* | frontend pipeline | compact must re-read | +| fe-qa | [roles/fe-qa/role.md](roles/fe-qa/role.md) | QA-FE-* | frontend pipeline | compact must re-read | + +> **COMPACT PROTECTION**: Role files are execution documents. After context compression, role instructions become summaries only -- **MUST immediately `Read` the role.md to reload before continuing**. Never execute any Phase based on summaries. + +### Subagent Registry + +| Subagent | Spec | Callable By | Purpose | +|----------|------|-------------|---------| +| discuss | [subagents/discuss-subagent.md](subagents/discuss-subagent.md) | analyst, writer, reviewer | Multi-perspective critique | +| explore | [subagents/explore-subagent.md](subagents/explore-subagent.md) | analyst, planner, any role | Codebase exploration with cache | + +### Dispatch + +1. Extract `--role` from arguments +2. If no `--role` -> route to coordinator (Orchestration Mode) +3. Look up role in registry -> Read the role file -> Execute its phases + +### Orchestration Mode + +When invoked without `--role`, coordinator auto-starts. User just provides task description. + +**Invocation**: `Skill(skill="team-lifecycle-v4", args="task description")` + +**Lifecycle**: +``` +User provides task description + -> coordinator Phase 1-3: requirement clarification -> TeamCreate -> create task chain + -> coordinator Phase 4: spawn first batch workers (background) -> STOP + -> Worker executes -> SendMessage callback -> coordinator advances next step + -> Loop until pipeline complete -> Phase 5 report +``` + +**User Commands** (wake paused coordinator): + +| Command | Action | +|---------|--------| +| `check` / `status` | Output execution status graph, no advancement | +| `resume` / `continue` | Check worker states, advance next step | + +--- + +## Shared Infrastructure + +The following templates apply to all worker roles. Each role.md only needs to write **Phase 2-4** role-specific logic. + +### Worker Phase 1: Task Discovery (all workers shared) + +Each worker on startup executes the same task discovery flow: + +1. Call `TaskList()` to get all tasks +2. Filter: subject matches this role's prefix + owner is this role + status is pending + blockedBy is empty +3. No tasks -> idle wait +4. Has tasks -> `TaskGet` for details -> `TaskUpdate` mark in_progress + +**Resume Artifact Check** (prevent duplicate output after resume): +- Check if this task's output artifacts already exist +- Artifacts complete -> skip to Phase 5 report completion +- Artifacts incomplete or missing -> normal Phase 2-4 execution + +### Worker Phase 5: Report + Fast-Advance (all workers shared) + +Task completion with optional fast-advance to skip coordinator round-trip: + +1. **Message Bus**: Call `mcp__ccw-tools__team_msg` to log message + - Params: operation="log", team=, from=, to="coordinator", type=, summary="[] ", ref= + - **CLI fallback**: When MCP unavailable -> `ccw team log --team --from --to coordinator --type --summary "[] ..." --json` +2. **TaskUpdate**: Mark task completed +3. **Fast-Advance Check**: + - Call `TaskList()`, find pending tasks whose blockedBy are ALL completed + - If exactly 1 ready task AND its owner matches a simple successor pattern -> **spawn it directly** (skip coordinator) + - Otherwise -> **SendMessage** to coordinator for orchestration +4. **Loop**: Back to Phase 1 to check for next task + +**Fast-Advance Rules**: + +| Condition | Action | +|-----------|--------| +| 1 ready task, simple linear successor | Spawn directly via Task(run_in_background: true) | +| Multiple ready tasks (parallel window) | SendMessage to coordinator (needs orchestration) | +| No ready tasks + others running | SendMessage to coordinator (status update) | +| No ready tasks + nothing running | SendMessage to coordinator (pipeline may be complete) | +| Checkpoint task (e.g., spec->impl transition) | SendMessage to coordinator (needs user confirmation) | + +### Inline Discuss Protocol (produce roles: analyst, writer, reviewer) + +After completing their primary output, produce roles call the discuss subagent inline: + +``` +Task({ + subagent_type: "cli-discuss-agent", + run_in_background: false, + description: "Discuss ", + prompt: +}) +``` + +**Discussion round mapping** (which role runs which discuss round): + +| Role | After Task | Discuss Round | Perspectives | +|------|-----------|---------------|-------------| +| analyst | RESEARCH-001 | DISCUSS-001 | product, risk, coverage | +| writer | DRAFT-001 | DISCUSS-002 | product, technical, quality, coverage | +| writer | DRAFT-002 | DISCUSS-003 | quality, product, coverage | +| writer | DRAFT-003 | DISCUSS-004 | technical, risk | +| writer | DRAFT-004 | DISCUSS-005 | product, technical, quality, coverage | +| reviewer | QUALITY-001 | DISCUSS-006 | all 5 | + +The discuss subagent writes its record to `discussions/` and returns the verdict. The calling role includes the discuss result in its Phase 5 report. + +### Shared Explore Utility + +Any role needing codebase context calls the explore subagent: + +``` +Task({ + subagent_type: "Explore", + run_in_background: false, + description: "Explore ", + prompt: +}) +``` + +**Cache**: Results stored in `explorations/` with `cache-index.json`. Before exploring, always check cache first. See [subagents/explore-subagent.md](subagents/explore-subagent.md). + +### Wisdom Accumulation (all roles) + +Cross-task knowledge accumulation. Coordinator creates `wisdom/` directory at session init. + +**Directory**: +``` +/wisdom/ ++-- learnings.md # Patterns and insights ++-- decisions.md # Architecture and design decisions ++-- conventions.md # Codebase conventions ++-- issues.md # Known risks and issues +``` + +**Worker load** (Phase 2): Extract `Session: ` from task description, read wisdom files. +**Worker contribute** (Phase 4/5): Write discoveries to corresponding wisdom files. + +### Role Isolation Rules + +| Allowed | Prohibited | +|---------|-----------| +| Process own prefix tasks | Process other role's prefix tasks | +| SendMessage to coordinator | Directly communicate with other workers | +| Use tools declared in Toolbox | Create tasks for other roles | +| Call discuss/explore subagents | Modify resources outside own scope | +| Fast-advance simple successors | Spawn parallel worker batches | + +Coordinator additionally prohibited: directly write/modify code, call implementation subagents, directly execute analysis/test/review. + +--- + +## Pipeline Definitions + +### Spec-only (6 tasks, was 12 in v3) + +``` +RESEARCH-001(+D1) -> DRAFT-001(+D2) -> DRAFT-002(+D3) -> DRAFT-003(+D4) -> DRAFT-004(+D5) -> QUALITY-001(+D6) +``` + +Each task includes inline discuss. `(+DN)` = inline discuss round N. + +### Impl-only / Backend (4 tasks) + +``` +PLAN-001 -> IMPL-001 -> TEST-001 + REVIEW-001 +``` + +### Full-lifecycle (10 tasks, was 16 in v3) + +``` +[Spec pipeline] -> PLAN-001(blockedBy: QUALITY-001) -> IMPL-001 -> TEST-001 + REVIEW-001 +``` + +### Frontend Pipelines + +``` +FE-only: PLAN-001 -> DEV-FE-001 -> QA-FE-001 + (GC loop: QA-FE verdict=NEEDS_FIX -> DEV-FE-002 -> QA-FE-002, max 2 rounds) + +Fullstack: PLAN-001 -> IMPL-001 || DEV-FE-001 -> TEST-001 || QA-FE-001 -> REVIEW-001 + +Full + FE: [Spec pipeline] -> PLAN-001 -> IMPL-001 || DEV-FE-001 -> TEST-001 || QA-FE-001 -> REVIEW-001 +``` + +### Cadence Control + +**Beat model**: Event-driven, each beat = coordinator wake -> process -> spawn -> STOP. + +``` +Beat Cycle (single beat) +====================================================================== + Event Coordinator Workers +---------------------------------------------------------------------- + callback/resume --> +- handleCallback -+ + | mark completed | + | check pipeline | + +- handleSpawnNext -+ + | find ready tasks | + | spawn workers ---+--> [Worker A] Phase 1-5 + | (parallel OK) --+--> [Worker B] Phase 1-5 + +- STOP (idle) -----+ | + | + callback <-----------------------------------------+ + (next beat) SendMessage + TaskUpdate(completed) +====================================================================== + + Fast-Advance (skips coordinator for simple linear successors) +====================================================================== + [Worker A] Phase 5 complete + +- 1 ready task? simple successor? --> spawn Worker B directly + +- complex case? --> SendMessage to coordinator +====================================================================== +``` + +**Pipeline beat view (v4 optimized)**: + +``` +Spec-only (6 beats, was 12 in v3) +------------------------------------------------------- +Beat 1 2 3 4 5 6 + | | | | | | + R1+D1 --> W1+D2 --> W2+D3 --> W3+D4 --> W4+D5 --> Q1+D6 + ^ ^ + pipeline sign-off + start pause + +R=RESEARCH W=DRAFT(writer) Q=QUALITY D=DISCUSS(inline) + +Impl-only (3 beats, with parallel window) +------------------------------------------------------- +Beat 1 2 3 + | | +----+----+ + PLAN --> IMPL --> TEST || REVIEW <-- parallel window + +----+----+ + pipeline + done + +Full-lifecycle (9 beats, was 15 in v3) +------------------------------------------------------- +Beat 1-6: [Spec pipeline as above] + | +Beat 6 (Q1+D6 done): PAUSE CHECKPOINT -- user confirms then resume + | +Beat 7 8 9 + PLAN --> IMPL --> TEST || REVIEW + +Fullstack (with dual parallel windows) +------------------------------------------------------- +Beat 1 2 3 4 + | +----+----+ +----+----+ | + PLAN --> IMPL || DEV-FE --> TEST || QA-FE --> REVIEW + ^ ^ ^ + parallel 1 parallel 2 sync barrier +``` + +**Checkpoints**: + +| Trigger | Position | Behavior | +|---------|----------|----------| +| Spec->Impl transition | QUALITY-001 completed | Pause, wait for user `resume` | +| GC loop max | QA-FE max 2 rounds | Stop iteration, report current state | +| Pipeline stall | No ready + no running | Check missing tasks, report to user | + +**Stall detection** (coordinator `handleCheck`): + +| Check | Condition | Resolution | +|-------|-----------|-----------| +| Worker unresponsive | in_progress task with no callback | Report waiting tasks, suggest `resume` | +| Pipeline deadlock | no ready + no running + has pending | Check blockedBy chain, report blockage | +| GC loop exceeded | DEV-FE / QA-FE iteration > max_rounds | Terminate loop, output latest QA report | + +### Task Metadata Registry + +| Task ID | Role | Phase | Dependencies | Description | Inline Discuss | +|---------|------|-------|-------------|-------------|---------------| +| RESEARCH-001 | analyst | spec | (none) | Seed analysis and context gathering | DISCUSS-001 | +| DRAFT-001 | writer | spec | RESEARCH-001 | Generate Product Brief | DISCUSS-002 | +| DRAFT-002 | writer | spec | DRAFT-001 | Generate Requirements/PRD | DISCUSS-003 | +| DRAFT-003 | writer | spec | DRAFT-002 | Generate Architecture Document | DISCUSS-004 | +| DRAFT-004 | writer | spec | DRAFT-003 | Generate Epics & Stories | DISCUSS-005 | +| QUALITY-001 | reviewer | spec | DRAFT-004 | 5-dimension spec quality + sign-off | DISCUSS-006 | +| PLAN-001 | planner | impl | (none or QUALITY-001) | Multi-angle exploration and planning | - | +| IMPL-001 | executor | impl | PLAN-001 | Code implementation | - | +| TEST-001 | tester | impl | IMPL-001 | Test-fix cycles | - | +| REVIEW-001 | reviewer | impl | IMPL-001 | 4-dimension code review | - | +| DEV-FE-001 | fe-developer | impl | PLAN-001 | Frontend implementation | - | +| QA-FE-001 | fe-qa | impl | DEV-FE-001 | 5-dimension frontend QA | - | + +## Coordinator Spawn Template + +When coordinator spawns workers, use background mode (Spawn-and-Stop): + +``` +Task({ + subagent_type: "general-purpose", + description: "Spawn worker", + team_name: , + name: "", + run_in_background: true, + prompt: `You are team "" . + +## Primary Instruction +All your work MUST be executed by calling Skill to get role definition: +Skill(skill="team-lifecycle-v4", args="--role=") + +Current requirement: +Session: + +## Role Guidelines +- Only process -* tasks, do not execute other role work +- All output prefixed with [] tag +- Only communicate with coordinator +- Do not use TaskCreate to create tasks for other roles +- Before each SendMessage, call mcp__ccw-tools__team_msg to log +- After task completion, check for fast-advance opportunity (see SKILL.md Phase 5) + +## Workflow +1. Call Skill -> get role definition and execution logic +2. Follow role.md 5-Phase flow +3. team_msg + SendMessage results to coordinator +4. TaskUpdate completed -> check next task or fast-advance` +}) +``` + +## Session Directory + +``` +.workflow/.team/TLS--/ ++-- team-session.json # Session state ++-- spec/ # Spec artifacts +| +-- spec-config.json +| +-- discovery-context.json +| +-- product-brief.md +| +-- requirements/ +| +-- architecture/ +| +-- epics/ +| +-- readiness-report.md +| +-- spec-summary.md ++-- discussions/ # Discussion records (written by discuss subagent) ++-- plan/ # Plan artifacts +| +-- plan.json +| +-- .task/TASK-*.json ++-- explorations/ # Shared explore cache +| +-- cache-index.json # { angle+keywords_hash -> file_path } +| +-- explore-.json ++-- architecture/ # Architect assessments + design-tokens.json ++-- analysis/ # Analyst design-intelligence.json (UI mode) ++-- qa/ # QA audit reports ++-- wisdom/ # Cross-task knowledge +| +-- learnings.md +| +-- decisions.md +| +-- conventions.md +| +-- issues.md ++-- .msg/ # Team message bus logs (messages.jsonl) ++-- shared-memory.json # Cross-role state +``` + +## Session Resume + +Coordinator supports `--resume` / `--continue` for interrupted sessions: + +1. Scan `.workflow/.team/TLS-*/team-session.json` for active/paused sessions +2. Multiple matches -> AskUserQuestion for selection +3. Audit TaskList -> reconcile session state <-> task status +4. Reset in_progress -> pending (interrupted tasks) +5. Rebuild team and spawn needed workers only +6. Create missing tasks with correct blockedBy +7. Kick first executable task -> Phase 4 coordination loop + +## Shared Spec Resources + +| Resource | Path | Usage | +|----------|------|-------| +| Document Standards | [specs/document-standards.md](specs/document-standards.md) | YAML frontmatter, naming, structure | +| Quality Gates | [specs/quality-gates.md](specs/quality-gates.md) | Per-phase quality gates | +| Product Brief Template | [templates/product-brief.md](templates/product-brief.md) | DRAFT-001 | +| Requirements Template | [templates/requirements-prd.md](templates/requirements-prd.md) | DRAFT-002 | +| Architecture Template | [templates/architecture-doc.md](templates/architecture-doc.md) | DRAFT-003 | +| Epics Template | [templates/epics-template.md](templates/epics-template.md) | DRAFT-004 | +| Discuss Subagent | [subagents/discuss-subagent.md](subagents/discuss-subagent.md) | Inline discuss protocol | +| Explore Subagent | [subagents/explore-subagent.md](subagents/explore-subagent.md) | Shared exploration utility | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Unknown --role value | Error with available role list | +| Missing --role arg | Orchestration Mode -> coordinator | +| Role file not found | Error with expected path | +| Command file not found | Fallback to inline execution | +| Discuss subagent fails | Role proceeds without discuss, logs warning | +| Explore cache corrupt | Clear cache, re-explore | +| Fast-advance spawns wrong task | Coordinator reconciles on next callback | diff --git a/.claude/skills/team-lifecycle-v4/roles/analyst/role.md b/.claude/skills/team-lifecycle-v4/roles/analyst/role.md new file mode 100644 index 00000000..a09bb194 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/analyst/role.md @@ -0,0 +1,159 @@ +# Role: analyst + +Seed analysis, codebase exploration (via shared explore subagent), and multi-dimensional context gathering. Includes inline discuss (DISCUSS-001) after research output. + +## Identity + +- **Name**: `analyst` | **Prefix**: `RESEARCH-*` | **Tag**: `[analyst]` +- **Responsibility**: Seed Analysis -> Codebase Exploration -> Context Packaging -> **Inline Discuss** -> Report + +## Boundaries + +### MUST +- Only process RESEARCH-* tasks +- Communicate only with coordinator +- Generate discovery-context.json and spec-config.json +- Support file reference input (@ prefix or .md/.txt extension) +- Call discuss subagent for DISCUSS-001 after output +- Use shared explore subagent for codebase exploration (cache-aware) + +### MUST NOT +- Create tasks for other roles +- Directly contact other workers +- Modify spec documents (only create discovery artifacts) +- Skip seed analysis step + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| research_ready | -> coordinator | Research + discuss complete | +| research_progress | -> coordinator | Long research progress update | +| error | -> coordinator | Unrecoverable error | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| ccw cli --tool gemini --mode analysis | Seed analysis | +| Explore subagent | Codebase exploration (shared cache) | +| discuss subagent | Inline DISCUSS-001 critique | + +--- + +## Phase 2: Seed Analysis + +**Objective**: Extract structured seed information from the topic/idea. + +**Workflow**: +1. Extract session folder from task description (`Session: `) +2. Parse topic from task description (first non-metadata line) +3. If topic starts with `@` or ends with `.md`/`.txt` -> Read the referenced file as topic content +4. Run Gemini CLI seed analysis: + +``` +Bash({ + command: `ccw cli -p "PURPOSE: Analyze topic and extract structured seed information. +TASK: * Extract problem statement * Identify target users * Determine domain context +* List constraints and assumptions * Identify 3-5 exploration dimensions * Assess complexity +TOPIC: +MODE: analysis +EXPECTED: JSON with: problem_statement, target_users[], domain, constraints[], exploration_dimensions[], complexity_assessment" --tool gemini --mode analysis`, + run_in_background: true +}) +``` + +5. Wait for CLI result, parse seed analysis JSON + +**Success**: Seed analysis parsed with problem statement, dimensions, complexity. + +--- + +## Phase 3: Codebase Exploration (conditional) + +**Objective**: Gather codebase context if an existing project is detected. + +| Condition | Action | +|-----------|--------| +| package.json / Cargo.toml / pyproject.toml / go.mod exists | Explore codebase | +| No project files | Skip -> codebase context = null | + +**When project detected** (uses shared explore subagent): +1. Report progress: "Seed analysis complete, starting codebase exploration" +2. Call explore subagent with `angle: general`, `keywords: ` + +``` +Task({ + subagent_type: "Explore", + run_in_background: false, + description: "Explore general context", + prompt: "Explore codebase for: +Focus angle: general +Keywords: +Session folder: +..." +}) +``` + +3. Use exploration results to build codebase context: tech_stack, architecture_patterns, conventions, integration_points + +--- + +## Phase 4: Context Packaging + Inline Discuss + +**Objective**: Generate spec-config.json and discovery-context.json, then run DISCUSS-001. + +### 4a: Context Packaging + +**spec-config.json** -> `/spec/spec-config.json`: +- session_id, topic, status="research_complete", complexity, depth, focus_areas, mode="interactive" + +**discovery-context.json** -> `/spec/discovery-context.json`: +- session_id, phase=1, seed_analysis (all fields), codebase_context (or null), recommendations + +**design-intelligence.json** -> `/analysis/design-intelligence.json` (UI mode only): +- Produced when frontend keywords detected in seed_analysis +- Fields: industry, style_direction, ux_patterns, color_strategy, typography, component_patterns +- Consumed by architect (for design-tokens.json) and fe-developer + +### 4b: Inline Discuss (DISCUSS-001) + +After packaging, call discuss subagent: + +``` +Task({ + subagent_type: "cli-discuss-agent", + run_in_background: false, + description: "Discuss DISCUSS-001", + prompt: `## Multi-Perspective Critique: DISCUSS-001 + +### Input +- Artifact: /spec/discovery-context.json +- Round: DISCUSS-001 +- Perspectives: product, risk, coverage +- Session: +- Discovery Context: /spec/discovery-context.json + +` +}) +``` + +**Discuss result handling**: +- `consensus_reached` -> include in report, proceed normally +- `consensus_blocked` -> flag in SendMessage, coordinator decides next step + +**Report**: complexity, codebase presence, problem statement, exploration dimensions, discuss verdict, output paths. + +**Success**: Both JSON files created; discuss record written; design-intelligence.json created if UI mode. + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Gemini CLI failure | Fallback to direct Claude analysis | +| Codebase detection failed | Continue as new project | +| Topic too vague | Report with clarification questions | +| Explore subagent fails | Continue without codebase context | +| Discuss subagent fails | Proceed without discuss, log warning in report | diff --git a/.claude/skills/team-lifecycle-v4/roles/architect/commands/assess.md b/.claude/skills/team-lifecycle-v4/roles/architect/commands/assess.md new file mode 100644 index 00000000..8c6bc967 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/architect/commands/assess.md @@ -0,0 +1,193 @@ +# Command: assess + +## Purpose + +Multi-mode architecture assessment. Auto-detects consultation mode from task subject prefix, runs mode-specific analysis, and produces a verdict with concerns and recommendations. + +## Phase 2: Context Loading + +### Common Context (all modes) + +| Input | Source | Required | +|-------|--------|----------| +| Session folder | Task description `Session:` field | Yes | +| Wisdom | `/wisdom/` (all files) | No | +| Project tech | `.workflow/project-tech.json` | No | +| Explorations | `/explorations/` | No | + +### Mode-Specific Context + +| Mode | Task Pattern | Additional Context | +|------|-------------|-------------------| +| spec-review | ARCH-SPEC-* | `spec/architecture/_index.md`, `spec/architecture/ADR-*.md` | +| plan-review | ARCH-PLAN-* | `plan/plan.json`, `plan/.task/TASK-*.json` | +| code-review | ARCH-CODE-* | `git diff --name-only`, changed file contents | +| consult | ARCH-CONSULT-* | Question extracted from task description | +| feasibility | ARCH-FEASIBILITY-* | Proposal from task description, codebase search results | + +## Phase 3: Mode-Specific Assessment + +### Mode: spec-review + +Review architecture documents for technical soundness across 4 dimensions. + +**Assessment dimensions**: + +| Dimension | Weight | Focus | +|-----------|--------|-------| +| Consistency | 25% | ADR decisions align with each other and with architecture index | +| Scalability | 25% | Design supports growth, no single-point bottlenecks | +| Security | 25% | Auth model, data protection, API security addressed | +| Tech fitness | 25% | Technology choices match project-tech.json and problem domain | + +**Checks**: +- Read architecture index and all ADR files +- Cross-reference ADR decisions for contradictions +- Verify tech choices align with project-tech.json +- Score each dimension 0-100 + +--- + +### Mode: plan-review + +Review implementation plan for architectural soundness. + +**Checks**: + +| Check | What | Severity if Failed | +|-------|------|-------------------| +| Dependency cycles | Build task graph, detect cycles via DFS | High | +| Task granularity | Flag tasks touching >8 files | Medium | +| Convention compliance | Verify plan follows wisdom/conventions.md | Medium | +| Architecture alignment | Verify plan doesn't contradict wisdom/decisions.md | High | + +**Dependency cycle detection flow**: +1. Parse all TASK-*.json files -> extract id and depends_on +2. Build directed graph +3. DFS traversal -> flag any node visited twice in same stack +4. Report cycle path if found + +--- + +### Mode: code-review + +Assess architectural impact of code changes. + +**Checks**: + +| Check | Method | Severity if Found | +|-------|--------|-------------------| +| Layer violations | Detect upward imports (deeper layer importing shallower) | High | +| New dependencies | Parse package.json diff for added deps | Medium | +| Module boundary changes | Flag index.ts/index.js modifications | Medium | +| Architectural impact | Score based on file count and boundary changes | Info | + +**Impact scoring**: + +| Condition | Impact Level | +|-----------|-------------| +| Changed files > 10 | High | +| index.ts/index.js or package.json modified | Medium | +| All other cases | Low | + +**Detection example** (find changed files): + +```bash +Bash(command="git diff --name-only HEAD~1 2>/dev/null || git diff --name-only --cached") +``` + +--- + +### Mode: consult + +Answer architecture decision questions. Route by question complexity. + +**Complexity detection**: + +| Condition | Classification | +|-----------|---------------| +| Question > 200 chars OR matches: architect, design, pattern, refactor, migrate, scalab | Complex | +| All other questions | Simple | + +**Complex questions** -> delegate to CLI exploration: + +```bash +Bash(command="ccw cli -p \"PURPOSE: Architecture consultation for: +TASK: Search codebase for relevant patterns, analyze architectural implications, provide options with trade-offs +MODE: analysis +CONTEXT: @**/* +EXPECTED: Options with trade-offs, file references, architectural implications +CONSTRAINTS: Advisory only, provide options not decisions\" --tool gemini --mode analysis --rule analysis-review-architecture", timeout=300000) +``` + +**Simple questions** -> direct analysis using available context (wisdom, project-tech, codebase search). + +--- + +### Mode: feasibility + +Evaluate technical feasibility of a proposal. + +**Assessment areas**: + +| Area | Method | Output | +|------|--------|--------| +| Tech stack compatibility | Compare proposal needs against project-tech.json | Compatible / Requires additions | +| Codebase readiness | Search for integration points using Grep/Glob | Touch-point count | +| Effort estimation | Based on touch-point count (see table below) | Low / Medium / High | +| Risk assessment | Based on effort + tech compatibility | Risks + mitigations | + +**Effort estimation**: + +| Touch Points | Effort | Implication | +|-------------|--------|-------------| +| <= 5 | Low | Straightforward implementation | +| 6 - 20 | Medium | Moderate refactoring needed | +| > 20 | High | Significant refactoring, consider phasing | + +**Verdict for feasibility**: + +| Condition | Verdict | +|-----------|---------| +| Low/medium effort, compatible stack | FEASIBLE | +| High touch-points OR new tech required | RISKY | +| Fundamental incompatibility or unreasonable effort | INFEASIBLE | + +--- + +### Verdict Routing (all modes except feasibility) + +| Verdict | Criteria | +|---------|----------| +| BLOCK | >= 2 high-severity concerns | +| CONCERN | >= 1 high-severity OR >= 3 medium-severity concerns | +| APPROVE | All other cases | + +## Phase 4: Validation + +### Output Format + +Write assessment to `/architecture/arch-.json`. + +**Report content sent to coordinator**: + +| Field | Description | +|-------|-------------| +| mode | Consultation mode used | +| verdict | APPROVE / CONCERN / BLOCK (or FEASIBLE / RISKY / INFEASIBLE) | +| concern_count | Number of concerns by severity | +| recommendations | Actionable suggestions with trade-offs | +| output_path | Path to full assessment file | + +**Wisdom contribution**: Append significant decisions to `/wisdom/decisions.md`. + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Architecture docs not found | Assess from available context, note limitation in report | +| Plan file missing | Report to coordinator via arch_concern | +| Git diff fails (no commits) | Use staged changes or skip code-review mode | +| CLI exploration timeout | Provide partial assessment, flag as incomplete | +| Exploration results unparseable | Fall back to direct analysis without exploration | +| Insufficient context | Request explorer assistance via coordinator | diff --git a/.claude/skills/team-lifecycle-v4/roles/architect/role.md b/.claude/skills/team-lifecycle-v4/roles/architect/role.md new file mode 100644 index 00000000..a2cc6c5e --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/architect/role.md @@ -0,0 +1,103 @@ +# Role: architect + +Architecture consultant. Advice on decisions, feasibility, design patterns. + +## Identity + +- **Name**: `architect` | **Prefix**: `ARCH-*` | **Tag**: `[architect]` +- **Type**: Consulting (on-demand, advisory only) +- **Responsibility**: Context loading → Mode detection → Analysis → Report + +## Boundaries + +### MUST +- Only process ARCH-* tasks +- Auto-detect mode from task subject prefix +- Provide options with trade-offs (not final decisions) + +### MUST NOT +- Modify source code +- Make final decisions (advisory only) +- Execute implementation or testing + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| arch_ready | → coordinator | Assessment complete | +| arch_concern | → coordinator | Significant risk found | +| error | → coordinator | Analysis failure | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/assess.md | Multi-mode assessment | +| cli-explore-agent | Deep architecture exploration | +| ccw cli --tool gemini --mode analysis | Architecture analysis | + +--- + +## Consultation Modes + +| Task Pattern | Mode | Focus | +|-------------|------|-------| +| ARCH-SPEC-* | spec-review | Review architecture docs | +| ARCH-PLAN-* | plan-review | Review plan soundness | +| ARCH-CODE-* | code-review | Assess code change impact | +| ARCH-CONSULT-* | consult | Answer architecture questions | +| ARCH-FEASIBILITY-* | feasibility | Technical feasibility | + +--- + +## Phase 2: Context Loading + +**Common**: session folder, wisdom, project-tech.json, explorations + +**Mode-specific**: + +| Mode | Additional Context | +|------|-------------------| +| spec-review | architecture/_index.md, ADR-*.md | +| plan-review | plan/plan.json | +| code-review | git diff, changed files | +| consult | Question from task description | +| feasibility | Requirements + codebase | + +--- + +## Phase 3: Assessment + +Delegate to `commands/assess.md`. Output: mode, verdict (APPROVE/CONCERN/BLOCK), dimensions[], concerns[], recommendations[]. + +For complex questions → Gemini CLI with architecture review rule. + +--- + +## Phase 4: Report + +Output to `/architecture/arch-.json`. Contribute decisions to wisdom/decisions.md. + +**Frontend project outputs** (when frontend tech stack detected in shared-memory or discovery-context): +- `/architecture/design-tokens.json` — color, spacing, typography, shadow tokens +- `/architecture/component-specs/*.md` — per-component design spec + +**Report**: mode, verdict, concern count, recommendations, output path(s). + +--- + +## Coordinator Integration + +| Timing | Task | +|--------|------| +| After DRAFT-003 | ARCH-SPEC-001: 架构文档评审 | +| After PLAN-001 | ARCH-PLAN-001: 计划架构审查 | +| On-demand | ARCH-CONSULT-001: 架构咨询 | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Docs not found | Assess from available context | +| CLI timeout | Partial assessment | +| Insufficient context | Request explorer via coordinator | diff --git a/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md b/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md new file mode 100644 index 00000000..1cc922fb --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md @@ -0,0 +1,139 @@ +# Command: dispatch + +## Purpose + +Create task chains based on execution mode. v4 optimized: spec pipeline reduced from 12 to 6 tasks by inlining discuss rounds into produce roles. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Mode | Phase 1 requirements (spec-only, impl-only, etc.) | Yes | +| Session folder | `` from Phase 2 | Yes | +| Scope | User requirements description | Yes | +| Spec file | User-provided path (impl-only mode only) | Conditional | + +## Phase 3: Task Chain Creation + +### Mode-to-Pipeline Routing + +| Mode | Tasks | Pipeline | First Task | +|------|-------|----------|------------| +| spec-only | 6 | Spec pipeline | RESEARCH-001 | +| impl-only | 4 | Impl pipeline | PLAN-001 | +| fe-only | 3 | FE pipeline | PLAN-001 | +| fullstack | 6 | Fullstack pipeline | PLAN-001 | +| full-lifecycle | 10 | Spec + Impl | RESEARCH-001 | +| full-lifecycle-fe | 12 | Spec + Fullstack | RESEARCH-001 | + +--- + +### Spec Pipeline (6 tasks, was 12 in v3) + +Used by: spec-only, full-lifecycle, full-lifecycle-fe + +| # | Subject | Owner | BlockedBy | Description | Inline Discuss | +|---|---------|-------|-----------|-------------|---------------| +| 1 | RESEARCH-001 | analyst | (none) | Seed analysis and context gathering | DISCUSS-001 | +| 2 | DRAFT-001 | writer | RESEARCH-001 | Generate Product Brief | DISCUSS-002 | +| 3 | DRAFT-002 | writer | DRAFT-001 | Generate Requirements/PRD | DISCUSS-003 | +| 4 | DRAFT-003 | writer | DRAFT-002 | Generate Architecture Document | DISCUSS-004 | +| 5 | DRAFT-004 | writer | DRAFT-003 | Generate Epics & Stories | DISCUSS-005 | +| 6 | QUALITY-001 | reviewer | DRAFT-004 | 5-dimension spec quality + sign-off | DISCUSS-006 | + +**Key change from v3**: No separate DISCUSS-* tasks. Each produce role calls the discuss subagent inline after completing its primary output. + +### Impl Pipeline (4 tasks) + +Used by: impl-only, full-lifecycle (PLAN-001 blockedBy QUALITY-001) + +| # | Subject | Owner | BlockedBy | Description | +|---|---------|-------|-----------|-------------| +| 1 | PLAN-001 | planner | (none) | Multi-angle exploration and planning | +| 2 | IMPL-001 | executor | PLAN-001 | Code implementation | +| 3 | TEST-001 | tester | IMPL-001 | Test-fix cycles | +| 4 | REVIEW-001 | reviewer | IMPL-001 | 4-dimension code review | + +### FE Pipeline (3 tasks) + +Used by: fe-only + +| # | Subject | Owner | BlockedBy | Description | +|---|---------|-------|-----------|-------------| +| 1 | PLAN-001 | planner | (none) | Planning (frontend focus) | +| 2 | DEV-FE-001 | fe-developer | PLAN-001 | Frontend implementation | +| 3 | QA-FE-001 | fe-qa | DEV-FE-001 | 5-dimension frontend QA | + +GC loop (max 2 rounds): QA-FE verdict=NEEDS_FIX -> create DEV-FE-002 + QA-FE-002 dynamically. + +### Fullstack Pipeline (6 tasks) + +Used by: fullstack, full-lifecycle-fe (PLAN-001 blockedBy QUALITY-001) + +| # | Subject | Owner | BlockedBy | Description | +|---|---------|-------|-----------|-------------| +| 1 | PLAN-001 | planner | (none) | Fullstack planning | +| 2 | IMPL-001 | executor | PLAN-001 | Backend implementation | +| 3 | DEV-FE-001 | fe-developer | PLAN-001 | Frontend implementation | +| 4 | TEST-001 | tester | IMPL-001 | Backend test-fix cycles | +| 5 | QA-FE-001 | fe-qa | DEV-FE-001 | Frontend QA | +| 6 | REVIEW-001 | reviewer | TEST-001, QA-FE-001 | Full code review | + +### Composite Modes + +| Mode | Construction | PLAN-001 BlockedBy | +|------|-------------|-------------------| +| full-lifecycle | Spec (6) + Impl (4) | QUALITY-001 | +| full-lifecycle-fe | Spec (6) + Fullstack (6) | QUALITY-001 | + +--- + +### Impl-Only Pre-check + +Before creating impl-only tasks, verify specification exists: + +``` +Spec exists? + +- YES -> read spec path -> proceed with task creation + +- NO -> error: "impl-only requires existing spec, use spec-only or full-lifecycle" +``` + +### Task Description Template + +Every task description includes session, scope, and inline discuss metadata: + +``` +TaskCreate({ + subject: "", + owner: "", + description: "\nSession: \nScope: \nInlineDiscuss: ", + blockedBy: [], + status: "pending" +}) +``` + +### Execution Method + +| Method | Behavior | +|--------|----------| +| sequential | One task active at a time; next activated after predecessor completes | +| parallel | Tasks with all deps met run concurrently (e.g., TEST-001 + REVIEW-001) | + +## Phase 4: Validation + +| Check | Criteria | +|-------|----------| +| Task count | Matches mode total from routing table | +| Dependencies | Every blockedBy references an existing task subject | +| Owner assignment | Each task owner matches SKILL.md Role Registry prefix | +| Session reference | Every task description contains `Session: ` | +| Inline discuss | Spec tasks have InlineDiscuss field matching round config | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Unknown mode | Reject with supported mode list | +| Missing spec for impl-only | Error, suggest spec-only or full-lifecycle | +| TaskCreate fails | Log error, report to user | +| Duplicate task subject | Skip creation, log warning | diff --git a/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md b/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md new file mode 100644 index 00000000..6e76bbb3 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md @@ -0,0 +1,191 @@ +# Command: monitor + +## Purpose + +Event-driven pipeline coordination with Spawn-and-Stop pattern. v4 enhanced with worker fast-advance awareness. Three wake-up sources: worker callbacks (auto-advance), user `check` (status report), user `resume` (manual advance). + +## Constants + +| Constant | Value | Description | +|----------|-------|-------------| +| SPAWN_MODE | background | All workers spawned via `Task(run_in_background: true)` | +| ONE_STEP_PER_INVOCATION | true | Coordinator does one operation then STOPS | +| FAST_ADVANCE_AWARE | true | Workers may skip coordinator for simple linear successors | + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Session file | `/team-session.json` | Yes | +| Task list | `TaskList()` | Yes | +| Active workers | session.active_workers[] | Yes | +| Pipeline mode | session.mode | Yes | + +## Phase 3: Handler Routing + +### Wake-up Source Detection + +Parse `$ARGUMENTS` to determine handler: + +| Priority | Condition | Handler | +|----------|-----------|---------| +| 1 | Message contains `[]` from known worker role | handleCallback | +| 2 | Contains "check" or "status" | handleCheck | +| 3 | Contains "resume", "continue", or "next" | handleResume | +| 4 | None of the above (initial spawn after dispatch) | handleSpawnNext | + +Known worker roles: analyst, writer, planner, executor, tester, reviewer, architect, fe-developer, fe-qa. + +> **Note**: `discussant` and `explorer` are no longer worker roles in v4. They are subagents called inline by produce roles. + +--- + +### Handler: handleCallback + +Worker completed a task. Verify completion, update state, auto-advance. + +``` +Receive callback from [] + +- Find matching active worker by role + +- Task status = completed? + | +- YES -> remove from active_workers -> update session + | | +- Handle checkpoints (see below) + | | +- -> handleSpawnNext + | +- NO -> progress message, do not advance -> STOP + +- No matching worker found + +- Scan all active workers for completed tasks + +- Found completed -> process each -> handleSpawnNext + +- None completed -> STOP +``` + +**Fast-advance note**: A worker may have already spawned its successor via fast-advance. When processing a callback: +1. Check if the expected next task is already `in_progress` (fast-advanced) +2. If yes -> skip spawning that task, update active_workers to include the fast-advanced worker +3. If no -> normal handleSpawnNext + +--- + +### Handler: handleCheck + +Read-only status report. No pipeline advancement. + +**Output format**: + +``` +[coordinator] Pipeline Status (v4) +[coordinator] Mode: | Progress: / (%) + +[coordinator] Execution Graph: + Spec Phase: (if applicable) + [ RESEARCH-001(+D1)] -> [ DRAFT-001(+D2)] -> [ DRAFT-002(+D3)] + -> [ DRAFT-003(+D4)] -> [ DRAFT-004(+D5)] -> [ QUALITY-001(+D6)] + Impl Phase: (if applicable) + [ PLAN-001] + +- BE: [ IMPL-001] -> [ TEST-001] -> [ REVIEW-001] + +- FE: [ DEV-FE-001] -> [ QA-FE-001] + + done=completed >>>=running o=pending .=not created + +[coordinator] Active Workers: + > () - running + +[coordinator] Ready to spawn: +[coordinator] Commands: 'resume' to advance | 'check' to refresh +``` + +**Icon mapping**: completed=done, in_progress=>>>, pending=o, not created=. + +Then STOP. + +--- + +### Handler: handleResume + +Check active worker completion, process results, advance pipeline. + +``` +Load active_workers from session + +- No active workers -> handleSpawnNext + +- Has active workers -> check each: + +- status = completed -> mark done, log + +- status = in_progress -> still running, log + +- other status -> worker failure -> reset to pending + After processing: + +- Some completed -> handleSpawnNext + +- All still running -> report status -> STOP + +- All failed -> handleSpawnNext (retry) +``` + +--- + +### Handler: handleSpawnNext + +Find all ready tasks, spawn workers in background, update session, STOP. + +``` +Collect task states from TaskList() + +- completedSubjects: status = completed + +- inProgressSubjects: status = in_progress + +- readySubjects: pending + all blockedBy in completedSubjects + +Ready tasks found? + +- NONE + work in progress -> report waiting -> STOP + +- NONE + nothing in progress -> PIPELINE_COMPLETE -> Phase 5 + +- HAS ready tasks -> for each: + +- TaskUpdate -> in_progress + +- team_msg log -> task_unblocked + +- Spawn worker (see tool call below) + +- Add to session.active_workers + Update session file -> output summary -> STOP +``` + +**Spawn worker tool call** (one per ready task): + +```bash +Task({ + subagent_type: "general-purpose", + description: "Spawn worker for ", + team_name: , + name: "", + run_in_background: true, + prompt: "" +}) +``` + +--- + +### Checkpoints + +| Completed Task | Mode Condition | Action | +|---------------|----------------|--------| +| QUALITY-001 | full-lifecycle or full-lifecycle-fe | Output "SPEC PHASE COMPLETE" checkpoint, pause for user review before impl | + +--- + +### Worker Failure Handling + +When a worker has unexpected status (not completed, not in_progress): + +1. Reset task -> pending via TaskUpdate +2. Log via team_msg (type: error) +3. Report to user: task reset, will retry on next resume + +## Phase 4: Validation + +| Check | Criteria | +|-------|----------| +| Session state consistent | active_workers matches TaskList in_progress tasks | +| No orphaned tasks | Every in_progress task has an active_worker entry | +| Pipeline completeness | All expected tasks exist per mode | +| Completion detection | readySubjects=0 + inProgressSubjects=0 -> PIPELINE_COMPLETE | +| Fast-advance tracking | Detect tasks already in_progress via fast-advance, sync to active_workers | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Session file not found | Error, suggest re-initialization | +| Worker callback from unknown role | Log info, scan for other completions | +| All workers still running on resume | Report status, suggest check later | +| Pipeline stall (no ready, no running) | Check for missing tasks, report to user | +| Fast-advance conflict | Coordinator reconciles, no duplicate spawns | diff --git a/.claude/skills/team-lifecycle-v4/roles/coordinator/role.md b/.claude/skills/team-lifecycle-v4/roles/coordinator/role.md new file mode 100644 index 00000000..d4ec74c5 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/coordinator/role.md @@ -0,0 +1,176 @@ +# Coordinator Role + +Orchestrate the team-lifecycle workflow: team creation, task dispatching, progress monitoring, session state. Optimized for v4 reduced pipeline with inline discuss and shared explore. + +## Identity + +- **Name**: `coordinator` | **Tag**: `[coordinator]` +- **Responsibility**: Parse requirements -> Create team -> Dispatch tasks -> Monitor progress -> Report results + +## Boundaries + +### MUST +- Parse user requirements and clarify ambiguous inputs via AskUserQuestion +- Create team and spawn worker subagents in background +- Dispatch tasks with proper dependency chains (see SKILL.md Task Metadata Registry) +- Monitor progress via worker callbacks and route messages +- Maintain session state persistence (team-session.json) + +### MUST NOT +- Execute spec/impl/research work directly (delegate to workers) +- Modify task outputs (workers own their deliverables) +- Call implementation subagents (code-developer, etc.) directly +- Skip dependency validation when creating task chains + +--- + +## Entry Router + +When coordinator is invoked, first detect the invocation type: + +| Detection | Condition | Handler | +|-----------|-----------|---------| +| Worker callback | Message contains `[role-name]` tag from a known worker role | -> handleCallback: auto-advance pipeline | +| Status check | Arguments contain "check" or "status" | -> handleCheck: output execution graph, no advancement | +| Manual resume | Arguments contain "resume" or "continue" | -> handleResume: check worker states, advance pipeline | +| New session | None of the above | -> Phase 0 (Session Resume Check) | + +For callback/check/resume: load `commands/monitor.md` and execute the appropriate handler, then STOP. + +--- + +## Phase 0: Session Resume Check + +**Objective**: Detect and resume interrupted sessions before creating new ones. + +**Workflow**: +1. Scan `.workflow/.team/TLS-*/team-session.json` for sessions with status "active" or "paused" +2. No sessions found -> proceed to Phase 1 +3. Single session found -> resume it (-> Session Reconciliation) +4. Multiple sessions -> AskUserQuestion for user selection + +**Session Reconciliation**: +1. Audit TaskList -> get real status of all tasks +2. Reconcile: session.completed_tasks <-> TaskList status (bidirectional sync) +3. Reset any in_progress tasks -> pending (they were interrupted) +4. Determine remaining pipeline from reconciled state +5. Rebuild team if disbanded (TeamCreate + spawn needed workers only) +6. Create missing tasks with correct blockedBy dependencies +7. Verify dependency chain integrity +8. Update session file with reconciled state +9. Kick first executable task's worker -> Phase 4 + +--- + +## Phase 1: Requirement Clarification + +**Objective**: Parse user input and gather execution parameters. + +**Workflow**: + +1. **Parse arguments** for explicit settings: mode, scope, focus areas, depth + +2. **Ask for missing parameters** via AskUserQuestion: + - Mode: spec-only / impl-only / full-lifecycle / fe-only / fullstack / full-lifecycle-fe + - Scope: project description + - Execution method: sequential / parallel + +3. **Frontend auto-detection** (for impl-only and full-lifecycle modes): + + | Signal | Detection | Pipeline Upgrade | + |--------|----------|-----------------| + | FE keywords (component, page, UI, React, Vue, CSS...) | Keyword match in description | impl-only -> fe-only or fullstack | + | BE keywords also present (API, database, server...) | Both FE + BE keywords | impl-only -> fullstack | + | FE framework in package.json | grep react/vue/svelte/next | full-lifecycle -> full-lifecycle-fe | + +4. **Store requirements**: mode, scope, focus, depth, executionMethod + +**Success**: All parameters captured, mode finalized. + +--- + +## Phase 2: Create Team + Initialize Session + +**Objective**: Initialize team, session file, and wisdom directory. + +**Workflow**: +1. Generate session ID: `TLS--` +2. Create session folder: `.workflow/.team//` +3. Call TeamCreate with team name +4. Initialize wisdom directory (learnings.md, decisions.md, conventions.md, issues.md) +5. Initialize explorations directory with empty cache-index.json +6. Write team-session.json with: session_id, mode, scope, status="active", tasks_total, tasks_completed=0 + +**Task counts by mode (v4)**: + +| Mode | Tasks | v3 Tasks | Savings | +|------|-------|----------|---------| +| spec-only | 6 | 12 | -6 (discuss inlined) | +| impl-only | 4 | 4 | 0 | +| fe-only | 3 | 3 | 0 | +| fullstack | 6 | 6 | 0 | +| full-lifecycle | 10 | 16 | -6 (discuss inlined) | +| full-lifecycle-fe | 12 | 18 | -6 (discuss inlined) | + +**Success**: Team created, session file written, wisdom and explorations initialized. + +--- + +## Phase 3: Create Task Chain + +**Objective**: Dispatch tasks based on mode with proper dependencies. + +Delegate to `commands/dispatch.md` which creates the full task chain: +1. Reads SKILL.md Task Metadata Registry for task definitions +2. Creates tasks via TaskCreate with correct blockedBy +3. Assigns owner based on role mapping +4. Includes `Session: ` in every task description +5. Marks inline discuss round in task description (e.g., `InlineDiscuss: DISCUSS-002`) + +--- + +## Phase 4: Spawn-and-Stop + +**Objective**: Spawn first batch of ready workers in background, then STOP. + +**Design**: Spawn-and-Stop + Callback pattern, with worker fast-advance. +- Spawn workers with `Task(run_in_background: true)` -> immediately return +- Worker completes -> may fast-advance to next task OR SendMessage callback -> auto-advance +- User can use "check" / "resume" to manually advance +- Coordinator does one operation per invocation, then STOPS + +**Workflow**: +1. Load `commands/monitor.md` +2. Find tasks with: status=pending, blockedBy all resolved, owner assigned +3. For each ready task -> spawn worker (see SKILL.md Spawn Template) +4. Output status summary +5. STOP + +**Pipeline advancement** driven by three wake sources: +- Worker callback (automatic) -> Entry Router -> handleCallback +- User "check" -> handleCheck (status only) +- User "resume" -> handleResume (advance) + +--- + +## Phase 5: Report + Next Steps + +**Objective**: Completion report and follow-up options. + +**Workflow**: +1. Load session state -> count completed tasks, duration +2. List deliverables with output paths +3. Update session status -> "completed" +4. Offer next steps: exit / view artifacts / extend tasks / generate lite-plan / create Issue + +--- + +## Error Handling + +| Error | Resolution | +|-------|------------| +| Task timeout | Log, mark failed, ask user to retry or skip | +| Worker crash | Respawn worker, reassign task | +| Dependency cycle | Detect, report to user, halt | +| Invalid mode | Reject with error, ask to clarify | +| Session corruption | Attempt recovery, fallback to manual reconciliation | diff --git a/.claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md b/.claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md new file mode 100644 index 00000000..26501c5e --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md @@ -0,0 +1,166 @@ +# Command: implement + +## Purpose + +Multi-backend code implementation: route tasks to appropriate execution backend (direct edit, subagent, or CLI), build focused prompts, execute with retry and fallback. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Plan | `/plan/plan.json` | Yes | +| Task files | `/plan/.task/TASK-*.json` | Yes | +| Backend | Task metadata / plan default / auto-select | Yes | +| Working directory | task.metadata.working_dir or project root | No | +| Wisdom | `/wisdom/` | No | + +## Phase 3: Implementation + +### Backend Selection + +Priority order (first match wins): + +| Priority | Source | Method | +|----------|--------|--------| +| 1 | Task metadata | `task.metadata.executor` field | +| 2 | Plan default | "Execution Backend:" line in plan.json | +| 3 | Auto-select | See auto-select table below | + +**Auto-select routing**: + +| Condition | Backend | +|-----------|---------| +| Description < 200 chars AND no refactor/architecture keywords AND single target file | agent (direct edit) | +| Description < 200 chars AND simple scope | agent (subagent) | +| Complex scope OR architecture keywords | codex | +| Analysis-heavy OR multi-module integration | gemini | + +### Execution Paths + +``` +Backend selected + ├─ agent (direct edit) + │ └─ Read target file → Edit directly → no subagent overhead + ├─ agent (subagent) + │ └─ Task({ subagent_type: "code-developer", run_in_background: false }) + ├─ codex (CLI) + │ └─ Bash(command="ccw cli ... --tool codex --mode write", run_in_background=true) + └─ gemini (CLI) + └─ Bash(command="ccw cli ... --tool gemini --mode write", run_in_background=true) +``` + +### Path 1: Direct Edit (agent, simple task) + +```bash +Read(file_path="") +Edit(file_path="", old_string="", new_string="") +``` + +### Path 2: Subagent (agent, moderate task) + +``` +Task({ + subagent_type: "code-developer", + run_in_background: false, + description: "Implement ", + prompt: "" +}) +``` + +### Path 3: CLI Backend (codex or gemini) + +```bash +Bash(command="ccw cli -p '' --tool --mode write --cd ", run_in_background=true) +``` + +### Execution Prompt Template + +All backends receive the same structured prompt: + +``` +# Implementation Task: + +## Task Description + + +## Acceptance Criteria +1. + +## Context from Plan + + + + +## Files to Modify + + +## Constraints +- Follow existing code style and patterns +- Preserve backward compatibility +- Add appropriate error handling +- Include inline comments for complex logic +``` + +### Batch Execution + +When multiple IMPL tasks exist, execute in dependency order: + +``` +Topological sort by task.depends_on + ├─ Batch 1: Tasks with no dependencies → execute + ├─ Batch 2: Tasks depending on batch 1 → execute + └─ Batch N: Continue until all tasks complete + +Progress update per batch (when > 1 batch): + → team_msg: "Processing batch /: " +``` + +### Retry and Fallback + +**Retry** (max 3 attempts per task): + +``` +Attempt 1 → failure + ├─ team_msg: "Retry 1/3 after error: " + └─ Attempt 2 → failure + ├─ team_msg: "Retry 2/3 after error: " + └─ Attempt 3 → failure → fallback + +``` + +**Fallback** (when primary backend fails after retries): + +| Primary Backend | Fallback | +|----------------|----------| +| codex | agent (subagent) | +| gemini | agent (subagent) | +| agent (subagent) | Report failure to coordinator | +| agent (direct edit) | agent (subagent) | + +## Phase 4: Validation + +### Self-Validation Steps + +| Step | Method | Pass Criteria | +|------|--------|--------------| +| Syntax check | `Bash(command="tsc --noEmit", timeout=30000)` | Exit code 0 | +| Acceptance match | Check criteria keywords vs modified files | All criteria addressed | +| Test detection | Search for .test.ts/.spec.ts matching modified files | Tests identified | +| File changes | `Bash(command="git diff --name-only HEAD")` | At least 1 file modified | + +### Result Routing + +| Outcome | Message Type | Content | +|---------|-------------|---------| +| All tasks pass validation | impl_complete | Task ID, files modified, backend used | +| Batch progress | impl_progress | Batch index, total batches, current task | +| Validation failure after retries | error | Task ID, error details, retry count | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Syntax errors after implementation | Retry with error context (max 3) | +| Backend unavailable | Fallback to agent | +| Missing dependencies | Request from coordinator | +| All retries + fallback exhausted | Report failure with full error log | diff --git a/.claude/skills/team-lifecycle-v4/roles/executor/role.md b/.claude/skills/team-lifecycle-v4/roles/executor/role.md new file mode 100644 index 00000000..0cd3296f --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/executor/role.md @@ -0,0 +1,103 @@ +# Role: executor + +Code implementation following approved plans. Multi-backend execution with self-validation. + +## Identity + +- **Name**: `executor` | **Prefix**: `IMPL-*` | **Tag**: `[executor]` +- **Responsibility**: Load plan → Route to backend → Implement → Self-validate → Report + +## Boundaries + +### MUST +- Only process IMPL-* tasks +- Follow approved plan exactly +- Use declared execution backends +- Self-validate all implementations + +### MUST NOT +- Create tasks +- Contact other workers directly +- Modify plan files +- Skip self-validation + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| impl_complete | → coordinator | Implementation success | +| impl_progress | → coordinator | Batch progress | +| error | → coordinator | Implementation failure | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/implement.md | Multi-backend implementation | +| code-developer agent | Simple tasks (synchronous) | +| ccw cli --tool codex --mode write | Complex tasks | +| ccw cli --tool gemini --mode write | Alternative backend | + +--- + +## Phase 2: Task & Plan Loading + +**Objective**: Load plan and determine execution strategy. + +1. Load plan.json and .task/TASK-*.json from `/plan/` + +**Backend selection** (priority order): + +| Priority | Source | Method | +|----------|--------|--------| +| 1 | Task metadata | task.metadata.executor field | +| 2 | Plan default | "Execution Backend:" in plan | +| 3 | Auto-select | Simple (< 200 chars, no refactor) → agent; Complex → codex | + +**Code review selection**: + +| Priority | Source | Method | +|----------|--------|--------| +| 1 | Task metadata | task.metadata.code_review field | +| 2 | Plan default | "Code Review:" in plan | +| 3 | Auto-select | Critical keywords (auth, security, payment) → enabled | + +--- + +## Phase 3: Code Implementation + +**Objective**: Execute implementation across batches. + +**Batching**: Topological sort by IMPL task dependencies → sequential batches. + +Delegate to `commands/implement.md` for prompt building and backend routing: + +| Backend | Invocation | Use Case | +|---------|-----------|----------| +| agent | Task({ subagent_type: "code-developer", run_in_background: false }) | Simple, direct edits | +| codex | ccw cli --tool codex --mode write (background) | Complex, architecture | +| gemini | ccw cli --tool gemini --mode write (background) | Analysis-heavy | + +--- + +## Phase 4: Self-Validation + +| Step | Method | Pass Criteria | +|------|--------|--------------| +| Syntax check | `tsc --noEmit` (30s) | Exit code 0 | +| Acceptance criteria | Match criteria keywords vs implementation | All addressed | +| Test detection | Find .test.ts/.spec.ts for modified files | Tests identified | +| Code review (optional) | gemini analysis or codex review | No blocking issues | + +**Report**: task ID, status, files modified, validation results, backend used. + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Syntax errors | Retry with error context (max 3) | +| Missing dependencies | Request from coordinator | +| Backend unavailable | Fallback to agent | +| Circular dependencies | Abort, report graph | diff --git a/.claude/skills/team-lifecycle-v4/roles/fe-developer/role.md b/.claude/skills/team-lifecycle-v4/roles/fe-developer/role.md new file mode 100644 index 00000000..b23f4f1d --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/fe-developer/role.md @@ -0,0 +1,111 @@ +# Role: fe-developer + +Frontend development. Consumes plan/architecture output, implements components, pages, styles. + +## Identity + +- **Name**: `fe-developer` | **Prefix**: `DEV-FE-*` | **Tag**: `[fe-developer]` +- **Type**: Frontend pipeline worker +- **Responsibility**: Context loading → Design token consumption → Component implementation → Report + +## Boundaries + +### MUST +- Only process DEV-FE-* tasks +- Follow existing design tokens and component specs (if available) +- Generate accessible frontend code (semantic HTML, ARIA, keyboard nav) +- Follow project's frontend tech stack + +### MUST NOT +- Modify backend code or API interfaces +- Contact other workers directly +- Introduce new frontend dependencies without architecture review + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| dev_fe_complete | → coordinator | Implementation done | +| dev_fe_progress | → coordinator | Long task progress | +| error | → coordinator | Implementation failure | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| code-developer agent | Component implementation | +| ccw cli --tool gemini --mode write | Complex frontend generation | + +--- + +## Phase 2: Context Loading + +**Inputs to load**: +- Plan: `/plan/plan.json` +- Design tokens: `/architecture/design-tokens.json` (optional) +- Design intelligence: `/analysis/design-intelligence.json` (optional) +- Component specs: `/architecture/component-specs/*.md` (optional) +- Shared memory, wisdom + +**Tech stack detection**: + +| Signal | Framework | Styling | +|--------|-----------|---------| +| react/react-dom in deps | react | - | +| vue in deps | vue | - | +| next in deps | nextjs | - | +| tailwindcss in deps | - | tailwind | +| @shadcn/ui in deps | - | shadcn | + +--- + +## Phase 3: Frontend Implementation + +**Step 1**: Generate design token CSS (if tokens available) +- Convert design-tokens.json → CSS custom properties (`:root { --color-*, --space-*, --text-* }`) +- Include dark mode overrides via `@media (prefers-color-scheme: dark)` +- Write to `src/styles/tokens.css` + +**Step 2**: Implement components + +| Task Size | Strategy | +|-----------|----------| +| Simple (≤ 3 files, single component) | code-developer agent (synchronous) | +| Complex (system, multi-component) | ccw cli --tool gemini --mode write (background) | + +**Coding standards** (include in agent/CLI prompt): +- Use design token CSS variables, never hardcode colors/spacing +- Interactive elements: cursor: pointer +- Transitions: 150-300ms +- Text contrast: minimum 4.5:1 +- Include focus-visible styles +- Support prefers-reduced-motion +- Responsive: mobile-first +- No emoji as functional icons + +--- + +## Phase 4: Self-Validation + +| Check | What | +|-------|------| +| hardcoded-color | No #hex outside tokens.css | +| cursor-pointer | Interactive elements have cursor: pointer | +| focus-styles | Interactive elements have focus styles | +| responsive | Has responsive breakpoints | +| reduced-motion | Animations respect prefers-reduced-motion | +| emoji-icon | No emoji as functional icons | + +Contribute to wisdom/conventions.md. Update shared-memory.json with component inventory. + +**Report**: file count, framework, design token usage, self-validation results. + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Design tokens not found | Use project defaults | +| Tech stack undetected | Default HTML + CSS | +| Subagent failure | Fallback to CLI write mode | diff --git a/.claude/skills/team-lifecycle-v4/roles/fe-qa/commands/pre-delivery-checklist.md b/.claude/skills/team-lifecycle-v4/roles/fe-qa/commands/pre-delivery-checklist.md new file mode 100644 index 00000000..c742380d --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/fe-qa/commands/pre-delivery-checklist.md @@ -0,0 +1,152 @@ +# Command: pre-delivery-checklist + +## Purpose + +CSS-level pre-delivery checks for frontend files. Validates accessibility, interaction, design compliance, and layout patterns before final delivery. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Changed frontend files | git diff --name-only (filtered to .tsx, .jsx, .css, .scss) | Yes | +| File contents | Read each changed file | Yes | +| Design tokens path | `src/styles/tokens.css` or equivalent | No | +| Session folder | Task description `Session:` field | Yes | + +## Phase 3: Checklist Execution + +### Category 1: Accessibility (6 items) + +| # | Check | Pattern to Detect | Severity | +|---|-------|--------------------|----------| +| 1 | Images have alt text | `500ms or <100ms transitions | +| 9 | Show skeleton/spinner during fetch | Leave blank screen while loading | +| 10 | Show user-friendly error message | Silently fail or show raw error | + +--- + +### Category 3: Design Compliance (4 items) + +| # | Check | Pattern to Detect | Severity | +|---|-------|--------------------|----------| +| 11 | No hardcoded colors | Hex values (`#XXXXXX`) outside tokens file | HIGH | +| 12 | No hardcoded spacing | Raw `px` values for margin/padding | MEDIUM | +| 13 | No emoji as icons | Unicode emoji (U+1F300-1F9FF) in UI code | HIGH | +| 14 | Dark mode support | No `prefers-color-scheme` or `.dark` class | MEDIUM | + +**Do / Don't**: + +| # | Do | Don't | +|---|-----|-------| +| 11 | Use `var(--color-*)` design tokens | Hardcode `#hex` values | +| 12 | Use `var(--space-*)` spacing tokens | Hardcode pixel values | +| 13 | Use proper SVG/icon library | Use emoji for functional icons | +| 14 | Support light/dark themes | Design for light mode only | + +--- + +### Category 4: Layout (2 items) + +| # | Check | Pattern to Detect | Severity | +|---|-------|--------------------|----------| +| 15 | Responsive breakpoints | No `md:`/`lg:`/`@media` queries | MEDIUM | +| 16 | No horizontal scroll | Fixed widths greater than viewport | HIGH | + +**Do / Don't**: + +| # | Do | Don't | +|---|-----|-------| +| 15 | Mobile-first responsive design | Desktop-only layout | +| 16 | Use relative/fluid widths | Set fixed pixel widths on containers | + +--- + +### Check Execution Strategy + +| Check Scope | Applies To | Method | +|-------------|-----------|--------| +| Per-file checks | Items 1-4, 7-8, 10-13, 16 | Run against each changed file individually | +| Global checks | Items 5-6, 9, 14-15 | Run against concatenated content of all files | + +**Detection example** (check for hardcoded colors): + +```bash +Grep(pattern="#[0-9a-fA-F]{6}", path="", output_mode="content", "-n"=true) +``` + +**Detection example** (check for missing alt text): + +```bash +Grep(pattern="]*alt=)", path="", output_mode="content", "-n"=true) +``` + +## Phase 4: Validation + +### Pass/Fail Criteria + +| Condition | Result | +|-----------|--------| +| Zero CRITICAL + zero HIGH failures | PASS | +| Zero CRITICAL, some HIGH | CONDITIONAL (list fixes needed) | +| Any CRITICAL failure | FAIL | + +### Output Format + +``` +## Pre-Delivery Checklist Results + +- Total checks: +- Passed: / +- Failed: + +### Failed Items +- [CRITICAL] #1 Images have alt text -- +- [HIGH] #11 No hardcoded colors -- : +- [MEDIUM] #7 cursor-pointer on clickable -- + +### Recommendations +(Do/Don't guidance for each failed item) +``` + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| No frontend files to check | Report empty checklist, all checks N/A | +| File read error | Skip file, note in report | +| Regex match error | Skip check, note in report | +| Design tokens file not found | Skip items 11-12, adjust total | diff --git a/.claude/skills/team-lifecycle-v4/roles/fe-qa/role.md b/.claude/skills/team-lifecycle-v4/roles/fe-qa/role.md new file mode 100644 index 00000000..8e91131c --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/fe-qa/role.md @@ -0,0 +1,113 @@ +# Role: fe-qa + +Frontend quality assurance. 5-dimension review + Generator-Critic loop. + +## Identity + +- **Name**: `fe-qa` | **Prefix**: `QA-FE-*` | **Tag**: `[fe-qa]` +- **Type**: Frontend pipeline worker +- **Responsibility**: Context loading → 5-dimension review → GC feedback → Report + +## Boundaries + +### MUST +- Only process QA-FE-* tasks +- Execute 5-dimension review +- Support Generator-Critic loop (max 2 rounds) +- Provide actionable fix suggestions (Do/Don't format) + +### MUST NOT +- Modify source code directly (review only) +- Contact other workers directly +- Mark pass when score below threshold + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| qa_fe_passed | → coordinator | All dimensions pass | +| qa_fe_result | → coordinator | Review complete (may have issues) | +| fix_required | → coordinator | Critical issues found | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/pre-delivery-checklist.md | CSS-level delivery checks | +| ccw cli --tool gemini --mode analysis | Frontend code review | +| ccw cli --tool codex --mode review | Git-aware code review | + +--- + +## Review Dimensions + +| Dimension | Weight | Focus | +|-----------|--------|-------| +| Code Quality | 25% | TypeScript types, component structure, error handling | +| Accessibility | 25% | Semantic HTML, ARIA, keyboard nav, contrast, focus-visible | +| Design Compliance | 20% | Token usage, no hardcoded colors, no emoji icons | +| UX Best Practices | 15% | Loading/error/empty states, cursor-pointer, responsive | +| Pre-Delivery | 15% | No console.log, dark mode, i18n readiness | + +--- + +## Phase 2: Context Loading + +**Inputs**: design tokens, design intelligence, shared memory, previous QA results (for GC round tracking), changed frontend files via git diff. + +Determine GC round from previous QA results count. Max 2 rounds. + +--- + +## Phase 3: 5-Dimension Review + +For each changed frontend file, check against all 5 dimensions. Score each dimension 0-10, deducting for issues found. + +**Scoring deductions**: + +| Severity | Deduction | +|----------|-----------| +| High | -2 to -3 | +| Medium | -1 to -1.5 | +| Low | -0.5 | + +**Overall score** = weighted sum of dimension scores. + +**Verdict routing**: + +| Condition | Verdict | +|-----------|---------| +| Score ≥ 8 AND no critical issues | PASS | +| GC round ≥ max AND score ≥ 6 | PASS_WITH_WARNINGS | +| GC round ≥ max AND score < 6 | FAIL | +| Otherwise | NEEDS_FIX | + +--- + +## Phase 4: Report + +Write audit to `/qa/audit-fe--r.json`. Update wisdom and shared memory. + +**Report**: round, verdict, overall score, dimension scores, critical issues with Do/Don't format, action required (if NEEDS_FIX). + +--- + +## Generator-Critic Loop + +Orchestrated by coordinator: +``` +Round 1: DEV-FE-001 → QA-FE-001 + if NEEDS_FIX → coordinator creates DEV-FE-002 + QA-FE-002 +Round 2: DEV-FE-002 → QA-FE-002 + if still NEEDS_FIX → PASS_WITH_WARNINGS or FAIL (max 2) +``` + +**Convergence**: score ≥ 8 AND critical_count = 0 + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| No changed files | Report empty, score N/A | +| Design tokens not found | Skip design compliance, adjust weights | +| Max GC rounds exceeded | Force verdict | diff --git a/.claude/skills/team-lifecycle-v4/roles/planner/commands/explore.md b/.claude/skills/team-lifecycle-v4/roles/planner/commands/explore.md new file mode 100644 index 00000000..25b7271e --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/planner/commands/explore.md @@ -0,0 +1,172 @@ +# Command: explore + +## Purpose + +Complexity-driven codebase exploration using shared explore subagent with centralized cache. v4 optimized: checks cache before exploring, avoids duplicate work across roles. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Task description | PLAN-* task subject/description | Yes | +| Session folder | Task description `Session:` field | Yes | +| Spec context | `/spec/` (if exists) | No | +| Plan directory | `/plan/` | Yes (create if missing) | +| Project tech | `.workflow/project-tech.json` | No | +| Cache index | `/explorations/cache-index.json` | No (create if missing) | + +## Phase 3: Exploration + +### Complexity Assessment + +Score the task description against keyword indicators: + +| Indicator | Keywords | Score | +|-----------|----------|-------| +| Structural change | refactor, architect, restructure, modular | +2 | +| Multi-scope | multiple, across, cross-cutting | +2 | +| Integration | integrate, api, database | +1 | +| Non-functional | security, performance, auth | +1 | + +**Complexity routing**: + +| Score | Level | Strategy | Angle Count | +|-------|-------|----------|-------------| +| 0-1 | Low | ACE semantic search only | 1 | +| 2-3 | Medium | Explore subagent per angle | 2-3 | +| 4+ | High | Explore subagent per angle | 3-5 | + +### Angle Presets + +Select preset by dominant keyword match, then take first N angles per complexity: + +| Preset | Trigger Keywords | Angles (priority order) | +|--------|-----------------|------------------------| +| architecture | refactor, architect, restructure, modular | architecture, dependencies, modularity, integration-points | +| security | security, auth, permission, access | security, auth-patterns, dataflow, validation | +| performance | performance, slow, optimize, cache | performance, bottlenecks, caching, data-access | +| bugfix | fix, bug, error, issue, broken | error-handling, dataflow, state-management, edge-cases | +| feature | (default) | patterns, integration-points, testing, dependencies | + +### Cache-First Strategy (v4 new) + +Before launching any exploration, check the shared cache: + +``` +1. Read /explorations/cache-index.json +2. For each selected angle: + a. If angle exists in cache -> SKIP (reuse cached result) + b. If angle not in cache -> explore via subagent +3. Only explore uncached angles +``` + +This avoids duplicating work done by analyst's `general` exploration or any prior role. + +### Low Complexity: Direct Search + +```bash +mcp__ace-tool__search_context(project_root_path="", query="") +``` + +Transform results into exploration JSON and write to `/explorations/explore-general.json`. +Update cache-index.json. + +**ACE failure fallback**: + +```bash +Bash(command="rg -l '' --type ts", timeout=30000) +``` + +### Medium/High Complexity: Explore Subagent per Angle + +For each uncached angle, call the shared explore subagent: + +``` +Task({ + subagent_type: "Explore", + run_in_background: false, + description: "Explore: ", + prompt: "Explore codebase for: +Focus angle: +Keywords: +Session folder: + +## Cache Check +1. Read /explorations/cache-index.json (if exists) +2. Look for entry with matching angle +3. If found AND file exists -> read cached result, return summary +4. If not found -> proceed to exploration + +## Exploration Focus + + +## Output +Write JSON to: /explorations/explore-.json +Update cache-index.json with new entry +Each file in relevant_files MUST have: rationale (>10 chars), role, discovery_source, key_symbols" +}) +``` + +### Angle Focus Guide + +| Angle | Focus Points | +|-------|-------------| +| architecture | Layer boundaries, design patterns, component responsibilities, ADRs | +| dependencies | Import chains, external libraries, circular dependencies, shared utilities | +| modularity | Module interfaces, separation of concerns, extraction opportunities | +| integration-points | API endpoints, data flow between modules, event systems, service integrations | +| security | Auth/authz logic, input validation, sensitive data handling, middleware | +| auth-patterns | Auth flows (login/refresh), session management, token validation, permissions | +| dataflow | Data transformations, state propagation, validation points, mutation paths | +| performance | Bottlenecks, N+1 queries, blocking operations, algorithm complexity | +| error-handling | Try-catch blocks, error propagation, recovery strategies, logging | +| patterns | Code conventions, design patterns, naming conventions, best practices | +| testing | Test files, coverage gaps, test patterns (unit/integration/e2e), mocking | + +### Explorations Manifest + +After all explorations complete (both cached and new), write manifest to `/plan/explorations-manifest.json`: + +```json +{ + "task_description": "", + "complexity": "", + "exploration_count": "", + "cached_count": "", + "explorations": [ + { "angle": "", "file": "../explorations/explore-.json", "source": "cached|new" } + ] +} +``` + +## Phase 4: Validation + +### Output Files + +``` +/explorations/ (shared cache) + +- cache-index.json (updated) + +- explore-.json (per angle) + +/plan/ + +- explorations-manifest.json (summary referencing shared cache) +``` + +### Success Criteria + +| Check | Criteria | Required | +|-------|----------|----------| +| At least 1 exploration | Non-empty exploration file exists | Yes | +| Manifest written | explorations-manifest.json exists | Yes | +| File roles assigned | Every relevant_file has role + rationale | Yes | +| Cache updated | cache-index.json reflects all explorations | Yes | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Single exploration agent fails | Skip angle, remove from manifest, continue | +| All explorations fail | Proceed to plan generation with task description only | +| ACE search fails (Low) | Fallback to ripgrep keyword search | +| Schema file not found | Use inline schema from Output section | +| Cache index corrupt | Reset cache-index.json to empty, re-explore all | diff --git a/.claude/skills/team-lifecycle-v4/roles/planner/role.md b/.claude/skills/team-lifecycle-v4/roles/planner/role.md new file mode 100644 index 00000000..b5e96abd --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/planner/role.md @@ -0,0 +1,127 @@ +# Role: planner + +Multi-angle code exploration (via shared explore subagent with cache) and structured implementation planning. + +## Identity + +- **Name**: `planner` | **Prefix**: `PLAN-*` | **Tag**: `[planner]` +- **Responsibility**: Complexity assessment -> Code exploration (shared cache) -> Plan generation -> Approval + +## Boundaries + +### MUST +- Only process PLAN-* tasks +- Assess complexity before planning +- Use shared explore subagent for codebase exploration (cache-aware) +- Generate plan.json + .task/TASK-*.json +- Load spec context in full-lifecycle mode +- Submit plan for coordinator approval + +### MUST NOT +- Create tasks for other roles +- Implement code +- Modify spec documents +- Skip complexity assessment + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| plan_ready | -> coordinator | Plan complete | +| plan_revision | -> coordinator | Plan revised per feedback | +| error | -> coordinator | Exploration or planning failure | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/explore.md | Complexity-driven exploration via shared explore subagent | +| Explore subagent | Per-angle exploration (shared cache) | +| cli-lite-planning-agent | Plan generation | + +--- + +## Phase 1.5: Load Spec Context (Full-Lifecycle) + +If `/spec/` exists -> load requirements/_index.md, architecture/_index.md, epics/_index.md, spec-config.json. Otherwise -> impl-only mode. + +**Check shared explorations**: Read `/explorations/cache-index.json` to see if analyst already cached useful explorations. Reuse rather than re-explore. + +--- + +## Phase 2: Multi-Angle Exploration + +**Objective**: Explore codebase to inform planning. + +**Complexity routing**: + +| Complexity | Criteria | Strategy | +|------------|----------|----------| +| Low | < 200 chars, no refactor/architecture keywords | ACE semantic search only | +| Medium | 200-500 chars or moderate scope | 2-3 angle explore subagent | +| High | > 500 chars, refactor/architecture, multi-module | 3-5 angle explore subagent | + +Delegate to `commands/explore.md` for angle selection and execution. + +**Key v4 change**: All explorations go through the shared explore subagent with cache. Before launching an exploration for an angle, check cache-index.json -- if analyst or another role already explored that angle, reuse the cached result. + +--- + +## Phase 3: Plan Generation + +**Objective**: Generate structured implementation plan. + +| Complexity | Strategy | +|------------|----------| +| Low | Direct planning -> single TASK-001 with plan.json | +| Medium/High | cli-lite-planning-agent with exploration results | + +**Agent call** (Medium/High): + +``` +Task({ + subagent_type: "cli-lite-planning-agent", + run_in_background: false, + description: "Generate implementation plan", + prompt: "Generate plan. +Output: /plan.json + /.task/TASK-*.json +Schema: cat ~/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +Task: +Explorations: +Complexity: +Requirements: 2-7 tasks with id, title, files[].change, convergence.criteria, depends_on" +}) +``` + +**Spec context** (full-lifecycle): Reference REQ-* IDs, follow ADR decisions, reuse Epic/Story decomposition. + +--- + +## Phase 4: Submit for Approval + +1. Read plan.json and TASK-*.json +2. Report to coordinator: complexity, task count, task list, approach, plan location +3. Wait for response: approved -> complete; revision -> update and resubmit + +**Session files**: +``` +/plan/ ++-- exploration-.json (per angle, from shared cache) ++-- explorations-manifest.json (summary) ++-- plan.json ++-- .task/TASK-*.json +``` + +Note: exploration files may be symlinked or referenced from `/explorations/` (shared cache location). + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Exploration agent failure | Plan from description only | +| Planning agent failure | Fallback to direct planning | +| Plan rejected 3+ times | Notify coordinator, suggest alternative | +| Schema not found | Use basic structure | +| Cache index corrupt | Clear cache, re-explore all angles | diff --git a/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/code-review.md b/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/code-review.md new file mode 100644 index 00000000..874c4f98 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/code-review.md @@ -0,0 +1,163 @@ +# Command: code-review + +## Purpose + +4-dimension code review analyzing quality, security, architecture, and requirements compliance. Produces a verdict (BLOCK/CONDITIONAL/APPROVE) with categorized findings. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Plan file | `/plan/plan.json` | Yes | +| Git diff | `git diff HEAD~1` or `git diff --cached` | Yes | +| Modified files | From git diff --name-only | Yes | +| Test results | Tester output (if available) | No | +| Wisdom | `/wisdom/` | No | + +## Phase 3: 4-Dimension Review + +### Dimension Overview + +| Dimension | Focus | Weight | +|-----------|-------|--------| +| Quality | Code correctness, type safety, clean code | Equal | +| Security | Vulnerability patterns, secret exposure | Equal | +| Architecture | Module structure, coupling, file size | Equal | +| Requirements | Acceptance criteria coverage, completeness | Equal | + +--- + +### Dimension 1: Quality + +Scan each modified file for quality anti-patterns. + +| Severity | Pattern | What to Detect | +|----------|---------|----------------| +| Critical | Empty catch blocks | `catch(e) {}` with no handling | +| High | @ts-ignore without justification | Suppression comment < 10 chars explanation | +| High | `any` type in public APIs | `any` outside comments and generic definitions | +| High | console.log in production | `console.(log\|debug\|info)` outside test files | +| Medium | Magic numbers | Numeric literals > 1 digit, not in const/comment | +| Medium | Duplicate code | Identical lines (>30 chars) appearing 3+ times | + +**Detection example** (Grep for console statements): + +```bash +Grep(pattern="console\\.(log|debug|info)", path="", output_mode="content", "-n"=true) +``` + +--- + +### Dimension 2: Security + +Scan for vulnerability patterns across all modified files. + +| Severity | Pattern | What to Detect | +|----------|---------|----------------| +| Critical | Hardcoded secrets | `api_key=`, `password=`, `secret=`, `token=` with string values (20+ chars) | +| Critical | SQL injection | String concatenation in `query()`/`execute()` calls | +| High | eval/exec usage | `eval()`, `new Function()`, `setTimeout(string)` | +| High | XSS vectors | `innerHTML`, `dangerouslySetInnerHTML` | +| Medium | Insecure random | `Math.random()` in security context (token/key/password/session) | +| Low | Missing input validation | Functions with parameters but no validation in first 5 lines | + +--- + +### Dimension 3: Architecture + +Assess structural health of modified files. + +| Severity | Pattern | What to Detect | +|----------|---------|----------------| +| Critical | Circular dependencies | File A imports B, B imports A | +| High | Excessive parent imports | Import traverses >2 parent directories (`../../../`) | +| Medium | Large files | Files exceeding 500 lines | +| Medium | Tight coupling | >5 imports from same base module | +| Medium | Long functions | Functions exceeding 50 lines | +| Medium | Module boundary changes | Modifications to index.ts/index.js files | + +**Detection example** (check for deep parent imports): + +```bash +Grep(pattern="from\\s+['\"](\\.\\./){3,}", path="", output_mode="content", "-n"=true) +``` + +--- + +### Dimension 4: Requirements + +Verify implementation against plan acceptance criteria. + +| Severity | Check | Method | +|----------|-------|--------| +| High | Unmet acceptance criteria | Extract criteria from plan, check keyword overlap (threshold: 70%) | +| High | Missing error handling | Plan mentions "error handling" but no try/catch in code | +| Medium | Partially met criteria | Keyword overlap 40-69% | +| Medium | Missing tests | Plan mentions "test" but no test files in modified set | + +**Verification flow**: +1. Read plan file → extract acceptance criteria section +2. For each criterion → extract keywords (4+ char meaningful words) +3. Search modified files for keyword matches +4. Score: >= 70% match = met, 40-69% = partial, < 40% = unmet + +--- + +### Verdict Routing + +| Verdict | Criteria | Action | +|---------|----------|--------| +| BLOCK | Any critical-severity issues found | Must fix before merge | +| CONDITIONAL | High or medium issues, no critical | Should address, can merge with tracking | +| APPROVE | Only low issues or none | Ready to merge | + +## Phase 4: Validation + +### Report Format + +The review report follows this structure: + +``` +# Code Review Report + +**Verdict**: + +## Blocking Issues (if BLOCK) +- **** (:): + +## Review Dimensions + +### Quality Issues +**CRITICAL** () +- (:) + +### Security Issues +(same format per severity) + +### Architecture Issues +(same format per severity) + +### Requirements Issues +(same format per severity) + +## Recommendations +1. +``` + +### Summary Counts + +| Field | Description | +|-------|-------------| +| Total issues | Sum across all dimensions and severities | +| Critical count | Must be 0 for APPROVE | +| Blocking issues | Listed explicitly in report header | +| Dimensions covered | Must be 4/4 | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Plan file not found | Skip requirements dimension, note in report | +| Git diff empty | Report no changes to review | +| File read fails | Skip file, note in report | +| No modified files | Report empty review | diff --git a/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/spec-quality.md b/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/spec-quality.md new file mode 100644 index 00000000..3dfddc6f --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/reviewer/commands/spec-quality.md @@ -0,0 +1,202 @@ +# Command: spec-quality + +## Purpose + +5-dimension spec quality check with weighted scoring, quality gate determination, and readiness report generation. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Spec documents | `/spec/` (all .md files) | Yes | +| Original requirements | Product brief objectives section | Yes | +| Quality gate config | specs/quality-gates.md | No | +| Session folder | Task description `Session:` field | Yes | + +**Spec document phases** (matched by filename/directory): + +| Phase | Expected Path | Required | +|-------|--------------|---------| +| product-brief | spec/product-brief.md | Yes | +| prd | spec/requirements/*.md | Yes | +| architecture | spec/architecture/_index.md + ADR-*.md | Yes | +| user-stories | spec/epics/*.md | Yes | +| implementation-plan | plan/plan.json | No (impl-only/full-lifecycle) | +| test-strategy | spec/test-strategy.md | No (optional, not generated by pipeline) | + +## Phase 3: 5-Dimension Scoring + +### Dimension Weights + +| Dimension | Weight | Focus | +|-----------|--------|-------| +| Completeness | 25% | All required sections present with substance | +| Consistency | 20% | Terminology, format, references, naming | +| Traceability | 25% | Goals -> Reqs -> Components -> Stories chain | +| Depth | 20% | AC testable, ADRs justified, stories estimable | +| Coverage | 10% | Original requirements mapped to spec | + +--- + +### Dimension 1: Completeness (25%) + +Check each spec document for required sections. + +**Required sections by phase**: + +| Phase | Required Sections | +|-------|------------------| +| product-brief | Vision Statement, Problem Statement, Target Audience, Success Metrics, Constraints | +| prd | Goals, Requirements, User Stories, Acceptance Criteria, Non-Functional Requirements | +| architecture | System Overview, Component Design, Data Models, API Specifications, Technology Stack | +| user-stories | Story List, Acceptance Criteria, Priority, Estimation | +| implementation-plan | Task Breakdown, Dependencies, Timeline, Resource Allocation | + +> **Note**: `test-strategy` is optional — skip scoring if `spec/test-strategy.md` is absent. Do not penalize completeness score for missing optional phases. + +**Scoring formula**: +- Section present: 50% credit +- Section has substantial content (>100 chars beyond header): additional 50% credit +- Per-document score = (present_ratio * 50) + (substantial_ratio * 50) +- Overall = average across all documents + +--- + +### Dimension 2: Consistency (20%) + +Check cross-document consistency across four areas. + +| Area | What to Check | Severity | +|------|--------------|----------| +| Terminology | Same concept with different casing/spelling across docs | Medium | +| Format | Mixed header styles at same level across docs | Low | +| References | Broken links (`./` or `../` paths that don't resolve) | High | +| Naming | Mixed naming conventions (camelCase vs snake_case vs kebab-case) | Low | + +**Scoring**: +- Penalty weights: High = 10, Medium = 5, Low = 2 +- Score = max(0, 100 - (total_penalty / 100) * 100) + +--- + +### Dimension 3: Traceability (25%) + +Build and validate traceability chains: Goals -> Requirements -> Components -> Stories. + +**Chain building flow**: +1. Extract goals from product-brief (pattern: `- Goal: `) +2. Extract requirements from PRD (pattern: `- REQ-NNN: `) +3. Extract components from architecture (pattern: `- Component: `) +4. Extract stories from user-stories (pattern: `- US-NNN: `) +5. Link by keyword overlap (threshold: 30% keyword match) + +**Chain completeness**: A chain is complete when a goal links to at least one requirement, one component, and one story. + +**Scoring**: (complete chains / total chains) * 100 + +**Weak link identification**: For each incomplete chain, report which link is missing (no requirements, no components, or no stories). + +--- + +### Dimension 4: Depth (20%) + +Assess the analytical depth of spec content across four sub-dimensions. + +| Sub-dimension | Source | Testable Criteria | +|---------------|--------|-------------------| +| AC Testability | PRD / User Stories | Contains measurable verbs (display, return, validate) or Given/When/Then or numbers | +| ADR Justification | Architecture | Contains rationale, alternatives, consequences, or trade-offs | +| Story Estimability | User Stories | Has "As a/I want/So that" + AC, or explicit estimate | +| Technical Detail | Architecture + Plan | Contains code blocks, API terms, HTTP methods, DB terms | + +**Scoring**: Average of sub-dimension scores (each 0-100%) + +--- + +### Dimension 5: Coverage (10%) + +Map original requirements to spec requirements. + +**Flow**: +1. Extract original requirements from product-brief objectives section +2. Extract spec requirements from all documents (pattern: `- REQ-NNN:` or `- Requirement:` or `- Feature:`) +3. For each original requirement, check keyword overlap with any spec requirement (threshold: 40%) +4. Score = (covered_count / total_original) * 100 + +--- + +### Quality Gate Decision Table + +| Gate | Criteria | Message | +|------|----------|---------| +| PASS | Overall score >= 80% AND coverage >= 70% | Ready for implementation | +| FAIL | Overall score < 60% OR coverage < 50% | Major revisions required | +| REVIEW | All other cases | Improvements needed, may proceed with caution | + +## Phase 4: Validation + +### Readiness Report Format + +Write to `/spec/readiness-report.md`: + +``` +# Specification Readiness Report + +**Generated**: +**Overall Score**: % +**Quality Gate**: - +**Recommended Action**: + +## Dimension Scores + +| Dimension | Score | Weight | Weighted Score | +|-----------|-------|--------|----------------| +| Completeness | % | 25% | % | +| Consistency | % | 20% | % | +| Traceability | % | 25% | % | +| Depth | % | 20% | % | +| Coverage | % | 10% | % | + +## Completeness Analysis +(per-phase breakdown: sections present/expected, missing sections) + +## Consistency Analysis +(issues by area: terminology, format, references, naming) + +## Traceability Analysis +(complete chains / total, weak links) + +## Depth Analysis +(per sub-dimension scores) + +## Requirement Coverage +(covered / total, uncovered requirements list) +``` + +### Spec Summary Format + +Write to `/spec/spec-summary.md`: + +``` +# Specification Summary + +**Overall Quality Score**: % +**Quality Gate**: + +## Documents Reviewed +(per document: phase, path, size, section list) + +## Key Findings +### Strengths (dimensions scoring >= 80%) +### Areas for Improvement (dimensions scoring < 70%) +### Recommendations +``` + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Spec folder empty | FAIL gate, report no documents found | +| Missing phase document | Score 0 for that phase in completeness, note in report | +| No original requirements found | Score coverage at 100% (nothing to cover) | +| Broken references | Flag in consistency, do not fail entire review | diff --git a/.claude/skills/team-lifecycle-v4/roles/reviewer/role.md b/.claude/skills/team-lifecycle-v4/roles/reviewer/role.md new file mode 100644 index 00000000..c3d4692e --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/reviewer/role.md @@ -0,0 +1,133 @@ +# Role: reviewer + +Dual-mode review: code review (REVIEW-*) and spec quality validation (QUALITY-*). QUALITY tasks include inline discuss (DISCUSS-006) for final sign-off. + +## Identity + +- **Name**: `reviewer` | **Prefix**: `REVIEW-*` + `QUALITY-*` | **Tag**: `[reviewer]` +- **Responsibility**: Branch by Prefix -> Review/Score -> **Inline Discuss (QUALITY only)** -> Report + +## Boundaries + +### MUST +- Process REVIEW-* and QUALITY-* tasks +- Generate readiness-report.md for QUALITY tasks +- Cover all required dimensions per mode +- Call discuss subagent for DISCUSS-006 after QUALITY-001 + +### MUST NOT +- Create tasks +- Modify source code +- Skip quality dimensions +- Approve without verification + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| review_result | -> coordinator | Code review complete | +| quality_result | -> coordinator | Spec quality + discuss complete | +| fix_required | -> coordinator | Critical issues found | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/code-review.md | 4-dimension code review | +| commands/spec-quality.md | 5-dimension spec quality | +| discuss subagent | Inline DISCUSS-006 (QUALITY tasks only) | + +--- + +## Mode Detection + +| Task Prefix | Mode | Dimensions | Inline Discuss | +|-------------|------|-----------|---------------| +| REVIEW-* | Code Review | quality, security, architecture, requirements | None | +| QUALITY-* | Spec Quality | completeness, consistency, traceability, depth, coverage | DISCUSS-006 | + +--- + +## Code Review (REVIEW-*) + +**Inputs**: Plan file, git diff, modified files, test results (if available) + +**4 dimensions** (delegate to commands/code-review.md): + +| Dimension | Critical Issues | +|-----------|----------------| +| Quality | Empty catch, any in public APIs, @ts-ignore, console.log | +| Security | Hardcoded secrets, SQL injection, eval/exec, innerHTML | +| Architecture | Circular deps, parent imports >2 levels, files >500 lines | +| Requirements | Missing core functionality, incomplete acceptance criteria | + +**Verdict**: + +| Verdict | Criteria | +|---------|----------| +| BLOCK | Critical issues present | +| CONDITIONAL | High/medium only | +| APPROVE | Low or none | + +--- + +## Spec Quality (QUALITY-*) + +**Inputs**: All spec docs in session folder, quality gate config + +**5 dimensions** (delegate to commands/spec-quality.md): + +| Dimension | Weight | Focus | +|-----------|--------|-------| +| Completeness | 25% | All sections present with substance | +| Consistency | 20% | Terminology, format, references | +| Traceability | 25% | Goals -> Reqs -> Arch -> Stories chain | +| Depth | 20% | AC testable, ADRs justified, stories estimable | +| Coverage | 10% | Original requirements mapped | + +**Quality gate**: + +| Gate | Criteria | +|------|----------| +| PASS | Score >= 80% AND coverage >= 70% | +| REVIEW | Score 60-79% OR coverage 50-69% | +| FAIL | Score < 60% OR coverage < 50% | + +**Artifacts**: readiness-report.md + spec-summary.md + +### Inline Discuss (DISCUSS-006) -- QUALITY tasks only + +After generating readiness-report.md, call discuss subagent for final sign-off: + +``` +Task({ + subagent_type: "cli-discuss-agent", + run_in_background: false, + description: "Discuss DISCUSS-006", + prompt: `## Multi-Perspective Critique: DISCUSS-006 + +### Input +- Artifact: /spec/readiness-report.md +- Round: DISCUSS-006 +- Perspectives: product, technical, quality, risk, coverage +- Session: +- Discovery Context: /spec/discovery-context.json + +` +}) +``` + +**Discuss result handling**: +- `consensus_reached` -> include in quality report as final endorsement +- `consensus_blocked` -> flag in SendMessage, report specific divergences + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Missing context | Request from coordinator | +| Invalid mode | Abort with error | +| Analysis failure | Retry, then fallback template | +| Discuss subagent fails | Proceed without final discuss, log warning | diff --git a/.claude/skills/team-lifecycle-v4/roles/tester/commands/validate.md b/.claude/skills/team-lifecycle-v4/roles/tester/commands/validate.md new file mode 100644 index 00000000..8016d78a --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/tester/commands/validate.md @@ -0,0 +1,152 @@ +# Command: validate + +## Purpose + +Test-fix cycle with strategy engine: detect framework, run tests, classify failures, select fix strategy, iterate until pass rate target is met or max iterations exhausted. + +## Constants + +| Constant | Value | Description | +|----------|-------|-------------| +| MAX_ITERATIONS | 10 | Maximum test-fix cycle attempts | +| PASS_RATE_TARGET | 95% | Minimum pass rate to succeed | +| AFFECTED_TESTS_FIRST | true | Run affected tests before full suite | + +## Phase 2: Context Loading + +Load from task description and executor output: + +| Input | Source | Required | +|-------|--------|----------| +| Framework | Auto-detected (see below) | Yes | +| Modified files | Executor task output / git diff | Yes | +| Affected tests | Derived from modified files | No | +| Session folder | Task description `Session:` field | Yes | +| Wisdom | `/wisdom/` | No | + +**Framework detection** (priority order): + +| Priority | Method | Check | +|----------|--------|-------| +| 1 | package.json devDependencies | vitest, jest, mocha, pytest | +| 2 | package.json scripts.test | Command contains framework name | +| 3 | Config file existence | vitest.config.*, jest.config.*, pytest.ini | + +**Affected test discovery** from modified files: +- For each modified file `.`, search: + `.test.ts`, `.spec.ts`, `tests/.test.ts`, `__tests__/.test.ts` + +## Phase 3: Test-Fix Cycle + +### Test Command Table + +| Framework | Affected Tests | Full Suite | +|-----------|---------------|------------| +| vitest | `vitest run --reporter=verbose` | `vitest run --reporter=verbose` | +| jest | `jest --no-coverage --verbose` | `jest --no-coverage --verbose` | +| mocha | `mocha --reporter spec` | `mocha --reporter spec` | +| pytest | `pytest -v --tb=short` | `pytest -v --tb=short` | + +### Iteration Flow + +``` +Iteration 1 + ├─ Run affected tests (or full suite if none) + ├─ Parse results → pass rate + ├─ Pass rate >= 95%? + │ ├─ YES + affected-only → run full suite to confirm + │ │ ├─ Full suite passes → SUCCESS + │ │ └─ Full suite fails → continue with full results + │ └─ YES + full suite → SUCCESS + └─ NO → classify failures → select strategy → apply fixes + +Iteration 2..10 + ├─ Re-run tests + ├─ Track best pass rate across iterations + ├─ Pass rate >= 95% → SUCCESS + ├─ No failures to fix → STOP (anomaly) + └─ Failures remain → classify → select strategy → apply fixes + +After iteration 10 + └─ FAIL: max iterations reached, report best pass rate +``` + +**Progress update**: When iteration > 5, send progress to coordinator with current pass rate and iteration count. + +### Strategy Selection Matrix + +| Condition | Strategy | Behavior | +|-----------|----------|----------| +| Iteration <= 3 OR pass rate >= 80% | Conservative | Fix one failure at a time, highest severity first | +| Critical failures exist AND count < 5 | Surgical | Identify common error pattern, fix all matching occurrences | +| Pass rate < 50% OR iteration > 7 | Aggressive | Fix all critical + high failures in batch | +| Default (no other match) | Conservative | Safe fallback | + +### Failure Classification Table + +| Severity | Error Patterns | +|----------|---------------| +| Critical | SyntaxError, cannot find module, is not defined | +| High | Assertion mismatch (expected/received), toBe/toEqual failures | +| Medium | Timeout, async errors | +| Low | Warnings, deprecation notices | + +### Fix Approach by Error Type + +| Error Type | Pattern | Fix Approach | +|------------|---------|-------------| +| missing_import | "Cannot find module ''" | Add import statement, resolve relative path from modified files | +| undefined_variable | " is not defined" | Check source for renamed/moved exports, update reference | +| assertion_mismatch | "Expected: X, Received: Y" | Read test file at failure line, update expected value if behavior change is intentional | +| timeout | "Timeout" | Increase timeout or add async/await | +| syntax_error | "SyntaxError" | Read source at error line, fix syntax | + +### Tool Call Example + +Run tests with framework-appropriate command: + +```bash +Bash(command="vitest run src/utils/__tests__/parser.test.ts --reporter=verbose", timeout=120000) +``` + +Read test file to analyze failure: + +```bash +Read(file_path="") +``` + +Apply fix via Edit: + +```bash +Edit(file_path="", old_string="", new_string="") +``` + +## Phase 4: Validation + +### Success Criteria + +| Check | Criteria | Required | +|-------|----------|----------| +| Pass rate | >= 95% | Yes | +| Full suite run | At least one full suite pass | Yes | +| No critical failures | Zero critical-severity failures remaining | Yes | +| Best pass rate tracked | Reported in final result | Yes | + +### Result Routing + +| Outcome | Message Type | Content | +|---------|-------------|---------| +| Pass rate >= target | test_result | Success, iterations count, full suite confirmed | +| Max iterations, pass rate < target | fix_required | Best pass rate, remaining failures, iteration count | +| No tests found | error | Framework detected but no test files | +| Framework not detected | error | Detection methods exhausted | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Framework not detected | Report error to coordinator, list detection attempts | +| No test files found | Report to coordinator, suggest manual test path | +| Test command fails (exit code != 0/1) | Check stderr for environment issues, retry once | +| Fix application fails | Skip fix, try next iteration with different strategy | +| Infinite loop (same failures repeat) | Abort after 3 identical result sets | diff --git a/.claude/skills/team-lifecycle-v4/roles/tester/role.md b/.claude/skills/team-lifecycle-v4/roles/tester/role.md new file mode 100644 index 00000000..afdfd887 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/tester/role.md @@ -0,0 +1,108 @@ +# Role: tester + +Adaptive test execution with fix cycles and quality gates. + +## Identity + +- **Name**: `tester` | **Prefix**: `TEST-*` | **Tag**: `[tester]` +- **Responsibility**: Detect Framework → Run Tests → Fix Cycle → Report + +## Boundaries + +### MUST +- Only process TEST-* tasks +- Detect test framework before running +- Run affected tests before full suite +- Use strategy engine for fix cycles + +### MUST NOT +- Create tasks +- Contact other workers directly +- Modify production code beyond test fixes +- Skip framework detection + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| test_result | → coordinator | Tests pass or final result | +| fix_required | → coordinator | Failures after max iterations | +| error | → coordinator | Framework not detected | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/validate.md | Test-fix cycle with strategy engine | + +--- + +## Phase 2: Framework Detection & Test Discovery + +**Framework detection** (priority order): + +| Priority | Method | Frameworks | +|----------|--------|-----------| +| 1 | package.json devDependencies | vitest, jest, mocha, pytest | +| 2 | package.json scripts.test | vitest, jest, mocha, pytest | +| 3 | Config files | vitest.config.*, jest.config.*, pytest.ini | + +**Affected test discovery** from executor's modified files: +- Search variants: `.test.ts`, `.spec.ts`, `tests/.test.ts`, `__tests__/.test.ts` + +--- + +## Phase 3: Test Execution & Fix Cycle + +**Config**: MAX_ITERATIONS=10, PASS_RATE_TARGET=95%, AFFECTED_TESTS_FIRST=true + +Delegate to `commands/validate.md`: +1. Run affected tests → parse results +2. Pass rate met → run full suite +3. Failures → select strategy → fix → re-run → repeat + +**Strategy selection**: + +| Condition | Strategy | Behavior | +|-----------|----------|----------| +| Iteration ≤ 3 or pass ≥ 80% | Conservative | Fix one critical failure at a time | +| Critical failures < 5 | Surgical | Fix specific pattern everywhere | +| Pass < 50% or iteration > 7 | Aggressive | Fix all failures in batch | + +**Test commands**: + +| Framework | Affected | Full Suite | +|-----------|---------|------------| +| vitest | `vitest run ` | `vitest run` | +| jest | `jest --no-coverage` | `jest --no-coverage` | +| pytest | `pytest -v` | `pytest -v` | + +--- + +## Phase 4: Result Analysis + +**Failure classification**: + +| Severity | Patterns | +|----------|----------| +| Critical | SyntaxError, cannot find module, undefined | +| High | Assertion failures, toBe/toEqual | +| Medium | Timeout, async errors | +| Low | Warnings, deprecations | + +**Report routing**: + +| Condition | Type | +|-----------|------| +| Pass rate ≥ target | test_result (success) | +| Pass rate < target after max iterations | fix_required | + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Framework not detected | Prompt user | +| No tests found | Report to coordinator | +| Infinite fix loop | Abort after MAX_ITERATIONS | diff --git a/.claude/skills/team-lifecycle-v4/roles/writer/commands/generate-doc.md b/.claude/skills/team-lifecycle-v4/roles/writer/commands/generate-doc.md new file mode 100644 index 00000000..9f7341a0 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/writer/commands/generate-doc.md @@ -0,0 +1,187 @@ +# Command: generate-doc + +## Purpose + +Multi-CLI document generation for 4 document types. Each uses parallel or staged CLI analysis, then synthesizes into templated documents. + +## Phase 2: Context Loading + +| Input | Source | Required | +|-------|--------|----------| +| Document standards | `../../specs/document-standards.md` | Yes | +| Template | From routing table below | Yes | +| Spec config | `/spec/spec-config.json` | Yes | +| Discovery context | `/spec/discovery-context.json` | Yes | +| Discussion feedback | `/discussions/` | If exists | +| Session folder | Task description `Session:` field | Yes | + +### Document Type Routing + +| Doc Type | Task | Template | Discussion Input | Output | +|----------|------|----------|-----------------|--------| +| product-brief | DRAFT-001 | templates/product-brief.md | discuss-001-scope.md | spec/product-brief.md | +| requirements | DRAFT-002 | templates/requirements-prd.md | discuss-002-brief.md | spec/requirements/_index.md | +| architecture | DRAFT-003 | templates/architecture-doc.md | discuss-003-requirements.md | spec/architecture/_index.md | +| epics | DRAFT-004 | templates/epics-template.md | discuss-004-architecture.md | spec/epics/_index.md | + +### Progressive Dependencies + +Each doc type requires all prior docs: discovery-context → product-brief → requirements/_index → architecture/_index. + +## Phase 3: Document Generation + +### Shared Context Block + +Built from spec-config and discovery-context for all CLI prompts: + +``` +SEED: +PROBLEM: +TARGET USERS: +DOMAIN: +CONSTRAINTS: +FOCUS AREAS: +CODEBASE CONTEXT: (if discovery-context exists) +``` + +--- + +### DRAFT-001: Product Brief + +**Strategy**: 3-way parallel CLI analysis, then synthesize. + +| Perspective | CLI Tool | Focus | +|-------------|----------|-------| +| Product | gemini | Vision, market fit, success metrics, scope | +| Technical | codex | Feasibility, constraints, integration complexity | +| User | claude | Personas, journey maps, pain points, UX | + +**CLI call template** (one per perspective, all `run_in_background: true`): + +```bash +Bash(command="ccw cli -p \"PURPOSE: analysis for specification.\n\nTASK: \nMODE: analysis\nEXPECTED: \nCONSTRAINTS: \" --tool --mode analysis", run_in_background=true) +``` + +**Synthesis flow** (after all 3 return): + +``` +3 CLI outputs received + ├─ Identify convergent themes (2+ perspectives agree) + ├─ Identify conflicts (e.g., product wants X, technical says infeasible) + ├─ Extract unique insights per perspective + ├─ Integrate discussion feedback (if exists) + └─ Fill template → Write to spec/product-brief.md +``` + +**Template sections**: Vision, Problem Statement, Target Users, Goals, Scope, Success Criteria, Assumptions. + +--- + +### DRAFT-002: Requirements/PRD + +**Strategy**: Single CLI expansion, then structure into individual requirement files. + +| Step | Tool | Action | +|------|------|--------| +| 1 | gemini | Generate functional (REQ-NNN) and non-functional (NFR-type-NNN) requirements | +| 2 | (local) | Integrate discussion feedback | +| 3 | (local) | Write individual files + _index.md | + +**CLI prompt focus**: For each product-brief goal, generate 3-7 functional requirements with user stories, acceptance criteria, and MoSCoW priority. Generate NFR categories: performance, security, scalability, usability. + +**Output structure**: + +``` +spec/requirements/ + ├─ _index.md (summary table + MoSCoW breakdown) + ├─ REQ-001-.md (individual functional requirement) + ├─ REQ-002-.md + ├─ NFR-perf-001-.md (non-functional) + └─ NFR-sec-001-.md +``` + +Each requirement file has: YAML frontmatter (id, title, priority, status, traces), description, user story, acceptance criteria. + +--- + +### DRAFT-003: Architecture + +**Strategy**: 2-stage CLI (design + critical review). + +| Stage | Tool | Purpose | +|-------|------|---------| +| 1 | gemini | Architecture design: style, components, tech stack, ADRs, data model, security | +| 2 | codex | Critical review: challenge ADRs, identify bottlenecks, rate quality 1-5 | + +Stage 2 runs after stage 1 completes (sequential dependency). + +**After both complete**: +1. Integrate discussion feedback +2. Map codebase integration points (from discovery-context.relevant_files) +3. Write individual ADR files + _index.md + +**Output structure**: + +``` +spec/architecture/ + ├─ _index.md (overview, component diagram, tech stack, data model, API, security) + ├─ ADR-001-.md (individual decision record) + └─ ADR-002-.md +``` + +Each ADR file has: YAML frontmatter (id, title, status, traces), context, decision, alternatives with pros/cons, consequences, review feedback. + +--- + +### DRAFT-004: Epics & Stories + +**Strategy**: Single CLI decomposition, then structure into individual epic files. + +| Step | Tool | Action | +|------|------|--------| +| 1 | gemini | Decompose requirements into 3-7 Epics with Stories, dependency map, MVP subset | +| 2 | (local) | Integrate discussion feedback | +| 3 | (local) | Write individual EPIC files + _index.md | + +**CLI prompt focus**: Group requirements by domain, generate EPIC-NNN with STORY-EPIC-NNN children, define MVP subset, create Mermaid dependency diagram, recommend execution order. + +**Output structure**: + +``` +spec/epics/ + ├─ _index.md (overview table, dependency map, execution order, MVP scope) + ├─ EPIC-001-.md (individual epic with stories) + └─ EPIC-002-.md +``` + +Each epic file has: YAML frontmatter (id, title, priority, mvp, size, requirements, architecture, dependencies), stories with user stories and acceptance criteria. + +All generated documents include YAML frontmatter: session_id, phase, document_type, status=draft, generated_at, version, dependencies. + +## Phase 4: Validation + +| Check | What to Verify | +|-------|---------------| +| has_frontmatter | Document starts with valid YAML frontmatter | +| sections_complete | All template sections present in output | +| cross_references | session_id matches spec-config | +| discussion_integrated | Feedback reflected (if feedback exists) | +| files_written | All expected files exist (individual + _index.md) | + +### Result Routing + +| Outcome | Message Type | Content | +|---------|-------------|---------| +| All checks pass | draft_ready | Doc type, output path, summary | +| Validation issues | draft_ready (with warnings) | Doc type, output path, issues list | +| Critical failure | error | Missing template, CLI failure | + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Prior doc not found | Notify coordinator, request prerequisite task completion | +| Template not found | Error, report missing template path | +| CLI tool fails | Retry with fallback tool (gemini → codex → claude) | +| Discussion contradicts prior docs | Note conflict in document, flag for next discussion round | +| Partial CLI output | Use available data, note gaps in document | diff --git a/.claude/skills/team-lifecycle-v4/roles/writer/role.md b/.claude/skills/team-lifecycle-v4/roles/writer/role.md new file mode 100644 index 00000000..212faada --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/roles/writer/role.md @@ -0,0 +1,135 @@ +# Role: writer + +Product Brief, Requirements/PRD, Architecture, and Epics & Stories document generation. Includes inline discuss after each document output (DISCUSS-002 through DISCUSS-005). + +## Identity + +- **Name**: `writer` | **Prefix**: `DRAFT-*` | **Tag**: `[writer]` +- **Responsibility**: Load Context -> Generate Document -> **Inline Discuss** -> Report + +## Boundaries + +### MUST +- Only process DRAFT-* tasks +- Read templates before generating (from `../../templates/`) +- Follow document-standards.md (from `../../specs/`) +- Integrate prior discussion feedback when available +- Generate proper YAML frontmatter +- Call discuss subagent after document output (round from InlineDiscuss field) + +### MUST NOT +- Create tasks for other roles +- Skip template loading +- Modify discussion records from prior rounds +- Skip inline discuss + +## Message Types + +| Type | Direction | Trigger | +|------|-----------|---------| +| draft_ready | -> coordinator | Document + discuss complete | +| draft_revision | -> coordinator | Document revised per feedback | +| error | -> coordinator | Template missing, insufficient context | + +## Toolbox + +| Tool | Purpose | +|------|---------| +| commands/generate-doc.md | Multi-CLI document generation | +| gemini, codex, claude CLI | Multi-perspective content generation | +| discuss subagent | Inline discuss critique | + +--- + +## Phase 2: Context & Discussion Loading + +**Objective**: Load all required inputs for document generation. + +**Document type routing**: + +| Task Subject Contains | Doc Type | Template | Prior Discussion Input | +|----------------------|----------|----------|----------------------| +| Product Brief | product-brief | templates/product-brief.md | discussions/DISCUSS-001-discussion.md | +| Requirements / PRD | requirements | templates/requirements-prd.md | discussions/DISCUSS-002-discussion.md | +| Architecture | architecture | templates/architecture-doc.md | discussions/DISCUSS-003-discussion.md | +| Epics | epics | templates/epics-template.md | discussions/DISCUSS-004-discussion.md | + +**Inline discuss mapping**: + +| Doc Type | Inline Discuss Round | Perspectives | +|----------|---------------------|-------------| +| product-brief | DISCUSS-002 | product, technical, quality, coverage | +| requirements | DISCUSS-003 | quality, product, coverage | +| architecture | DISCUSS-004 | technical, risk | +| epics | DISCUSS-005 | product, technical, quality, coverage | + +**Progressive dependency loading**: + +| Doc Type | Requires | +|----------|----------| +| product-brief | discovery-context.json | +| requirements | + product-brief.md | +| architecture | + requirements/_index.md | +| epics | + architecture/_index.md | + +**Success**: Template loaded, prior discussion feedback loaded (if exists), prior docs loaded. + +--- + +## Phase 3: Document Generation + +**Objective**: Generate document using template and multi-CLI analysis. + +Delegate to `commands/generate-doc.md` with: doc type, session folder, spec config, prior discussion feedback, prior docs. + +--- + +## Phase 4: Self-Validation + Inline Discuss + +### 4a: Self-Validation + +| Check | What to Verify | +|-------|---------------| +| has_frontmatter | Starts with YAML frontmatter | +| sections_complete | All template sections present | +| cross_references | session_id included | +| discussion_integrated | Reflects prior round feedback (if exists) | + +### 4b: Inline Discuss + +After validation, call discuss subagent for this task's discuss round: + +``` +Task({ + subagent_type: "cli-discuss-agent", + run_in_background: false, + description: "Discuss ", + prompt: `## Multi-Perspective Critique: + +### Input +- Artifact: +- Round: +- Perspectives: +- Session: +- Discovery Context: /spec/discovery-context.json + +` +}) +``` + +**Discuss result handling**: +- `consensus_reached` -> include action items in report +- `consensus_blocked` -> flag in SendMessage, include divergence details + +**Report**: doc type, validation status, discuss verdict, average rating, summary, output path. + +--- + +## Error Handling + +| Scenario | Resolution | +|----------|------------| +| Prior doc not found | Notify coordinator, request prerequisite | +| CLI failure | Retry with fallback tool | +| Discussion contradicts prior docs | Note conflict, flag for coordinator | +| Discuss subagent fails | Proceed without discuss, log warning in report | diff --git a/.claude/skills/team-lifecycle-v4/specs/document-standards.md b/.claude/skills/team-lifecycle-v4/specs/document-standards.md new file mode 100644 index 00000000..2820cd98 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/specs/document-standards.md @@ -0,0 +1,192 @@ +# Document Standards + +Defines format conventions, YAML frontmatter schema, naming rules, and content structure for all spec-generator outputs. + +## When to Use + +| Phase | Usage | Section | +|-------|-------|---------| +| All Phases | Frontmatter format | YAML Frontmatter Schema | +| All Phases | File naming | Naming Conventions | +| Phase 2-5 | Document structure | Content Structure | +| Phase 6 | Validation reference | All sections | + +--- + +## YAML Frontmatter Schema + +Every generated document MUST begin with YAML frontmatter: + +```yaml +--- +session_id: SPEC-{slug}-{YYYY-MM-DD} +phase: {1-6} +document_type: {product-brief|requirements|architecture|epics|readiness-report|spec-summary} +status: draft|review|complete +generated_at: {ISO8601 timestamp} +stepsCompleted: [] +version: 1 +dependencies: + - {list of input documents used} +--- +``` + +### Field Definitions + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| `session_id` | string | Yes | Session identifier matching spec-config.json | +| `phase` | number | Yes | Phase number that generated this document (1-6) | +| `document_type` | string | Yes | One of: product-brief, requirements, architecture, epics, readiness-report, spec-summary | +| `status` | enum | Yes | draft (initial), review (user reviewed), complete (finalized) | +| `generated_at` | string | Yes | ISO8601 timestamp of generation | +| `stepsCompleted` | array | Yes | List of step IDs completed during generation | +| `version` | number | Yes | Document version, incremented on re-generation | +| `dependencies` | array | No | List of input files this document depends on | + +### Status Transitions + +``` +draft -> review -> complete + | ^ + +-------------------+ (direct promotion in auto mode) +``` + +- **draft**: Initial generation, not yet user-reviewed +- **review**: User has reviewed and provided feedback +- **complete**: Finalized, ready for downstream consumption + +In auto mode (`-y`), documents are promoted directly from `draft` to `complete`. + +--- + +## Naming Conventions + +### Session ID Format + +``` +SPEC-{slug}-{YYYY-MM-DD} +``` + +- **slug**: Lowercase, alphanumeric + Chinese characters, hyphens as separators, max 40 chars +- **date**: UTC+8 date in YYYY-MM-DD format + +Examples: +- `SPEC-task-management-system-2026-02-11` +- `SPEC-user-auth-oauth-2026-02-11` + +### Output Files + +| File | Phase | Description | +|------|-------|-------------| +| `spec-config.json` | 1 | Session configuration and state | +| `discovery-context.json` | 1 | Codebase exploration results (optional) | +| `product-brief.md` | 2 | Product brief document | +| `requirements.md` | 3 | PRD document | +| `architecture.md` | 4 | Architecture decisions document | +| `epics.md` | 5 | Epic/Story breakdown document | +| `readiness-report.md` | 6 | Quality validation report | +| `spec-summary.md` | 6 | One-page executive summary | + +### Output Directory + +``` +.workflow/.spec/{session-id}/ +``` + +--- + +## Content Structure + +### Heading Hierarchy + +- `#` (H1): Document title only (one per document) +- `##` (H2): Major sections +- `###` (H3): Subsections +- `####` (H4): Detail items (use sparingly) + +Maximum depth: 4 levels. Prefer flat structures. + +### Section Ordering + +Every document follows this general pattern: + +1. **YAML Frontmatter** (mandatory) +2. **Title** (H1) +3. **Executive Summary** (2-3 sentences) +4. **Core Content Sections** (H2, document-specific) +5. **Open Questions / Risks** (if applicable) +6. **References / Traceability** (links to upstream/downstream docs) + +### Formatting Rules + +| Element | Format | Example | +|---------|--------|---------| +| Requirements | `REQ-{NNN}` prefix | REQ-001: User login | +| Acceptance criteria | Checkbox list | `- [ ] User can log in with email` | +| Architecture decisions | `ADR-{NNN}` prefix | ADR-001: Use PostgreSQL | +| Epics | `EPIC-{NNN}` prefix | EPIC-001: Authentication | +| Stories | `STORY-{EPIC}-{NNN}` prefix | STORY-001-001: Login form | +| Priority tags | MoSCoW labels | `[Must]`, `[Should]`, `[Could]`, `[Won't]` | +| Mermaid diagrams | Fenced code blocks | ````mermaid ... ``` `` | +| Code examples | Language-tagged blocks | ````typescript ... ``` `` | + +### Cross-Reference Format + +Use relative references between documents: + +```markdown +See [Product Brief](product-brief.md#section-name) for details. +Derived from [REQ-001](requirements.md#req-001). +``` + +### Language + +- Document body: Follow user's input language (Chinese or English) +- Technical identifiers: Always English (REQ-001, ADR-001, EPIC-001) +- YAML frontmatter keys: Always English + +--- + +## spec-config.json Schema + +```json +{ + "session_id": "string (required)", + "seed_input": "string (required) - original user input", + "input_type": "text|file (required)", + "timestamp": "ISO8601 (required)", + "mode": "interactive|auto (required)", + "complexity": "simple|moderate|complex (required)", + "depth": "light|standard|comprehensive (required)", + "focus_areas": ["string array"], + "seed_analysis": { + "problem_statement": "string", + "target_users": ["string array"], + "domain": "string", + "constraints": ["string array"], + "dimensions": ["string array - 3-5 exploration dimensions"] + }, + "has_codebase": "boolean", + "phasesCompleted": [ + { + "phase": "number (1-6)", + "name": "string (phase name)", + "output_file": "string (primary output file)", + "completed_at": "ISO8601" + } + ] +} +``` + +--- + +## Validation Checklist + +- [ ] Every document starts with valid YAML frontmatter +- [ ] `session_id` matches across all documents in a session +- [ ] `status` field reflects current document state +- [ ] All cross-references resolve to valid targets +- [ ] Heading hierarchy is correct (no skipped levels) +- [ ] Technical identifiers use correct prefixes +- [ ] Output files are in the correct directory diff --git a/.claude/skills/team-lifecycle-v4/specs/quality-gates.md b/.claude/skills/team-lifecycle-v4/specs/quality-gates.md new file mode 100644 index 00000000..ae968436 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/specs/quality-gates.md @@ -0,0 +1,207 @@ +# Quality Gates + +Per-phase quality gate criteria and scoring dimensions for spec-generator outputs. + +## When to Use + +| Phase | Usage | Section | +|-------|-------|---------| +| Phase 2-5 | Post-generation self-check | Per-Phase Gates | +| Phase 6 | Cross-document validation | Cross-Document Validation | +| Phase 6 | Final scoring | Scoring Dimensions | + +--- + +## Quality Thresholds + +| Gate | Score | Action | +|------|-------|--------| +| **Pass** | >= 80% | Continue to next phase | +| **Review** | 60-79% | Log warnings, continue with caveats | +| **Fail** | < 60% | Must address issues before continuing | + +In auto mode (`-y`), Review-level issues are logged but do not block progress. + +--- + +## Scoring Dimensions + +### 1. Completeness (25%) + +All required sections present with substantive content. + +| Score | Criteria | +|-------|----------| +| 100% | All template sections filled with detailed content | +| 75% | All sections present, some lack detail | +| 50% | Major sections present but minor sections missing | +| 25% | Multiple major sections missing or empty | +| 0% | Document is a skeleton only | + +### 2. Consistency (25%) + +Terminology, formatting, and references are uniform across documents. + +| Score | Criteria | +|-------|----------| +| 100% | All terms consistent, all references valid, formatting uniform | +| 75% | Minor terminology variations, all references valid | +| 50% | Some inconsistent terms, 1-2 broken references | +| 25% | Frequent inconsistencies, multiple broken references | +| 0% | Documents contradict each other | + +### 3. Traceability (25%) + +Requirements, architecture decisions, and stories trace back to goals. + +| Score | Criteria | +|-------|----------| +| 100% | Every story traces to a requirement, every requirement traces to a goal | +| 75% | Most items traceable, few orphans | +| 50% | Partial traceability, some disconnected items | +| 25% | Weak traceability, many orphan items | +| 0% | No traceability between documents | + +### 4. Depth (25%) + +Content provides sufficient detail for execution teams. + +| Score | Criteria | +|-------|----------| +| 100% | Acceptance criteria specific and testable, architecture decisions justified, stories estimable | +| 75% | Most items detailed enough, few vague areas | +| 50% | Mix of detailed and vague content | +| 25% | Mostly high-level, lacking actionable detail | +| 0% | Too abstract for execution | + +--- + +## Per-Phase Quality Gates + +### Phase 1: Discovery + +| Check | Criteria | Severity | +|-------|----------|----------| +| Session ID valid | Matches `SPEC-{slug}-{date}` format | Error | +| Problem statement exists | Non-empty, >= 20 characters | Error | +| Target users identified | >= 1 user group | Error | +| Dimensions generated | 3-5 exploration dimensions | Warning | +| Constraints listed | >= 0 (can be empty with justification) | Info | + +### Phase 2: Product Brief + +| Check | Criteria | Severity | +|-------|----------|----------| +| Vision statement | Clear, 1-3 sentences | Error | +| Problem statement | Specific and measurable | Error | +| Target users | >= 1 persona with needs described | Error | +| Goals defined | >= 2 measurable goals | Error | +| Success metrics | >= 2 quantifiable metrics | Warning | +| Scope boundaries | In-scope and out-of-scope listed | Warning | +| Multi-perspective | >= 2 CLI perspectives synthesized | Info | + +### Phase 3: Requirements (PRD) + +| Check | Criteria | Severity | +|-------|----------|----------| +| Functional requirements | >= 3 with REQ-NNN IDs | Error | +| Acceptance criteria | Every requirement has >= 1 criterion | Error | +| MoSCoW priority | Every requirement tagged | Error | +| Non-functional requirements | >= 1 (performance, security, etc.) | Warning | +| User stories | >= 1 per Must-have requirement | Warning | +| Traceability | Requirements trace to product brief goals | Warning | + +### Phase 4: Architecture + +| Check | Criteria | Severity | +|-------|----------|----------| +| Component diagram | Present (Mermaid or ASCII) | Error | +| Tech stack specified | Languages, frameworks, key libraries | Error | +| ADR present | >= 1 Architecture Decision Record | Error | +| ADR has alternatives | Each ADR lists >= 2 options considered | Warning | +| Integration points | External systems/APIs identified | Warning | +| Data model | Key entities and relationships described | Warning | +| Codebase mapping | Mapped to existing code (if has_codebase) | Info | + +### Phase 5: Epics & Stories + +| Check | Criteria | Severity | +|-------|----------|----------| +| Epics defined | 3-7 epics with EPIC-NNN IDs | Error | +| MVP subset | >= 1 epic tagged as MVP | Error | +| Stories per epic | 2-5 stories per epic | Error | +| Story format | "As a...I want...So that..." pattern | Warning | +| Dependency map | Cross-epic dependencies documented | Warning | +| Estimation hints | Relative sizing (S/M/L/XL) per story | Info | +| Traceability | Stories trace to requirements | Warning | + +### Phase 6: Readiness Check + +| Check | Criteria | Severity | +|-------|----------|----------| +| All documents exist | product-brief, requirements, architecture, epics | Error | +| Frontmatter valid | All YAML frontmatter parseable and correct | Error | +| Cross-references valid | All document links resolve | Error | +| Overall score >= 60% | Weighted average across 4 dimensions | Error | +| No unresolved Errors | All Error-severity issues addressed | Error | +| Summary generated | spec-summary.md created | Warning | + +--- + +## Cross-Document Validation + +Checks performed during Phase 6 across all documents: + +### Completeness Matrix + +``` +Product Brief goals -> Requirements (each goal has >= 1 requirement) +Requirements -> Architecture (each Must requirement has design coverage) +Requirements -> Epics (each Must requirement appears in >= 1 story) +Architecture ADRs -> Epics (tech choices reflected in implementation stories) +``` + +### Consistency Checks + +| Check | Documents | Rule | +|-------|-----------|------| +| Terminology | All | Same term used consistently (no synonyms for same concept) | +| User personas | Brief + PRD + Epics | Same user names/roles throughout | +| Scope | Brief + PRD | PRD scope does not exceed brief scope | +| Tech stack | Architecture + Epics | Stories reference correct technologies | + +### Traceability Matrix Format + +```markdown +| Goal | Requirements | Architecture | Epics | +|------|-------------|--------------|-------| +| G-001: ... | REQ-001, REQ-002 | ADR-001 | EPIC-001 | +| G-002: ... | REQ-003 | ADR-002 | EPIC-002, EPIC-003 | +``` + +--- + +## Issue Classification + +### Error (Must Fix) + +- Missing required document or section +- Broken cross-references +- Contradictory information between documents +- Empty acceptance criteria on Must-have requirements +- No MVP subset defined in epics + +### Warning (Should Fix) + +- Vague acceptance criteria +- Missing non-functional requirements +- No success metrics defined +- Incomplete traceability +- Missing architecture review notes + +### Info (Nice to Have) + +- Could add more detailed personas +- Consider additional ADR alternatives +- Story estimation hints missing +- Mermaid diagrams could be more detailed diff --git a/.claude/skills/team-lifecycle-v4/specs/team-config.json b/.claude/skills/team-lifecycle-v4/specs/team-config.json new file mode 100644 index 00000000..c4b7fa48 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/specs/team-config.json @@ -0,0 +1,169 @@ +{ + "team_name": "team-lifecycle", + "team_display_name": "Team Lifecycle v4", + "description": "Optimized team skill: inline discuss subagent + shared explore cache, spec beats halved", + "version": "4.0.0", + "architecture": "folder-based + subagents", + "role_structure": "roles/{name}/role.md + roles/{name}/commands/*.md", + "subagent_structure": "subagents/{name}-subagent.md", + + "roles": { + "coordinator": { + "task_prefix": null, + "responsibility": "Pipeline orchestration, requirement clarification, task chain creation, message dispatch", + "message_types": ["plan_approved", "plan_revision", "task_unblocked", "fix_required", "error", "shutdown"] + }, + "analyst": { + "task_prefix": "RESEARCH", + "responsibility": "Seed analysis, codebase exploration, multi-dimensional context gathering + inline discuss", + "inline_discuss": "DISCUSS-001", + "message_types": ["research_ready", "research_progress", "error"] + }, + "writer": { + "task_prefix": "DRAFT", + "responsibility": "Product Brief / PRD / Architecture / Epics document generation + inline discuss", + "inline_discuss": ["DISCUSS-002", "DISCUSS-003", "DISCUSS-004", "DISCUSS-005"], + "message_types": ["draft_ready", "draft_revision", "error"] + }, + "planner": { + "task_prefix": "PLAN", + "responsibility": "Multi-angle code exploration (via shared explore), structured implementation planning", + "message_types": ["plan_ready", "plan_revision", "error"] + }, + "executor": { + "task_prefix": "IMPL", + "responsibility": "Code implementation following approved plans", + "message_types": ["impl_complete", "impl_progress", "error"] + }, + "tester": { + "task_prefix": "TEST", + "responsibility": "Adaptive test-fix cycles, progressive testing, quality gates", + "message_types": ["test_result", "fix_required", "error"] + }, + "reviewer": { + "task_prefix": "REVIEW", + "additional_prefixes": ["QUALITY"], + "responsibility": "Code review (REVIEW-*) + Spec quality validation (QUALITY-*) + inline discuss for sign-off", + "inline_discuss": "DISCUSS-006", + "message_types": ["review_result", "quality_result", "fix_required", "error"] + }, + "architect": { + "task_prefix": "ARCH", + "responsibility": "Architecture assessment, tech feasibility, design pattern review. Consulting role -- on-demand by coordinator", + "role_type": "consulting", + "consultation_modes": ["spec-review", "plan-review", "code-review", "consult", "feasibility"], + "message_types": ["arch_ready", "arch_concern", "arch_progress", "error"] + }, + "fe-developer": { + "task_prefix": "DEV-FE", + "responsibility": "Frontend component/page implementation, design token consumption, responsive UI", + "role_type": "frontend-pipeline", + "message_types": ["dev_fe_complete", "dev_fe_progress", "error"] + }, + "fe-qa": { + "task_prefix": "QA-FE", + "responsibility": "5-dimension frontend review (quality, a11y, design compliance, UX, pre-delivery), GC loop", + "role_type": "frontend-pipeline", + "message_types": ["qa_fe_passed", "qa_fe_result", "fix_required", "error"] + } + }, + + "subagents": { + "discuss": { + "spec": "subagents/discuss-subagent.md", + "type": "cli-discuss-agent", + "callable_by": ["analyst", "writer", "reviewer"], + "purpose": "Multi-perspective critique with CLI tools, consensus synthesis" + }, + "explore": { + "spec": "subagents/explore-subagent.md", + "type": "Explore", + "callable_by": ["analyst", "planner", "any"], + "purpose": "Codebase exploration with centralized cache" + } + }, + + "pipelines": { + "spec-only": { + "description": "Specification pipeline: research+discuss -> draft+discuss x4 -> quality+discuss", + "task_chain": [ + "RESEARCH-001", + "DRAFT-001", "DRAFT-002", "DRAFT-003", "DRAFT-004", + "QUALITY-001" + ], + "beats": 6, + "v3_beats": 12, + "optimization": "Discuss rounds inlined into produce roles" + }, + "impl-only": { + "description": "Implementation pipeline: plan -> implement -> test + review", + "task_chain": ["PLAN-001", "IMPL-001", "TEST-001", "REVIEW-001"], + "beats": 3 + }, + "full-lifecycle": { + "description": "Full lifecycle: spec pipeline -> implementation pipeline", + "task_chain": "spec-only + impl-only (PLAN-001 blockedBy QUALITY-001)", + "beats": 9, + "v3_beats": 15, + "optimization": "6 fewer spec beats + QUALITY-001 is last spec task" + }, + "fe-only": { + "description": "Frontend-only pipeline: plan -> frontend dev -> frontend QA", + "task_chain": ["PLAN-001", "DEV-FE-001", "QA-FE-001"], + "gc_loop": { "max_rounds": 2, "convergence": "score >= 8 && critical === 0" } + }, + "fullstack": { + "description": "Fullstack pipeline: plan -> backend + frontend parallel -> test + QA", + "task_chain": ["PLAN-001", "IMPL-001||DEV-FE-001", "TEST-001||QA-FE-001", "REVIEW-001"], + "sync_points": ["REVIEW-001"] + }, + "full-lifecycle-fe": { + "description": "Full lifecycle with frontend: spec -> plan -> backend + frontend -> test + QA", + "task_chain": "spec-only + fullstack (PLAN-001 blockedBy QUALITY-001)" + } + }, + + "frontend_detection": { + "keywords": ["component", "page", "UI", "frontend", "CSS", "HTML", "React", "Vue", "Tailwind", "Svelte", "Next.js", "Nuxt", "shadcn", "design system"], + "file_patterns": ["*.tsx", "*.jsx", "*.vue", "*.svelte", "*.css", "*.scss", "*.html"], + "routing_rules": { + "frontend_only": "All tasks match frontend keywords, no backend/API mentions", + "fullstack": "Mix of frontend and backend tasks", + "backend_only": "No frontend keywords detected (default impl-only)" + } + }, + + "ui_ux_pro_max": { + "skill_name": "ui-ux-pro-max", + "invocation": "Skill(skill=\"ui-ux-pro-max\", args=\"...\")", + "domains": ["product", "style", "typography", "color", "landing", "chart", "ux", "web"], + "stacks": ["html-tailwind", "react", "nextjs", "vue", "svelte", "shadcn", "swiftui", "react-native", "flutter"], + "design_intelligence_chain": ["analyst -> design-intelligence.json", "architect -> design-tokens.json", "fe-developer -> tokens.css", "fe-qa -> anti-pattern audit"] + }, + + "shared_memory": { + "file": "shared-memory.json", + "schema": { + "design_intelligence": "From analyst via ui-ux-pro-max", + "design_token_registry": "From architect, consumed by fe-developer/fe-qa", + "component_inventory": "From fe-developer, list of implemented components", + "style_decisions": "Accumulated design decisions", + "qa_history": "From fe-qa, audit trail", + "industry_context": "Industry + strictness config", + "exploration_cache": "From explore subagent, shared by all roles" + } + }, + + "session_dirs": { + "base": ".workflow/.team/TLS-{slug}-{YYYY-MM-DD}/", + "spec": "spec/", + "discussions": "discussions/", + "plan": "plan/", + "explorations": "explorations/", + "architecture": "architecture/", + "analysis": "analysis/", + "qa": "qa/", + "wisdom": "wisdom/", + "messages": ".msg/" + } +} diff --git a/.claude/skills/team-lifecycle-v4/subagents/discuss-subagent.md b/.claude/skills/team-lifecycle-v4/subagents/discuss-subagent.md new file mode 100644 index 00000000..67451075 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/subagents/discuss-subagent.md @@ -0,0 +1,134 @@ +# Discuss Subagent + +Lightweight multi-perspective critique engine. Called inline by produce roles (analyst, writer, reviewer) instead of as a separate team member. Eliminates spawn overhead while preserving multi-CLI analysis quality. + +## Design Rationale + +In v3, `discussant` was a full team role requiring: agent spawn -> Skill load -> Phase 1 task discovery -> Phase 2-4 work -> Phase 5 report + callback. For what is essentially "run CLI analyses + synthesize", the framework overhead exceeded actual work time. + +In v4, discuss is a **subagent call** from within the producing role, reducing each discuss round from ~60-90s overhead to ~5s overhead. + +## Invocation + +Called by produce roles after artifact creation: + +``` +Task({ + subagent_type: "cli-discuss-agent", + run_in_background: false, + description: "Discuss ", + prompt: `## Multi-Perspective Critique: + +### Input +- Artifact: +- Round: +- Perspectives: +- Session: +- Discovery Context: /spec/discovery-context.json (for coverage perspective) + +### Perspective Routing + +| Perspective | CLI Tool | Role | Focus Areas | +|-------------|----------|------|-------------| +| Product | gemini | Product Manager | Market fit, user value, business viability | +| Technical | codex | Tech Lead | Feasibility, tech debt, performance, security | +| Quality | claude | QA Lead | Completeness, testability, consistency | +| Risk | gemini | Risk Analyst | Risk identification, dependencies, failure modes | +| Coverage | gemini | Requirements Analyst | Requirement completeness vs discovery-context | + +### Execution Steps +1. Read artifact from +2. For each perspective, launch CLI analysis in background: + Bash(command="ccw cli -p 'PURPOSE: Analyze from perspective for + TASK: + MODE: analysis + CONTEXT: Artifact content below + EXPECTED: JSON with strengths[], weaknesses[], suggestions[], rating (1-5) + CONSTRAINTS: Output valid JSON only + + Artifact: + ' --tool --mode analysis", run_in_background=true) +3. Wait for all CLI results +4. Divergence detection: + - Coverage gap: missing_requirements non-empty -> High severity + - High risk: risk_level is high or critical -> High severity + - Low rating: any perspective rating <= 2 -> Medium severity + - Rating spread: max - min >= 3 -> Medium severity +5. Consensus determination: + - No high-severity divergences AND average rating >= 3.0 -> consensus_reached + - Otherwise -> consensus_blocked +6. Synthesize: + - Convergent themes (agreed by 2+ perspectives) + - Divergent views (conflicting assessments) + - Coverage gaps + - Action items from suggestions +7. Write discussion record to: /discussions/-discussion.md + +### Discussion Record Format +# Discussion Record: + +**Artifact**: +**Perspectives**: +**Consensus**: reached / blocked +**Average Rating**: /5 + +## Convergent Themes +- + +## Divergent Views +- **** (): + +## Action Items +1. + +## Ratings +| Perspective | Rating | +|-------------|--------| +| | /5 | + +### Return Value +Return a summary string with: +- Verdict: consensus_reached or consensus_blocked +- Average rating +- Key action items (top 3) +- Discussion record path + +### Error Handling +- Single CLI fails -> fallback to direct Claude analysis for that perspective +- All CLI fail -> generate basic discussion from direct artifact reading +- Artifact not found -> return error immediately` +}) +``` + +## Round Configuration + +| Round | Artifact | Perspectives | Calling Role | +|-------|----------|-------------|-------------| +| DISCUSS-001 | spec/discovery-context.json | product, risk, coverage | analyst | +| DISCUSS-002 | spec/product-brief.md | product, technical, quality, coverage | writer | +| DISCUSS-003 | spec/requirements/_index.md | quality, product, coverage | writer | +| DISCUSS-004 | spec/architecture/_index.md | technical, risk | writer | +| DISCUSS-005 | spec/epics/_index.md | product, technical, quality, coverage | writer | +| DISCUSS-006 | spec/readiness-report.md | all 5 | reviewer | + +## Integration with Calling Role + +The calling role is responsible for: + +1. **Before calling**: Complete primary artifact output +2. **Calling**: Invoke discuss subagent with correct round config +3. **After calling**: + - Include discuss verdict in Phase 5 report + - If `consensus_blocked` with high-severity divergences -> flag in SendMessage to coordinator + - Discussion record is written by the subagent, no further action needed + +## Comparison with v3 + +| Aspect | v3 (discussant role) | v4 (discuss subagent) | +|--------|---------------------|----------------------| +| Spawn | Full general-purpose agent | Inline subagent call | +| Skill load | Reads SKILL.md + role.md | None (prompt contains all logic) | +| Task discovery | TaskList + TaskGet + TaskUpdate | None (called with context) | +| Report overhead | team_msg + SendMessage + TaskUpdate | Return value to caller | +| Total overhead | ~25-45s framework | ~5s call overhead | +| Pipeline beat | 1 beat per discuss round | 0 additional beats | diff --git a/.claude/skills/team-lifecycle-v4/subagents/explore-subagent.md b/.claude/skills/team-lifecycle-v4/subagents/explore-subagent.md new file mode 100644 index 00000000..6d34a3cd --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/subagents/explore-subagent.md @@ -0,0 +1,172 @@ +# Explore Subagent + +Shared codebase exploration utility with centralized caching. Callable by any role needing code context. Replaces v3's standalone explorer role. + +## Design Rationale + +In v3, exploration happened in 3 separate places: +- `analyst` Phase 3: ACE semantic search for architecture patterns +- `planner` Phase 2: multi-angle cli-explore-agent +- `explorer` role: standalone service with full spawn cycle + +Results were scattered across different directories and never shared. In v4, all exploration routes through this subagent with a **unified cache** in `explorations/`. + +## Invocation + +``` +Task({ + subagent_type: "Explore", + run_in_background: false, + description: "Explore ", + prompt: `Explore codebase for: + +Focus angle: +Keywords: +Session folder: + +## Cache Check +1. Read /explorations/cache-index.json (if exists) +2. Look for entry with matching angle +3. If found AND file exists -> read cached result, return summary +4. If not found -> proceed to exploration + +## Exploration + + +## Output +Write JSON to: /explorations/explore-.json +Update cache-index.json with new entry + +## Output Schema +{ + "angle": "", + "query": "", + "relevant_files": [ + { "path": "...", "rationale": "...", "role": "...", "discovery_source": "...", "key_symbols": [] } + ], + "patterns": [], + "dependencies": [], + "external_refs": [], + "_metadata": { "created_by": "", "timestamp": "...", "cache_key": "..." } +} + +Return summary: file count, pattern count, top 5 files, output path` +}) +``` + +## Cache Mechanism + +### Cache Index Schema + +`/explorations/cache-index.json`: + +```json +{ + "entries": [ + { + "angle": "architecture", + "keywords": ["auth", "middleware"], + "file": "explore-architecture.json", + "created_by": "analyst", + "created_at": "2026-02-27T10:00:00Z", + "file_count": 15 + } + ] +} +``` + +### Cache Lookup Rules + +| Condition | Action | +|-----------|--------| +| Exact angle match exists | Return cached result | +| No match | Execute exploration, cache result | +| Cache file missing but index has entry | Remove stale entry, re-explore | + +### Cache Invalidation + +Cache is session-scoped. No explicit invalidation needed -- each session starts fresh. If a role suspects stale data, it can pass `force_refresh: true` in the prompt to bypass cache. + +## Angle Focus Guide + +| Angle | Focus Points | Typical Caller | +|-------|-------------|----------------| +| architecture | Layer boundaries, design patterns, component responsibilities, ADRs | analyst, planner | +| dependencies | Import chains, external libraries, circular dependencies, shared utilities | planner | +| modularity | Module interfaces, separation of concerns, extraction opportunities | planner | +| integration-points | API endpoints, data flow between modules, event systems | analyst, planner | +| security | Auth/authz logic, input validation, sensitive data handling, middleware | planner | +| auth-patterns | Auth flows, session management, token validation, permissions | planner | +| dataflow | Data transformations, state propagation, validation points | planner | +| performance | Bottlenecks, N+1 queries, blocking operations, algorithm complexity | planner | +| error-handling | Try-catch blocks, error propagation, recovery strategies, logging | planner | +| patterns | Code conventions, design patterns, naming conventions, best practices | analyst, planner | +| testing | Test files, coverage gaps, test patterns, mocking strategies | planner | +| general | Broad semantic search for topic-related code | analyst | + +## Exploration Strategies + +### Low Complexity (direct search) + +For simple queries, use ACE semantic search: + +``` +mcp__ace-tool__search_context(project_root_path="", query="") +``` + +ACE failure fallback: `rg -l '' --type ts` + +### Medium/High Complexity (multi-angle) + +For complex queries, call cli-explore-agent per angle. The calling role determines complexity and selects angles (see planner's `commands/explore.md`). + +## Search Tool Priority + +| Tool | Priority | Use Case | +|------|----------|----------| +| mcp__ace-tool__search_context | P0 | Semantic search | +| Grep / Glob | P1 | Pattern matching | +| cli-explore-agent | Deep | Multi-angle exploration | +| WebSearch | P3 | External docs | + +## Integration with Roles + +### analyst (RESEARCH-001) + +``` +# After seed analysis, explore codebase context +Task({ + subagent_type: "Explore", + description: "Explore general context", + prompt: "Explore codebase for: \nFocus angle: general\n..." +}) +# Result feeds into discovery-context.json +``` + +### planner (PLAN-001) + +``` +# Multi-angle exploration before plan generation +for angle in selected_angles: + Task({ + subagent_type: "Explore", + description: "Explore ", + prompt: "Explore codebase for: \nFocus angle: \n..." + }) +# Explorations manifest built from cache-index.json +``` + +### Any role needing context + +Any role can call explore subagent when needing codebase context for better decisions. + +## Comparison with v3 + +| Aspect | v3 (explorer role) | v4 (explore subagent) | +|--------|-------------------|----------------------| +| Identity | Full team member | Utility subagent | +| Task creation | Coordinator creates EXPLORE-* tasks | No tasks, direct call | +| Spawn overhead | Full agent lifecycle | Subagent call (~5s) | +| Result sharing | Isolated in explorations/ | Shared cache with index | +| Caller | Only via coordinator dispatch | Any role directly | +| Duplication | analyst + planner + explorer all explore | Single cached path | diff --git a/.claude/skills/team-lifecycle-v4/templates/architecture-doc.md b/.claude/skills/team-lifecycle-v4/templates/architecture-doc.md new file mode 100644 index 00000000..5106de03 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/templates/architecture-doc.md @@ -0,0 +1,254 @@ +# Architecture Document Template (Directory Structure) + +Template for generating architecture decision documents as a directory of individual ADR files in Phase 4. + +## Usage Context + +| Phase | Usage | +|-------|-------| +| Phase 4 (Architecture) | Generate `architecture/` directory from requirements analysis | +| Output Location | `{workDir}/architecture/` | + +## Output Structure + +``` +{workDir}/architecture/ +├── _index.md # Overview, components, tech stack, data model, security +├── ADR-001-{slug}.md # Individual Architecture Decision Record +├── ADR-002-{slug}.md +└── ... +``` + +--- + +## Template: _index.md + +```markdown +--- +session_id: {session_id} +phase: 4 +document_type: architecture-index +status: draft +generated_at: {timestamp} +version: 1 +dependencies: + - ../spec-config.json + - ../product-brief.md + - ../requirements/_index.md +--- + +# Architecture: {product_name} + +{executive_summary - high-level architecture approach and key decisions} + +## System Overview + +### Architecture Style +{description of chosen architecture style: microservices, monolith, serverless, etc.} + +### System Context Diagram + +```mermaid +C4Context + title System Context Diagram + Person(user, "User", "Primary user") + System(system, "{product_name}", "Core system") + System_Ext(ext1, "{external_system}", "{description}") + Rel(user, system, "Uses") + Rel(system, ext1, "Integrates with") +``` + +## Component Architecture + +### Component Diagram + +```mermaid +graph TD + subgraph "{product_name}" + A[Component A] --> B[Component B] + B --> C[Component C] + A --> D[Component D] + end + B --> E[External Service] +``` + +### Component Descriptions + +| Component | Responsibility | Technology | Dependencies | +|-----------|---------------|------------|--------------| +| {component_name} | {what it does} | {tech stack} | {depends on} | + +## Technology Stack + +### Core Technologies + +| Layer | Technology | Version | Rationale | +|-------|-----------|---------|-----------| +| Frontend | {technology} | {version} | {why chosen} | +| Backend | {technology} | {version} | {why chosen} | +| Database | {technology} | {version} | {why chosen} | +| Infrastructure | {technology} | {version} | {why chosen} | + +### Key Libraries & Frameworks + +| Library | Purpose | License | +|---------|---------|---------| +| {library_name} | {purpose} | {license} | + +## Architecture Decision Records + +| ADR | Title | Status | Key Choice | +|-----|-------|--------|------------| +| [ADR-001](ADR-001-{slug}.md) | {title} | Accepted | {one-line summary} | +| [ADR-002](ADR-002-{slug}.md) | {title} | Accepted | {one-line summary} | +| [ADR-003](ADR-003-{slug}.md) | {title} | Proposed | {one-line summary} | + +## Data Architecture + +### Data Model + +```mermaid +erDiagram + ENTITY_A ||--o{ ENTITY_B : "has many" + ENTITY_A { + string id PK + string name + datetime created_at + } + ENTITY_B { + string id PK + string entity_a_id FK + string value + } +``` + +### Data Storage Strategy + +| Data Type | Storage | Retention | Backup | +|-----------|---------|-----------|--------| +| {type} | {storage solution} | {retention policy} | {backup strategy} | + +## API Design + +### API Overview + +| Endpoint | Method | Purpose | Auth | +|----------|--------|---------|------| +| {/api/resource} | {GET/POST/etc} | {purpose} | {auth type} | + +## Security Architecture + +### Security Controls + +| Control | Implementation | Requirement | +|---------|---------------|-------------| +| Authentication | {approach} | [NFR-S-{NNN}](../requirements/NFR-S-{NNN}-{slug}.md) | +| Authorization | {approach} | [NFR-S-{NNN}](../requirements/NFR-S-{NNN}-{slug}.md) | +| Data Protection | {approach} | [NFR-S-{NNN}](../requirements/NFR-S-{NNN}-{slug}.md) | + +## Infrastructure & Deployment + +### Deployment Architecture + +{description of deployment model: containers, serverless, VMs, etc.} + +### Environment Strategy + +| Environment | Purpose | Configuration | +|-------------|---------|---------------| +| Development | Local development | {config} | +| Staging | Pre-production testing | {config} | +| Production | Live system | {config} | + +## Codebase Integration + +{if has_codebase is true:} + +### Existing Code Mapping + +| New Component | Existing Module | Integration Type | Notes | +|--------------|----------------|------------------|-------| +| {component} | {existing module path} | Extend/Replace/New | {notes} | + +### Migration Notes +{any migration considerations for existing code} + +## Quality Attributes + +| Attribute | Target | Measurement | ADR Reference | +|-----------|--------|-------------|---------------| +| Performance | {target} | {how measured} | [ADR-{NNN}](ADR-{NNN}-{slug}.md) | +| Scalability | {target} | {how measured} | [ADR-{NNN}](ADR-{NNN}-{slug}.md) | +| Reliability | {target} | {how measured} | [ADR-{NNN}](ADR-{NNN}-{slug}.md) | + +## Risks & Mitigations + +| Risk | Impact | Probability | Mitigation | +|------|--------|-------------|------------| +| {risk} | High/Medium/Low | High/Medium/Low | {mitigation approach} | + +## Open Questions + +- [ ] {architectural question 1} +- [ ] {architectural question 2} + +## References + +- Derived from: [Requirements](../requirements/_index.md), [Product Brief](../product-brief.md) +- Next: [Epics & Stories](../epics/_index.md) +``` + +--- + +## Template: ADR-NNN-{slug}.md (Individual Architecture Decision Record) + +```markdown +--- +id: ADR-{NNN} +status: Accepted +traces_to: [{REQ-NNN}, {NFR-X-NNN}] +date: {timestamp} +--- + +# ADR-{NNN}: {decision_title} + +## Context + +{what is the situation that motivates this decision} + +## Decision + +{what is the chosen approach} + +## Alternatives Considered + +| Option | Pros | Cons | +|--------|------|------| +| {option_1 - chosen} | {pros} | {cons} | +| {option_2} | {pros} | {cons} | +| {option_3} | {pros} | {cons} | + +## Consequences + +- **Positive**: {positive outcomes} +- **Negative**: {tradeoffs accepted} +- **Risks**: {risks to monitor} + +## Traces + +- **Requirements**: [REQ-{NNN}](../requirements/REQ-{NNN}-{slug}.md), [NFR-X-{NNN}](../requirements/NFR-X-{NNN}-{slug}.md) +- **Implemented by**: [EPIC-{NNN}](../epics/EPIC-{NNN}-{slug}.md) (added in Phase 5) +``` + +--- + +## Variable Descriptions + +| Variable | Source | Description | +|----------|--------|-------------| +| `{session_id}` | spec-config.json | Session identifier | +| `{timestamp}` | Runtime | ISO8601 generation timestamp | +| `{product_name}` | product-brief.md | Product/feature name | +| `{NNN}` | Auto-increment | ADR/requirement number | +| `{slug}` | Auto-generated | Kebab-case from decision title | +| `{has_codebase}` | spec-config.json | Whether existing codebase exists | diff --git a/.claude/skills/team-lifecycle-v4/templates/epics-template.md b/.claude/skills/team-lifecycle-v4/templates/epics-template.md new file mode 100644 index 00000000..939d933c --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/templates/epics-template.md @@ -0,0 +1,196 @@ +# Epics & Stories Template (Directory Structure) + +Template for generating epic/story breakdown as a directory of individual Epic files in Phase 5. + +## Usage Context + +| Phase | Usage | +|-------|-------| +| Phase 5 (Epics & Stories) | Generate `epics/` directory from requirements decomposition | +| Output Location | `{workDir}/epics/` | + +## Output Structure + +``` +{workDir}/epics/ +├── _index.md # Overview table + dependency map + MVP scope + execution order +├── EPIC-001-{slug}.md # Individual Epic with its Stories +├── EPIC-002-{slug}.md +└── ... +``` + +--- + +## Template: _index.md + +```markdown +--- +session_id: {session_id} +phase: 5 +document_type: epics-index +status: draft +generated_at: {timestamp} +version: 1 +dependencies: + - ../spec-config.json + - ../product-brief.md + - ../requirements/_index.md + - ../architecture/_index.md +--- + +# Epics & Stories: {product_name} + +{executive_summary - overview of epic structure and MVP scope} + +## Epic Overview + +| Epic ID | Title | Priority | MVP | Stories | Est. Size | +|---------|-------|----------|-----|---------|-----------| +| [EPIC-001](EPIC-001-{slug}.md) | {title} | Must | Yes | {n} | {S/M/L/XL} | +| [EPIC-002](EPIC-002-{slug}.md) | {title} | Must | Yes | {n} | {S/M/L/XL} | +| [EPIC-003](EPIC-003-{slug}.md) | {title} | Should | No | {n} | {S/M/L/XL} | + +## Dependency Map + +```mermaid +graph LR + EPIC-001 --> EPIC-002 + EPIC-001 --> EPIC-003 + EPIC-002 --> EPIC-004 + EPIC-003 --> EPIC-005 +``` + +### Dependency Notes +{explanation of why these dependencies exist and suggested execution order} + +### Recommended Execution Order +1. [EPIC-{NNN}](EPIC-{NNN}-{slug}.md): {reason - foundational} +2. [EPIC-{NNN}](EPIC-{NNN}-{slug}.md): {reason - depends on #1} +3. ... + +## MVP Scope + +### MVP Epics +{list of epics included in MVP with justification, linking to each} + +### MVP Definition of Done +- [ ] {MVP completion criterion 1} +- [ ] {MVP completion criterion 2} +- [ ] {MVP completion criterion 3} + +## Traceability Matrix + +| Requirement | Epic | Stories | Architecture | +|-------------|------|---------|--------------| +| [REQ-001](../requirements/REQ-001-{slug}.md) | [EPIC-001](EPIC-001-{slug}.md) | STORY-001-001, STORY-001-002 | [ADR-001](../architecture/ADR-001-{slug}.md) | +| [REQ-002](../requirements/REQ-002-{slug}.md) | [EPIC-001](EPIC-001-{slug}.md) | STORY-001-003 | Component B | +| [REQ-003](../requirements/REQ-003-{slug}.md) | [EPIC-002](EPIC-002-{slug}.md) | STORY-002-001 | [ADR-002](../architecture/ADR-002-{slug}.md) | + +## Estimation Summary + +| Size | Meaning | Count | +|------|---------|-------| +| S | Small - well-understood, minimal risk | {n} | +| M | Medium - some complexity, moderate risk | {n} | +| L | Large - significant complexity, should consider splitting | {n} | +| XL | Extra Large - high complexity, must split before implementation | {n} | + +## Risks & Considerations + +| Risk | Affected Epics | Mitigation | +|------|---------------|------------| +| {risk description} | [EPIC-{NNN}](EPIC-{NNN}-{slug}.md) | {mitigation} | + +## Open Questions + +- [ ] {question about scope or implementation 1} +- [ ] {question about scope or implementation 2} + +## References + +- Derived from: [Requirements](../requirements/_index.md), [Architecture](../architecture/_index.md) +- Handoff to: execution workflows (lite-plan, plan, req-plan) +``` + +--- + +## Template: EPIC-NNN-{slug}.md (Individual Epic) + +```markdown +--- +id: EPIC-{NNN} +priority: {Must|Should|Could} +mvp: {true|false} +size: {S|M|L|XL} +requirements: [REQ-{NNN}] +architecture: [ADR-{NNN}] +dependencies: [EPIC-{NNN}] +status: draft +--- + +# EPIC-{NNN}: {epic_title} + +**Priority**: {Must|Should|Could} +**MVP**: {Yes|No} +**Estimated Size**: {S|M|L|XL} + +## Description + +{detailed epic description} + +## Requirements + +- [REQ-{NNN}](../requirements/REQ-{NNN}-{slug}.md): {title} +- [REQ-{NNN}](../requirements/REQ-{NNN}-{slug}.md): {title} + +## Architecture + +- [ADR-{NNN}](../architecture/ADR-{NNN}-{slug}.md): {title} +- Component: {component_name} + +## Dependencies + +- [EPIC-{NNN}](EPIC-{NNN}-{slug}.md) (blocking): {reason} +- [EPIC-{NNN}](EPIC-{NNN}-{slug}.md) (soft): {reason} + +## Stories + +### STORY-{EPIC}-001: {story_title} + +**User Story**: As a {persona}, I want to {action} so that {benefit}. + +**Acceptance Criteria**: +- [ ] {criterion 1} +- [ ] {criterion 2} +- [ ] {criterion 3} + +**Size**: {S|M|L|XL} +**Traces to**: [REQ-{NNN}](../requirements/REQ-{NNN}-{slug}.md) + +--- + +### STORY-{EPIC}-002: {story_title} + +**User Story**: As a {persona}, I want to {action} so that {benefit}. + +**Acceptance Criteria**: +- [ ] {criterion 1} +- [ ] {criterion 2} + +**Size**: {S|M|L|XL} +**Traces to**: [REQ-{NNN}](../requirements/REQ-{NNN}-{slug}.md) +``` + +--- + +## Variable Descriptions + +| Variable | Source | Description | +|----------|--------|-------------| +| `{session_id}` | spec-config.json | Session identifier | +| `{timestamp}` | Runtime | ISO8601 generation timestamp | +| `{product_name}` | product-brief.md | Product/feature name | +| `{EPIC}` | Auto-increment | Epic number (3 digits) | +| `{NNN}` | Auto-increment | Story/requirement number | +| `{slug}` | Auto-generated | Kebab-case from epic/story title | +| `{S\|M\|L\|XL}` | CLI analysis | Relative size estimate | diff --git a/.claude/skills/team-lifecycle-v4/templates/product-brief.md b/.claude/skills/team-lifecycle-v4/templates/product-brief.md new file mode 100644 index 00000000..ffbdf437 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/templates/product-brief.md @@ -0,0 +1,133 @@ +# Product Brief Template + +Template for generating product brief documents in Phase 2. + +## Usage Context + +| Phase | Usage | +|-------|-------| +| Phase 2 (Product Brief) | Generate product-brief.md from multi-CLI analysis | +| Output Location | `{workDir}/product-brief.md` | + +--- + +## Template + +```markdown +--- +session_id: {session_id} +phase: 2 +document_type: product-brief +status: draft +generated_at: {timestamp} +stepsCompleted: [] +version: 1 +dependencies: + - spec-config.json +--- + +# Product Brief: {product_name} + +{executive_summary - 2-3 sentences capturing the essence of the product/feature} + +## Vision + +{vision_statement - clear, aspirational 1-3 sentence statement of what success looks like} + +## Problem Statement + +### Current Situation +{description of the current state and pain points} + +### Impact +{quantified impact of the problem - who is affected, how much, how often} + +## Target Users + +{for each user persona:} + +### {Persona Name} +- **Role**: {user's role/context} +- **Needs**: {primary needs related to this product} +- **Pain Points**: {current frustrations} +- **Success Criteria**: {what success looks like for this user} + +## Goals & Success Metrics + +| Goal ID | Goal | Success Metric | Target | +|---------|------|----------------|--------| +| G-001 | {goal description} | {measurable metric} | {specific target} | +| G-002 | {goal description} | {measurable metric} | {specific target} | + +## Scope + +### In Scope +- {feature/capability 1} +- {feature/capability 2} +- {feature/capability 3} + +### Out of Scope +- {explicitly excluded item 1} +- {explicitly excluded item 2} + +### Assumptions +- {key assumption 1} +- {key assumption 2} + +## Competitive Landscape + +| Aspect | Current State | Proposed Solution | Advantage | +|--------|--------------|-------------------|-----------| +| {aspect} | {how it's done now} | {our approach} | {differentiator} | + +## Constraints & Dependencies + +### Technical Constraints +- {constraint 1} +- {constraint 2} + +### Business Constraints +- {constraint 1} + +### Dependencies +- {external dependency 1} +- {external dependency 2} + +## Multi-Perspective Synthesis + +### Product Perspective +{summary of product/market analysis findings} + +### Technical Perspective +{summary of technical feasibility and constraints} + +### User Perspective +{summary of user journey and UX considerations} + +### Convergent Themes +{themes where all perspectives agree} + +### Conflicting Views +{areas where perspectives differ, with notes on resolution approach} + +## Open Questions + +- [ ] {unresolved question 1} +- [ ] {unresolved question 2} + +## References + +- Derived from: [spec-config.json](spec-config.json) +- Next: [Requirements PRD](requirements.md) +``` + +## Variable Descriptions + +| Variable | Source | Description | +|----------|--------|-------------| +| `{session_id}` | spec-config.json | Session identifier | +| `{timestamp}` | Runtime | ISO8601 generation timestamp | +| `{product_name}` | Seed analysis | Product/feature name | +| `{executive_summary}` | CLI synthesis | 2-3 sentence summary | +| `{vision_statement}` | CLI product perspective | Aspirational vision | +| All `{...}` fields | CLI analysis outputs | Filled from multi-perspective analysis | diff --git a/.claude/skills/team-lifecycle-v4/templates/requirements-prd.md b/.claude/skills/team-lifecycle-v4/templates/requirements-prd.md new file mode 100644 index 00000000..0b1dbf28 --- /dev/null +++ b/.claude/skills/team-lifecycle-v4/templates/requirements-prd.md @@ -0,0 +1,224 @@ +# Requirements PRD Template (Directory Structure) + +Template for generating Product Requirements Document as a directory of individual requirement files in Phase 3. + +## Usage Context + +| Phase | Usage | +|-------|-------| +| Phase 3 (Requirements) | Generate `requirements/` directory from product brief expansion | +| Output Location | `{workDir}/requirements/` | + +## Output Structure + +``` +{workDir}/requirements/ +├── _index.md # Summary + MoSCoW table + traceability matrix + links +├── REQ-001-{slug}.md # Individual functional requirement +├── REQ-002-{slug}.md +├── NFR-P-001-{slug}.md # Non-functional: Performance +├── NFR-S-001-{slug}.md # Non-functional: Security +├── NFR-SC-001-{slug}.md # Non-functional: Scalability +├── NFR-U-001-{slug}.md # Non-functional: Usability +└── ... +``` + +--- + +## Template: _index.md + +```markdown +--- +session_id: {session_id} +phase: 3 +document_type: requirements-index +status: draft +generated_at: {timestamp} +version: 1 +dependencies: + - ../spec-config.json + - ../product-brief.md +--- + +# Requirements: {product_name} + +{executive_summary - brief overview of what this PRD covers and key decisions} + +## Requirement Summary + +| Priority | Count | Coverage | +|----------|-------|----------| +| Must Have | {n} | {description of must-have scope} | +| Should Have | {n} | {description of should-have scope} | +| Could Have | {n} | {description of could-have scope} | +| Won't Have | {n} | {description of explicitly excluded} | + +## Functional Requirements + +| ID | Title | Priority | Traces To | +|----|-------|----------|-----------| +| [REQ-001](REQ-001-{slug}.md) | {title} | Must | [G-001](../product-brief.md#goals--success-metrics) | +| [REQ-002](REQ-002-{slug}.md) | {title} | Must | [G-001](../product-brief.md#goals--success-metrics) | +| [REQ-003](REQ-003-{slug}.md) | {title} | Should | [G-002](../product-brief.md#goals--success-metrics) | + +## Non-Functional Requirements + +### Performance + +| ID | Title | Target | +|----|-------|--------| +| [NFR-P-001](NFR-P-001-{slug}.md) | {title} | {target value} | + +### Security + +| ID | Title | Standard | +|----|-------|----------| +| [NFR-S-001](NFR-S-001-{slug}.md) | {title} | {standard/framework} | + +### Scalability + +| ID | Title | Target | +|----|-------|--------| +| [NFR-SC-001](NFR-SC-001-{slug}.md) | {title} | {target value} | + +### Usability + +| ID | Title | Target | +|----|-------|--------| +| [NFR-U-001](NFR-U-001-{slug}.md) | {title} | {target value} | + +## Data Requirements + +### Data Entities + +| Entity | Description | Key Attributes | +|--------|-------------|----------------| +| {entity_name} | {description} | {attr1, attr2, attr3} | + +### Data Flows + +{description of key data flows, optionally with Mermaid diagram} + +## Integration Requirements + +| System | Direction | Protocol | Data Format | Notes | +|--------|-----------|----------|-------------|-------| +| {system_name} | Inbound/Outbound/Both | {REST/gRPC/etc} | {JSON/XML/etc} | {notes} | + +## Constraints & Assumptions + +### Constraints +- {technical or business constraint 1} +- {technical or business constraint 2} + +### Assumptions +- {assumption 1 - must be validated} +- {assumption 2 - must be validated} + +## Priority Rationale + +{explanation of MoSCoW prioritization decisions, especially for Should/Could boundaries} + +## Traceability Matrix + +| Goal | Requirements | +|------|-------------| +| G-001 | [REQ-001](REQ-001-{slug}.md), [REQ-002](REQ-002-{slug}.md), [NFR-P-001](NFR-P-001-{slug}.md) | +| G-002 | [REQ-003](REQ-003-{slug}.md), [NFR-S-001](NFR-S-001-{slug}.md) | + +## Open Questions + +- [ ] {unresolved question 1} +- [ ] {unresolved question 2} + +## References + +- Derived from: [Product Brief](../product-brief.md) +- Next: [Architecture](../architecture/_index.md) +``` + +--- + +## Template: REQ-NNN-{slug}.md (Individual Functional Requirement) + +```markdown +--- +id: REQ-{NNN} +type: functional +priority: {Must|Should|Could|Won't} +traces_to: [G-{NNN}] +status: draft +--- + +# REQ-{NNN}: {requirement_title} + +**Priority**: {Must|Should|Could|Won't} + +## Description + +{detailed requirement description} + +## User Story + +As a {persona}, I want to {action} so that {benefit}. + +## Acceptance Criteria + +- [ ] {specific, testable criterion 1} +- [ ] {specific, testable criterion 2} +- [ ] {specific, testable criterion 3} + +## Traces + +- **Goal**: [G-{NNN}](../product-brief.md#goals--success-metrics) +- **Architecture**: [ADR-{NNN}](../architecture/ADR-{NNN}-{slug}.md) (if applicable) +- **Implemented by**: [EPIC-{NNN}](../epics/EPIC-{NNN}-{slug}.md) (added in Phase 5) +``` + +--- + +## Template: NFR-{type}-NNN-{slug}.md (Individual Non-Functional Requirement) + +```markdown +--- +id: NFR-{type}-{NNN} +type: non-functional +category: {Performance|Security|Scalability|Usability} +priority: {Must|Should|Could} +status: draft +--- + +# NFR-{type}-{NNN}: {requirement_title} + +**Category**: {Performance|Security|Scalability|Usability} +**Priority**: {Must|Should|Could} + +## Requirement + +{detailed requirement description} + +## Metric & Target + +| Metric | Target | Measurement Method | +|--------|--------|--------------------| +| {metric} | {target value} | {how measured} | + +## Traces + +- **Goal**: [G-{NNN}](../product-brief.md#goals--success-metrics) +- **Architecture**: [ADR-{NNN}](../architecture/ADR-{NNN}-{slug}.md) (if applicable) +``` + +--- + +## Variable Descriptions + +| Variable | Source | Description | +|----------|--------|-------------| +| `{session_id}` | spec-config.json | Session identifier | +| `{timestamp}` | Runtime | ISO8601 generation timestamp | +| `{product_name}` | product-brief.md | Product/feature name | +| `{NNN}` | Auto-increment | Requirement number (zero-padded 3 digits) | +| `{slug}` | Auto-generated | Kebab-case from requirement title | +| `{type}` | Category | P (Performance), S (Security), SC (Scalability), U (Usability) | +| `{Must\|Should\|Could\|Won't}` | User input / auto | MoSCoW priority tag | diff --git a/.claude/skills/workflow-lite-plan/phases/01-lite-plan.md b/.claude/skills/workflow-lite-plan/phases/01-lite-plan.md index 0efc642f..de1181aa 100644 --- a/.claude/skills/workflow-lite-plan/phases/01-lite-plan.md +++ b/.claude/skills/workflow-lite-plan/phases/01-lite-plan.md @@ -255,6 +255,8 @@ cli-explore-agent autonomously handles: project structure discovery, schema load - [ ] Constraints are project-specific to ${angle} - [ ] JSON output follows schema exactly - [ ] clarification_needs includes options + recommended +- [ ] Files with relevance >= 0.7 have key_code array describing key symbols +- [ ] Files with relevance >= 0.7 have topic_relation explaining connection to ${angle} ## Execution **Write**: \`${sessionFolder}/exploration-${angle}.json\` diff --git a/.temp-memory-content.txt b/.temp-memory-content.txt new file mode 100644 index 00000000..9085900f --- /dev/null +++ b/.temp-memory-content.txt @@ -0,0 +1,105 @@ +## Session ID +(none) + +## Project Root +D:\Claude_dms3 + +## Objective +为 CCW spec 系统添加独立的 category 分类字段,实现 workflow stage 标记与 keywords 的分离,支持按阶段过滤加载 spec 文档。 + +## Execution Plan + +### Source: inferred + +
+Full Execution Plan (Click to expand) + +1. 分析当前 spec 系统实现 +2. 设计 category 分类方案 (general | exploration | planning | execution) +3. 后端实现: + - spec-index-builder.ts: 添加 category 字段到 SpecIndexEntry + - spec-init.ts: 更新 seed documents 使用 category + - spec-loader.ts: 支持 category 过滤 + - commands/spec.ts: 添加 --category 选项 + - cli.ts: 注册 --category 选项 +4. 前端实现: + - api.ts: 添加 category 类型 + - SpecCard.tsx: 显示 category badge + - SpecsSettingsPage.tsx: 添加 category 过滤 UI +5. 测试所有 ccw spec 命令 + +
+ +## Working Files (Modified) +- D:\Claude_dms3\ccw\src\tools\spec-index-builder.ts (role: core types + parsing) +- D:\Claude_dms3\ccw\src\tools\spec-init.ts (role: seed documents) +- D:\Claude_dms3\ccw\src\tools\spec-loader.ts (role: loading + filtering) +- D:\Claude_dms3\ccw\src\commands\spec.ts (role: CLI command handler) +- D:\Claude_dms3\ccw\src\cli.ts (role: CLI registration) +- D:\Claude_dms3\ccw\frontend\src\lib\api.ts (role: frontend types) +- D:\Claude_dms3\ccw\frontend\src\components\specs\SpecCard.tsx (role: UI display) +- D:\Claude_dms3\ccw\frontend\src\components\specs\index.ts (role: exports) +- D:\Claude_dms3\ccw\frontend\src\pages\SpecsSettingsPage.tsx (role: filtering UI) + +## Reference Files (Read-Only) +- D:\Claude_dms3\ccw\src\core\routes\spec-routes.ts (role: API routes) +- D:\Claude_dms3\ccw\frontend\src\hooks\useSystemSettings.ts (role: hooks) + +## Last Action +成功测试所有 ccw spec 命令: +- ccw spec help ✅ +- ccw spec init ✅ +- ccw spec rebuild ✅ +- ccw spec list ✅ +- ccw spec status ✅ +- ccw spec load --category general ✅ (仅加载 general 分类) +- ccw spec load --category planning ✅ (仅加载 planning 分类) + +发现并修复 CLI 启动问题:cli.ts 中 run() 函数未被调用,已添加 run(process.argv) 调用。 + +## Decisions +- 添加 category 为独立字段而非混入 keywords: 清晰的职责分离,keywords 用于主题匹配,category 用于 workflow stage 过滤 +- 使用 general 作为默认值: 适用于所有阶段的通用规范 +- 前端显示 category badge: 提供可视化分类指示 +- SpecIndexEntry 增加 contentLength 字段: 由用户系统优化添加,避免重复读取文件 + +## Constraints +- 保持向后兼容:category 为可选字段,默认 general +- 不修改现有 spec 文档的 keywords 语义 + +## Dependencies +(none) + +## Known Issues +- 前端构建存在预存 TypeScript 错误(IssuePanel.tsx, IssueManagerPage.tsx),与本功能无关 +- esbuild 打包需要正确配置 --packages=external 以避免动态 require 问题 + +## Changes Made +- spec-index-builder.ts: 添加 SpecCategory 类型、VALID_CATEGORIES、isValidCategory()、buildEntry() 解析 category +- spec-init.ts: SpecFrontmatter 添加 category,SEED_DOCS 使用独立 category 字段 +- spec-loader.ts: SpecLoadOptions 添加 category,filterSpecs() 支持 category 过滤 +- spec.ts: SpecOptions 添加 category,loadAction() 传递 category 到 loadSpecs +- cli.ts: 添加 --category 选项,修复 run() 未调用问题 +- api.ts: SpecEntry 添加 category 类型 +- SpecCard.tsx: 添加 SpecCategory 类型、categoryConfig 配置、显示 category badge +- SpecsSettingsPage.tsx: 添加 CategoryFilter 状态、categoryCounts 计算、category 过滤按钮 + +## Pending +(none - 功能实现完成并测试通过) + +## Notes +**Category 设计思路**: +- general: 适用于所有阶段(如编码规范) +- exploration: 代码探索、分析、调试 +- planning: 任务规划、需求分析 +- execution: 实现、测试、部署 + +系统级加载示例:ccw spec load --category exploration + +**索引验证**: +{ + "title": "Architecture Constraints", + "category": "planning", + "keywords": ["architecture", "module", "layer", "pattern"] +} +keywords 不再包含 exploration/planning/execution 标记。 diff --git a/assets/wechat-group-qr.jpg b/assets/wechat-group-qr.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d218cf116a31bb107d805f947333efd5301f7d75 GIT binary patch literal 169793 zcmeFZWmH_t)-K#ga0wx}G(iGEgFBs&-~oa=gb+NqYeNVSJdgmvg1fr}2@WB+26van z8)&-k%HHQa=RN1%ANPLayMOlGi&2cRR@YjqX4RZE=X{>3g_=PvgYGKID#(J+&_EzG z;17hF13d#_Vcx;IgNcQ82MZe;3kUBm9v&_(-hCosg1Z#=DJd!Llao`^v4E**m}tq# z88{i39kHVPwUpv3U#UrPnq@red$jbJJT|iJs zSVUCp*>f3LIe7&|4NWa=9bG+rvp41zmR8m_F0O9w9-dy_LGOb@LO+Cs$9?)7pOE+^ zDLE@UCpRy@ps=W_x~8_SzM-+HqqD2Kr?;>F$JqG9M*j`&ZBtb%mOPc$G=7UL$d!p!QTCUlI)*?{Y$P{5CH}nFnAaw zAPDGcESxO^{qOR3AN;KYf9t^CI`Fp+{H+6j>%iYS@V5^9KdS@h4xwOdHy+Y19yeJ# zsqeQPazn^voeJwVjOGUp_euv#rr(NHt1^DT?iu{rK3SdFj1i8Hz*Loi041f8KgwAT6<8SVE$$B zH7FfHkd6XHZzx7GK#cMv2uqf*tSUVOhoc?UaMf_r{_SQ#pJlV%!z#_?jAnGnzjN2OY zuE7v&fLU?Z5$ekEd0bGqI_*859ns^p3GIZ!dqWIO3cky7N4S&>TPOTvI3}&`_Mv7H%Wf4Dml~Ewv!xj`s(hdbW z8Yx$V<(|zZ1X_EzY7Ve5e|#*$3{^a#lO5_*zMb6PG#I{G4LwXgH$jURr-Jz8|(a#=6xDZH`=mCVbsWI*X0I$4TE4O`^Co%XrN}tPQU$+?kf9vIv57 zJ%2JKTkHy1VVIbZd%)qwtpb@7)OZs9aKgU(Oj@2!?&mx@k!K0(u;0*BzDMD7eV3$T z54~t+`?~+OmIpkx90eM-f*g&MD8J~YjW$!|X4!6B)}eDNm7NZ``{T#rIqu+oH@(-} zp@_Yc&v%0IWMh;xRA!%&XSqG*_aoJ#%QePI{CVJCkBr7jseR1ICcB&(POuj^vCqr1 z>^H1Rb7K8Z!r`GEb`Oqa-&0jb%s|h0P3&w;j@Nj`ufunO*Z0jHDe~I!bKIzJ-Sl6n z-4?psuA@M$Ho)AZ^)g&8=^%f;@wOPah$ui#HX={_wPeGMf6xWZsWxW*Q5m>C@yB(! zaFOg^&nkSZFNIv^l6ZW#^Ktq#FwM$5%M<*?J%xDi;7Jyhn7T_A&kg-L=XJ)fiLbAq z^T^r_XsuvXI)Sy$bKe2a%AkGqXSW>TRSLi8L+I-1RFk%|!n?Nd*s=otlI8l-g&qnN z2Q5H>W>i#f$;f=`P1KPCkQ3Ef@C_c|ezLMM@Y^V%>l~&ikRdTL*brp2RO+!r+4iq1 zSWbPVt{dN^#CcI5uTNra7;srG>0Y(TqgmPdx@YersF=~^cg~88aVEK%m01qs$&*KT z*xyj~9}M|S)d%sMD;b!F{N(xd2D*57w%VjxH?!ki;@nNvOaQky$;LDI+KdO^pX1F{ z&(5?{t?jS4mn$n+T2SYIzkcLk%0fMYVzBjvlVRuwLAJP!uN}wq3VcdEPp|O~{aJTM z_xy3bg{m|gc=YL5fNyPJDO}`q^zbK%w$6v|G#I~%9)v%pa--7Rba^|@->sdiFr_v# zDL>PgV8N&8ogn(KW&At%hgeYP;71`r117DcaHnL z#|!Vgx~&oP?^Z93($$(H7@scCY@$E*WXg3)pA&Yd^|zo+*Wbx6 zah+c)Re2dZ=4nkOp_NsC3weqHW#93uEQI#HM}ZE37{Qlyg-cdX!XPtqE(i)jf%+m$ z+ySdz5x!|#F%rW$l5J%tuW%#9`OxsFQCP_ zWz>f!jZ2}*T&fAf`ig8NDgjyHY@oklDKCVYr(dzo#@q%oqd=o-Is;ngJp0us5OAi3 z0#)RsU$e7=YL63<(skhTE)-~6t83@=l+Sy;L$fHCA=~WROw$CPQYn!yg^%l;&dW*C zWhR*9v*lhdEe@kM^13lE?{xo)K>IXSt~Xs=wC_j7H6dn^kT;(x(q*F}tiuI$j(w+F zZ7+)djoE2wJb4qrEBveEg|JDRXTXd>waf5H;d<=)CqGX;e}$W0DrI?%7tR&27Xktn zgDpR=Ti!Prjyk*9(+PhA#TUm6EmxNVHD`TAmfyUuExs-%lSriiJm>h zSL4cOm+HTI^m15qC||Zz8gG<%hUhxDQ9Y>al;fAxp>30dzL-viPYtc9O(CbvEg$yZ zM-LC(V5~@!tCE{o+39ZcO2h6<8Rn))phVA+`kEeZJdMyDsVY(H53&16DpH2mv(_cX zsh%dr5r2<>WFrm|FErQf|B%nFc`Ww}5#NXqN8+y^D*Hz+`Giq>ll1J9+3zr;pHQUj z;*kB=6?0En8NN3_*rgVx=Kq$UT(s=n^eTCa)!L7dLnbX6=Y)f69lBMg63=p@8@U9T6Cn3 zE#6;__-`D&YR6{qKej#iT054m5pHdxdDnoJ)Se%CAjw#V0)1uB3Zz%n*EasH9T)%e z>fW|SQ*}++<5Aahsv@qH1Hp8cj^Nh#^7{MV*zvXbHb(^d-H+;36Y~eOKdFq5kw+Tz z)}$X!wq#F51r~fWz>i}xQ?eQ-hcVmjW;Od<)HQ+L~_^bE*EAswNWqZCI5J1Ed)2Q*kc&VcD% znU;D-HQq)Fnim`SM~*&+0DzDEB;qLc>x+BhA@Lc;KKOtK&q@N-3}&P=aG zhhH^I!ezIGP0c_3@pKCxvD$*4ep0=W;(K4)cxsfbJF7ps&ioA`1<)u9wY(4+;9w}+BVS0mG zZZ4IMM|r1)^Nblx5TTXui^?e=B73!y5=199?Mz#ELcwr-R$ObXt302GG5h&!_fde9 z)J_KW@Pa@WB*x)Kw4~gI+6oHP1Z97W0xdw|(U}o4wBF${#JA&DYN5y-L;+gYbR=?O z=|r^zvd;=eh9|VdY@R{lJ+}^kT!;C(6WIau;&!1G#zqlaR$wrY?%w$;7C+@1PC$hv zC!qU}Sdro3t@?DfyQ;q|kqXFcU`i2%oM~#J^&ux>s=LL&1E;s~ZD;(~I%#krMEQp0Cq!<}|aDqR{o?kCUJLO&k9 zg62L9ChZc~(`9UEY=mtlyV)IA*^?Z~EFUSy?%E-0$XUK%zN@UkiKaYi-n3bG}VF$-dWgoQf7Rl-F%|9EG9Mkgjhl zVrG4rr&W2W!*o_IJubm8HGOoOYafA~kWo!Q5__#ZnIB~5%ev-3+~>eG>X6C!#L!gL z9yz(&$_4xEJsoQF_K<76f#j`@9=7THW(w6Qakzkzk>t+=onlV=E`ev`)8&F^!|jAY zDX^h`QE0}nR!?p_jV<|T2b$n>K?6AHbs^bK8VPZUTwB4!mC-@@;|s(Ptk%@ULAGacN_)?_H8K2*w#!@H3& z%AMQMeU}P3%MZugaXOPJfWlL zmak=%&#CzImMx%RDKc%|NiQnjGkSH5uqmtH4Yo(puvE=a#G;FhHcoU0KN`!^9)FwV z$wOICf+5k|ps9L2X9=_0r9a6u&oaJCao5$&w;Vbd=cr|+uw(nCR9TM(yduN8!%%_r zHq)PDca9PTxq@obehgzqZ1ON{WtPx0n}ccK(wn_%V=Rpm5*vC#qRe$aF$Ud*=qZ-$ ztL8j|)$gILszZ2nsZ&o(lpEKFV0_}1Q-!z5ELRG{W9d_%>0{!+8a>XWb4lkrFL4Oa z?4fAMXG+pz=B`VLHd*-DCLn3%k_l8@V}r56G(x_vwXp3vVN57-9~&`j#FD0>f6 z{?QB|0RZ1*WqyNl^L2YbtHhEM=A@o`A-79-?kPz)$unU1FMTF$FUuwJ!`$jC^V$jz z$)>m8tblTBb5w#@fH2vuQWyw1xn0~d({D66KOZeD3={YJUnIQn_V1=NWwC@m#cMb+Ea(<<(v-Hch$2uBoT#!=G-;ypI#?Q`=b=TYP7uT>?^~LKP zZ(FX?Dc*Lap;!?U{WxtNwYXHD%EzY^lnkYcaT=`{Q-`N%b8LH5!( zWOJ0j>G@Z~k#7W#m(fM{x@`<*A`Hyz*eIU{qd?S!c9LhLBI5!#9w9F>p-sPz;_e6- z*3OI{f4;o9wkeCjqlj(u5;r3u+M0$aep?aMUL}4U!d)D-|JY!$aXL}6KIlfUlrEcf ztMT4Fkfc{xN~hYF4DqCBkpbFq{z_XzKrYwo=|JQ}+lguo3Uq@f_dB00_nsO))Bp_L z>;5d`f;6RzdbKf*^tGoQA-iqyKE3TG_%`J$k`}r_tm!1b zK6QT-GkD6kCU&;+mx1D6)Dn(M9WNNF{OGr)vMSBPS@NF3TrmKJ9)(PQMAuA z@>I{}XX!`B&b&urBxY9E?2m+HOTguVhfBmNzTkWms9^~}n&J@{MJ=13)!k`EKWs^I z>_S5FrSQjzO@PRRNzZg`KnFiP?DZtu}i5_0zBH^1SPEF^4f5D(>I+ zj5;>v*l;8$Ht>x2UR3><@A@7gNzS-4ITTmYn!vlHOOeRB$#?pc6_k$W5Z^nwpsfFWBrpN$a@`* zH3%hlFnhZ--n>z4%jYxn=C&>=@u~7ta4Odb3Pj+meFi%zC<}{Mvho&=Y?dKxEw{CN z?O|AE{1WnQNAFTBZNBdC?P&H8e(d;3xyWdF-e;PMm5sov!fy#U~q%G>eU3ta-0lT-7V9 zMve25J_*}`oo@-xqn{Aryn^<`zf2zVX{|m;5KON8iqnocjUg&*=E+r+(?s;->3$oIuj{y!gs3Y8D_Fu0 za#VCfV{$AQ65&EX(cw2%=*E^rORKGe;N-e5HE#r6Do3_hY*Du8DW-nyyBcm!$MlsG zD#qW_=5ctNLylPp$rL;yRVv+9>o(8ybk{3=O}SVS*%;rOz!$?PP`Mm} zlaAu1-o%9C_eo9Au1RI#%*hfM4%R)cOW_(Fc~d>HdXw!O!+#>U<^c2Q4Mv&}0W%Wp1Gpy{$i#fjIG0&oYe z&JVd%FW0ckL=gosOdcGmPFkwMt5@bOZ#!(jFcA>4*4`Rdrh1w=;m6aPj;M3P37*@pviy|v zDYk(obXF&ybqCuy+Z{FNpwzqH7eB~4%4)|s?UE<-HFLRsM81k9T>K_l?4)W=c||8T zqAe2ES8{8jUN`oN&sZTw##kXI_g;;kKYi;Vjk;-_i&6kd?`D8x~ zJon@q8=@(@M?D;ac%yMewvxAxxbKbq+WN?=xqd)Zq)ck*LvK=Ub&bsRaFR$MrJ~^^ zT0shGk9X>i&50}J_A{4=TqQ>O3vOF>i$UGekyj|t-Z*rHb6gHK4_(4Q*p`V*lf4N( z_i7D|*M%!}U2N)^Retu$35jvsxtgj=$$$qlpexY?n3Nw;#HgGvKq6h&ku)(kYrrU~ zL85Ek-|PWNwSU|7*;m1O$Lo?CLbzML4fPvgr`^~pekmO%Y{A&oC<^uDU5AQUi4V@- z*9nrR008br_ORY~sp-$wyxImb`eqcU&E(d5i1I^^iq4~zUHvJFc51DK$T%f0yYF#QkQNsKaz@8v?u%1WtKKbRm;abl@?5q&m|{C+e}@g4 z1Z-L1pub|_*fseh$Itvnj<0nx>8JDu5&)S1@Q~j~K!5;}t5B@&tE|cc$WTK~aOx%5 zcKSUAQXBF&6_g)-!{mc<7DfIr37w$Ga+@gn3!)fFfuCB{W(elVFRp8oiKoRbHr{q= zV{-#8)O~V_ZV9EP{zr7B9paho#-ZnBs&>p5VlCl}LXPZaujYLwaXI@~2NcI9xw9&( z5;k2vtg81kJKwB!pDb2Z*M_~;X22ejFKZ%6b8~f?cFNlyR#TR8M}ZRD_KgXm)?kw# z{WBilDtmeaA}qmSc1abCO)*Cgy>G%V9q=GYD>wYRK>Q#rI2WQKNNXTc$t98(lVb9s zX5##aq@S-?G4Ycf=(Mx;tyR^W{x&;oE=(_zyUUG0PJg-iDaTGL*VMWK6~4(&5lPvL zvZIxy4`F|*7qq0s7csy22Av380 zVHZyG6}Ah;86C%mZxyZ0$9VcPnL)C?^~s?Leb*NST&}lbL%YZ+Np7#7wjrNm&O;f1 ziAq9S2h5yr{QpB%zWh$8Y1~>qanrNW#Us@0?S&n-r+NqH=UfK8r-YlapBO z!06?-^-ZaSB1LOYH>=@!junhS6ZaG~wyITt5 z67MNso+H8D)6w=)0|1K!ZK=f`K!MQ7=42KhlBsKH#fVscN&PtSZuziRa8PDdhAWIo z(9~_taJ|&<^XRT@n(#%`n)7=XEz1P5u=SKf9?=rp7Uy}nCK6+})nT#)Lx;K#`>OV5 zpWm3P=RDd@8!UzPj2am2*F=g85qWF4mVa>P-lN-BNfMbS^!i-&&G|SjuV~+bb8oEp zQ)BmeSiZYo7%X$Sv7w=<*4%3S{i~SEVAKDI{>uz5^e61?1&!3F6sR(zXZQ;DJ0i<`MN@#DIqIPMwh)fm$uYU)pP9fo5|C|7WR3Ys0P1zwzcr(ulEGm z8|kAs4GYKB9QjFu;l?_XgZ-iwRX#-iezVn%_N_0)hhT9rri| zYvTCoEkoi&LBXLE<`1LtvEH18!vnh(%1I z|3kaPuFD%Oom;*qPW!zNb4Iwb!gtmOlogG`=P@v!K5mos$>WI zr;`sC@jF*qn$r19GZGJqjFx8Ysg$hXPitNwC2g&b%&!teJ`L_`1p>)S=!%|QO6Oxa z98*Sap)Kp-sT#(L*rV(Q_OMDv4@U)LZEB{A?nF&gag?@!vS=F7mTAZ@L#*85esTY^ z1MzRk2TLkVjr9piRtdU&Kce7UZ8oRM&Z1^bL>FaY^h(Fy@>`tQX~!&I7sNHTWb0=Q z+~V4H97q`Ecj-%J1XGc(3TW*&nhx(7 zpRa8!EFZkE-=l=UPo^_vC5nEY77rxb^bQVei4t-$--_g^FcW^s#y>YRkb1WKD(+Dt zNf}5Kt4VSk>ceBEPLuj`O}6UQ3WLmJBGa<-fpOEiUmMg z)Hg__6#91~Z3To$RAQ`XAKG;spKL{I{EH<8u-#k@tbtq(?fP1N2hJ? z(EXgquaBnMcP<2bZ!b9NZwmn=3kVV~?#BR7mXcxlerL!rcZHm4Wy~#sj@BQv*FW=v zg3Y*UDSaS_zN;p4AM{r&I)4ycAH)KF^ZkG1{*F3hkgD2iItuNI;Un_p;h5J2kPCg# zUMu_a7(Xk$88m#Sug%FrYB<%E@>6KP5izb)y_~@gPyP zcONQASJS%OI-;JXwDD-EeVo8vq%HHUFnRSEXIJIJFIwpKPY2~Tom8|jow{9f5<>ay zzNJAzeHEOn-6&I&7`LBpbL_@oNvM0i?q0cxOljk@U9|}YqiG59)Nrm}Qs%4k(KHL_0Z@987 zq4GnR8gm+D^jdO*!b#FZxbw&nS4r}CM*{heZu?m>3+77(9hy}oy@S}*mKkcbNFvYj zmlLnU4aghn%ulr;3yn7|4cFQP*M9H&9!{hWeROmA4vrUNKX_jjAG&>rrxm}sk;;F@pT1H zhY>hB&t|r2bILrk@@yWh=^`zVZh=LfJ+pUsXC8bxi$H-K-lKY>B-5ReyP1V(sk<6BhVAtwLMGJEKd~Lhol=6L6l78(9 zzNRdzzsPZbXPg1-U_mk%5zOV>R<&BRcU^@7jb}jM@KT4_tSbt|F#!bP0FoYKt_{8s zR2yd6q6XNxza%sF8`5_J;2Q}O;UHgS!riEgG5LyYJ=gtDA0jc*2s|RmubN9qy4KoK+WLcbs~eN zO)giUJ(a+k?tk5&3GD>%+le9w%nSvZEu7aDK4`_%Z5Qhk{Fcu#^BvODqSJZ(a`eo{ z_D+26-FLzj?Gl^KJV@$i$Xo{mzzP4?>rtQ|fJd;&Ilq&+ue@Rv)m4ojiY3bx(3-!e zPD~h>YSbqwrDn{J0ueqyfz<1fn$R09@E=k@H-HAzYTKt8d=tE=I`pQ5+mt#!^fR`6 zP|x;yGyapRm)pnG{N6D8%S>C&GLiWPJpmr7HC7rM--^g00m-)+!htb zll~mGG$FncW4FGjSEVkOV{$@-m3(W%8uYTNP%im#*R2bW|9U#%-{k)N5TN;mn$YE5 zpfPHc%)&y$dgBO2E^cz23FdTLEVOL8mQ(#!&Qa1Xf0~vt=A;az96WO^0v$~H&>dqy zCPI41w$`76pxFi+MS;%QWBweUVp4Y-6sQw210C_+LxIqy5mvzKpcTN1^7CmVMmc;+ z2O$u8tGINf28obkV)H?i2d0SY9X7l?vhN2vkV%{Kv)d4e4j?Vr_H@!a_#QyQ9h+M?%N0sWe;?Wv!A{r z*n^+fWnJE@_hK#+z_1h$!9H7IQp9kT;SRC7@|@kKsJUNr{p=)8q&-GDBH|i5i@>yL zN#{N`XV^S)^r{{*i}OOAkFYynlh6C34l8~3Vt|Bu>h|$RIz0un047?Jk5KlrL4%c= zfnz6MQTrU-q17GmO+wdt>dmY23A|m1HJ6!ch$K&Eo%Y4%>YaNE55F7V$H1i&S(Av9 z3@rtDDw8cDm|<<92#vypS=(ZEl& zYg*fbATxm@;>L46=pzn6z*^ANOYETuoe_T)IRA>I&~#t@GM}JHJM_9s1_|x68M#mDSpY24=Ie)!9+-fr%OaHYt-VMG|1w2U&+Onp0TZF3vTn?d7U@Zlm zmFj;KG5D+6Uwn-foc88FNLjb9Byi{|gsdP@v669IT9jE)IRnYoq91Jh|sAzr{3Lfn*JuSGp6oPyRYbJCln7K-@L979stiB0!!Z6w=Y6okv=ThXI6Odp)n zG}<$TKf+X@uwL9IX0Xf#{|Jz<_~#}qj=G4I#IQWr^7QN4z_Yct_CcJxx*0}G9%W9m z0V2t4fX~PARMI|nTfdlP#^?N)|K(<$0YhZh3IjcS;`m`GbY<|hAHVho84n!wAC!;V zLGN&uVK%`f_lyiX9ncRGbV#zUD@D))7_+|d+((EUQv{!77wp}AN>=}c>5c`k3g`*w z8vLVS_FsT{DKYU(Sz)<#-93IrBg1YCzVnwu6iiFWXC@IQ1p5-CS^6e=CPs$Mm-GsH z(g9dwzm|PoV#oiH$Qw}vHnS9X4(L<+r_`dCCkc#MzESv^zck`;YdilIu+iH)b{~yx zW>c#VuD&&gF$9$1`t?;XAm+#zZ{9yk0d*S zV!Cn|9AWN?S=6o^TlxxrKOMH-=oe5SB3eZg86bX(2f8W?-*y9I!9#u^Hz&4dBlB?e zA$;O`R3?~_LD5fpv4CfHaIF$wquI2{F{UXBTJ36h-CNu7++uIPJGKkglQ zqecC%&itpw{r|&QT(l7(@R7e@$dp2$F*55Z1D;zat)1U2Hn6Eqv7Ej(lxxAWm-*L< zIq;o;8kP|{mcy}|M|~JK1JUto5JDuKXQENn==nE4^(jfVpSZz?EX0+}v)|d&A@7$h z$8)_CyHOxaTO?1z*qrnPmmOoR9_Bmi9O>@xwZp>U1;E0eb+!?sK$ZUVyI(29zN8#v zsa>Qq*$?hg9NLTa@K5OQV~6?D!1m|hJ{o~#waUDACFkAo6PU3Hh@6QiJxcM3iFUt| z!i852=!_3JB9^M>e^x(Z5<-iK*2RboGPYeddCvzQ?$n-LUu3ZLXt30v(Z9;Ed)?;q zlWJ$@3H=gw*cliuV}ATuXg?u_%JR#TEQ^;nqFb!7d$SF8s;l{(H``^#O1KXj<8e-z zE2O(C0~A;Vr=KqKaI6Hv0w=1!BtvSi=&LA(1{dLb#;U8(z_uAAZU)u`nTk8yQr8|VQMQ6@k!;7MdAT_Tom?f_l|9{?n&Lr? zOxQEw$Hbv+ClF6tWQX?BwV>@Uq@d?smod$8cYH`h!EN%ClKi^s36pPSY`dsAYsP&v z=-Q*0Ix=YSeUvX=Vwb} zjqH2=zgMBk9~0mD37?fI2Hw{vNX*`boC8h^m z{{ZxKEMe&#&$^ME;bXoLloZ2_Oik!m^Ve}tuHRgg@wL9YP2{?(zjyiELe|p^dj!;b zJ%TNFY`IG752~piJ;S$kDG)G?r-FJo++Fs~rcI?Kb{PJ_*(&7OLsKa*EmY5I`4GEa z%h220ajDeI*Xmo`>8f$V39nt;htJ-3UOtAfuNGkJ`FwF5j(`$QnZK9e{IRI!uRpuu zxwn)4lYa7ay5qwlIPChqdZEI-J=;gSIM|FyE8q{t48Wpimgp##`|d}Nz7%(rhcKYa zLKn!)R?;Twm&jdx2Hv&0b?+(O$YO2It6)5M3x9PyQ4~gc&44AO8#PqA}LW38!8*`NipF5uzJ5Z~77RjLB>yD7_;GnOjaU|c)l={av z^~swL*WPJALPKgz`A?*u+#iALMJ`?68^QkY?Ea@g+Q+gdN=%r~pD6K@27u_44JQQr zRF$LNOt|h1Ja?)6JuRwcFl(p(HYZKceB~Pl^OCaO;b+iaOW!Y=O2*+4TJM#~O1^59s5ELYfD)Nn`FIai9XSe* z>w9jDDD=}+#spUU?dE$qkA%ACi61<{7THM#b=)SGl+_%Oz~9XxXKiiYzvCKx5lrdZ zTUkc4HjRikvfRN&hACcStfa>XEYbEl2?$w?Yt+50mYp%HNPSlx82iz44I3u70;Vis zo%9#5At#S$THRE#GNV5rc;!z!f}OrIMUfo;W6pZ2dcjawenom8ie@ky8sMvyKU+IE z73BYsZQyZ?`{=Gys?I3!Z4k`1ouuLYu8%MR&z4b3wj0GCt)8WXr|2A}hz-NqEmTl{SnS3DCQItIX{6|Z|c^;ME!*(>|g^*>78E5q#94eb-2U7BfZ<966yMJw-iL0w2^R~z<%`=Iuk;t=N2=7;A zYfl%0R@h;+Ly@&J&f)SxZTKN=p~gpVm@>!>O6|)^{2pP>to^83rTM87I#F2MGuGv& zy_IC`S=CKNk1WgrK>ZJ!z?AS|-D98G)<#ag+6q&uXogfF{#3VZjs+w!TwEEJ{$8i+ zdbamsC*wvT;VEF1ur&r^X*uTeE$~ZX;(EB(>RyDCgfVzRqDq)>^nlrqSa8Vr*Zj=9 z1V!Dc!BDDzbEYi#rB}IQ+iivgbr3$`J)uhN2fn|;zY!Z_Vec7D9wY=Edwk#XK*!m7 zknrdWvCxz$f-5>ZPfnW1j}2pew=H{zI=a@Kt0sjbqW?JUW9Dn@!rrIngY_pc$j2lwQj}=M8aB>qmGku%H^4^^q+H(6cvgeLE)L(nE&?Lfhweb$_@^#42xo z*63x|w5M-CM7b}~B=f^!bgYD~Wb7{NcIt;>C^Lv-_cBKjWUI;+GltepT>CJR_>Z#E z6&I}KE5^Y$5IE7CQB#W16yv>_S%r;ueBuO!Czx^K0XS=oQj?SLr8QS?p?aZ|OzY8w z(&{hk$$EI1uNW;SZ0PEG~ z)GA4osBi_IA3m-GbAFh)fW*>XUO~IWG_UC!{c;yv1ak&SNk%I?P4{Jq*Pc*Kp38lw zd+HVwVr%B;aT}*#r%S)R^ce9Nj^NnvzCeL~K{Zd#)65iOhggH{Nqo$Sh_}~HGKguX z-kQ9aJSt(i0d|}co@+B*>x@FHxnnL=@s@0=xS3niUxPIx0c=y6>q;jc;W-YeMzZYQ z(OGZSYkNT5&GAf&BKNsG+>r>eAZofB2A>A3fO=BPJ^wd}U*m>^iVCD9ig)p?}suFo* zGS(Qj5{IiVy5_mA5u!uM04&zHf17a#sd?&$$7`N?w>q7lzOe`QqIbYqoVt+Hm+uEXq|8Ft z0#0cONc*?5nNIJcok~Tllv;Kogq5nA_^v#(Jddk0=7XE$2#ozz5>Mjwb(j zU=MC5KuWead0%#YY4%!8$7v@|xOh0N6;?Hly+}1eyh6EiWYl}Wfmts_KAKSX8-b`@Xb8)kzQCuDiyzMKFjf_q*Gd4PY z4JNe#HfSF@aJtEjACxi6e`#lpi+#ZGSmZkWyoB7yC6*EBkV{`fG&BHOWG^e6i{YLBaQs+j=u6c}ja4i}UBgj-5_^^Ud< z#U~GWGfuh2Ud5?N3H;S4?#VKT8jkH{W4$i(cQG2#=}~@kt7$&caJiKf10$(!V=sSQ zyNO`FyI5Q9y=}(LYdb$YRo9x9_U_KwUcVJes1|B>x&Qt{zl1$@ec{2*6R?E#XECBm z!HlL*#kRPKLMJ|hM&<0ng-El-mh_AFFtXg-jANk~^e5jsjO8dh(t7b3=%PKP8nLG( z!TWnf+{MeHXN7(4l}TAMDo|Gx=<)EXp+BHabS4pU6Pp#nmDba7dLZ3-P69KKn|Nh3 zyE0TUQSq1z8DE=h;FB0A%V$6scy)X=J+nv$Lx_32D>*;P_)HY3=kEfKQ(b!k zCjFz0k{REE6epN#*>zte4807TIK-gLv(5M2D!7u*?l^PxGW{5U&IyMo(uP(nj>FxFCzq$b}& z2KTkW9-~0VWGf=T_eECHJN@K(JUAp$N(EfsDmd#Twr`lx4YxhLeu-TU2d_GOkT940 zVQoxVPx3wZtF;5=!+qbvv^3S7sR}{j=<9?uKgqPq;NX^@1nTmO`|om~-#JQ-jVp-* z5L{BR%W1rMjWzF^OYhk$$@IL4tM@nx>fak{)oc0o_2SSVrP0_nO!r&g7H8Kv^9c6D zwOkZJtHkrg-joz+h;BqIUE7>|f+n4j?2xQWuSPV#p=MhR;ZJn|XHWBcGAw%f2Z5Mw zm~YE`mWLyJ^-Klol8xefs&nQF;(TO8tv;t(@OgtTHKfmXfRXa$vuRq{5&sjOdf;GK64<`pwCM zwh42ZB%FtO;Rzz=T3S7R*oEaRa3J}xnT5vu6!Xvbv&H_!=)g@AD$_rtf`%R-mge!D zUPuhc2sG^?*RFM}og0>(1~+h?oq!4$zWpFAjaOK50{_I%Tf8FH%2dxC_qQi1hBu<{7ViMqry zz!@sva>SJ`(e8fS^M5=g$YIp8xVf>&*NIu?NF@H|bwvRvtEnGJ@0mqRhyvLUG1`xLOyrhRqEMh9Hm0j-u!+2{E8M|n75~dQ z3Pdc+&Hdh#wO(CV9$U^t9h>qH)a_Xt6VR;V(MirYItnU?`>Q!C;+{8FMdnftobj7c80iii+Zy}m&+Y>un_#g~GyvCt6Ch&9E z(yeRym7K8;ta@c|IJ(R-S#K~e-oBmX3*pb7vhD@vz3Sd?+{&eawNPu*ohIjF&<#4* z^y=L1nslP(0=%nHBl(9IWhywVFs73X0?B6`P#lD?xSp-BvH8R+Y@NpVd1y1!HkADk zNl_lu6YmAUzN`qZtEE;H$Ou^taKm4l&wy>YUmgTI`=Vv_a4mif1kdCVMB0l_qM&HXYmFI>a3dv#G)c^^P?`(|`m~Er2 z#Cl4&=+gB(fMbuw-oE2o^z&zTYJ!C*b84LJ4)|BSamZ08g+6Ubn{{=3&U1;wup1;{ z>aARy}CSqVga^0dnVd`PxI%|ORyQg%bXBkAD7XTvmai|g4GtUHs zJIN)3)JiuRuT=tyi3_SQ{WG+W_HUO5bvj3O#iA>5Ykj((hcEOFftV8Ctijcx5oVVA*mb<}f%Z-{P)1@}cc~y&rjVJw2=q zU?N(B@amW+6Ysm$_@49y?QU)Kwpw8G z5UEn#+HPE*rGtIB8eyR!oaahWvWp5|J{-Op!f_dqg?>Pr-uap)F&iM39(;*!cZ}aT zCjUgkhx!c)RO24AWjt`BDm}O|NdMM1%(c%y7Z-euTb@>G>0|pPKe(=+G*n~zX z3vw7<4x4_XQR4CcHYFsZg6kFpyqHx)6k6&@n zBTFoCkwHu{g^(<^;z8fjCjI4gb%L1e`5)}PXIPWnwl*3BqzFcl-hzUH(xgczfOJF< zrI#qEfPhHvgd(6+0RcgpB27x9cS5g9m)?ugNvHurJX7Cyt-a3L-}U`D`#a@3`ww1u zt|aD}&lq#uV~l&;bHh^N__3es-e^b8Ei~o!<;o*Yo6F(nI(q6Hk14Tz(FCqgb8JRs z=^IV^9MyvtYfemEJu!Rp$T_i%3DXMnr3M2Pos5*Jr`qokI(tgEUkDdTRZLzZrAqKGcTM!E%`D8;%gx{vo*5srTp z`3=W*3gF=sTuL-n#Ioww2}tH$6DR{C;d)NkHL7CSqolVx`q#MV@U#o{KNlTdK9{kb zw`JL+&|N#|PqNT^bh45{6)Y>#9J6{YR5?xt`LV%^sx=vm?aZ4JokJjv*OMoQ|mxPKQVzsl@8rpc#zqf8~wm2JHLkKDWBScoKqvFRVoyHXQZ@Tp;<_*s)u!%%4Lk?jS&`|SBvCDh1 z4(k3>{v})AFSb}pob);lj|TYIRF~A_V)9K_6K|Rs_W)`MNkD)4b)pvHpiZ&kIftN$ znR-sm0@YhFk1xdAWVS|)Et0>G@8gzO%&APr1!=}9ji6k{vqNn79}AVe0dq&P)DWvt zD~$I8LKiOjWWryQVTy!5RVHozjIuVdi}~Uz_mVXXavZ&Y3|6UL z`~@L3BX4?jXY~bgJo+#LW*GvDbb^(iEv~U=QHl&8XI|4ggx~NB_yv(Vq^8-TMyL+C zGB)yxUYCMt^$^ZBsNzZskk5S-zi&PG!Lxi*$=hB#G1@`_9trV=H=gSRHJy-&kWlwf zP50R8x4S2K3Y`0bNBZfF)7*rMs55Jq5Nt&b0?hYM2QKb(;s>G^%^#hJufrZ;>n5D5 z49i*EbfAYrKM+Gm;I`PnWByC?*(LoJw^FId8EQ4gERRHhMZa%Jgiri}ToUc6O+WJf zo*CctQ#zX@dZfPgAT4zflO01-d{Op?30tR1$1WA^{026uzD^`;9joCnPfEV?2-*AFj?7CoQyf zN0-L73`DcVla}=TUWZc(9^x(^(5K=o3If6I9P*U0{2=Os!{hdet>3IEB?n>2s~qHG zk+mfrWF*n8qir+fzaTNAplU$?QmXuGujx#P8dW%8_flZF zv_y!5xWWDKLYm&4K?C1w)6o<5{g$?{+ROWF^`%>myRN<>nEUM*T)t9bOY*8Z>ch*7 zUCEON5=~^XYAe2~a^;J&^gdAWAQ?r=mm;g;lHTf4bMA`1D#(jrkp1X!Z-R26B>@fe zPI+7KNN^9^ufgz-GXR0c^?$-vj4fbOp_)LulM=HH1F~i(3)&|Xz{^%fGN7O2h>=~_ zOMgMUkf+r7J@BX219)$bufhYXJHp;DVWITSs4I2R&FR!WT1C%dOd8@npV-$?6bXE^P7vEtnWKiAnuXanq8@Uyi<2I~Z@QcirZP}S+pTI8JGZhFYR>VVj(^!;e*LM!zbQg6sR@hYl| z^6cvif@e=l4_*#s@08kzYUXKpKfPQDI~>eL&J=#LYEQSoEq+>QzjuHrWie9m(iC7N z1{$|2@Hv%wZu;QN@8sGEXXq^_L_*-9-Ozaiz3s$ld*;GPp_}-VG|f`yi?R>Sc0(H> za7xHQI-ozk9gF3lbe?&lZOc-$=gWL+LDV*ntXlg1k@!#Z z@k}i%l#z|`hIJw5Bza?5 zFC8UA=J0|!MtClqy`%4ETJbHJ)kc}RPmiwL-y9+wi_LkFMT^zL+ML%hrrTB3Z|lF_ zRaXy?oKVfl$$16}OcM+$So2JGy00%-QqK^blvR*M*m;$OkIKD#OtjkTL*p;49cF$j zuKjq!T@yOKF&Etv$QjroQ*1c}ax}T}_J1b{{1?7tGhpM#(P(YYcQ*YA->`>&(4l7M*94-gHq2-JTpdhtn7!;{`)r?&rb#$gnr!I z$oz89k%vk}AigivSJWlmuS;0_UfIMKS6XHj)WjVXn7=lWbx@kC>HFDC)7ABQkNV{< zxtW&!^P~{3^o?=eJ}iq)vXxbWmYjjRWo&B?6W3_E#|c3dbrCtH0^+Ai`BR(ZR6_g< ztHJH(b~(IXx*T{_+MLb{e{yVGoXDt3GkO1-yDDZmSw&z+n*OPUlR9@EcRfTE&}zsk z5cn73=4azH3Eh*QHJ{t3nJsohiU#Lg`zqILTUY)=^Hi3l5lz28OF5xxvCf{E(=Nn% zKbBc&rAP{D0WEhugqQITsfIh8Z()76es#bxJwpM%-kh6pKC#_TYy|(vDRy04Iy3sz ztj^Nz-bwKOp`=*)y!{hAe1V0{m?y!8pKF)I?gdMrPvS!Ui@H6 z@}Y@u4h*@;UrIQdOvif_?}4<1qqMFe{a$6@>2t~>$H(n&h*E-yWu2sU+dRc+iHaA# zS>u9Q-D@hx2fr7ke-+|gPp?!%gd!cYV zXAljxg`NVu*NDIbQTA%Zh!AJK8dZovi~>oK8iaUAqEE&^9Lu@zq%Vq(pZ~e&SRrX$ zwocb|`*Bmt7;|4`2%>-AdlUK~=-%L#`OMa(c-K<}Hu3|p4QAvfF_JA;>$YM=RSI-J z##B^3-RzV2F6zQZe_20R)Wph2R$W^6gr*2nl(d+|=TMGq?pPBr%KS6!7M3LK23G7x zsVIfR)!wh|5rzW857q$>`rD%cdA2@(ziYN>=e0}ayF7EO;7?Lg1WzKr`=vxb+j{;B zVl6%DUziiRxsZ4=Xj+O|qSIbCXHkYY;LvT!=x|rknvv(?ZyBSwSS%ylC(xsL1(e{( zpGqIjg+h~Nub8@lBAJRu6>3w@qwcNr%&rf+i3KY|ybEAuY~9Ty1h(KG9sF$LdVT#L z;Dt^EL0r!Qzu%yyv|gxYd5jx+yi54zmUvpw3aMv2EyTTRY2@&wj7foq#%WQRNxGm% z>zAr&*35y#ZT9ZX`gs;4?#E8Po!nfEr!k=lX{{GmK^c>Wc)}GG zU6b`at}V-k{@_woN6Ic!#YsRJ)v2?gA2+TVxd0>WnLqg^clk#LjqGSLXlCe7N4WDI zk0#xdr{Akr+0{UY9Nw*tomk_n=8BjLB6z!qZ5XR=66H-!eDcbUbnq08V6u4EY%&#D zAhL&|0nhV(8-fMQg-mGL=CqwnB=OG|<*KWai}3Q5|K|BfQc~9DuXB~4_c0yqTAK2h z`l4v|RFd|YTany0{zbI9p?M4fW)&b4cj=NvApL4KYtn!77Q=)QY!b|lXRWg$26 z1`0n(e=1LPSLqmKz2Mu#epI9%200WtQJC?4$AiJcepgOHR>OdbfwVKYecWXG@n}Sm zu9ms$MHOeZI!-%lU->QHu4~m`6Si$i#-}l0`4ft%&N*H!w%~M|U~!@YR(Yln_1auE zy+g!M-O-XRXPoZ4(sL8Hg?cCWc#%LDq&5@5CSq8OR-zFr!1i89IeVk2IK8>n;Wg}1 zQJrI!iQ$w@{{-J9&!$1e@gubk&Y8NMFi7R6XX3^xS@y_ByvnZ67u2TQK$kMpqhnzz zjTeKTFwgp6{0P%^qkB9|VPG^G#r`sE2W%ewek?wBsxh}x-EAClZo5^|yw;QnR-2=G zA)6mD>Pr8;{M&6^k5+q6$E!{9PPDc3?Y^ZCtTUiG7}d5(G^K|H8#CLrnPpA^CDe6Y zcOgJ|L%1QQTMVa-6tHl-omO zCazRo{x%xT_l<`gM`YV-ok7j!ZiF5!zwWSan^;{FmtXm41u_SHWHfwFo;}U)<}<6t zmX^Tw%Y@elfO?hV_tm~vXw-r32U(mlEzv4y-lKDIw#_jsZ^mv*ypjlWdmEzFn)Yr( z%QKEfoogvA`@J&64hL6spuvUpsYk7`s0$c=?z-i+bjGp6If{3-3>nzK(Eo@bjT7zN z1QU4r#-vfMN)kWOU|(L9Fu2C@-iBFn-jVBhPW(eBa{RNI;=*Uf-#b!2&zes6jD5Ro z=PNRV$$)++pADCz!(@dUdZ_gBR+`iC_bWfo8Lp6XXh9WvAYbDhig0oFq7Lsh#5@kJ zY+ zl4rZRc>KOO)(%IBBNv++Ou*-y7b=_cp=2vLdZpi&J-&w1n3$@ZtA(kMoQH7dJll~% zdlsx2jOdKd%ubscH@9Vm8EJlIwe25>ul869O*G1O?dR+R z)LXuKZ?IuI_PS_^y6)*}Qzh)mh_qw7U*=~<&~X;iu|a4JidSdPi54Q}ojrn7>*~@U z-1>3v65SXZbo&BCSeuGWw#{Q1P(lq{>;-m>hv$a&I(<&Mx-NE98#qGJKKVC2$JIdQcna&CTigk(BM*o0suzo6^T4b{$Q^S*I1dF$vecRvL=D_2IeENYPF z!-lhWSd`}1J=9O|_LeB7qEV8+W=xRIiEkg4=)W_oQ}78H|40QwU&4bcNWf^&#h zX;hV!{V{gs=OmP#U`Vjyrk!N7BuhWnBitZyZN}*>+80`~JQDSig}(_Vti1B+IJ&F* z!2E@T@9<*tiUOl2g#@HxAeKyF)l?}FK~6K^fVeYhEAm#I(DCBpJ12RG zc2AT9RxntO!z16UYIvXjJU097-1SDo(UKx<2=eus?W7De>zPzXz-&u{6lTM%zd4-N zu8_Wq*5$I!GOO1j+i5OwFCLNWb3L&|D#DAj%;s|$mq~i**PEx+GJdYh1Zv-Bqo5F% z##~-iGhFC=gX;p*E0{}c2D_Y{pI9MQq=_MoazwedR6D0Hp}e|XJm9;@>4%Qd!uvSn z;yD!Qy6!W5xBjVaj40_fZbrTw8TTV)h%X%mX^QnLaYf?pY!uo1q;qe~_$F0Or=DQn zh`S)Neb?haF*IC`YuaOQaO6a*AzIaYfHn43a`#96F>be+v(lj0R@vd+Ak^o!7IW9#+q?HjlFE|7g`8>fs z8zj@L^_5ut%zPkmuDytO*A;*%IDN% zs9m#LNb!~F&r~fQ%h$TSk%l1$Yoa43R9|o5k*?Qba%@G$-+iP!_@dEycOZq15ydlN zUv45DA8HbKe9pf%LAurTVNMlwFAuTYKZgPSe{?iu8D28)nep9Hd)JTJeB$$g?Upjd z+$?G<3VSm8Puvh>dqD+w<$(;|8i}V2!d^tMZ+*l5aAwH5j4D>O-OJ%MAIg>by690x zg*9pUS7Guc3zZ{CC-)nnE{NC9wB0rWKh`}Ie=!I5YIkmDOq?_F6d8jUJnlmGyYPa{9o#eZW`=amp6W#E(m@)pcY&egh%H)@T(llAe z`_`}>I|KNBH}aJIyWqx8(AcF1Q3)Xkr-+aYOku6TNFcu0O7*NVc9Q%CheN zA`d##aONqT@BC}L*+RIM0PCxF+i4)`@h!kSenB{7J2Rl4=dj+IbEH^loBKsLpQX~< z4JxExsyL7gWI4A@5qJTUy4|@#2bc;tV99nsMl+W?7|-qPZEIJenlrhjMr=>Q)5x^J z+vNg}8d~$3Nq^`8e-g_td-uvC6k|S?-_ucuFhm>HCdL_r3*zUEn<~-5yY=JJcM}<#<>nHa*=m0ME zQQ)BZSk_VVt0N!EhLbMHXyvL>K+c~Z`I+Tu(56l8A*eK9&y7hdq~4sIB8j0nmh99j za1LJW1k{{_f&WbfEdFPr90m=3Uu)Pq_Z=>n@;qoP4}KqYmZ^^raKwy}+M{Mz@XN{a zVE);nV{F1Ftc2}wWV(LEfvXrk!_7U!bdW)fI*)T(UqH65pPH+^KcRm9HSSIeQKmVK z(3(atSwHLX)5Fc{3u-8_a5l<;?+L9;0=M>PZrw!dppWUEtjsdHQnNH(|FC+X(}HB! z`dB9q0fq4T%G#5|H7BnlyAqkfx>9L%-eN0vNj`0^IKbZPuOY*~r|Ua)1eI>pa?KNo zz?rk7_Z0XK5+LV)L28V5Y~inx%TWQaX2;2~RLSqdot=c|Og(AtmU(-h8z`_N<#Xc# z=cD<|AK-*<3p*&P-X06u6D8V!l~#t7+n+V_S~UJrU974WBeOSNOWI>8Gv|0Tnv9pl zMREs~Pv6DbU9PP_JN4lO>SAk6hSHSHN9Dvk^7RLEiaE8*jNWEy+Mgq9S|hUJcqQzXj(@>ky46c>Z)Y`4t8nVR zgwa^V_ZN51&Q#I;m{1MJD`buprX>}aPfT9EY7usahieII0H3$;s3nB3X%YziWEq5E zOLooyg-tMge$3`HON3m?Tloc1NAGElUM{k&$*vXEU1u0&C{fC~mu=ssYD$^j%zn8R z(}1?mU&S_E{noIVFBKc=6fX%0>QCDv8uRN%@7#AluD^sILr`LceM}w+yKTuEH5Hj` zbp|vyJ{Zz|exyQ15_dcTfc<}AQTD&T>))p0{(Eiz+rIwW2L9h+0|pM5pYw^Y>X3Y) z%7HwaSL{osr;63y%%!}b;EwWV&y+wtias#1WKNPX|BPb^T&;#2Htnh)Z$LoH=-8IP zWJ$<@;j_SK;2L~B0lo%kL){2K$IE~wS);Pi|9UC&U*8NlO89^H;|K6pFo=xiytn%H z-s+=~vXuw5Wt6&)??uEhaYr9&zMzmmvHpG3Y_)AR!mQ(m@%Yp?cE=itq!7Oh-Dw;5 zkr>ZJefOIkDbHiC-Alg{BTt)~f2%^=AUHUyZm4AcqKXMDUQ;0Y^KF(cf%jf98GK*+ zZ&H%!-sL$H`A0rO|J8uleZcFUoIL@^Z(g2h_`#_D(1hl)*=;UiOKC3M9QGGNAK&!}Z<>*&s%XiHMs z6|ot4j@4^UheT9A@qixn3nC9H`gk%VrT{mv9Ag=2H2q3XkBKYIpAuqEmvtJNkL(u! z!#a3zoF3DB!i;{H$INwuZO%Mhxr}}imw$MxUbrT2{>URMd)X#)LuDo(U&s4hna^Ut zOkMWOC+l+}qEry#JZ@Sd#Xor>uab2#80~#$zkP~BVlt@KZg|%kZ7lB;eTZceN{zjI zKl(%N?=!>7t#W3}dBqB|TGw(&+L-Ko9p&k)^M_WYBI~sH4#e*%)tk*fAzoAad{8ko z-LpK=#J6K9ZK>D+Q;@$fV2l_uMxUMmcZgvF-QLng)db}zF)O#rdJi7QdO>)I%Jkp# zmm`kP&VbWhrGc=JZdGOSgnrlpcbM`?=h}nlTu~yrf5@58Sq%2BVUz6nvr|y_XrB}x z>AiL_)8&~_cbOcHBzpQZz+Xoy)={2m??D1a(^0q$%v$jJ4lDC@tdN=$n!f{H1052K zb#D`BiQX$qDOpd)D&JUBd-5odeB&AJKRxY3w^A^=H2vpkKUU0v-M&A$Di!=ylZ#$l zS7p|9kp7|HOG-$lvPta_itoGe)`$o33#yp-z9BJPzyi-JEX=8i>nRU0`qb{$9vmh6 zg69k~uj&aD3|(cIfhBjq6s&>bYbvu$37=!WbTQ@UOs=?oB6;eM^`lMbQukN;;SZ`u zQ5gfAu2aQ~_@in_WH)8-`sqfXB;6no{NY0mgMR2+G+|mECOm-9LjKDYRlIP=>0S7d zCeUdZCfenv+Z+AYEC2e||64!&oqBtt+$jO*sE1!pUV=_{hy_G49@EnZ5zpFWK$BOB zGCLYbM}5xa6{ew|aqbE~O1m}9n!)Dui2EH>nG6O67T&I_KLn?SBCWk4J7VjsqE4vM9NE>$nxDvDo?`k#B~ z^v$2hayb3Iu?rAhp=$@NKC72_Hn)VDgF;sEyCO^Nk-WKwloU*dMeYQK?Uue{DlK4# z_mNmpqP4dMV6>?D6bFd93a`-^N(aKVXdD6!g|7&S6Nte3TKma9-!nG=D%XeeKTpqI z19|&(G%guF?}wKGw$wU{BNYdPEP3`kWlscNa5gl3kMaF42qYWi-=Jv~e1h2}1YJVT z(az$*q;VGAG7^LKV@LK|IN;BK_r1>iAN-_b8#JpQY>i>SxTT1E>CL>cx91gwcF(6e zWOskmUuQC-iwWYT3Ouhs3r^M(-xQjc26ElEZ3?a!+U-ja24jjK2E8x{Q9v5<62fk@ z8(yJ}k7Q>DTqE#9`&Wp6CWERj{I(p!xQUUEG-gTvjVhIWP7^1I>62u!rF5@$ZICto|+6edCw^bROJ}+7^{M*zMNTO6IFXI6^g55 z7Qs|Z28o}<(7GKpLtT%#R-UtxD6+;ddQf8Y$?taS1+`$!geUC~$;PFW^HToQ zg5$S(X9PpEU0E*{ejSZ1hz&kU5x7Zl@XcGP_)~G6)5p5!lqFv}A9@AyE~CcR7q&z2 z-1AIj+866a99TC+o%!rZozTqHKq@kk-&ptVs`-SL)ZDEA)o3y*j<}^9oOh zxpTOnUJ%?#`vGPgH-xAtkF=-^)v1b-7=C!;H6ujUpYF9W`{iL|h1jX~{hhk>ifK*f z<*n&b?}W(|szr%jQmcNl4?d96ax@M--{ZZ)nMTYNz1;cXZAt4!4q3lHlJcY*Ei1?9 zkqjgAI8+@iDqO0rEQ_h@T;veaS5Y*Op&_xM&qAU2_NTy*B!MA8=HPbk zHC;+E(+f?EHJ(piXHkj^`+qv)OT@j4`dGlXS$4u>&-YN%+nSckQKd?c&7W=uws{#V zqJ-_Sp*LsSwW=(!ir+G$dX(hPqWFa@!u1gKbP#T>O>DNBFf=7`;i6d4b>?d3p& zZf3dSC$U7YNPtlp(FzQ*v56uGdN|D-lW%bdceYD1IK>uAU+*Y}5ay@n=OOOn?BGF}t z^C8gGg&HiK;(92TbOJsw3#Zt*jAuT=@$e)#yX5%mz5?a|-SgcU>+ zpLJlizaYQumhaQQ*lk;sI;Dy{o8-DYJE#Eu5rQHc`vob{N-aZDKdp@-A6c^5k_)<4U!_f88Aod}5Al0T#+Y9jP8>%D|C`f-pK%-yqe=F_iIIEmk# ze$fyFfi^e9eelmn<)2j8dUEZ&ubRpaVGkYpvMSFE zFN;hq?`WoeZu^Qe)&zM&&Ft+Z7N&dZWW`Otw_)2g!6+D09oU9L4=1=of2JL;9mO!d zGr#&;@B1NJqt(_T@#tiFqBS_j1a9dq4GyWi?eQ>Tnh)E0m3Nn9;_mNV*yNwPaJaz` zUg=5Txk{tOY9(Pv_g}lPJnWG{6P%r|ut1I<7d6w(IOl(-fHP7tm!G+K&I`=JBJLrZ z34h@ukVgClNDV5u#0A4T#9}JKtg_PET44FC#L`2<8@W1nCA!X~xb=dTIGGSap3q6S zR5`qVdb^dOm@hwvG;Hb?xsgfg7-ueV(3b7bwd2wQF+kULZbj}N!U+D>#4BMuxem`a zH|(#~)Fn&sf6xVTB=&muhU4Tf-7|mWh+UlDV4!K9m=sZI(^R$Pz24NWa4t}`P4y2r zn>{`IJEr~yXOMj<-k#qG4Wu*~U;jpEs=vV*a*yes;EZ^91;zJop#TQJ8OW6SpZ<-` zGNAWA)|LK-Xy{`qV1a*7BNE_6cYqg@{=$p?vUkIF`T%GIrRYDF`WrO@mI45b|Mr{S zVGz+i;)_aeaqjn{Ru@jNbk}6t4Z-5dB`|mWocKZY~JFohW z7kDxUkQw8>32!ZD_X=Sf{3e6|u<(cT=;r8uec>-+op0dfyBwQWS5{R?-JE2}o1Xow z5QLeI#{9f(IU3wElRRT1zpn<)tSP)D0XPU?XcLdlAOOD}9|M>@$kDUlkV%w0doY5B zFb>}l_3$Rt%>q_EDnEZ2Hpxv;iH0Iaf#s~Y5bb^g2{Fvx=N9h%+!E&2YyOc?D{n_< z8@jKhW-456R`MMwE=-N=@z6G8upcmqV0YBi_)0>8xW2yAbc@(03vnnjJtV~`hmo`Y zKmw#Vf>`}fU(AWTt*`EokkM_Du$`ArT;vPLC1jNqu*f#4tLZIp8j5mh#nD@rCR&TT z+0xWGpXfmz1O9(k1~llpv$|%`f2ivryloKVc&KHL$pj2)IDN!(q0gDolS_8|{V>5i z9;4+KVI#-aFJ>k@aol52;%(C}MW6Iw?l@3^Y^%dJ*9gestN zQaSj1$#0d8vTEz*_;GZRpE9Z(ZUehyosY@XFJ_J}NOaGZmeKPNYp7X;9f*;&Jr6z6S##*o+$xN=F*pG43tCXAl#DdYI`};l9k(4@DM% zs+~UMovIQ?Zyi==iMe*uKLg=hQPeR72zaxAjt=l;6Z_5n_XlYs<%mtjkknjG<4Mz7 ziZbtB5v4W0mEaEQD1>XQCVzUKuS zKWf9gA6%@m9(Z@gJ1FAf=?mLT03iy`pUlsOMmFTxyt8{$8Dp*!5qpL7p~BC=8}RT3 zo&i1rv&S3lyb1cMFKHuJqjWZQ)LCxi5~t;0m_&&%W`Eal*g~6O&~cCa1-aLm&l(<; zRL6YHXR+s_zvWxKaej)`Iq-$TkA{BOxjHD&RjB~p;lGYx!PAWJiNeDCV8i9!!4)N8 z>h$V}t?ZRlfFJlIH%A)QrGC6UtCC}Z+?7r4%uv&1n<_@} zOsk^5!sOWQNPV9=?)IF$^xeubZ~&24_eygB)u>Qt?CsMZvRz5mq;6Awv zwN&>3)7G5lwHVHaO?3XmT#j92VaHGn?9-sns|kk(#^vuP?**SCPvnw2k5-q{Y zpe+c>F(1)kS9@My!rOLWY@ zDRX>@={RqTjFZ~MnDEl`P;*8n9%7^+xIbUbJJqG^u#z&7%L=ju7Lt~-NhYipanU-; z9>|T#IWywcgXG>Ul%Xo}YTauR$GhSxL@eR2uXa zw^_X)!s@aR)?^H9{9G%uUSw2lw)w1rgEwEEj18~dOn_S~#bS{Jm>mT77i>0%Jf?F= z$CJ_RqF?&4TGJ2)j8UQ7Ax34s5@KI<)Q+hABQEyJJz?o%!-%9g?;9MpR8;g32wAFIf`d){~GFh#3 zH0`po>w>>^zaet-FR!8e_?D_)1vm~e1VJhD563~6ni(s*@{Ou-Iqh%&$AR=h_6~o% z$7;`O2dTD9`~B#-T~=IMTAHxMRH&mepQ+e*Y5ML>)g1}30sIZ@-Pd5Uxux%H&L7u_ zH`ghMy>g@E%?pn!nYhY@)bl;_m9Oxpxueb`#ATKOuToVq@aU$o7NzMc=lF-_1`7x}GyI85f5vUuuNLZ$;WJOSw3k=IaM#c(qUrS3QWZ(|xrS>MP9~-tF4y$#2aN@F z%C-B;L@yq;Xj2;chz*z93;uDOTk0&paVArB@~NDD@BM{7p@?UMfd=k@xOtVrC#RWq zhXxI%I>0k}zQh=Uz5jj}DlGS(RYFug+!ArbAOr9j0`xvs&NkftPnZ1VUePVimYWS9 z%u;fhc$y1|Z3wB+E_%&JK`Z3p!QSL3hSNg$QatzR%gX>anET6#{K>_Oj8_v69gh+c z3`Da3ZaX}f9W(9##cuR=3s4Syy1RZn(1%+8T>?k_brrY;>|b9%o)WG^xBhMc07xQV z`@03;fXO^Lrw1O48L0OYR|0WRd)gyQkH^-_`s%dtziZWNo8*?zqY_f7DR`gNJi z=$-kTNF~lU+^>LEJb*Pfte{@Pt)h?kW|)AYM=ZGQB;KuK2=A@{S_}O7U!zd6+Q5kH z(!?a525-XmoD4+F#9N?8*ZpX~9AteCAxZ;sdj5AL+AUom!$+q9nD-@qlo0vsXRr(W z0({8_D|q^{2)$=(Aj3nvo<1(#GIG)5itl5^!dz1`nWy?X8aMnQ_ag$j`efH<);r)& zw2!V*fM;5Y+$i6804e*s0b=P<+fw5YCVK9hph3Ws%Bt6y(`ED#F)bfB<^!6@h7EpR z^-EGG6gGsQML@<qdZG!T2m^!v zaXs_*iBqzDbM8&{@D6jfbfZx*mfVLTj1R-Uey%Xsrswz&Dxfy9MHr_^2&_3gJq-o2{i8vCy@Py6CcLOwyh7}g zE{UZk4q_}9oldO15v0_m%w?Id6SnI@cMMajDy%oC81-PE;P+t`f0< zq{^O0_r2TflbEO*?GgP;!V`rj!D-uKp(h%L`VDCl&Hb+wP3&o8URrT|;oxB(=N@7` zBK0*oVG#yZaPbAMsoI87rgqQvJ`Knq7-zP`AWuofwogt07GOcW^KqW<0`oW1nu=9v z(y#eGjsM8tkl+wbVGkvF>>LymH-c8?o!g!u9np@E<9htCrB~sNb7!Oi;Q`Ul)*ZW)$74>d^$~UTZqxmbdrQD(I zN%p73`D>_LJ9cm5I$Qd!`P(XY$?nAUnVyf=JoxG=B_0yTiJZ750Ul@h-ZQDrFzlDd zkKS}Uk?+$I?IgA%{ErP@`do4>T49dg2>JH5k8V|ECZb8DIrpZ*qtV>GEi}2@85?t6 zj9yVSYR!G1e)VY}?=?O0fG~X9+ojl?9O9Y!xPyqth#pqT@;m>)a8lDdRk`;pw|Q;w;lh2L100x?^|FZZ2AfyHU~KeBt$&U21NT zYzZS}iCRWv(@3?k$VB9Zof8pigt&5z{_tmHl10WtNaom`+TVvs|9G3ye@5?=?9O}R zQPE9-@0se`MV1wjpSXCe9%iJRag1Aiz?+GCwhC)SoCDtz{&}KQgcU;46RQRB6|_GQ z!s*#BFi5pmUu~4<@|fY$w{uc_*F`K_;+I`FyNGHEhZ3#O*Yv*5o$j-HdO?eBUf=gC zg>KdZsuxb=s4og6k6D9e>P!wQTw&)v=r)QxyZF#5F4zmQBnKn()(D{H`9*X`UG0_3 zW*QTv`Nru*Rdu@2!ZdfuyY`PCr(Xb1-Tsm)=6T*{YvYQH=NlZ}9}^>@qF!Ys`8^=H zMbxyv*q~aC7ki8h^<#K^qvb?kjOM)OMILw|ck9Ay%w*e>?p!Ioe&F4$jnH0yxXkaI zdJh$VK7R!lzHqKe5cRlxXyYS|_R``v-*HOXH}Xr5W1)9bmb}yPBHS;LE4(P=>=+U^ z?T9R{%?0xq!(XUI1}=zn9Yxu$)loul-ex#0{={}o2a<_3o=0_8)C970jV@1ob?0d} zC3)0NBym!`I1#$hHGf6&yX*GJ$#1tVK+|boI4#0UCg~8_UBI`5-0TV1mt^%G9e6;5 zRqaR*zJ)$NsZ~9Q%BlWR$IsrA!gO!=aY`;EkHqbpC!4SK$rGv6OD&pJ&rg&(o_n@` z|IuIwiesU;+ZYB-tW^+y`Ly?ghDg*o(Thg$I0e(>dRz43C4HlLL-n4T>i%Ez-| z=JcubC5a#YB>UzEU6p4&UwR_6!mUwFXd4kz8m_oRRO>OpKOICW|4(B(J{5L1T(pXb zzo_u^sRZQwr)2!Mze*zw1*eh7B~vWy)VBk~apt4D|9%B>%wZ5t7)jsJh$A$EN4g?t z-p||i3t|hx8o*?a$dP*t8PJGzMANaIRA0D@mcVlA!}|I_u%-AnnJeoma72L9VHJwr z&nM#FqCg-V(;ot~M1F{0piQ!GTA~$OcB(CPVS)S&Wg1c)2;_xayshZ@>@bLk%HMmS z+@sSkGO{_w00Jn@bmH+!C(60M;q_DoWcBFa$ z)-xuvWp*DFeUI57KD)n1lTkR$IkIpc^$g>+fxc|R7MF&{_oh1+6hq&PJ>WPa$vPxs ziGj8?Fk((eP<#{i`}LoX;;w#*GP^)kIv?Xi=EJ&}*4|L{yGD8i8iL+nvj5Et|A0#e zKXJ4z{eT=m%K<@o7&o3C6ae>Y&rNQhT?1wVM6Dh85}`C-TfR^hrdSn8kA8Rtry_`` z=S-_|M`qNhypGQ>ISSGsm(+qYBX3IAjdbKyy@X!Qw))(IOvlt@hE@> zHqc;mUb(VNMw31x)7ZK6c+_4*DOBcVccA+AP`Piv?N9XBEI~Q?0&;W#xk5_>#q&Bu z!uQ}N$T>TZJ3Mc&!qO+@T2Cx*r57q;pWRf`cXh7XT2DFbbxu1%4NBqQ2SLDtI~E*{ zH^B+(8j#(ZOjd3Zlw^5alp!_9;Mtw~KEErnwxA;WmS`1B znwP3ZJPDKpo&4LuV zHDe^eel;odA)Sc?p?t+Fx&?Uo5^*e< zpC+pX;k%1fi&ff)y-Zb*Lkb2*Hf)RGv_4Kk(X?w*$RRhe_IvWo#)SHOkC4sh<=+&4 z5atam>b496RzwgAID`4bc1FDH!-_OMt!uMAXQi(fEkh{}bm_>+CS_a>P|5jwgZ^?7 zxVAa%*Tx1RLpoUVIv|iMyl@ax=ZaUUMGVfb%wPT-fsbjusIns;L`J& zLOJ1wT5IbILsI?4h{uar-iMnEVErsx)3?C-WiIByt@@5Q|ER|6B3DK;pd47M7FdL^ zhtsKpjBav$al}!=O>>Pt;h*tDZ;1E$BsyeyyZo5(VxtY0wVXs9N?RQ4;GT{yZI)DC zg54Bc`>P1Q(LPu)8XqnP&?c%Am@Xw`{tx;@0Q4zK2GA#1;`aRZ@=f+bh3{K?_4;Qk z8_Jzoi;Ky~)+9KqICD{h8odN>S+xXhv#`MRSwh3rK$O^C0W)?z#&64|wFGOGT z_#_zgJTh{#?#awvx255O2q$^&w0DrvDzMrWIM6J)ypBTGrd_yN`lfrPRy^XWtk3#pdpO@_Ro@uRAAeKzJt`E_g63=;zEQ zG+>HqM9l;||2%j6f&|~0e8+Z?4h<~x3Hkuc>%>aVqmGxk36Wlq9XK6c6xYNZ>M*j~ zrk-!Y_&Ttc5W^9HqM7zRswNGP5FeIJYb@tW$X@M~Q`M@#gt%cRFcE&w(BCf;L zi3S2H6>X_~#NeX}66t%$m9zd5DBM$RU|{|C<-z&uLrCmrY^t|fL%&#fy`X-jt@paY zIG=qlbl8>TVbB!wDOV$i|JDwm&H(m^q8Q}L+YG4Ge=4suJdm|rLywITl>09Jf{acf zkBKs%A4xsXn>N6d^WYnop@hKw%`MeUN@|0i>e}fGYF51=K^(FaV~s!3*A; znNS@E$_j!<*Uc}1`avNmD;R^a0-F}?Z)o$6apR-egYMrgJs{t7$PJW_mZda6*P)Gva^&-1k72={J{ID)>?s$jO@z(vKy1i1(xbO%vMN_X@Tn=aEQgHuw`n z>H6{D>BQ`|q7P_lzy}LW!PI#f^8Zv3aa~L=$-&2hg+q=14$^-qZT|k*cIj)AE4I70 z(04xlg6PlQMkJL%4E|FW3UT)TN@t24JrAECZcAh7=NEl9HzfF|93gOBAk%4{Ou4&? zgs5@h{US8Fffox8-70&XF=SV`mDrQC$?58TyXj78CE16@)s8|>I$ENYS!y8l9^OdL zKrdx%G;O3oco?$D^wNH+Xykq$EZ(&eR@M=5wK73s@05nY^+w4jVR}W?8J3iYsJcMe z{1%=J3Y5Up`r70lYbpr~RyJI2l6j#nT`hYS>-8B zcA==FF2?N?gF!T=R89ohALQ`6;R=9AHvl5zbOd3Xom2?XkB8)aS18Eg0g%z@G9pY) zJCYu>{EZ7!_+G#&w5o+sdFukmU~%+_+7&z;uMN)9Vi6y$ljhY@39h* zX(^>CB06479y%?#h%E8BIjOSf$ivOLcn+a_h3{U0_5eI z^<5>>Hy3v9^%|`s4CF>)Y+L!(3Um~^)q0^RL7cl{f*ZKcXpn5*({oo^nzQ8o>Ss;d zi8sQEFOvANHQ1sli((v>7c^JwmJI@&d(QOA%a%rojE%fpNifTS|l%Ah|+@JPWrA`7EKiZs7tSCh~hRN0FNNr&=-9aN-9df>-J9c zp52vsuk^&gFW|j1jT*_~y1D0Hb1z_DZ9=ek9Nzv?KZIw?`~|T$3ZaqFmEYmx^A0Q^ z?}cmZ$!adRx2x@)GkL_xzqe-uI8^d5@#X(Hy#5<~qOU`Z+(J zrpE=RPs{(jc~cEK$MHmNxs^XQ^b2lC=@eRcJd#p+Yb2ceH8s{Yld*&ATPjxUZRMBv z+|Oyl#saP>9)bdiOWOIUEMgd^=F9|h&J8x{A8Xh0*&*JA0o1NP{Srp-z}Tc(2ytv0Lv1IVJ)~~wYs1ABZoyv^&U@qCZ#zJJ%g98nI-p4!{T`Qry` zoVWC$pr&ZhC03CGeV~VXul|C>BAy|~mdN4+spqHnhC{LWH|4H>)0z)}zycs{$BLGR zfC}wGuU_PB$9p1Q&>wQ5C)ZTt_qw61fKCC|0^1UP1c(;s`#Vsa_sB7r^C^Y)(rKe! zV=S%rLVcW3Tj{m##62ha3@&9ZXrv7DSY5G=>bP=mF!aa$mk_*;Q)sPJWzf|reDjAM zt*oAqk|)PorQ@d=>6iU^?4DcnVx@MHPP2awe>QbIbe6>Rc(9^^DajXpF~>N`wf!A5 zwvq}_3G#<;#11fZIf)}fMlpo;d5o2{27xhr^!;;FyMV_}Bs*U27lT#{$**9!R)7$* z+7&+Y?9r-V!T{MADGWU(ZIR6*(YBvxh?_zX0Ta79NVO`xXRILE{vdgVlU(G7T|VRUwot(gX%0^nd1@uNAP5;#dgK&#V1vm)Mf=)=Df*;TVsQ0f-#_lE1(x(;5290bDyAB9?{lEs(3ec4M z2Z>->!@7|M+SdQ^4#Y=%g#hCED^U3LA`efW_nSZ-_wRyj7$0%EnuA2CM-njx9><)y z|4Z=K|H+mS>wkdOKR)~qbWIY){*lfgbl$d+aSx^lG9F7|>>+1=7eb9dN!IKFQ=6YR zmXFBRT!%6lt%*E@XI{sK{e%(4>6=<9deSCPUh9*=Y43m1pBNdnO6fi42FYH^NCCasQvc4fj8;)>o@=m@DF>2zRvwJyQM9 z{b`w~RfG-yfwG2driMdDTMIuFnx4GL3IK;lZ-0= z?JXs4@!V)`=0a5tYgv0G3AyXj20^*4H<8j{r+I=ySz*ya9DlDfFw?%G=hc9L;^6zJ zBG%xOf#${927{T~U5rFk!nzhdFKAUt6r)?~EfQg5Q*!tIg0|C(EA*$d7hfMBI{SB8 zR@SFtIK@L=>JIfeSj=sk7|$kLURmKudg6PZL5MPS0B2uA;Z~5CwaA(CGUdC9Sg%x= zX94T8a;O0VRz#od7Hbw(cYlN)<+3mjG;&08e1ZiKDcX4!wyjM{p) z^-ZqOVxvDDBjmu)KBC%k6L6l3{a%|on3zI@xGBKGULLE@H74)3b474WGj#F4DUlEq ze3wraBOD1}u$>C%i5{G>D}+PAcdX!`XMyik5bua+aT%QC*OVKd1h%1@h^MN|!T(65|cq zl{~aQk2ZnRCD}n!%yY5 z1!{>yCxb-9fOwg3$o2G%X`L{mdRmU3MU;v&7xD*tktOR-OAU!dGg@zpV!gH^azZ;E z?lq$3zPKsfVxfPzuXaGE4bHN87@0DU2wE(wtXsB`XpT(WDm>R7KGcJGIG#70SI%*K z{a5Ru5}i=%g7>!cR>clmdUrl+-4!U-#t5IU_$A9r@a$mcsA_~sbc*P08P2QvL@PRY3dtj5q;Kcp#G4w(*6 z7J7qIFN-^F$61@|YU!6_tW@@u#rf0w*FK@#!3*mCZrv2-74_>}j1c1R$p@x)+#mIn z)qK6!5dJgBSizAU3JnIdG2FT=6gyCo)ZkP2!kKBtgH6W2AUxPJ#CL@I#JrY$nVK9U zZ?=7@_%^!=wYm7@hB=kOXlsf9AJ6$Xp|)))UOUR=0;gfuuQ3j%%@#RFU6XkqXvE7G zSUqEJJ;AXan4xOnMChB*NShg>>C@=mTK?>iV(B7P5qNJ`=?|(A(k&X zL6b}JnFgZ)5tu~K!k+<92GbPLeVVH(>fowa=|SsLS8usZ{f{@2sRF#^_~Hkz&OpcD zQ*W!!g1}dZAs?#!1!+Oe@*iPR?pP4Z&aXEsIB^Xx=ASD$C*)xLgkzfG`JClz33@#a z2!P6GfUY0#hn|1?LvRt`4_oS$cw3Of+)Vo~ALv|cq+)xoH%{#|uTgAs7_|5&?;3P( zy{5PKPz0@Jkg{Yl#?~s45T(SZ3$Gk zPKte7wTl^Fw$#}QINS_#d-OYsXosStz#sgAZ;k#JyENta-C!@Cfoi)tXuB zRp92awH)jDSeGS~CYclU6}CkSL_&$60~9;h3Yp2}iYtWpVE~LzdWvzM+AEAqIaifcJ4=xJDTM$8fRWUlZXN;wn1u z^M21~AQqZSdQ8lcZFIOb*jkDbz0~C#B$()`1-zWm&q;2pz}K#A*ekg?nT+cH*&SM* zV*HN|QUERK+yAflXifaM-75KBT>>eS(d z-Z-$G0_^RYA&Oi%3qf}zN&@(mT`MC*eone1xU5Dl09g9}!0WV4luPvhrE;P8A8kCZ zobCO zQTpUDdyDq3tgcR6EStt{lp+i&>|J2gIJkf$>chca38O5T1{9A?`p|Ybv|7z-3K=1P zp`?I=t$AFNxfJy|-)l(L>N9nq+&pCRbdz7EvXB={kyxMwGfl?E*2)m&yXtwBzVw#1 zS^HjyaXe?Nyk%LkVOuLPh}~4=m<2f=vP?D>4WG8#GFMQ=>FkM`&!re0w+pxr;i^hk zKy)P`hJEx_b|-yx<;Up`Orw@_RL*}!Mes|?x|W&JDnavH2LhBuu%DDENjmuCj0W>7 zH-Buua!}rBl)A0yF|9Q8r2cuj2G^E!7y1cNe9DQDcx=}UzjEd0m{F3)9pM`#!t!tX zKEGzF;)}cKIWtEKIp{Mb)&S(KPGvRk*`lh;SuRc}z64`Nn|oaX2a`U}u3}FeCX+nD zLq0jQ%=xee!<0k} zS3ZBby3+*l;|Hq`@VbdDDF7oOo+{g{2qyD;`NM{<7!m|Fbr|B_37a%2MwFgCcbTWz z>$d*p2tS`|+(TgXl=xk8pe&5YCH@zL70Hj*#?M+X6PgRNMml#-4c}lDh`&~JJ1f+s zS>>^9?Ug_<*ck=?D+3^1IZNY6$4&O)cG3x<0HDdb_$_lZ>hlMO?@w-JEDgO_+tWic zl+8%zO~r^GxHi7Ll{oJWbE=9Q>=>!~Ha_KP#V^42Ds4LuM2de8`~>>yBsed_C=2dbl*SohCxMgvTE&j^YBsT|To^zm^`0b2 z%$pp z^qJPL*_b3|iYbjJdYf{r1YP+6<;=rW<+EP4>UhO{nX>n)dE;tso0yzW>h5SO`}Mwf ziwbvwXYavXIAZOUJ(#dmywIN!t>uN!_&jrO7=H4UoV!u%RV zA(VobR3EtRBi@<$cab3}<3=-mj+UO+3NBe_8J~c8ISN?2&oZs5@M_}4r+EW&NxB4^ zokHgUnU|xzx=tdK)CO}^A+E14Huy(ga&49#+}bdx4*fy8yNn^C??#kK(w!FpcqcFFk@WJfxJ5n>r#?Qui+( zS$F+(&7dZ+V$x6ZW;tl4Jq>OC@jWp5%XKN+Q_jEBJs$;$>3bnvKIw8JoY*|5QN zfSP=Hpoch2N1yb}HB-$S9yPL%XJYM6*H$cFxlv*nmOsP)c^SzD7IRn^V3cSso0&LX zwYN*fttt9ncW>vQIj$vhT_N$MaPYr&tG^22#i;w?fVtCw1zd_e5N(EV#P@q6JE3@* z)Jgbh;|t*%QNj!K1yoNflI~6hG|mPOrY8X|Rp5sG%J41IdBKbUr9zI|BMMxvOyvq~ zg4R^I!eWjkMsF}kGUoj!B6FpYblOz07T0a4V(V-L_8HA6 zBk(hm@L)&M>Ff!V%kNkUP;3m-IaBC#ObSATL7+UZw=|W@OX| zX=Kvok>I^97r3@fWc3>3na^CetgI zoNeBu*4$RbQzx1j>&!r*h!|Fz#sq@VZG3?i_`s5}asIMilHcmcil2M8Dy@A5BOD(X zU$tvEy+9}iPCC`~#-A*&LDgEQ#=L15+X&@9;is|x*N_+U3 z>XZ5Q<+~XCv!BDM&m@ADRJn^X){5tY;Nmv{u)DSwL~&azm5F_M_mWJ>#P~T1>H5zJ zaEU6=CZg>2@l>*-|&7Pw-Oqp!KM{nI+)Nf*%eX>*20%9V4*1CSIn_>?Y$q~ zcfKoKQ}mmBqNGIJiwscS>Ia25Ot;U`i2-NpKAUAp{UJ)An76$kU7G}bcdS}=$Ar)s zIQ7Z_b#oA#U6e3)J^iAsf)(Gf<6}QJ-YmU+TPL?-kI`*uRXRBNWt^ zc+J-#eD1w^TBB(i<=jzbJP5xix1g&0dge944Wxwuj>@cFODAR{s>R=xXf$bS=^Sk_ zax<;T|G)Q;RZwDcLkV91%uzcdid6*M<7+}-=|iG z`1^wfIF`_LNc*yaOj&lcg7Cj|iI2bUg3NmKQ_$E01=4xK$*}0vYV~R1i=`vJr^q*N zKP%Qgd%GHI{@JRFduF^gAJno(F!!5cf|0}H#%lsbQxQ5MJaI9S)b)R}x|qbw zpjyw8qz@g2QPoP=r(f(TEFJS%5*GCzyRO-lcx-_h)DvLb%0@A&t2r^8wS1&gxWEe?gp3ur1afa6D*AH^;56S^+G07?}zOc0v9ZZo+SO#)-#{ zm%i^|)c`hILtP}LwXWkL>}x@Kb?j%#cYLl$I`lPy%|r|u;afN%6q9$K|EYu}i&coe z-d>xM@UgjRRO-!&E80?F1+7gHBwckC>Z7H{tPFa`)pcbaqN9#>_Dku$!Wog6XB<}g zbq7Jm^J_)TM}`2MfX-M4_r(jZTxicccJz!%zU!Nya;%yTWR!Kfu6Oadv01WFxxLB* zL2hM1Y)O|cQ){17=im#DzN5^Kh7N2w9iLb#@+vmBd8|MB4W+1iYNMO^droWJGf9`g z_;l9*6=knCfxVGH$av>!RYh3im&4MM=I5tJG#=;3kdl^X*FyAF1zyKyM;|hlV;ba_VOs`Rkc%;aRP_+z9k#0J>EubU zm|rPrkxfRi-1dIVg^K=lOCdT|xOKVP9T&>^3)>`xzn@N*rm>{kJzBMD%+FWxVoVE= zA#uMBjwWOngX$PO?{_VKK`vqr0es&E+dINlg*uRPT*-@_9=2iRF8XBSu5|odEf=u~ z|9*F>bVv6*$tNae-06zXLf4t%VX7y`3-w zRHG-GYm4GZ`H%#e(VVCH&iSnHTjI=?x*@Ux*p6=8@pIp}6`;wXiO|FAT@zt+yKD^f! z?540F0MSJ7@b1Ks@4ye-y>^>0Vb5_4)vCN1p6)!qstJ4LyFyj6Shb|KVbxuwO28iU zz&%00>!;*p05#(a9z}$a2N5ZY`03uBxfsV>T+B>(#rO92Q{lW|GLKDqFeq)8Z8Y64 zo*+eW&v2>^;s$wGU|}&fAz!xoeV0C)*5+9y<%kr;?Z{oAb4l)$t>wcvg%;)$gOp@+ zS_j-JboAg%pQyE+B)s|N*{8D!6D#w+Q(bh(Wlnz_Z_a>0=|2)l# zliuxKd76GhQOMfc=*bh%&1#)ZKNRl9Vr-RcJ~%Rq!^X_CtnL@-IxcgEaSOwwKjme~ zDS9XgQO?Klnl*UOIGr*#X-_om${%gx4uA5oQ23PU7T*AyaE~%KTC`u$X8KT5%{RPs zeWlsDCN+LP7qKq#;SNt@smIsP)71B=obV$HT z2ApgR#P95Z&DcnJ+SE7omsi|Mboj5cJJQ~TH2PR`?z!C^^t>|mZEnm=NAX4To>5WD zTU|93YQMgNt79XhBv?1|xZP|5mDjI(_ixC)Xn}T51|#VZRp|3X!4JfYuSLr`)81}6 zzU3F#Gh=cjg#;WQYki(Q1$uegs))^f#V>H|?4pV;<+2NkI8( zZW@?gknD=jxEV=+uZ|(fK^4GR9Yv$NVh>ZM!5>75;jgrxC9rpY$l7387&>v$b$@QJ zhdSCbsb_9gM5J=bxyRf~0&e=;E5d`d@vfUcUS;2~&Pi)Di6WO>Py6K!od z`Fx^Td6~<+rqshL%tf>uPgc{ls9cEsm=KVfJE2ii;bm1dkCY_GCo@XkjO?u}ow(gH zZ(bcF0rs^Bm-Z8PWU4ASk>L*XJyF?;PmV{OZ1RY&;!XXKhT1{aR`jkt?5)=3+1|1< z5w;hpj=xA=0}P9+0=69NfG!9yH*~H|w>!!7dS@oGi=Ivv@Uhm1E;^u36Q(!D52oiM z1WVGdPF{H*!SB$1qdC&qFPtC$@y>zgQFa58#iQh900~5W6UPJCs<6Se@K-?M__V?0 zn&u4oJz3|o4U)DB&!5pT)Zx9kZTUk02brd#^t1z4vS#1KR{m_q;uO&`zIzafBecn$y&uBwKxuc_D?EiN)CEHK?L3Ef2Dii z*HhJ5CmsKt&Hc|?sQLF>7zej-@n5%~n_@H-lao3i_roSN7P9}6G(rBi?~vx+@61)y zW!VoIjsMiZ|GklE?L;PH9>y*sniFkuelUb|#g%7lY`9eRxrDMIRVN1pkMSqf6&gR( zuN(i%93a2PtN&bcxf+;$BUw6V+KFMY(1o5#xOGDWmH3m5@AQgrRweN?fp&b@I77|Q zsJoJB?D~od$CR3Nh9%&mxcnwV%84G!{l4uSx8$dKnp8l^XQfwM`NJu*=6QD4183S;qBIRv+_@_x?= z-s*50M%0V*F1>W9+5Q-D5b;Ca`#Dqdh~Bk(FPQf9p|1?g^P>IPy(;R5pCFg_4T5?y zY+okiWa&L#6@&?;Nr~bipY3qK)ek)u1)#h- zJq{LVotxkT7R`l}nWvUw~N5$Zl@*fIaJx>Qd-hQ9xp z6;v~NsexaPuUvIUx`Q}4wHr~*%2SdcMo zJ7cBvGv%nLOe!T|0E`|Xs~>Ik4bEcrsnPlUpkqzV)iQIh2F7qbR8Ra+(4$L$o&dUl zV(YgK{T3+KzUUd}ML}Cq29)LZ^LPEbCq|2b77?6)J%Rt`)kS8z>5xOWIlW$5 zryf3$quGtnXDUmt04d7mkq-$cK~?5{DNZFFxNo}5}>Mi2sgc&oz8sm zS`_0lve6G$xpa4nDP+$jV{JE+K`e6X022s5l^1jsp>~e}*v^j|bufKXz5~uV5(>ZD zI8GNkuE%6w=)f}jG~V3$w&sJo&lrm`87q(IjM|j(Er&s?7+^baU^_3pO33xHz;+5| zkSEbd0ya$Q$aWATwhY(pMNV8)U7$PWvZ_mfH%)MQz0!Q8(_eOf=Z@8Ptt_pIxNCQh zX_i6!cn$=?bp?_8Wbo*0ur}BTGHpf#&Ib6|5HF4o4UBTSzxGUVLz{A4AFpE7f9S1J zJr;|OIu+OMFkyQjo*K=)GVJNN)pB)F zKPApvv^;xLAh&sSZ;8h=xJz+&t_skr;Z9)|M1c`D9T_1_*s2wPeSttU7!B_zXh!KY zat>ropR|~{)4yghx8pIoarF?g0=+M9=ngp+DcmcS5#+Dj@3!o_tb2;i_bIbrnhUpX z>DGDUKv;Mtqb#->^IxkS;=gy()d?K9X_@zH~70A+a7}0L_ThgN; z-2tnPTjhPFx;L91nthJcO3=^Q9{J4e&qA>~=5I5Yi-K{XJqzrg%bYQ(GxdEc(Kb8M z!sVc(VxzB_M^lNVCh|A(N>#m_XedAFhX1(72mpKp!ft?vp_hf`?~pQ3Dr4 z34GIZL5KLtn%lw9%6ewP_!9J@z-_Ss4IWh%3X8v;IAf1^7;HmN5#0R!D&!$cX;;L= zhAtY^ruSdr4w<(JaiRW~y#^ahq~tA<3mi&<&q<{mpA}M~xPMFOouV!Q)0}?3XRdeK z+(;?u=O(kzZKav+WJo-i3Se$1^xlpQ4N#6eTC;?MU8bEVu)XnUKL=3&tVqCb&JKSolx@XbFy|fCF#yz5J7jaPO$~szwl_E7YDCa z8J7g66EC=vG13wh(mM2O{`=;YjXhsqAFF6Y)%;Efc{O9+Rt35WnlgMaz}WO1w@*9R zqgjZ)NXV^5yPHZABj!$k9oYj9Z=)^+H15b{AacBPYn3oxujXNFF1>;Yc+;$}Oq-`w zIPHCL>jFydAHhgxL!(-oJPQX-!*gZx_tqF@yIt>)=RA6w5ML_>`fIXhNP?E3adXj! zuiA#H%Kw50SG@J=a3RwXbEhYui<)}f+we=@D_yvsh1hydhly+FX3L+DM){8&c?Q+%+IcD=~A0)2?(OJW+%;sZidA(lM8;rC~i%J*1 zdHpOwBZ?EdfTHpH7zLGL->NsctyGutd4^&k zush~0e=L#;JbTLfz#;Gi-e@+P9S*DH z^R&K>!?)m^dQkLb;LxS!aNTa%(l2YfWVCPdwH&53+Tt@AE=6v|ASW~8+|nfH$m`cT zYQAs?Y<%R84~osXR3ymzwR-%&HcF4EBK|jD$~}iknAyaZ-;5YHcI1f-lenfs(|Qx> z=6HsH;jxU=d5t11E3ecqvriuf$Ej|ABp>X=4KR03HcbkLpJysEe)z>ht5fbFuU0FM zR_lHwWN&#I1f|G>#%e3_1y6pkR$6xdUd^oy2OWbiwN-w*vXZ46pCC3b5^g~$6CUM4 zd=M)$!2e}8WUTA`1B_aAA~$c4Tg!^6 zXUZRn{d&dmpa~I6LnHh{3O;@~^?Z}V zW3jdVmjeUS?stN$qCY|LEEGnA14pZIk>h+I^nz@q$9-e0IThn{TF1r4okgdA{DMB5 zS-7Y61WEq~iBfvIFg@mTwtDunt_jDXnS=askW1f0$n#y?A$+GfA7s~jJsb419H%GCCgy_z0N zu`X=}v#%+CS|93q4>o5+`BcQZeN(zLbIpORO<;5Qs(_^8M+(TA&}T})BWW$dAKWys z@sj{#oa^6-1n_5BGJuurpSyAJ9(Pp{HZ44Hf|$@?+Dj_&eE6&TMpbekwXxO~Uwkv8 z;)B|F(7}x9$1J3QDhY&DLL@|QM3}6S&H+C7h@+L=S; zZZ$2c^5JCBgMwx#B`nQ5<~O#Qb=z|V1`mfT!h_AJ66EzSZa&E| z<2+fCdpAGI(Zf(Ku|EMN@LJ^Fd_8=_!~ZD7(l|=7KH!LtF#CzPjdws^9MwjWCBRMl z$U-_Zj3o{3em=j%L=8MX6qWb_J;PNd*R1iZ-#ZO-v|0P!Uu`+BndHo4_~oWvc~WdnZU%lF#Fu0j&q_7Nf76i9@BGx%^tiBaTQ;K90ue{pWZf-+8T!y#RM4z}5UK^~io z1@ez%v$(s|{d0u%p`-5juvIAVcyW!m?E&~9OY#a1-}B{PhZrg2Rf4Q0XojzE7wUaG zT*$}4kAi6NZFUnf@^`w3c4L1#QTUM)J%I-PSI~P3_jh8$S<5i! zFSzW9W3eJU3!+0EXbw@AT(pV3OuOgMofvvw4=OOjZPkC|I{tzzfikK+544Li=>W+f zk`z!495eDZsJ6gXT3{1em=HBxGvAo{*vd~{RQ_w9$g>lQ17cnxNV*Yjt4*waH^y$v z#m!f}25&YT)1JxbN!@Tgk%^=VoN+C~mGm?r${%1U1-r+u3}#MGV23as^m&U#0&2z) zJKaU643f*^eGBCkHx>6TB(+=9s!^N0nE^in;FKawjmE}8Wy(uBS*D^5QXoLV!OR`| z{x67?6QK9f26yQK?vkb!`RXPvNG8RXD}UO;c$f|1FNakpUL+{o##8O??D%Nz)D%uK z>?}0#m^rgwHk{$nfM0?fgd@JfO9e?O;-@i#cAzG@fhfi_XgtDf={aHW5;$TLdSW`w z1EfH;7pnWQ$(;N9`b}qV(obG`A6pH9x~j1E_n{@g>PX@g@_^0+s04h7TXDEU4y?c( z@q{LPUD~}i;NZk(Sb-}}6^#3S%iu@o?Yjp7&UTbrugd;jge}DUS%m#Ipk36Ci|G z%*1v8edSearqKowF%6H_kXuU5sD(8CoviALKGCdx#Vb6kOMJ$T{52bfx8YH?DISMc zqPJRZfR4eiAX#e=Y-+y-+x$X@pirKT@j{U+zk#ADz1E+YMcCME9%p-{R@Ob;C%VS& zmo+@!Wvj1BtE@iK3RT=%HB@FsKORsNo|4kuC^}wxpzl}g^4fjD-}?V%#C!zjEXG+c zE7;YtmyJ4WR9qRqQGDafob%^8!Qq#)|Zu3d799b2TEvj{KQidOeSLb z>V*=oJo`7PR`!PahZ-!*IaWBc!8|h(hUj;)v{?PUS=YIjk${MN9PSy|i&Ls)Bc>l| z6=?mNR>6Jt0{*l7K&!x-GJ1xCqji6j8;)>t0A&ZJO=L!laATrI(oHX3Q=H0vCUl+%v(vrN^a{Jw){FOdoHo z?s~FdMc)xvDojtPz}EO`Bp#@Gv90Ttr|<9ha^)S-WZMf!$huS_sBCdAKix9vGD>Rz zO?Lh2Bi|#MY%BU_Rbn?EKU5ds9c6}dzS{99t|%vJXK7P0HSaQ2Clu#XkNDDO+zFue z&TBzNlUWIj4F_X%4Sjlk?&#JJ&4Lk@_uTzjoH+#TAdI(NTdt5;iTzVbbakBmG1GJr zAH-HDH8U>$GQL}MzwZ5OcYbJJ4aD!ndt;L&dH1HY!)gRuNmi^@j(&T)FB4Lk+#(~> zqCU8Olj#+Rsu`&^FzVYnElE-T>Hn-}pJLlAh)3 zV_wSY2eKr+ZqjLo_lvdsk|U~5roGmZIn`UaJXrO$w!3cCCVNDpO z5o1+uwqfIuL|_%g`}!V)V$7pHk0)=K7K_DD|Gm# zR)px(L}n}PQIr)JjCM4fGakMWVMWVM-2l;6s10WML%4i|KR9~v2IFbk2lbCsI8a3X z&jD@xFJ|@IjURa22IES=zPO3)(hKFi5LQ2~+_Sx0;4S8`D&Qm|*UE4&{#kMtRlraS zN3*2-;2`D9dILz=B`P%!D}g_4)Q4t}huA#6*-w3I3X*W!(BZnl;%GwwBn^(~qH8Rs z4z$oZ-J~bO>d(VW0N4Aujhb)S8XPYuN`)a_El3~y{(q$s!k~__(NREkMZR~;jJ-ph zRH9yOYZa=(?i-*tZ*kQk1TWm|p-e*{$)^``$5@Goql8=9!X@tDoCuJ+)(pzDShGvxTZ4noz`{x@4nu`E|APnFEWjlHGMP8KIv7vOlDGU)7eKSGj@WdLbZ>~Uf} zK~HCpEa>HG(p~uLOHp@jq>cB9sMYh<%%>uVODQzZ4@WM1Ni=BFn@N$007Zs{@WNGG;9_ch5k_I}7ZQq6eB zzCI|ugn*Yq8-6Ec}lzuo54`XLR7ut(}6pfq3Kd0SFZN-TsAWoe<8jov2SZ=P2uZkY(QP`3yqG&IXt z$Po^k-{oqaGuGq;#OKa7bQu{ufnAgz<@XsN-Nz7%h8gxwc|Yszt!Pb$>$3PGrN8F$ zKv?$*kdHw7xfB-YSo+O=n{H@DY>XmhsBkv1-Erp0M|L0Bt%h8Poqw;4$1d!+bmd3B zSna~xj~U7z z`>q?SK(|GF#l^udG+y~UF+u!{*D_+zp>Vb$XhXlJ7lU5MrLkDq>vT+q<-;XfvB$?{!bQ2v=61Ooy7ex2V>E{nlI)zvS8sd+OYyNGDt@ zm(70H07SZ%Wji0^4pfQEAeMdpA)eQ_&U@LW3}tWqJDAa5>E7i5(mOqeIU=iT{-;n0 zqiWmgsf)X>x*g>KW>h@0N*6&Je7^pJ&TQ z#Q47P@|i{*6ikPA%vS#q<@sT&;1amJ+J@Je(F{Su@#Kc<1gbuxF(aqw%OSsvlZqTb zF!NivzpoGNkq=4!m}{d1Vwoq1W!mTBJ%!&b9X~=lTfI^+?5$QsTdH}Kw46%HA7yzb z2ZGs86s!~;C@NKzx^*xTb(S$;$p7)h5t_-(kYOtmepGY&$>@gQ$utj6~n~hFcv!)^b)Wc2a@63f5e6ntW#B zNS*5_l-24&s4jI{YY7Xiao- z0x_=ahip&IlVq-BV^cnuTHu~x6K<6fzhlIopnH1`>Q4V4q4RdD)HGXv?6K}lbRG(<0O!TJqlZBojqoZi-Yb!kkSan7LTUtn3A?_;=0}AE! zCS_7v;CoaszxPK;zgrMk2wDPZKw<>^t-6#`+p$sDF6o&52sdcEx8c2qqMse0Fkg1% zB#NzDSvC&ujJj+wRR8UubjTkdj1RNWbhdBJy7I=m@+~x;Ha#le(44EVtoi#yOxIre zKdVNLMP9U{9R3UPP@KkYT!g?@AXf88oc~h@rfw{R6dpVjMt;AqM`pDR#4Q;1 z;@0c185rvrSKVHcPNB&oSr=11Un+l z+lCJ4O=88AuK0~09WI_HMpmCAnIUm*UnN0Ea&{ekSX)3I?ghPx^B{m@`belbY%E#0 zhie8A^pTl-(P7JbGGTlATX;aK+1Apv=*foxO2s2n@IWx9Igf9CSLN9TlH*c@q5l+TT7I2WdI z`r~oM;DKtrolgX|czECkw<^DDvpi7KV<3Jw5pVKR`t6x;s?57@z zHYafCSAxtveHy(xMEb-!ASB|V`}>hSXMr5y0$9L{b$h+eDOCA%EfMwh(aVqV4*3?y z(A3!@p@b$Nl(2`Iy>wu^<4L#>BmOmwxBHP{fvYu^p3ugpp)vklPPx%lh0CM`bSx+z znK*R3z#k@OrP4;MTAdKFExEX&`D-~INrPCZEt>9tYWA+VpHwp}i5(cDYyGO^LowD7Mp^!!4?zxs85`gYH00+?&JddR1|z^;MlDr4A(k1qvi`$n62wHZCEMqd)e zju`J*0ax!U2aIKbahrp4;Ea{foj7Ob-%=4U7*Nc(qen#LKN`N3=#*#iQ_3;!QI>3I zynX@0%*l*=Ya8$h2Di)VI?~X;RWOn zs_rE;qEI?b$D%0qaCO#*KhoukG?jJvgoXTI*S)R5l@RQrhlxkk+i{C}5JKL`3lvs7 zp$GynHD7&b3Fhkuy!avQFyfHNO0aG6JJto}&8N0&U^h3Fn^2dTPH?$G+6$w1n^*i< zcX2xdU<#@#EdE=p;W*l^|3g_bEt^Rp)CUE_ZKF11KUG zdMOVPt$-y3*U7W&zU0Z>?ihQGxZULzI9eLc9=$^;cPtf%DIkI|Q%KaHj1Ny?On=(z zLFbM~Z)A=XYxe)qA-OZ{#|%1_U17SlKutm9NQgw`LxRAg4>`PE=TZr-jl-hP8=RQ- zhST0IN1a%GbNAU5#RQG^_mH+F3c7ZFDeApz!wyHae&9pI zf~KzF_r~Z?>(MUAn@69C>>=$JJ@A=qwyY$6wEu#LbdNIESQEC#I&`bfrDe4zXtmAA zNpIWkbpG>+-~bqe*}vQWOrN44fp@w^JtDItg{qS2baKp#*CAULay$hcsD7M%jIG{4 zt!BV@PP7m)Hedn5DdyDI4wwyPrCD%YW0e49V}CFhXWZM zXM5J;mZO$9`Mq_U`XA<8n@cVi#2h6q{4ntjGPG3NTd#&unv z`@X-w-|w&A{f9#xM~7=8pK~1_L4f0-n*=`;iOHO1R+N(41Fdw9$6wyVT|ymiLWt z=i*rdC12K7(!i0k^$8AG59h^=1C#&)Xd9y?-0sWYcJKus`XCk|b2e_bCs{yiO$n~t=$~sggJUv)JK(9BS zD!zpqb}sN5SXId6EyEeLTVK%mp)yeV>)W)W&V;$B%)DxOHBXId-Pi;<1{$QnhOJ5f z4enc%elFO1rlo^Tm*I#zKT238zFoGqOChd4k9m9Hw{)9urT^q{WuC3T-7tLZxxq!L`q(du-2+wf&-?uz>GG z!S8eUdxaL%-gBGI2*n^jWrpZ-@z{`LqfwK-x3q9xyHJw zz9X{70jC3|G1S(&I^lUa!a+aBB@)5tsTZ?kU4Ds;yKUfI{HhXfhW`cNJW9Zq&koNT zaacRH{=b5u?T^^>;q$Gmy9*ID*6%_|As`zuh94{e{pNXBd>SXwXgcT0Sj zNl=%-2uY02Mx<~GV8B{;0;e&rvg4THjq^5TRSQq3<(cmUv%jV)7`Wvw)v6wtY8KhR z4l7=p$lG%_b2LdcbBT-%4nnSeuBMGF!3T~pu_@M;>aIdrn-PB%3;Y2 zua0RfD!L)bN%dieGZM1X=dy1%2;6%mV8I5@ljfFR!-c9Sq8CUY2}#um!F{y4)2%hG+uPC~MZ|m25VBvXe|Gkj zK;88U)-DFz;Vrow(w}A1%wT&n&y(~}ji4fX43=y?wt?M*in78hg2iV?uM22bp||xa zBNS8=r%9hCJ9nHrz)BR(4#X89aj)BZquIPyrGcq_K{ma5;o-Ry`N|Tf3F~s5#F+9+0ur%VvHAe`dXNzbgcE=&xYFi{zaeNd;p%sBQAh;Ae9#-P2tG=hq z*TJ6K=+btbVqqf}y$!Zi&`LagU`-E=kvgP-%^d9W5)~}6$}38%JCG6Dc7V_>AW1*X zKqb}ij(E&d>$fWsBjXnDFn)cyavb}`>FlZn_Hs&!V)oryeCu1auur!*X z@2_gnsQ`-71!3lk{blwAKsIqNi~M&rW+*!bc^JTf?+oT(isc!3`A>$7x^R z#I`=?B!0g-ndw^Tjr=%o|I#cbL;zy)cH#W02>Bv!G?Z+2fEq42Z!_qjJZ_kFIa6$? zxRE_LCiMQp;I@zvhfhj>R&+fHg`3C;r5^!w@K-Vra}A~o;HIV1H*?_czs#m$*+o9U z(_=Ho<~UXrQY#7jqb$+u0Qb1eL-%|W&QaY7{QK(-+M8$->&T5 zFYl2}M|LC)zwsBO*USdIm3=+&WCtsoLhtV2+q`EB`}A2jPubVhM(8!bVfJYAlKZyF7W|HXlP`byXN&3ty7NC- zF4X_;ESD<4a(Q7KKCKh+!-|XX1DSwonarw~)xMFP`q}-$%l1uaFR0>M_mK9$rYgqe z_B-8Cm))LZ-OTv18pv0KWi! zk7Xx*j|$-Lc6|FcdI$JD0`4xv4CzNjLhmp<{r9PtQdBi3{fb@|r#?$nDwz3mxr=1} zGd_a%YBz|l-?)Q$7Bio>FuDloUk}=I zWm->Vz2S+yUa-vPeo#8_OKt}l@+6uFidy~~7mKY~m$=@1U7!!3UvMNhBIP{jF3T8V zYaL2>-rz8o)%paRA6H>brH{HWxhBQs8RyZa(~G%!(WHf4sf%0Lbzrh`2Z>(EF^WOa z(R4+YPHFTTkX88SDS^I7z~sIywx&A#!5YV8KNFSX-x!v+g0%bHhp9V=*euF*70PVO zwQHAhJXAlwx9VdazkBqaG4Eyp+w20z5iNrT-vS2?Ix+qufK@9r&~t=e^vqf)0+)SG zx0$y*GpZ1;4r~%OtnRSB8x-pAk=KqnKO&9neU%t24PTBOm%xV{DgT}j4ym*@)BNE< z?)8X#O4>$RTE+2S4$Fd_ZIf;tLEa+~GZS`J`YW-gik(V;Ux;e&6T!&CD6C0LvPF0Q z|3PBO3Yz(w#8U4&*)8!*e2($fBXsIf8Iz-Ge8^t>n9m_GOo`~RXAKEJ5Uj8kSl*cDFFopxOqx0}&rr8{JEx!CsCgKxs0#0= zVz=ozG6RK!8*>Qr*H>Izvx_xI4q%^y96~%Xq&kwHJhCx60S8o{SI(INumG;luiGZDCI{ztRgTw8RMlnvh_*+*(W&iEGQRfwv+Az z)0}H;R3_{|J&50Lf5y7EUwnVrE}S+qzdtSrdN#8HlC*{*BQjYMZV-p+ez@dUeJvMb zGkA7}yQ|-=IWXIor?LJIv%lF9=d~<)c%*8Z*MzNe?J}p)Q^*i+x$rC0f1ot*PeIsJ z*jBVc=GnTD9EP8X;sZ-COx3Uf1BtMJd z5Gb&RrkoL`N*q@4>~?9F8lTkp-oX9kX&p;(0cSlm&+oi>0fCQ~pFoqys31TC!o96J zjL9h^T*KDJgh=gM7j!AHpBIsxiRk}~9qX|FDMI{KM+zM8$$+13Zx*>4%}@A_M(wCv zqs}S~La~L`G}L4}o8^gku5Emv>e}~B#1mc`PH)pm^U<92&*vLrE_|s{6w*4S<7?+I zVw$y{{CkGR&bYa5rY}BImnL!_l%W%2FUKpKU5tk%Q#gFZA|!GhyG47W?;*m5`fP0`9zT?q2C8 z&-_>~HLgq47l-a0DeNL217k)Sy6a}x&YB$yBll0Mrt3JsmlnMKtt@Ngyfqa;!iWo` ziyvUyX=dJnBot+pn7bY^mE#^! zzNJe!B3jL5E6go6jc}s>!#^$f7sQkPSR}TH00G-k%9yyr1D9jA5wiJdalA7wf}j*2 z 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

ExAxXTFFX;2tnn0NgD4|=&r=F{0rJ+R8 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 literal 0 HcmV?d00001 diff --git a/assets/wechat-group-qr.png b/assets/wechat-group-qr.png deleted file mode 100644 index 73382dc5be36209fd8cf8db7893f5a697e1b9796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230912 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

$5T2sXA@u%|+ZE}g&Wc(_c0R;@Weq(XU zK=~R>V(dFg$#5vMFUfc4*W08U3EbH32#PYDXEO;f(Jl;`7of*|?B zxrIUbij?dc48v&X=?DDgY=M(whOkn$!Ql{6Tvf&OPC_DbuC}r=cw`e)QziZUT8Hi6 zD3k%U`SmM@k)FPA;miTgYN4Lv_3PK{K39$z1IJ!~)dGQvKp^8=Z+d+g2BT&i-FqB7 zJQ{|9k&zxCB1z>6DyAq%Sl63dMQMSa1|8-4i@u?u1RrB;VbZ|jYZ?Q?kmFdwQYlxU zoRgwqQ*?q(vHpc6L?l$B_5j2#`V$bMnDra02d}9V;X04yTy^or_bD*q9bhL@AVb$} z4CN;!5gPd4yCNeaTj~d1g;M&lTYE>72?R!qJ!o?WPlMC~sPWxEMgMIvlDYP*8)UxO zK*in}%MBe4NS%1uhXCi!%|MXNDdqr*LRTQlGw@W3&hG9UkgqtpyUPHP1o-0{z)1J? z5_P7RCjrfP0WMTmpmTPX7^Gkwz-PXQcwer7tL}pG*v{bi-kghr=v4i{JO}O+A_bf{ zI66A|$3lNU2B@S`ffOPX%n~UF2S*@&x}Kii@zh6$Y=AL2S(6}lgByXMLo@f_qLwnq zvO$OlD+ryLn*)UaOhB=Ksv>4=ViLX#addnOK4mml1{-uIKFblDwB`Y7U?|}9mLjaT zL4IHbkiT*C%GIb$0J9V;h?q$Bdo$Ar^?I8n}`{Kom&%iCe-53Dn_ZXO` z5x8J;>x}RDKCI~I=&{Q-?N$3v?WV=0hO@+?0eso$qew5Sbr+~`2UdWg6htDW1yLpk z;GN}is|e6inccp9$~gtZm2nDC1jmy#sScFQU;0hozkgTxbvRlMM!ICWWX^k-JVsL_s#b-eGfsr33FD_Tnk#x%3AK-1FF8sjbm0Jt)mEfM=| zTesGhQ9EZQ8MOJreK`Ed8xYQRCQFj0Xx}K<0M#4ROyV)0!1K1wuP=yrZHYKJIlm_) zpwQFPgU&0|;nwl79j6lu>h$=9~S8Qz9K)(ttD`QE| z$f#LzL28d87djWsK$)RD?;9NK1an*+Wyv^nnhbVbp70zmdczio2b3xZKV%Ej@8Q}4 zlUz{!+@Q_x-VxBhKKy@!9WO-*6Xf%G+NmsV&=Kwc(bB!O_GH5rGHORaMnU-&+n(eC zWSr)!wea6nRk$tNdwXF38`nWxm;n{qhr2W754=geIZkk2b#~?iPXB_OJQ9fPG_Y4V;;*e}d^dY4C6k++B3*rb=s@29-=ypy9F=uM z0=fkcp+ISVZ9bU%8NgAQE3eHICeY}6z(qVCMwC=n1@e6uAsENv4~2>QUrHH)aJshE z70&N>#}6NJNf{ZF)jwZ|xXdw^d|~=vR;#bJfqGYGWQON^cXucGH{=Y|D#5*iCXYm@ zFaE-s5S~}L2Aml6TJPeL`2B7 ze(7=4i^47S+t;t(eO6SP-0VQHD>+;0-{5_NUaODJDa-}jP&a$e%*v{Cst5UBc37@{ z7)#C0jsuAJJD}j*fIc7~I#@4W0^tB|FF^h?M;Os`yN3S_3Sk-8FW|x=U=W~1pB(-w zz*nAUddcLer{}!G4{W8611^-PxS*rv$vjXva&@w9=J3WnJ`6~Dbjq2`f)$60O{m0%oi-VB?F61?oL3u2MdM_G4$zP z$jQt90i=$@zIsi>-9kgk^eBT#)a~F0nTZQI+w9xTG zJgA!WURUk^WADx5x$NGqVa+0vp%OAwG8R%vh6oumCS=G|sgxmwNQs1yF*BJmRLWFJ zrVRO-QlyYXhLp@A)3dgI*Y(`@{l5P{&*%NT{c+XBcR0^|?tScathJ6~qgyk`@Bo-} z*TR{|H~F3da|B0!V?s4%;f{NITbMaHgMdO30ed%#oV;FEU0YLAM(8L^EKB6nIqh+g zk+%UgPC_(V&6$e>KaTGa6BBXlQ_s8jWh+wnQnlT$Qm%vBYNOZ|;AUbLVFr$V$vkq6cbkU2SG≀b?A!fJG%oD$; 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

WZw_@@Jh*Xfz{rvnMgiOtQTZ|HJ9>O8NVs#fP z@fs$OHnRHc^OL#+Jr^E5<_$p_>}{I5x=ByItSx`GS?Krkq%Lh`M^*}UR04Si7C}D9 zt0lqymc?!4XtF2BCx0bzda>Q!NOR&?Ale1l30!i+fH;1}D3DTGQzhfn&=CI(qB_e(705a#%^wFmE*|D{CQsX-P7ol%82Ilj><F!k>4 z8liDe*>q4pWJke0j@lzK^X-g!uopF{v0dSvLfAT83S{+4nr5ExE}XUYMc;+=yE19&$ewLO8`qb?2Q*#ICOqeX*U>bOOuYKW_8S1ZR9y0q6ladHnM=^>>Fm5 z;6;156=OZEP-OqN{P||Yi&h=(BSCRkxaLa{rZRMJ#KX;}aIpH&xl0#WeT|c4jHpP& z71hTpP*DNyxg(djIVPsN<7iUfh-eG!!%+c1&8gpl)USlPV<=(J#(nFR#oe1Jj!FvZ zlx5fj4^nQ6;Gim>6CIc`Rdg&9Cr{pd?b?RWAZzjqWLg)if5DO?)IwrNqTIbPb548o z(^?z8mT8j^F(loQ%&AvFyC0sUEWmixgm)t&%olu}OsK63L#BOXN$iBfF;PO#~ zZ$igo>C$ErX(Np@d$vs(6}$-~jR6sMC1dCkWk5CI87bw`eDMI!#*TjU^l4{wy8ifJ z9P1yQnyVq>(LgECarPM92~gP&=|awWj21zo=TER^mwZDuq2tqwfczsf`%y5B8uc=0z%}XRwSsN_;Iu`XtH;Ru-DU9n9R4!J z5EjZjWD#X|CyLLU3wt=_sZJz55FOPDdL_RvH3B^p@RJL_d(1LpRCij<(q@LwWYwQRX?L)d=!9@_gEj0UG-Kb(*-_|bw# z2r5M;@3z9gWIs^zP2zEppS9R zTn8O>_Oc07E6jWdhK9~AZZjTns>~4Q2Q|?!p2mW+=U2sBe6Wce*o2u!LKZq2p-`a= zX+uYc)$XXnKMt#Kmx1Eip{RLPcZ}K=>++#6U*OG~wkF@3Qo_CRG#WMPpbUox)GEAK zEAu?8=k_mQp6N!3<&TS#(Q)<*+^ADIaBtP+_JTTKnH*p{Qfk>!eOQMvx+-G$<+HQ-&m}6KJ{+-c zm^dlt`?0c5)uF$6U$%OmXMVhHEn2xaA$EF;A8hkK0=n(%Rvf+j^6P zvQN7oZmZhzFV~J+vH2g*lh!*N+@an3@=o8q`O5`0erA*NZBV21Bd6XOt%c3^$&Hn2 zwp()bG?UAl#$Q;x{)*fB@5n(0#aZsXXYzmfyPH~jWN+BMcvnKTZO%LG_;w(~&j>3E zusIa;%O_$F>c`hwDCw3Dy{eJ(@vCK-*}oLEaXHDAans+wIb3AYcwLQX_W%95W{*tj z*^vDM(*FJP0<+yiV|;%oQ@)?+U$P_m>%P{WjYcEt$(_8w7x(LVT6LZBt*^GWh2LTs zC6nqYf3#=Mk!1aT{U)st#r&@5T)X;k>*IB}p$&HZ>^(BL-`V#dVX32feyQvCe%0Aq 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 diff --git a/ccw/frontend/src/components/mcp/CcwToolsMcpCard.tsx b/ccw/frontend/src/components/mcp/CcwToolsMcpCard.tsx index d5a78125..467cb83e 100644 --- a/ccw/frontend/src/components/mcp/CcwToolsMcpCard.tsx +++ b/ccw/frontend/src/components/mcp/CcwToolsMcpCard.tsx @@ -324,9 +324,16 @@ export function CcwToolsMcpCard({ {/* Tool Checkboxes */}

-

- {formatMessage({ id: 'mcp.ccw.tools.label' })} -

+
+

+ {formatMessage({ id: 'mcp.ccw.tools.label' })} +

+ {!isInstalled && ( +

+ {formatMessage({ id: 'mcp.ccw.tools.hint' })} +

+ )} +
{CCW_MCP_TOOLS.map((tool) => { const isEnabled = enabledTools.includes(tool.name); diff --git a/ccw/frontend/src/components/specs/GlobalSettingsTab.tsx b/ccw/frontend/src/components/specs/GlobalSettingsTab.tsx index fa87f7c2..6b6305b0 100644 --- a/ccw/frontend/src/components/specs/GlobalSettingsTab.tsx +++ b/ccw/frontend/src/components/specs/GlobalSettingsTab.tsx @@ -181,9 +181,10 @@ export function GlobalSettingsTab() { updateMutation.mutate({ personalSpecDefaults: newDefaults }); }; - // Calculate totals + // Calculate totals - Only include specs and personal dimensions const dimensions = stats?.dimensions || {}; - const dimensionEntries = Object.entries(dimensions) as [ + const dimensionEntries = Object.entries(dimensions) + .filter(([dim]) => dim === 'specs' || dim === 'personal') as [ keyof typeof dimensions, SpecDimensionStats ][]; @@ -304,8 +305,10 @@ export function GlobalSettingsTab() {
) : ( <> -
- {dimensionEntries.map(([dim, data]) => ( +
+ {dimensionEntries + .filter(([entry]) => entry[0] === 'specs' || entry[1] === 'personal') + .map(([dim, data]) => (
= { + general: { color: 'text-gray-600', bgColor: 'bg-gray-100 dark:bg-gray-800' }, + exploration: { color: 'text-blue-600', bgColor: 'bg-blue-100 dark:bg-blue-900/30' }, + planning: { color: 'text-purple-600', bgColor: 'bg-purple-100 dark:bg-purple-900/30' }, + execution: { color: 'text-green-600', bgColor: 'bg-green-100 dark:bg-green-900/30' }, +}; + // ========== Recommended Hooks Configuration ========== const RECOMMENDED_HOOKS = [ @@ -184,6 +199,7 @@ export function InjectionControlTab({ className }: InjectionControlTabProps) { // State for injection preview const [previewMode, setPreviewMode] = useState<'required' | 'all'>('required'); + const [categoryFilter, setCategoryFilter] = useState('all'); const [previewData, setPreviewData] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [expandedDimensions, setExpandedDimensions] = useState>({ @@ -358,17 +374,36 @@ export function InjectionControlTab({ className }: InjectionControlTabProps) { } }, [installedHookIds, installHooksMutation, formatMessage]); - // Group files by dimension + // Group files by dimension and filter by category const filesByDimension = useMemo(() => { if (!previewData) return {}; const grouped: Record = {}; for (const file of previewData.files) { + // Apply category filter + if (categoryFilter !== 'all' && file.category !== categoryFilter) { + continue; + } if (!grouped[file.dimension]) { grouped[file.dimension] = []; } grouped[file.dimension].push(file); } return grouped; + }, [previewData, categoryFilter]); + + // Calculate category statistics + const categoryStats = useMemo(() => { + if (!previewData) { + return { general: 0, exploration: 0, planning: 0, execution: 0 }; + } + const stats: Record = { general: 0, exploration: 0, planning: 0, execution: 0 }; + for (const file of previewData.files) { + const cat = (file.category as SpecCategory) || 'general'; + if (stats[cat] !== undefined) { + stats[cat]++; + } + } + return stats; }, [previewData]); // Calculate progress and status @@ -641,7 +676,37 @@ export function InjectionControlTab({ className }: InjectionControlTabProps) { )} - + + {/* Category Filter */} +
+ + + {formatMessage({ id: 'specs.filterByCategory', defaultMessage: 'Category:' })} + +
+ + {SPEC_CATEGORIES.map(cat => ( + + ))} +
+
+ + {/* Files List */} {previewLoading ? (
@@ -669,45 +734,53 @@ export function InjectionControlTab({ className }: InjectionControlTabProps) {
- {formatNumber(files.reduce((sum, f) => sum + f.contentLength, 0))} {formatMessage({ id: 'specs.injection.characters', defaultMessage: 'chars' })} + {formatNumber(files.reduce((sum, f) => sum + f.contentLength, 0))} {formatMessage({ id: 'specs.injection.characters', defaultMessage: 'characters' })} {expandedDimensions[dim] && (
- {files.map((file) => ( -
-
- {file.scope === 'global' ? ( - - ) : ( - - )} -
-
{file.title}
-
{file.file}
+ {files.map((file) => { + const fileCategory = (file.category as SpecCategory) || 'general'; + const categoryStyle = CATEGORY_CONFIG[fileCategory] || CATEGORY_CONFIG.general; + return ( +
+
+ {file.scope === 'global' ? ( + + ) : ( + + )} +
+
{file.title}
+
{file.file}
+
+
+
+ + + {formatMessage({ id: `specs.category.${fileCategory}`, defaultMessage: fileCategory })} + + + {formatMessage({ id: `specs.priority.${file.priority}`, defaultMessage: file.priority })} + + + {formatNumber(file.contentLength)} + +
-
- - {formatMessage({ id: `specs.priority.${file.priority}`, defaultMessage: file.priority })} - - - {formatNumber(file.contentLength)} - - -
-
- ))} + ); + })}
)}
diff --git a/ccw/frontend/src/components/terminal-dashboard/IssuePanel.tsx b/ccw/frontend/src/components/terminal-dashboard/IssuePanel.tsx index a2068e2d..fee2e3fb 100644 --- a/ccw/frontend/src/components/terminal-dashboard/IssuePanel.tsx +++ b/ccw/frontend/src/components/terminal-dashboard/IssuePanel.tsx @@ -73,11 +73,14 @@ function PriorityBadge({ priority }: { priority: Issue['priority'] }) { function StatusDot({ status }: { status: Issue['status'] }) { const colorMap: Record = { - open: 'text-info', - in_progress: 'text-warning', - resolved: 'text-success', - closed: 'text-muted-foreground', + registered: 'text-info', + planning: 'text-blue-500', + planned: 'text-blue-600', + queued: 'text-yellow-500', + executing: 'text-warning', completed: 'text-success', + failed: 'text-destructive', + paused: 'text-muted-foreground', }; return ; } diff --git a/ccw/frontend/src/locales/en/mcp-manager.json b/ccw/frontend/src/locales/en/mcp-manager.json index 4fdcb715..212e8a57 100644 --- a/ccw/frontend/src/locales/en/mcp-manager.json +++ b/ccw/frontend/src/locales/en/mcp-manager.json @@ -112,6 +112,7 @@ }, "tools": { "label": "Available Tools", + "hint": "Install CCW MCP first to select tools", "core": "Core", "write_file": { "name": "write_file", diff --git a/ccw/frontend/src/locales/zh/mcp-manager.json b/ccw/frontend/src/locales/zh/mcp-manager.json index a0a168c8..fcb0e32e 100644 --- a/ccw/frontend/src/locales/zh/mcp-manager.json +++ b/ccw/frontend/src/locales/zh/mcp-manager.json @@ -112,6 +112,7 @@ }, "tools": { "label": "可用工具", + "hint": "请先安装 CCW MCP 后再选择工具", "core": "核心", "write_file": { "name": "write_file", diff --git a/ccw/frontend/src/pages/IssueManagerPage.tsx b/ccw/frontend/src/pages/IssueManagerPage.tsx index 0e76ec46..d128e616 100644 --- a/ccw/frontend/src/pages/IssueManagerPage.tsx +++ b/ccw/frontend/src/pages/IssueManagerPage.tsx @@ -138,7 +138,7 @@ function EditIssueDialog({ open, onOpenChange, issue, onSubmit, isUpdating }: Ed const [title, setTitle] = useState(''); const [context, setContext] = useState(''); const [priority, setPriority] = useState('medium'); - const [status, setStatus] = useState('open'); + const [status, setStatus] = useState('registered'); // Reset form when dialog opens or issue changes useEffect(() => { @@ -146,12 +146,12 @@ function EditIssueDialog({ open, onOpenChange, issue, onSubmit, isUpdating }: Ed setTitle(issue.title ?? ''); setContext(issue.context ?? ''); setPriority(issue.priority ?? 'medium'); - setStatus(issue.status ?? 'open'); + setStatus(issue.status ?? 'registered'); } else if (!open) { setTitle(''); setContext(''); setPriority('medium'); - setStatus('open'); + setStatus('registered'); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [open, issue?.id]); @@ -217,10 +217,11 @@ function EditIssueDialog({ open, onOpenChange, issue, onSubmit, isUpdating }: Ed - {formatMessage({ id: 'issues.status.open' })} - {formatMessage({ id: 'issues.status.inProgress' })} - {formatMessage({ id: 'issues.status.resolved' })} - {formatMessage({ id: 'issues.status.closed' })} + {formatMessage({ id: 'issues.status.registered', defaultMessage: 'Registered' })} + {formatMessage({ id: 'issues.status.planning', defaultMessage: 'Planning' })} + {formatMessage({ id: 'issues.status.planned', defaultMessage: 'Planned' })} + {formatMessage({ id: 'issues.status.queued', defaultMessage: 'Queued' })} + {formatMessage({ id: 'issues.status.executing', defaultMessage: 'Executing' })} {formatMessage({ id: 'issues.status.completed' })} @@ -341,11 +342,14 @@ export function IssueManagerPage() { // Filter counts const statusCounts = useMemo(() => ({ all: issues.length, - open: issuesByStatus.open?.length || 0, - in_progress: issuesByStatus.in_progress?.length || 0, - resolved: issuesByStatus.resolved?.length || 0, - closed: issuesByStatus.closed?.length || 0, + registered: issuesByStatus.registered?.length || 0, + planning: issuesByStatus.planning?.length || 0, + planned: issuesByStatus.planned?.length || 0, + queued: issuesByStatus.queued?.length || 0, + executing: issuesByStatus.executing?.length || 0, completed: issuesByStatus.completed?.length || 0, + failed: issuesByStatus.failed?.length || 0, + paused: issuesByStatus.paused?.length || 0, }), [issues, issuesByStatus]); const handleCreateIssue = async (data: { title: string; context?: string; priority?: Issue['priority'] }) => { @@ -440,9 +444,9 @@ export function IssueManagerPage() {
- {issuesByStatus.in_progress?.length || 0} + {issuesByStatus.executing?.length || 0}
-

{formatMessage({ id: 'issues.status.inProgress' })}

+

{formatMessage({ id: 'issues.status.executing', defaultMessage: 'Executing' })}

@@ -454,9 +458,9 @@ export function IssueManagerPage() {
- {issuesByStatus.resolved?.length || 0} + {issuesByStatus.completed?.length || 0}
-

{formatMessage({ id: 'issues.status.resolved' })}

+

{formatMessage({ id: 'issues.status.completed' })}

@@ -478,10 +482,12 @@ export function IssueManagerPage() { {formatMessage({ id: 'issues.filters.all' })} - {formatMessage({ id: 'issues.status.open' })} - {formatMessage({ id: 'issues.status.inProgress' })} - {formatMessage({ id: 'issues.status.resolved' })} - {formatMessage({ id: 'issues.status.closed' })} + {formatMessage({ id: 'issues.status.registered', defaultMessage: 'Registered' })} + {formatMessage({ id: 'issues.status.planning', defaultMessage: 'Planning' })} + {formatMessage({ id: 'issues.status.planned', defaultMessage: 'Planned' })} + {formatMessage({ id: 'issues.status.queued', defaultMessage: 'Queued' })} + {formatMessage({ id: 'issues.status.executing', defaultMessage: 'Executing' })} + {formatMessage({ id: 'issues.status.completed' })}