mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-11 17:21:03 +08:00
Add unit tests for various components and stores in the terminal dashboard
- Implement tests for AssociationHighlight, DashboardToolbar, QueuePanel, SessionGroupTree, and TerminalDashboardPage to ensure proper functionality and state management. - Create tests for cliSessionStore, issueQueueIntegrationStore, queueExecutionStore, queueSchedulerStore, sessionManagerStore, and terminalGridStore to validate state resets and workspace scoping. - Mock necessary dependencies and state management hooks to isolate tests and ensure accurate behavior.
This commit is contained in:
729
.codex/skills/team-uidesign/SKILL.md
Normal file
729
.codex/skills/team-uidesign/SKILL.md
Normal file
@@ -0,0 +1,729 @@
|
||||
---
|
||||
name: team-uidesign
|
||||
description: UI design team pipeline. Research existing design system, generate design tokens (W3C format), audit quality, and implement code. CSV wave pipeline with GC loop (designer <-> reviewer) and dual-track parallel support.
|
||||
argument-hint: "[-y|--yes] [-c|--concurrency N] [--continue] \"UI design task description\""
|
||||
allowed-tools: spawn_agents_on_csv, spawn_agent, wait, send_input, close_agent, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
||||
---
|
||||
|
||||
## Auto Mode
|
||||
|
||||
When `--yes` or `-y`: Auto-confirm task decomposition, skip interactive validation, use defaults for scope/industry/constraints.
|
||||
|
||||
# Team UI Design
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
$team-uidesign "Design a button component with tokens and accessibility"
|
||||
$team-uidesign -c 3 "Create a complete design system for our SaaS dashboard"
|
||||
$team-uidesign -y "Full design system redesign for healthcare portal"
|
||||
$team-uidesign --continue "uds-saas-dashboard-20260308"
|
||||
```
|
||||
|
||||
**Flags**:
|
||||
- `-y, --yes`: Skip all confirmations (auto mode)
|
||||
- `-c, --concurrency N`: Max concurrent agents within each wave (default: 3)
|
||||
- `--continue`: Resume existing session
|
||||
|
||||
**Output Directory**: `.workflow/.csv-wave/{session-id}/`
|
||||
**Core Output**: `tasks.csv` (master state) + `results.csv` (final) + `discoveries.ndjson` (shared exploration) + `context.md` (human-readable report)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
Systematic UI design pipeline: research existing design system, generate design tokens (W3C Design Tokens Format), audit for quality/accessibility, and implement production code. Roles: researcher, designer, reviewer, implementer -- dynamically assigned as CSV wave tasks with dependency ordering. Supports component (4-task), system (7-task), and full-system (8-task) pipeline modes. Designer <-> Reviewer Generator-Critic loop with max 2 rounds.
|
||||
|
||||
**Execution Model**: Hybrid -- CSV wave pipeline (primary) + individual agent spawn (secondary)
|
||||
|
||||
```
|
||||
+-------------------------------------------------------------------+
|
||||
| TEAM UI DESIGN WORKFLOW |
|
||||
+-------------------------------------------------------------------+
|
||||
| |
|
||||
| Phase 0: Pre-Wave Interactive (Requirement Clarification) |
|
||||
| +- Parse UI design task description |
|
||||
| +- Select scope (component/system/full-system), industry |
|
||||
| +- Output: refined requirements for decomposition |
|
||||
| |
|
||||
| Phase 1: Requirement -> CSV + Classification |
|
||||
| +- Signal detection: keyword scan -> pipeline inference |
|
||||
| +- Pipeline selection (component/system/full-system) |
|
||||
| +- Dependency graph from pipeline definition |
|
||||
| +- Classify tasks: csv-wave | interactive (exec_mode) |
|
||||
| +- Compute dependency waves (topological sort) |
|
||||
| +- Generate tasks.csv with wave + exec_mode columns |
|
||||
| +- User validates task breakdown (skip if -y) |
|
||||
| |
|
||||
| Phase 2: Wave Execution Engine (Extended) |
|
||||
| +- For each wave (1..N): |
|
||||
| | +- Execute pre-wave interactive tasks (if any) |
|
||||
| | +- Build wave CSV (filter csv-wave tasks for this wave) |
|
||||
| | +- Inject previous findings into prev_context column |
|
||||
| | +- spawn_agents_on_csv(wave CSV) |
|
||||
| | +- Execute post-wave interactive tasks (if any) |
|
||||
| | +- Merge all results into master tasks.csv |
|
||||
| | +- Check: any failed? -> skip dependents |
|
||||
| | +- GC Loop: if audit fails, create DESIGN-fix + AUDIT-re |
|
||||
| +- discoveries.ndjson shared across all modes (append-only) |
|
||||
| |
|
||||
| Phase 3: Post-Wave Interactive (Completion Action) |
|
||||
| +- Pipeline completion report with deliverables listing |
|
||||
| +- Interactive completion choice (Archive/Keep/Export) |
|
||||
| +- Final aggregation / report |
|
||||
| |
|
||||
| Phase 4: Results Aggregation |
|
||||
| +- Export final results.csv |
|
||||
| +- Generate context.md with all findings |
|
||||
| +- Display summary: completed/failed/skipped per wave |
|
||||
| +- Offer: view results | retry failed | done |
|
||||
| |
|
||||
+-------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task Classification Rules
|
||||
|
||||
Each task is classified by `exec_mode`:
|
||||
|
||||
| exec_mode | Mechanism | Criteria |
|
||||
|-----------|-----------|----------|
|
||||
| `csv-wave` | `spawn_agents_on_csv` | One-shot, structured I/O, no multi-round interaction |
|
||||
| `interactive` | `spawn_agent`/`wait`/`send_input`/`close_agent` | Multi-round, revision cycles, user approval |
|
||||
|
||||
**Classification Decision**:
|
||||
|
||||
| Task Property | Classification |
|
||||
|---------------|---------------|
|
||||
| Design system research (researcher) | `csv-wave` |
|
||||
| Token system design (designer) | `csv-wave` |
|
||||
| Component specification (designer) | `csv-wave` |
|
||||
| 5-dimension audit (reviewer) | `csv-wave` |
|
||||
| Token/component implementation (implementer) | `csv-wave` |
|
||||
| GC loop fix revision (designer) | `csv-wave` |
|
||||
| GC loop escalation (user decision on audit failure) | `interactive` |
|
||||
| Pipeline completion action | `interactive` |
|
||||
|
||||
---
|
||||
|
||||
## CSV Schema
|
||||
|
||||
### tasks.csv (Master State)
|
||||
|
||||
```csv
|
||||
id,title,description,role,pipeline_mode,scope,audit_type,deps,context_from,exec_mode,wave,status,findings,artifacts_produced,audit_score,audit_signal,error
|
||||
"RESEARCH-001","Design system analysis","PURPOSE: Analyze existing design system...","researcher","component","full","","","","csv-wave","1","pending","","","","",""
|
||||
"DESIGN-001","Design tokens + component spec","PURPOSE: Define design tokens...","designer","component","tokens","","RESEARCH-001","RESEARCH-001","csv-wave","2","pending","","","","",""
|
||||
"AUDIT-001","Design audit","PURPOSE: 5-dimension quality audit...","reviewer","component","full","token-audit","DESIGN-001","DESIGN-001","csv-wave","3","pending","","","","",""
|
||||
```
|
||||
|
||||
**Columns**:
|
||||
|
||||
| Column | Phase | Description |
|
||||
|--------|-------|-------------|
|
||||
| `id` | Input | Unique task identifier (PREFIX-NNN: RESEARCH, DESIGN, AUDIT, BUILD) |
|
||||
| `title` | Input | Short task title |
|
||||
| `description` | Input | Detailed task description with PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS |
|
||||
| `role` | Input | Role name: `researcher`, `designer`, `reviewer`, `implementer` |
|
||||
| `pipeline_mode` | Input | Pipeline: `component`, `system`, `full-system` |
|
||||
| `scope` | Input | Task scope: `full`, `tokens`, `components` |
|
||||
| `audit_type` | Input | Audit type: `token-audit`, `component-audit`, `final-audit` (empty for non-reviewer) |
|
||||
| `deps` | Input | Semicolon-separated dependency task IDs |
|
||||
| `context_from` | Input | Semicolon-separated task IDs whose findings this task needs |
|
||||
| `exec_mode` | Input | `csv-wave` or `interactive` |
|
||||
| `wave` | Computed | Wave number (computed by topological sort, 1-based) |
|
||||
| `status` | Output | `pending` -> `completed` / `failed` / `skipped` |
|
||||
| `findings` | Output | Key discoveries or implementation notes (max 500 chars) |
|
||||
| `artifacts_produced` | Output | Semicolon-separated paths of produced artifacts |
|
||||
| `audit_score` | Output | Audit weighted score (0-10, empty for non-reviewer tasks) |
|
||||
| `audit_signal` | Output | Audit signal: `audit_passed`, `audit_result`, `fix_required` (empty for non-reviewer) |
|
||||
| `error` | Output | Error message if failed (empty if success) |
|
||||
|
||||
### Per-Wave CSV (Temporary)
|
||||
|
||||
Each wave generates a temporary `wave-{N}.csv` with extra `prev_context` column (csv-wave tasks only).
|
||||
|
||||
---
|
||||
|
||||
## Agent Registry (Interactive Agents)
|
||||
|
||||
| Agent | Role File | Pattern | Responsibility | Position |
|
||||
|-------|-----------|---------|----------------|----------|
|
||||
| GC Loop Handler | agents/gc-loop-handler.md | 2.3 (send_input cycle) | Handle audit GC loop escalation decisions | post-wave |
|
||||
| Completion Handler | agents/completion-handler.md | 2.3 (send_input cycle) | Handle pipeline completion action (Archive/Keep/Export) | standalone |
|
||||
|
||||
> **COMPACT PROTECTION**: Agent files are execution documents. When context compression occurs, **you MUST immediately `Read` the corresponding agent.md** to reload.
|
||||
|
||||
---
|
||||
|
||||
## Output Artifacts
|
||||
|
||||
| File | Purpose | Lifecycle |
|
||||
|------|---------|-----------|
|
||||
| `tasks.csv` | Master state -- all tasks with status/findings | Updated after each wave |
|
||||
| `wave-{N}.csv` | Per-wave input (temporary, csv-wave tasks only) | Created before wave, deleted after |
|
||||
| `results.csv` | Final export of all task results | Created in Phase 4 |
|
||||
| `discoveries.ndjson` | Shared exploration board (all agents, both modes) | Append-only, carries across waves |
|
||||
| `context.md` | Human-readable execution report | Created in Phase 4 |
|
||||
| `task-analysis.json` | Phase 0/1 output: scope, pipeline, industry | Created in Phase 1 |
|
||||
| `role-instructions/` | Per-role instruction templates for CSV agents | Created in Phase 1 |
|
||||
| `artifacts/` | All deliverables: research, design, audit, build artifacts | Created by agents |
|
||||
| `interactive/{id}-result.json` | Results from interactive tasks | Created per interactive task |
|
||||
|
||||
---
|
||||
|
||||
## Session Structure
|
||||
|
||||
```
|
||||
.workflow/.csv-wave/{session-id}/
|
||||
+-- tasks.csv # Master state (all tasks, both modes)
|
||||
+-- results.csv # Final results export
|
||||
+-- discoveries.ndjson # Shared discovery board (all agents)
|
||||
+-- context.md # Human-readable report
|
||||
+-- task-analysis.json # Phase 1 analysis output
|
||||
+-- wave-{N}.csv # Temporary per-wave input (csv-wave only)
|
||||
+-- role-instructions/ # Per-role instruction templates
|
||||
| +-- researcher.md
|
||||
| +-- designer.md
|
||||
| +-- reviewer.md
|
||||
| +-- implementer.md
|
||||
+-- artifacts/ # All deliverables
|
||||
| +-- research/
|
||||
| | +-- design-system-analysis.json
|
||||
| | +-- component-inventory.json
|
||||
| | +-- accessibility-audit.json
|
||||
| | +-- design-intelligence.json
|
||||
| +-- design/
|
||||
| | +-- design-tokens.json
|
||||
| | +-- component-specs/
|
||||
| | +-- layout-specs/
|
||||
| +-- audit/
|
||||
| | +-- audit-001.md
|
||||
| +-- build/
|
||||
| +-- token-files/
|
||||
| +-- component-files/
|
||||
+-- interactive/ # Interactive task artifacts
|
||||
| +-- {id}-result.json
|
||||
+-- wisdom/ # Cross-task knowledge
|
||||
+-- learnings.md
|
||||
+-- decisions.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Implementation
|
||||
|
||||
### Session Initialization
|
||||
|
||||
```javascript
|
||||
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
||||
|
||||
const AUTO_YES = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
|
||||
const continueMode = $ARGUMENTS.includes('--continue')
|
||||
const concurrencyMatch = $ARGUMENTS.match(/(?:--concurrency|-c)\s+(\d+)/)
|
||||
const maxConcurrency = concurrencyMatch ? parseInt(concurrencyMatch[1]) : 3
|
||||
|
||||
const requirement = $ARGUMENTS
|
||||
.replace(/--yes|-y|--continue|--concurrency\s+\d+|-c\s+\d+/g, '')
|
||||
.trim()
|
||||
|
||||
const slug = requirement.toLowerCase()
|
||||
.replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
|
||||
.substring(0, 40)
|
||||
const dateStr = getUtc8ISOString().substring(0, 10).replace(/-/g, '')
|
||||
const sessionId = `uds-${slug}-${dateStr}`
|
||||
const sessionFolder = `.workflow/.csv-wave/${sessionId}`
|
||||
|
||||
Bash(`mkdir -p ${sessionFolder}/artifacts/research ${sessionFolder}/artifacts/design/component-specs ${sessionFolder}/artifacts/design/layout-specs ${sessionFolder}/artifacts/audit ${sessionFolder}/artifacts/build/token-files ${sessionFolder}/artifacts/build/component-files ${sessionFolder}/role-instructions ${sessionFolder}/interactive ${sessionFolder}/wisdom`)
|
||||
|
||||
Write(`${sessionFolder}/discoveries.ndjson`, '')
|
||||
Write(`${sessionFolder}/wisdom/learnings.md`, '# Learnings\n')
|
||||
Write(`${sessionFolder}/wisdom/decisions.md`, '# Decisions\n')
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 0: Pre-Wave Interactive (Requirement Clarification)
|
||||
|
||||
**Objective**: Parse UI design task, clarify scope/industry/constraints, prepare for decomposition.
|
||||
|
||||
**Workflow**:
|
||||
|
||||
1. **Parse user task description** from $ARGUMENTS
|
||||
|
||||
2. **Check for existing sessions** (continue mode):
|
||||
- Scan `.workflow/.csv-wave/uds-*/tasks.csv` for sessions with pending tasks
|
||||
- If `--continue`: resume the specified or most recent session, skip to Phase 2
|
||||
- If active session found: ask user whether to resume or start new
|
||||
|
||||
3. **Clarify scope and industry** (skip if AUTO_YES):
|
||||
|
||||
**Scope Selection**:
|
||||
|
||||
| Option | Pipeline | Task Count |
|
||||
|--------|----------|------------|
|
||||
| Single component | component | 4 tasks (linear) |
|
||||
| Component system | system | 7 tasks (dual-track parallel) |
|
||||
| Full design system | full-system | 8 tasks (dual-track + final audit) |
|
||||
|
||||
**Industry Selection**:
|
||||
|
||||
| Option | Strictness |
|
||||
|--------|------------|
|
||||
| SaaS/Tech | standard |
|
||||
| E-commerce/Retail | standard |
|
||||
| Healthcare/Finance | strict (extra accessibility) |
|
||||
| Education/Content | standard |
|
||||
| Other | standard |
|
||||
|
||||
4. **Signal Detection** for pipeline selection:
|
||||
|
||||
| Signal | Keywords | Pipeline Hint |
|
||||
|--------|----------|---------------|
|
||||
| Component | component, button, card, input, modal | component |
|
||||
| System | design system, token, theme, multiple components | system |
|
||||
| Full | complete, full, all components, redesign | full-system |
|
||||
| Accessibility | accessibility, a11y, wcag | component or system |
|
||||
|
||||
5. **Complexity Scoring**:
|
||||
|
||||
| Factor | Points |
|
||||
|--------|--------|
|
||||
| Single component | +1 |
|
||||
| Component system | +2 |
|
||||
| Full design system | +3 |
|
||||
| Accessibility required | +1 |
|
||||
| Multiple industries/constraints | +1 |
|
||||
|
||||
Results: 1-2 component, 3-4 system, 5+ full-system.
|
||||
|
||||
6. **Industry Detection**:
|
||||
|
||||
| Keywords | Industry |
|
||||
|----------|----------|
|
||||
| saas, dashboard, analytics | SaaS/Tech |
|
||||
| shop, cart, checkout | E-commerce |
|
||||
| medical, patient, healthcare | Healthcare |
|
||||
| bank, finance, payment | Finance |
|
||||
| edu, course, learning | Education/Content |
|
||||
| Default | SaaS/Tech |
|
||||
|
||||
7. Record: pipeline_mode, industry, complexity
|
||||
|
||||
**Success Criteria**:
|
||||
- Scope, industry, constraints determined
|
||||
- Pipeline mode selected (component/system/full-system)
|
||||
|
||||
---
|
||||
|
||||
### Phase 1: Requirement -> CSV + Classification
|
||||
|
||||
**Objective**: Build task dependency graph, generate tasks.csv and per-role instruction templates.
|
||||
|
||||
**Decomposition Rules**:
|
||||
|
||||
1. **Pipeline Selection** based on scope:
|
||||
|
||||
| Scope | Pipeline | Tasks |
|
||||
|-------|----------|-------|
|
||||
| component | RESEARCH-001 -> DESIGN-001 -> AUDIT-001 -> BUILD-001 | 4 |
|
||||
| system | RESEARCH-001 -> DESIGN-001 -> AUDIT-001 -> [DESIGN-002 + BUILD-001] -> AUDIT-002 -> BUILD-002 | 7 |
|
||||
| full-system | system chain + AUDIT-003 after BUILD-002 | 8 |
|
||||
|
||||
2. **Task Description Template**: Every task description uses PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS format
|
||||
|
||||
3. **Role Instruction Generation**: Write per-role instruction templates to `role-instructions/{role}.md` using the base instruction template customized for each role (researcher, designer, reviewer, implementer)
|
||||
|
||||
**Classification Rules**:
|
||||
|
||||
| Task Property | exec_mode |
|
||||
|---------------|-----------|
|
||||
| Research analysis pass (researcher) | `csv-wave` |
|
||||
| Token design pass (designer) | `csv-wave` |
|
||||
| Component spec pass (designer) | `csv-wave` |
|
||||
| Audit pass (reviewer) | `csv-wave` |
|
||||
| Implementation pass (implementer) | `csv-wave` |
|
||||
| GC fix revision (designer) | `csv-wave` |
|
||||
| All standard pipeline tasks | `csv-wave` |
|
||||
|
||||
**Wave Computation**: Kahn's BFS topological sort with depth tracking.
|
||||
|
||||
```javascript
|
||||
// Generate per-role instruction templates
|
||||
for (const role of ['researcher', 'designer', 'reviewer', 'implementer']) {
|
||||
const instruction = generateRoleInstruction(role, sessionFolder)
|
||||
Write(`${sessionFolder}/role-instructions/${role}.md`, instruction)
|
||||
}
|
||||
|
||||
// Generate tasks.csv from pipeline definition
|
||||
const tasks = buildTasksCsv(pipelineMode, requirement, sessionFolder, industry, constraints)
|
||||
Write(`${sessionFolder}/tasks.csv`, toCsv(tasks))
|
||||
Write(`${sessionFolder}/task-analysis.json`, JSON.stringify(analysisResult, null, 2))
|
||||
```
|
||||
|
||||
**User Validation**: Display task breakdown with wave + exec_mode assignment (skip if AUTO_YES).
|
||||
|
||||
**Success Criteria**:
|
||||
- tasks.csv created with valid schema, wave, and exec_mode assignments
|
||||
- Role instruction templates generated in role-instructions/
|
||||
- task-analysis.json written
|
||||
- No circular dependencies
|
||||
- User approved (or AUTO_YES)
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Wave Execution Engine (Extended)
|
||||
|
||||
**Objective**: Execute tasks wave-by-wave with hybrid mechanism support and cross-wave context propagation.
|
||||
|
||||
```javascript
|
||||
const masterCsv = Read(`${sessionFolder}/tasks.csv`)
|
||||
let tasks = parseCsv(masterCsv)
|
||||
const maxWave = Math.max(...tasks.map(t => t.wave))
|
||||
let gcRound = 0
|
||||
const MAX_GC_ROUNDS = 2
|
||||
|
||||
for (let wave = 1; wave <= maxWave; wave++) {
|
||||
console.log(`\nWave ${wave}/${maxWave}`)
|
||||
|
||||
// 1. Separate tasks by exec_mode
|
||||
const waveTasks = tasks.filter(t => t.wave === wave && t.status === 'pending')
|
||||
const csvTasks = waveTasks.filter(t => t.exec_mode === 'csv-wave')
|
||||
const interactiveTasks = waveTasks.filter(t => t.exec_mode === 'interactive')
|
||||
|
||||
// 2. Check dependencies -- skip tasks whose deps failed
|
||||
for (const task of waveTasks) {
|
||||
const depIds = (task.deps || '').split(';').filter(Boolean)
|
||||
const depStatuses = depIds.map(id => tasks.find(t => t.id === id)?.status)
|
||||
if (depStatuses.some(s => s === 'failed' || s === 'skipped')) {
|
||||
task.status = 'skipped'
|
||||
task.error = `Dependency failed: ${depIds.filter((id, i) =>
|
||||
['failed','skipped'].includes(depStatuses[i])).join(', ')}`
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Execute pre-wave interactive tasks (if any)
|
||||
const preWaveInteractive = interactiveTasks.filter(t => t.status === 'pending')
|
||||
for (const task of preWaveInteractive) {
|
||||
Read(`agents/gc-loop-handler.md`)
|
||||
const agent = spawn_agent({
|
||||
message: `## TASK ASSIGNMENT\n\n### MANDATORY FIRST STEPS\n1. Read: agents/gc-loop-handler.md\n2. Read: ${sessionFolder}/discoveries.ndjson\n\nGoal: ${task.description}\nScope: ${task.title}\nSession: ${sessionFolder}\n\n### Previous Context\n${buildPrevContext(task, tasks)}`
|
||||
})
|
||||
const result = wait({ ids: [agent], timeout_ms: 600000 })
|
||||
if (result.timed_out) {
|
||||
send_input({ id: agent, message: "Please finalize and output current findings." })
|
||||
wait({ ids: [agent], timeout_ms: 120000 })
|
||||
}
|
||||
Write(`${sessionFolder}/interactive/${task.id}-result.json`, JSON.stringify({
|
||||
task_id: task.id, status: "completed", findings: parseFindings(result),
|
||||
timestamp: getUtc8ISOString()
|
||||
}))
|
||||
close_agent({ id: agent })
|
||||
task.status = 'completed'
|
||||
task.findings = parseFindings(result)
|
||||
}
|
||||
|
||||
// 4. Build prev_context for csv-wave tasks
|
||||
const pendingCsvTasks = csvTasks.filter(t => t.status === 'pending')
|
||||
for (const task of pendingCsvTasks) {
|
||||
task.prev_context = buildPrevContext(task, tasks)
|
||||
}
|
||||
|
||||
if (pendingCsvTasks.length > 0) {
|
||||
// 5. Write wave CSV
|
||||
Write(`${sessionFolder}/wave-${wave}.csv`, toCsv(pendingCsvTasks))
|
||||
|
||||
// 6. Build instruction per role group
|
||||
const waveInstruction = buildWaveInstruction(pendingCsvTasks, sessionFolder, wave)
|
||||
|
||||
// 7. Execute wave via spawn_agents_on_csv
|
||||
spawn_agents_on_csv({
|
||||
csv_path: `${sessionFolder}/wave-${wave}.csv`,
|
||||
id_column: "id",
|
||||
instruction: waveInstruction,
|
||||
max_concurrency: maxConcurrency,
|
||||
max_runtime_seconds: 900,
|
||||
output_csv_path: `${sessionFolder}/wave-${wave}-results.csv`,
|
||||
output_schema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
id: { type: "string" },
|
||||
status: { type: "string", enum: ["completed", "failed"] },
|
||||
findings: { type: "string" },
|
||||
artifacts_produced: { type: "string" },
|
||||
audit_score: { type: "string" },
|
||||
audit_signal: { type: "string" },
|
||||
error: { type: "string" }
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// 8. Merge results into master CSV
|
||||
const results = parseCsv(Read(`${sessionFolder}/wave-${wave}-results.csv`))
|
||||
for (const r of results) {
|
||||
const t = tasks.find(t => t.id === r.id)
|
||||
if (t) Object.assign(t, r)
|
||||
}
|
||||
|
||||
// 9. GC Loop Check: if a reviewer task returned fix_required
|
||||
const auditResults = results.filter(r => r.id.startsWith('AUDIT') && r.audit_signal === 'fix_required')
|
||||
for (const ar of auditResults) {
|
||||
if (gcRound < MAX_GC_ROUNDS) {
|
||||
gcRound++
|
||||
const fixId = `DESIGN-fix-${gcRound}`
|
||||
const recheckId = `AUDIT-recheck-${gcRound}`
|
||||
tasks.push({
|
||||
id: fixId, title: `Fix audit issues (round ${gcRound})`,
|
||||
description: `PURPOSE: Address audit feedback from ${ar.id} | Success: All critical/high issues resolved\nTASK:\n- Parse audit feedback for specific issues\n- Apply targeted fixes to design tokens/specs\n- Re-validate affected artifacts\nCONTEXT:\n- Session: ${sessionFolder}\n- Upstream: artifacts/audit/\nEXPECTED: Fixed design artifacts\nCONSTRAINTS: Targeted fixes only`,
|
||||
role: 'designer', pipeline_mode: tasks[0].pipeline_mode, scope: 'full',
|
||||
audit_type: '', deps: ar.id, context_from: ar.id,
|
||||
exec_mode: 'csv-wave', wave: wave + 1, status: 'pending',
|
||||
findings: '', artifacts_produced: '', audit_score: '', audit_signal: '', error: ''
|
||||
})
|
||||
tasks.push({
|
||||
id: recheckId, title: `Audit recheck (round ${gcRound})`,
|
||||
description: `PURPOSE: Re-audit after fixes | Success: Score >= 8, critical == 0\nTASK:\n- Execute 5-dimension audit on fixed artifacts\n- Focus on previously flagged issues\nCONTEXT:\n- Session: ${sessionFolder}\n- Audit type: token-audit\nEXPECTED: artifacts/audit/audit-recheck-${gcRound}.md`,
|
||||
role: 'reviewer', pipeline_mode: tasks[0].pipeline_mode, scope: 'full',
|
||||
audit_type: 'token-audit', deps: fixId, context_from: fixId,
|
||||
exec_mode: 'csv-wave', wave: wave + 2, status: 'pending',
|
||||
findings: '', artifacts_produced: '', audit_score: '', audit_signal: '', error: ''
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 10. Update master CSV
|
||||
Write(`${sessionFolder}/tasks.csv`, toCsv(tasks))
|
||||
|
||||
// 11. Cleanup temp files
|
||||
Bash(`rm -f ${sessionFolder}/wave-${wave}.csv ${sessionFolder}/wave-${wave}-results.csv`)
|
||||
|
||||
// 12. Display wave summary
|
||||
const completed = waveTasks.filter(t => t.status === 'completed').length
|
||||
const failed = waveTasks.filter(t => t.status === 'failed').length
|
||||
const skipped = waveTasks.filter(t => t.status === 'skipped').length
|
||||
console.log(`Wave ${wave} Complete: ${completed} completed, ${failed} failed, ${skipped} skipped`)
|
||||
}
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- All waves executed in order
|
||||
- Both csv-wave and interactive tasks handled per wave
|
||||
- Each wave's results merged into master CSV before next wave starts
|
||||
- Dependent tasks skipped when predecessor failed
|
||||
- GC loop (designer <-> reviewer) handled with max 2 rounds
|
||||
- discoveries.ndjson accumulated across all waves and mechanisms
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Post-Wave Interactive (Completion Action)
|
||||
|
||||
**Objective**: Pipeline completion report with deliverables listing and interactive completion choice.
|
||||
|
||||
```javascript
|
||||
const tasks = parseCsv(Read(`${sessionFolder}/tasks.csv`))
|
||||
const completed = tasks.filter(t => t.status === 'completed')
|
||||
const failed = tasks.filter(t => t.status === 'failed')
|
||||
|
||||
const deliverables = [
|
||||
{ name: "Design System Analysis", path: `${sessionFolder}/artifacts/research/design-system-analysis.json` },
|
||||
{ name: "Component Inventory", path: `${sessionFolder}/artifacts/research/component-inventory.json` },
|
||||
{ name: "Accessibility Audit", path: `${sessionFolder}/artifacts/research/accessibility-audit.json` },
|
||||
{ name: "Design Intelligence", path: `${sessionFolder}/artifacts/research/design-intelligence.json` },
|
||||
{ name: "Design Tokens", path: `${sessionFolder}/artifacts/design/design-tokens.json` },
|
||||
{ name: "Component Specs", path: `${sessionFolder}/artifacts/design/component-specs/` },
|
||||
{ name: "Audit Reports", path: `${sessionFolder}/artifacts/audit/` },
|
||||
{ name: "Token Files", path: `${sessionFolder}/artifacts/build/token-files/` },
|
||||
{ name: "Component Files", path: `${sessionFolder}/artifacts/build/component-files/` }
|
||||
]
|
||||
|
||||
console.log(`
|
||||
============================================
|
||||
UI DESIGN TEAM COMPLETE
|
||||
|
||||
Pipeline: ${completed.length}/${tasks.length} tasks (${tasks[0]?.pipeline_mode} mode)
|
||||
GC Rounds: ${gcRound}/${MAX_GC_ROUNDS}
|
||||
Session: ${sessionFolder}
|
||||
|
||||
Deliverables:
|
||||
${deliverables.map(d => ` - ${d.name}: ${d.path}`).join('\n')}
|
||||
============================================
|
||||
`)
|
||||
|
||||
if (!AUTO_YES) {
|
||||
// Spawn completion handler interactive agent
|
||||
Read(`agents/completion-handler.md`)
|
||||
const agent = spawn_agent({
|
||||
message: `## TASK ASSIGNMENT\n\n### MANDATORY FIRST STEPS\n1. Read: agents/completion-handler.md\n2. Read: ${sessionFolder}/tasks.csv\n\nGoal: Handle pipeline completion action\nSession: ${sessionFolder}\nDeliverables: ${JSON.stringify(deliverables)}`
|
||||
})
|
||||
const result = wait({ ids: [agent], timeout_ms: 300000 })
|
||||
close_agent({ id: agent })
|
||||
}
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- Post-wave interactive processing complete
|
||||
- User informed of deliverables and pipeline status
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Results Aggregation
|
||||
|
||||
**Objective**: Generate final results and human-readable report.
|
||||
|
||||
```javascript
|
||||
Bash(`cp ${sessionFolder}/tasks.csv ${sessionFolder}/results.csv`)
|
||||
|
||||
const tasks = parseCsv(Read(`${sessionFolder}/tasks.csv`))
|
||||
let contextMd = `# UI Design Report\n\n`
|
||||
contextMd += `**Session**: ${sessionId}\n`
|
||||
contextMd += `**Pipeline**: ${tasks[0]?.pipeline_mode} mode\n`
|
||||
contextMd += `**Date**: ${getUtc8ISOString().substring(0, 10)}\n\n`
|
||||
|
||||
contextMd += `## Summary\n`
|
||||
contextMd += `| Status | Count |\n|--------|-------|\n`
|
||||
contextMd += `| Completed | ${tasks.filter(t => t.status === 'completed').length} |\n`
|
||||
contextMd += `| Failed | ${tasks.filter(t => t.status === 'failed').length} |\n`
|
||||
contextMd += `| Skipped | ${tasks.filter(t => t.status === 'skipped').length} |\n\n`
|
||||
|
||||
const maxWave = Math.max(...tasks.map(t => t.wave))
|
||||
contextMd += `## Wave Execution\n\n`
|
||||
for (let w = 1; w <= maxWave; w++) {
|
||||
const waveTasks = tasks.filter(t => t.wave === w)
|
||||
contextMd += `### Wave ${w}\n\n`
|
||||
for (const t of waveTasks) {
|
||||
const icon = t.status === 'completed' ? '[DONE]' : t.status === 'failed' ? '[FAIL]' : '[SKIP]'
|
||||
contextMd += `${icon} **${t.title}** [${t.role}]`
|
||||
if (t.audit_score) contextMd += ` Score: ${t.audit_score}/10 (${t.audit_signal})`
|
||||
contextMd += ` ${t.findings || ''}\n\n`
|
||||
}
|
||||
}
|
||||
|
||||
contextMd += `## Audit Summary\n\n`
|
||||
const auditResults = tasks.filter(t => t.role === 'reviewer' && t.audit_score)
|
||||
for (const a of auditResults) {
|
||||
contextMd += `- **${a.id}**: Score ${a.audit_score}/10 - ${a.audit_signal}\n`
|
||||
}
|
||||
|
||||
contextMd += `\n## GC Loop Summary\n`
|
||||
contextMd += `- Rounds used: ${gcRound}/${MAX_GC_ROUNDS}\n`
|
||||
|
||||
Write(`${sessionFolder}/context.md`, contextMd)
|
||||
console.log(`Results exported to: ${sessionFolder}/results.csv`)
|
||||
console.log(`Report generated at: ${sessionFolder}/context.md`)
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- results.csv exported (all tasks, both modes)
|
||||
- context.md generated with audit summary
|
||||
- Summary displayed to user
|
||||
|
||||
---
|
||||
|
||||
## Shared Discovery Board Protocol
|
||||
|
||||
All agents (csv-wave and interactive) share a single `discoveries.ndjson` file for cross-task knowledge exchange.
|
||||
|
||||
**Format**: One JSON object per line (NDJSON):
|
||||
|
||||
```jsonl
|
||||
{"ts":"2026-03-08T10:00:00Z","worker":"RESEARCH-001","type":"tech_stack_detected","data":{"stack":"react","framework":"nextjs","ui_lib":"shadcn"}}
|
||||
{"ts":"2026-03-08T10:05:00Z","worker":"DESIGN-001","type":"token_generated","data":{"category":"color","count":24,"supports_dark_mode":true}}
|
||||
{"ts":"2026-03-08T10:10:00Z","worker":"BUILD-001","type":"file_modified","data":{"file":"tokens.css","change":"Generated CSS custom properties","lines_added":85}}
|
||||
{"ts":"2026-03-08T10:15:00Z","worker":"AUDIT-001","type":"issue_found","data":{"file":"design-tokens.json","line":0,"severity":"high","description":"Missing dark mode variant for semantic color tokens"}}
|
||||
```
|
||||
|
||||
**Discovery Types**:
|
||||
|
||||
| Type | Data Schema | Description |
|
||||
|------|-------------|-------------|
|
||||
| `tech_stack_detected` | `{stack, framework, ui_lib}` | Tech stack identified by researcher |
|
||||
| `design_pattern_found` | `{pattern_name, location, description}` | Existing design pattern in codebase |
|
||||
| `token_generated` | `{category, count, supports_dark_mode}` | Design token category created |
|
||||
| `file_modified` | `{file, change, lines_added}` | File change recorded |
|
||||
| `issue_found` | `{file, line, severity, description}` | Audit issue discovered |
|
||||
| `anti_pattern_violation` | `{pattern, file, line, description}` | Design anti-pattern detected |
|
||||
| `artifact_produced` | `{name, path, producer, type}` | Deliverable created |
|
||||
|
||||
**Protocol**:
|
||||
1. Agents MUST read discoveries.ndjson at start of execution
|
||||
2. Agents MUST append relevant discoveries during execution
|
||||
3. Agents MUST NOT modify or delete existing entries
|
||||
4. Deduplication by `{type, data.file}` key
|
||||
|
||||
---
|
||||
|
||||
## Pipeline Definitions
|
||||
|
||||
### Component Mode (4 tasks, linear)
|
||||
|
||||
```
|
||||
RESEARCH-001 --> DESIGN-001 --> AUDIT-001 --> BUILD-001
|
||||
[researcher] [designer] [reviewer] [implementer]
|
||||
wave 1 wave 2 wave 3 wave 4
|
||||
```
|
||||
|
||||
### System Mode (7 tasks, dual-track parallel)
|
||||
|
||||
```
|
||||
RESEARCH-001 --> DESIGN-001 --> AUDIT-001 --> DESIGN-002 --+
|
||||
[researcher] [designer] [reviewer] [designer] |
|
||||
BUILD-001 --+--> AUDIT-002 --> BUILD-002
|
||||
[implementer] [reviewer] [implementer]
|
||||
wave 1 wave 2 wave 3 wave 4 wave 5 wave 6
|
||||
```
|
||||
|
||||
### Full-System Mode (8 tasks, dual-track + final audit)
|
||||
|
||||
```
|
||||
Same as System + AUDIT-003 after BUILD-002
|
||||
|
||||
BUILD-002 --> AUDIT-003
|
||||
[reviewer: final-audit]
|
||||
wave 6 wave 7
|
||||
```
|
||||
|
||||
### Generator-Critic Loop (designer <-> reviewer)
|
||||
|
||||
```
|
||||
designer (Generator) -> design artifacts -> reviewer (Critic)
|
||||
<- audit feedback <-
|
||||
(max 2 rounds)
|
||||
|
||||
Convergence: audit.score >= 8 AND audit.critical_count === 0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Error | Resolution |
|
||||
|-------|------------|
|
||||
| Circular dependency | Detect in wave computation, abort with error message |
|
||||
| CSV agent timeout | Mark as failed in results, continue with wave |
|
||||
| CSV agent failed | Mark as failed, skip dependent tasks in later waves |
|
||||
| Interactive agent timeout | Urge convergence via send_input, then close if still timed out |
|
||||
| Interactive agent failed | Mark as failed, skip dependents |
|
||||
| All agents in wave failed | Log error, offer retry or abort |
|
||||
| CSV parse error | Validate CSV format before execution, show line number |
|
||||
| discoveries.ndjson corrupt | Ignore malformed lines, continue with valid entries |
|
||||
| Audit score < 6 over 2 GC rounds | Escalate to user for manual intervention |
|
||||
| ui-ux-pro-max unavailable | Degrade to LLM general design knowledge |
|
||||
| Task description too vague | AskUserQuestion for clarification in Phase 0 |
|
||||
| Continue mode: no session found | List available sessions, prompt user to select |
|
||||
|
||||
---
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. **Start Immediately**: First action is session initialization, then Phase 0/1
|
||||
2. **Wave Order is Sacred**: Never execute wave N before wave N-1 completes and results are merged
|
||||
3. **CSV is Source of Truth**: Master tasks.csv holds all state (both csv-wave and interactive)
|
||||
4. **CSV First**: Default to csv-wave for tasks; only use interactive when interaction pattern requires it
|
||||
5. **Context Propagation**: prev_context built from master CSV, not from memory
|
||||
6. **Discovery Board is Append-Only**: Never clear, modify, or recreate discoveries.ndjson
|
||||
7. **Skip on Failure**: If a dependency failed, skip the dependent task
|
||||
8. **GC Loop Cap**: Max 2 generator-critic rounds between designer and reviewer
|
||||
9. **Cleanup Temp Files**: Remove wave-{N}.csv after results are merged
|
||||
10. **DO NOT STOP**: Continuous execution until all waves complete or all remaining tasks are skipped
|
||||
509
.codex/skills/team-uidesign/instructions/agent-instruction.md
Normal file
509
.codex/skills/team-uidesign/instructions/agent-instruction.md
Normal file
@@ -0,0 +1,509 @@
|
||||
# Team UI Design — Agent Instruction
|
||||
|
||||
This instruction is loaded by team-worker agents when spawned with roles: `researcher`, `designer`, `reviewer`, `implementer`.
|
||||
|
||||
---
|
||||
|
||||
## Role-Based Execution
|
||||
|
||||
### Researcher Role
|
||||
|
||||
**Responsibility**: Analyze existing design system, build component inventory, assess accessibility baseline, retrieve design intelligence.
|
||||
|
||||
**Input**:
|
||||
- `id`: Task ID (e.g., `RESEARCH-001`)
|
||||
- `title`: Task title
|
||||
- `description`: Detailed task description with PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS
|
||||
- `role`: `researcher`
|
||||
- `pipeline_mode`: `component`, `system`, or `full-system`
|
||||
- `scope`: `full`
|
||||
- `prev_context`: Previous tasks' findings (empty for wave 1)
|
||||
|
||||
**Execution Protocol**:
|
||||
|
||||
1. **Read shared discoveries**:
|
||||
```javascript
|
||||
const discoveries = Read(`{session}/discoveries.ndjson`)
|
||||
```
|
||||
|
||||
2. **Analyze existing design system**:
|
||||
- Scan codebase for design tokens (CSS variables, theme files, config)
|
||||
- Identify styling patterns (CSS-in-JS, Tailwind, styled-components)
|
||||
- Extract color palette, typography scale, spacing system
|
||||
|
||||
3. **Build component inventory**:
|
||||
- List all UI components with props and states
|
||||
- Document component hierarchy and composition patterns
|
||||
- Note accessibility features (ARIA, keyboard nav)
|
||||
|
||||
4. **Assess accessibility baseline**:
|
||||
- Check contrast ratios (WCAG AA/AAA)
|
||||
- Verify semantic HTML usage
|
||||
- Document keyboard navigation support
|
||||
- Note screen reader compatibility
|
||||
|
||||
5. **Retrieve design intelligence** (if ui-ux-pro-max available):
|
||||
- Query for industry best practices
|
||||
- Get component design patterns
|
||||
- Retrieve accessibility guidelines
|
||||
|
||||
6. **Write research artifacts**:
|
||||
```javascript
|
||||
Write(`{session}/artifacts/research/design-system-analysis.json`, JSON.stringify({
|
||||
tech_stack: { framework: "React", ui_lib: "shadcn", styling: "Tailwind" },
|
||||
existing_tokens: { colors: 24, typography: 7, spacing: 6 },
|
||||
patterns: ["Compound components", "Render props"],
|
||||
gaps: ["Missing dark mode", "Inconsistent spacing"]
|
||||
}, null, 2))
|
||||
|
||||
Write(`{session}/artifacts/research/component-inventory.json`, JSON.stringify({
|
||||
components: [
|
||||
{ name: "Button", props: ["variant", "size"], states: ["default", "hover", "active", "disabled"] }
|
||||
]
|
||||
}, null, 2))
|
||||
|
||||
Write(`{session}/artifacts/research/accessibility-audit.json`, JSON.stringify({
|
||||
wcag_level: "AA",
|
||||
contrast_issues: 3,
|
||||
keyboard_nav: "partial",
|
||||
screen_reader: "good"
|
||||
}, null, 2))
|
||||
|
||||
Write(`{session}/artifacts/research/design-intelligence.json`, JSON.stringify({
|
||||
industry: "SaaS/Tech",
|
||||
best_practices: ["8px grid", "4-5 color shades", "Semantic naming"],
|
||||
patterns: ["Button variants", "Form validation states"]
|
||||
}, null, 2))
|
||||
```
|
||||
|
||||
7. **Share discoveries**:
|
||||
```bash
|
||||
echo '{"ts":"2026-03-08T10:00:00Z","worker":"{id}","type":"tech_stack_detected","data":{"stack":"react","framework":"nextjs","ui_lib":"shadcn"}}' >> {session}/discoveries.ndjson
|
||||
```
|
||||
|
||||
8. **Report result**:
|
||||
```javascript
|
||||
report_agent_job_result({
|
||||
id: "{id}",
|
||||
status: "completed",
|
||||
findings: "Detected React + shadcn stack. 24 color tokens, 7 typography scales. Missing dark mode variants. WCAG AA baseline with 3 contrast issues.",
|
||||
artifacts_produced: "artifacts/research/design-system-analysis.json;artifacts/research/component-inventory.json;artifacts/research/accessibility-audit.json;artifacts/research/design-intelligence.json",
|
||||
audit_score: "",
|
||||
audit_signal: "",
|
||||
error: ""
|
||||
})
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- All 4 research artifacts produced with valid JSON
|
||||
- Tech stack identified
|
||||
- Component inventory complete
|
||||
- Accessibility baseline documented
|
||||
|
||||
---
|
||||
|
||||
### Designer Role
|
||||
|
||||
**Responsibility**: Generate design tokens (W3C Design Tokens Format) and component specifications.
|
||||
|
||||
**Input**:
|
||||
- `id`: Task ID (e.g., `DESIGN-001`)
|
||||
- `title`: Task title
|
||||
- `description`: Detailed task description
|
||||
- `role`: `designer`
|
||||
- `pipeline_mode`: `component`, `system`, or `full-system`
|
||||
- `scope`: `tokens`, `components`, or `full`
|
||||
- `context_from`: Upstream task IDs (e.g., `RESEARCH-001`)
|
||||
- `prev_context`: Previous tasks' findings
|
||||
|
||||
**Execution Protocol**:
|
||||
|
||||
1. **Read shared discoveries and upstream artifacts**:
|
||||
```javascript
|
||||
const discoveries = Read(`{session}/discoveries.ndjson`)
|
||||
const research = JSON.parse(Read(`{session}/artifacts/research/design-system-analysis.json`))
|
||||
```
|
||||
|
||||
2. **Generate design tokens** (W3C Design Tokens Format):
|
||||
```javascript
|
||||
const tokens = {
|
||||
"color": {
|
||||
"primary": {
|
||||
"$type": "color",
|
||||
"$value": "#3B82F6",
|
||||
"$description": "Primary brand color"
|
||||
},
|
||||
"primary-dark": {
|
||||
"$type": "color",
|
||||
"$value": "#1E40AF",
|
||||
"$description": "Primary color for dark mode"
|
||||
}
|
||||
},
|
||||
"typography": {
|
||||
"font-size-base": {
|
||||
"$type": "dimension",
|
||||
"$value": "16px"
|
||||
}
|
||||
},
|
||||
"spacing": {
|
||||
"space-1": {
|
||||
"$type": "dimension",
|
||||
"$value": "4px"
|
||||
}
|
||||
}
|
||||
}
|
||||
Write(`{session}/artifacts/design/design-tokens.json`, JSON.stringify(tokens, null, 2))
|
||||
```
|
||||
|
||||
3. **Create component specifications**:
|
||||
```markdown
|
||||
# Button Component Specification
|
||||
|
||||
## Overview
|
||||
Primary interactive element for user actions.
|
||||
|
||||
## States
|
||||
1. Default: Base appearance
|
||||
2. Hover: Elevated, color shift
|
||||
3. Active: Pressed state
|
||||
4. Disabled: Reduced opacity, no interaction
|
||||
5. Focus: Keyboard focus ring
|
||||
|
||||
## Variants
|
||||
- Primary: Filled background
|
||||
- Secondary: Outlined
|
||||
- Ghost: Text only
|
||||
|
||||
## Accessibility
|
||||
- ARIA role: button
|
||||
- Keyboard: Enter/Space to activate
|
||||
- Focus visible: 2px outline
|
||||
- Contrast: WCAG AA minimum
|
||||
|
||||
## Token Usage
|
||||
- Background: color.primary
|
||||
- Text: color.on-primary
|
||||
- Padding: spacing.space-3 spacing.space-4
|
||||
- Border radius: border.radius-md
|
||||
```
|
||||
|
||||
4. **Ensure light/dark mode support**:
|
||||
- All color tokens have light and dark variants
|
||||
- Semantic tokens reference base tokens
|
||||
- Theme switching mechanism defined
|
||||
|
||||
5. **Share discoveries**:
|
||||
```bash
|
||||
echo '{"ts":"2026-03-08T10:05:00Z","worker":"{id}","type":"token_generated","data":{"category":"color","count":24,"supports_dark_mode":true}}' >> {session}/discoveries.ndjson
|
||||
```
|
||||
|
||||
6. **Report result**:
|
||||
```javascript
|
||||
report_agent_job_result({
|
||||
id: "{id}",
|
||||
status: "completed",
|
||||
findings: "Generated design token system with 24 color tokens (light+dark), 7 typography scales, 6 spacing values. Created component spec for Button with all 5 states, ARIA roles, and responsive breakpoints.",
|
||||
artifacts_produced: "artifacts/design/design-tokens.json;artifacts/design/component-specs/button.md",
|
||||
audit_score: "",
|
||||
audit_signal: "",
|
||||
error: ""
|
||||
})
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- Design tokens in W3C format
|
||||
- All color tokens have light/dark variants
|
||||
- Component specs include all 5 states
|
||||
- Accessibility requirements documented
|
||||
|
||||
---
|
||||
|
||||
### Reviewer Role
|
||||
|
||||
**Responsibility**: 5-dimension quality audit for design artifacts.
|
||||
|
||||
**Input**:
|
||||
- `id`: Task ID (e.g., `AUDIT-001`)
|
||||
- `title`: Task title
|
||||
- `description`: Detailed task description
|
||||
- `role`: `reviewer`
|
||||
- `pipeline_mode`: `component`, `system`, or `full-system`
|
||||
- `scope`: `full`
|
||||
- `audit_type`: `token-audit`, `component-audit`, or `final-audit`
|
||||
- `context_from`: Upstream task IDs (e.g., `DESIGN-001`)
|
||||
- `prev_context`: Previous tasks' findings
|
||||
|
||||
**Execution Protocol**:
|
||||
|
||||
1. **Read design artifacts**:
|
||||
```javascript
|
||||
const tokens = JSON.parse(Read(`{session}/artifacts/design/design-tokens.json`))
|
||||
const componentSpecs = Glob(`{session}/artifacts/design/component-specs/*.md`)
|
||||
```
|
||||
|
||||
2. **5-Dimension Audit**:
|
||||
|
||||
**Consistency (20%)**:
|
||||
- Token naming follows convention
|
||||
- Semantic tokens reference base tokens correctly
|
||||
- Component specs use consistent terminology
|
||||
|
||||
**Accessibility (25%)**:
|
||||
- Contrast ratios meet WCAG AA (4.5:1 text, 3:1 UI)
|
||||
- All interactive states have focus indicators
|
||||
- ARIA roles and labels defined
|
||||
- Keyboard navigation specified
|
||||
|
||||
**Completeness (20%)**:
|
||||
- All 5 interactive states defined
|
||||
- Light and dark mode for all color tokens
|
||||
- Responsive breakpoints specified
|
||||
- Edge cases documented
|
||||
|
||||
**Quality (15%)**:
|
||||
- Token values follow design principles (8px grid, etc.)
|
||||
- Component specs are clear and actionable
|
||||
- No hardcoded values in specs
|
||||
|
||||
**Industry Compliance (20%)**:
|
||||
- Follows industry best practices (from research)
|
||||
- Meets domain-specific requirements (healthcare: stricter accessibility)
|
||||
- Aligns with design system standards
|
||||
|
||||
3. **Calculate weighted score**:
|
||||
```javascript
|
||||
const score = (consistency * 0.20) + (accessibility * 0.25) + (completeness * 0.20) + (quality * 0.15) + (industry * 0.20)
|
||||
```
|
||||
|
||||
4. **Determine audit signal**:
|
||||
- `audit_passed`: score >= 8.0 AND critical_count === 0
|
||||
- `audit_result`: score >= 6.0 AND critical_count === 0
|
||||
- `fix_required`: score < 6.0 OR critical_count > 0
|
||||
|
||||
5. **Write audit report**:
|
||||
```markdown
|
||||
# Design Audit Report: {id}
|
||||
|
||||
## Overall Score: {score}/10
|
||||
|
||||
## Dimension Scores
|
||||
- Consistency: {consistency}/10 (20%)
|
||||
- Accessibility: {accessibility}/10 (25%)
|
||||
- Completeness: {completeness}/10 (20%)
|
||||
- Quality: {quality}/10 (15%)
|
||||
- Industry: {industry}/10 (20%)
|
||||
|
||||
## Issues Found
|
||||
|
||||
### Critical (0)
|
||||
(none)
|
||||
|
||||
### High (1)
|
||||
- Missing dark mode variant for semantic color tokens
|
||||
|
||||
### Medium (2)
|
||||
- Border radius not defined for pill variant
|
||||
- Focus ring color not specified
|
||||
|
||||
### Low (3)
|
||||
- Token naming could be more semantic
|
||||
- Component spec missing edge case documentation
|
||||
- Responsive breakpoint values not aligned with 8px grid
|
||||
|
||||
## Recommendations
|
||||
1. Add dark mode variants for all semantic tokens
|
||||
2. Define border-radius-pill token
|
||||
3. Specify focus ring color (accessibility.focus-ring)
|
||||
|
||||
## Verdict: {audit_signal}
|
||||
```
|
||||
|
||||
6. **Share discoveries**:
|
||||
```bash
|
||||
echo '{"ts":"2026-03-08T10:15:00Z","worker":"{id}","type":"issue_found","data":{"file":"design-tokens.json","line":0,"severity":"high","description":"Missing dark mode variant for semantic color tokens"}}' >> {session}/discoveries.ndjson
|
||||
```
|
||||
|
||||
7. **Report result**:
|
||||
```javascript
|
||||
report_agent_job_result({
|
||||
id: "{id}",
|
||||
status: "completed",
|
||||
findings: "Design audit: 8.4/10. Token naming consistent, all color tokens have light/dark variants, contrast ratios meet WCAG AA. Minor: missing border-radius for pill variant.",
|
||||
artifacts_produced: "artifacts/audit/audit-001.md",
|
||||
audit_score: "8.4",
|
||||
audit_signal: "audit_passed",
|
||||
error: ""
|
||||
})
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- All 5 dimensions scored
|
||||
- Audit report written with issue breakdown
|
||||
- Audit signal determined (pass/result/fix_required)
|
||||
- Score >= 8.0 with 0 critical issues for GC convergence
|
||||
|
||||
---
|
||||
|
||||
### Implementer Role
|
||||
|
||||
**Responsibility**: Implement component code from design specs with token consumption and accessibility.
|
||||
|
||||
**Input**:
|
||||
- `id`: Task ID (e.g., `BUILD-001`)
|
||||
- `title`: Task title
|
||||
- `description`: Detailed task description
|
||||
- `role`: `implementer`
|
||||
- `pipeline_mode`: `component`, `system`, or `full-system`
|
||||
- `scope`: `full`
|
||||
- `context_from`: Upstream task IDs (e.g., `AUDIT-001`)
|
||||
- `prev_context`: Previous tasks' findings
|
||||
|
||||
**Execution Protocol**:
|
||||
|
||||
1. **Read design artifacts and audit feedback**:
|
||||
```javascript
|
||||
const tokens = JSON.parse(Read(`{session}/artifacts/design/design-tokens.json`))
|
||||
const componentSpec = Read(`{session}/artifacts/design/component-specs/button.md`)
|
||||
const auditReport = Read(`{session}/artifacts/audit/audit-001.md`)
|
||||
```
|
||||
|
||||
2. **Generate CSS custom properties from tokens**:
|
||||
```css
|
||||
:root {
|
||||
--color-primary: #3B82F6;
|
||||
--color-primary-dark: #1E40AF;
|
||||
--font-size-base: 16px;
|
||||
--space-1: 4px;
|
||||
}
|
||||
|
||||
[data-theme="dark"] {
|
||||
--color-primary: var(--color-primary-dark);
|
||||
}
|
||||
```
|
||||
|
||||
3. **Implement component with all 5 states**:
|
||||
```tsx
|
||||
import React from 'react'
|
||||
|
||||
interface ButtonProps {
|
||||
variant?: 'primary' | 'secondary' | 'ghost'
|
||||
disabled?: boolean
|
||||
children: React.ReactNode
|
||||
}
|
||||
|
||||
export const Button: React.FC<ButtonProps> = ({ variant = 'primary', disabled, children }) => {
|
||||
return (
|
||||
<button
|
||||
className={`btn btn-${variant}`}
|
||||
disabled={disabled}
|
||||
aria-disabled={disabled}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
4. **Add ARIA attributes and keyboard navigation**:
|
||||
- `role="button"` (if not native button)
|
||||
- `aria-disabled` for disabled state
|
||||
- `aria-pressed` for toggle buttons
|
||||
- Focus management with `:focus-visible`
|
||||
|
||||
5. **Validate no hardcoded values**:
|
||||
- All colors use `var(--token-name)`
|
||||
- All spacing uses token variables
|
||||
- All typography uses token variables
|
||||
|
||||
6. **Follow project patterns**:
|
||||
- Match existing component structure
|
||||
- Use same import patterns
|
||||
- Follow naming conventions from research
|
||||
|
||||
7. **Share discoveries**:
|
||||
```bash
|
||||
echo '{"ts":"2026-03-08T10:10:00Z","worker":"{id}","type":"file_modified","data":{"file":"tokens.css","change":"Generated CSS custom properties from design tokens","lines_added":85}}' >> {session}/discoveries.ndjson
|
||||
```
|
||||
|
||||
8. **Report result**:
|
||||
```javascript
|
||||
report_agent_job_result({
|
||||
id: "{id}",
|
||||
status: "completed",
|
||||
findings: "Implemented Button component with all 5 states, ARIA attributes, keyboard navigation. Generated CSS custom properties from design tokens. No hardcoded values.",
|
||||
artifacts_produced: "artifacts/build/token-files/tokens.css;artifacts/build/component-files/Button.tsx",
|
||||
audit_score: "",
|
||||
audit_signal: "",
|
||||
error: ""
|
||||
})
|
||||
```
|
||||
|
||||
**Success Criteria**:
|
||||
- Component code implements all 5 states
|
||||
- All values use token variables (no hardcoded)
|
||||
- ARIA attributes present
|
||||
- Keyboard navigation functional
|
||||
- Follows project patterns
|
||||
|
||||
---
|
||||
|
||||
## Generator-Critic Loop (Designer <-> Reviewer)
|
||||
|
||||
When reviewer returns `audit_signal: "fix_required"`:
|
||||
|
||||
1. Coordinator creates `DESIGN-fix-{round}` task (max 2 rounds)
|
||||
2. Designer reads audit feedback, applies targeted fixes
|
||||
3. Coordinator creates `AUDIT-recheck-{round}` task
|
||||
4. Reviewer re-audits fixed artifacts
|
||||
5. Convergence: score >= 8.0 AND critical_count === 0
|
||||
|
||||
---
|
||||
|
||||
## Shared Discovery Board
|
||||
|
||||
All roles read/write `{session}/discoveries.ndjson`:
|
||||
|
||||
**Discovery Types**:
|
||||
- `tech_stack_detected`: Tech stack identified
|
||||
- `design_pattern_found`: Existing design pattern
|
||||
- `token_generated`: Design token category created
|
||||
- `file_modified`: File change recorded
|
||||
- `issue_found`: Audit issue discovered
|
||||
- `anti_pattern_violation`: Design anti-pattern detected
|
||||
- `artifact_produced`: Deliverable created
|
||||
|
||||
**Protocol**:
|
||||
1. Read discoveries at start
|
||||
2. Append discoveries during execution (never modify existing)
|
||||
3. Deduplicate by type + data key
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Error | Resolution |
|
||||
|-------|------------|
|
||||
| Upstream artifact not found | Report error, mark failed |
|
||||
| Design tokens invalid JSON | Report error, mark failed |
|
||||
| Component spec missing required sections | Report error, mark failed |
|
||||
| Audit score calculation error | Default to 0, report error |
|
||||
| Implementation build fails | Report error, mark failed |
|
||||
| CLI tool timeout | Fallback to direct implementation |
|
||||
|
||||
---
|
||||
|
||||
## Output Format
|
||||
|
||||
All roles use `report_agent_job_result` with this schema:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "{id}",
|
||||
"status": "completed" | "failed",
|
||||
"findings": "Key discoveries (max 500 chars)",
|
||||
"artifacts_produced": "semicolon-separated paths",
|
||||
"audit_score": "0-10 (reviewer only)",
|
||||
"audit_signal": "audit_passed|audit_result|fix_required (reviewer only)",
|
||||
"error": ""
|
||||
}
|
||||
```
|
||||
187
.codex/skills/team-uidesign/schemas/tasks-schema.md
Normal file
187
.codex/skills/team-uidesign/schemas/tasks-schema.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# Team UI Design -- CSV Schema
|
||||
|
||||
## Master CSV: tasks.csv
|
||||
|
||||
### Column Definitions
|
||||
|
||||
#### Input Columns (Set by Decomposer)
|
||||
|
||||
| Column | Type | Required | Description | Example |
|
||||
|--------|------|----------|-------------|---------|
|
||||
| `id` | string | Yes | Unique task identifier (PREFIX-NNN) | `"RESEARCH-001"` |
|
||||
| `title` | string | Yes | Short task title | `"Design system analysis"` |
|
||||
| `description` | string | Yes | Detailed task description (self-contained) with PURPOSE/TASK/CONTEXT/EXPECTED/CONSTRAINTS | `"PURPOSE: Analyze existing design system..."` |
|
||||
| `role` | enum | Yes | Worker role: `researcher`, `designer`, `reviewer`, `implementer` | `"researcher"` |
|
||||
| `pipeline_mode` | enum | Yes | Pipeline mode: `component`, `system`, `full-system` | `"component"` |
|
||||
| `scope` | enum | Yes | Task scope: `full`, `tokens`, `components` | `"full"` |
|
||||
| `audit_type` | string | No | Audit type: `token-audit`, `component-audit`, `final-audit` (empty for non-reviewer) | `"token-audit"` |
|
||||
| `deps` | string | No | Semicolon-separated dependency task IDs | `"RESEARCH-001"` |
|
||||
| `context_from` | string | No | Semicolon-separated task IDs for context | `"RESEARCH-001"` |
|
||||
| `exec_mode` | enum | Yes | Execution mechanism: `csv-wave` or `interactive` | `"csv-wave"` |
|
||||
|
||||
#### Computed Columns (Set by Wave Engine)
|
||||
|
||||
| Column | Type | Description | Example |
|
||||
|--------|------|-------------|---------|
|
||||
| `wave` | integer | Wave number (1-based, from topological sort) | `2` |
|
||||
| `prev_context` | string | Aggregated findings from context_from tasks (per-wave CSV only) | `"[RESEARCH-001] Detected React + shadcn stack..."` |
|
||||
|
||||
#### Output Columns (Set by Agent)
|
||||
|
||||
| Column | Type | Description | Example |
|
||||
|--------|------|-------------|---------|
|
||||
| `status` | enum | `pending` -> `completed` / `failed` / `skipped` | `"completed"` |
|
||||
| `findings` | string | Key discoveries (max 500 chars) | `"Generated 24 color tokens with dark mode..."` |
|
||||
| `artifacts_produced` | string | Semicolon-separated paths of produced artifacts | `"artifacts/research/design-system-analysis.json;artifacts/research/component-inventory.json"` |
|
||||
| `audit_score` | string | Audit weighted score 0-10 (empty for non-reviewer tasks) | `"8.5"` |
|
||||
| `audit_signal` | enum | `audit_passed`, `audit_result`, `fix_required` (empty for non-reviewer) | `"audit_passed"` |
|
||||
| `error` | string | Error message if failed | `""` |
|
||||
|
||||
---
|
||||
|
||||
### exec_mode Values
|
||||
|
||||
| Value | Mechanism | Description |
|
||||
|-------|-----------|-------------|
|
||||
| `csv-wave` | `spawn_agents_on_csv` | One-shot batch execution within wave |
|
||||
| `interactive` | `spawn_agent`/`wait`/`send_input`/`close_agent` | Multi-round individual execution |
|
||||
|
||||
Interactive tasks appear in master CSV for dependency tracking but are NOT included in wave-{N}.csv files.
|
||||
|
||||
---
|
||||
|
||||
### Role Prefixes
|
||||
|
||||
| Role | Prefix | Responsibility Type |
|
||||
|------|--------|---------------------|
|
||||
| researcher | RESEARCH | read-only (design system analysis + intelligence retrieval) |
|
||||
| designer | DESIGN | generation (design tokens + component specs, W3C format) |
|
||||
| reviewer | AUDIT | validation (5-dimension quality audit, GC critic) |
|
||||
| implementer | BUILD | code-gen (CSS custom properties + components + accessibility) |
|
||||
|
||||
---
|
||||
|
||||
### Example Data
|
||||
|
||||
```csv
|
||||
id,title,description,role,pipeline_mode,scope,audit_type,deps,context_from,exec_mode,wave,status,findings,artifacts_produced,audit_score,audit_signal,error
|
||||
"RESEARCH-001","Design system analysis","PURPOSE: Analyze existing design system, build component inventory, assess accessibility baseline | Success: 4 research artifacts produced with valid data\nTASK:\n- Analyze existing design tokens and styling patterns\n- Build component inventory with props and states\n- Assess accessibility baseline\n- Retrieve design intelligence via ui-ux-pro-max\nCONTEXT:\n- Session: .workflow/.csv-wave/uds-saas-dashboard-20260308\n- Industry: SaaS/Tech\nEXPECTED: artifacts/research/*.json | All 4 research files with valid JSON\nCONSTRAINTS: Read-only analysis","researcher","component","full","","","","csv-wave","1","pending","","","","",""
|
||||
"DESIGN-001","Design tokens + component spec","PURPOSE: Define design tokens (W3C format) and component specification | Success: Design tokens + component spec with all states defined\nTASK:\n- Define complete token system (color, typography, spacing, shadow, border, breakpoint)\n- Create component specification with all 5 interactive states\n- Ensure accessibility spec\nCONTEXT:\n- Session: .workflow/.csv-wave/uds-saas-dashboard-20260308\n- Upstream: research/*.json\nEXPECTED: artifacts/design/design-tokens.json + component-specs/*.md\nCONSTRAINTS: Follow W3C Design Tokens Format | Light/dark for all color tokens","designer","component","tokens","","RESEARCH-001","RESEARCH-001","csv-wave","2","pending","","","","",""
|
||||
"AUDIT-001","Design audit","PURPOSE: 5-dimension quality audit for consistency, accessibility, completeness, quality, industry compliance | Success: Audit score >= 8 with 0 critical issues\nTASK:\n- Score 5 dimensions (consistency 20%, accessibility 25%, completeness 20%, quality 15%, industry 20%)\n- Check token naming, theme completeness, contrast ratios\n- Verify component states and ARIA spec\nCONTEXT:\n- Session: .workflow/.csv-wave/uds-saas-dashboard-20260308\n- Upstream: design/design-tokens.json, design/component-specs/*.md\nEXPECTED: artifacts/audit/audit-001.md\nCONSTRAINTS: Read-only analysis | GC convergence: score >= 8 and 0 critical","reviewer","component","full","token-audit","DESIGN-001","DESIGN-001","csv-wave","3","pending","","","","",""
|
||||
"BUILD-001","Component implementation","PURPOSE: Implement component code from design specs | Success: Production code with token consumption and accessibility\nTASK:\n- Generate CSS custom properties from design tokens\n- Implement component with all 5 states\n- Add ARIA attributes and keyboard navigation\n- Validate no hardcoded values\nCONTEXT:\n- Session: .workflow/.csv-wave/uds-saas-dashboard-20260308\n- Upstream: design/design-tokens.json, design/component-specs/*.md, audit/audit-001.md\nEXPECTED: artifacts/build/**/*\nCONSTRAINTS: Use var(--token-name) only | Follow project patterns","implementer","component","full","","AUDIT-001","AUDIT-001","csv-wave","4","pending","","","","",""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Column Lifecycle
|
||||
|
||||
```
|
||||
Decomposer (Phase 1) Wave Engine (Phase 2) Agent (Execution)
|
||||
--------------------- -------------------- -----------------
|
||||
id ----------> id ----------> id
|
||||
title ----------> title ----------> (reads)
|
||||
description ----------> description ----------> (reads)
|
||||
role ----------> role ----------> (reads)
|
||||
pipeline_mode ---------> pipeline_mode ---------> (reads)
|
||||
scope ----------> scope ----------> (reads)
|
||||
audit_type ----------> audit_type ----------> (reads)
|
||||
deps ----------> deps ----------> (reads)
|
||||
context_from----------> context_from----------> (reads)
|
||||
exec_mode ----------> exec_mode ----------> (reads)
|
||||
wave ----------> (reads)
|
||||
prev_context ----------> (reads)
|
||||
status
|
||||
findings
|
||||
artifacts_produced
|
||||
audit_score
|
||||
audit_signal
|
||||
error
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Output Schema (JSON)
|
||||
|
||||
Agent output via `report_agent_job_result` (csv-wave tasks):
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "DESIGN-001",
|
||||
"status": "completed",
|
||||
"findings": "Generated design token system with 24 color tokens (light+dark), 7 typography scales, 6 spacing values. Created component spec for Button with all 5 states, ARIA roles, and responsive breakpoints.",
|
||||
"artifacts_produced": "artifacts/design/design-tokens.json;artifacts/design/component-specs/button.md",
|
||||
"audit_score": "",
|
||||
"audit_signal": "",
|
||||
"error": ""
|
||||
}
|
||||
```
|
||||
|
||||
Reviewer agent output example:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "AUDIT-001",
|
||||
"status": "completed",
|
||||
"findings": "Design audit: 8.4/10. Token naming consistent, all color tokens have light/dark variants, contrast ratios meet WCAG AA. Minor: missing border-radius for pill variant.",
|
||||
"artifacts_produced": "artifacts/audit/audit-001.md",
|
||||
"audit_score": "8.4",
|
||||
"audit_signal": "audit_passed",
|
||||
"error": ""
|
||||
}
|
||||
```
|
||||
|
||||
Interactive tasks output via structured text or JSON written to `interactive/{id}-result.json`.
|
||||
|
||||
---
|
||||
|
||||
## Discovery Types
|
||||
|
||||
| Type | Dedup Key | Data Schema | Description |
|
||||
|------|-----------|-------------|-------------|
|
||||
| `tech_stack_detected` | `data.stack` | `{stack, framework, ui_lib}` | Tech stack identified |
|
||||
| `design_pattern_found` | `data.pattern_name+data.location` | `{pattern_name, location, description}` | Existing design pattern |
|
||||
| `token_generated` | `data.category` | `{category, count, supports_dark_mode}` | Design token category created |
|
||||
| `file_modified` | `data.file` | `{file, change, lines_added}` | File change recorded |
|
||||
| `issue_found` | `data.file+data.line` | `{file, line, severity, description}` | Audit issue discovered |
|
||||
| `anti_pattern_violation` | `data.pattern+data.file` | `{pattern, file, line, description}` | Design anti-pattern detected |
|
||||
| `artifact_produced` | `data.path` | `{name, path, producer, type}` | Deliverable created |
|
||||
|
||||
### Discovery NDJSON Format
|
||||
|
||||
```jsonl
|
||||
{"ts":"2026-03-08T10:00:00Z","worker":"RESEARCH-001","type":"tech_stack_detected","data":{"stack":"react","framework":"nextjs","ui_lib":"shadcn"}}
|
||||
{"ts":"2026-03-08T10:05:00Z","worker":"DESIGN-001","type":"token_generated","data":{"category":"color","count":24,"supports_dark_mode":true}}
|
||||
{"ts":"2026-03-08T10:10:00Z","worker":"BUILD-001","type":"file_modified","data":{"file":"tokens.css","change":"Generated CSS custom properties from design tokens","lines_added":85}}
|
||||
{"ts":"2026-03-08T10:15:00Z","worker":"AUDIT-001","type":"issue_found","data":{"file":"design-tokens.json","line":0,"severity":"high","description":"Missing dark mode variant for semantic color tokens"}}
|
||||
```
|
||||
|
||||
> Both csv-wave and interactive agents read/write the same discoveries.ndjson file.
|
||||
|
||||
---
|
||||
|
||||
## Cross-Mechanism Context Flow
|
||||
|
||||
| Source | Target | Mechanism |
|
||||
|--------|--------|-----------|
|
||||
| CSV task findings | Interactive task | Injected via spawn message or send_input |
|
||||
| Interactive task result | CSV task prev_context | Read from interactive/{id}-result.json |
|
||||
| Any agent discovery | Any agent | Shared via discoveries.ndjson |
|
||||
|
||||
---
|
||||
|
||||
## Validation Rules
|
||||
|
||||
| Rule | Check | Error |
|
||||
|------|-------|-------|
|
||||
| Unique IDs | No duplicate `id` values | "Duplicate task ID: {id}" |
|
||||
| Valid deps | All dep IDs exist in tasks | "Unknown dependency: {dep_id}" |
|
||||
| No self-deps | Task cannot depend on itself | "Self-dependency: {id}" |
|
||||
| No circular deps | Topological sort completes | "Circular dependency detected involving: {ids}" |
|
||||
| context_from valid | All context IDs exist and in earlier waves | "Invalid context_from: {id}" |
|
||||
| exec_mode valid | Value is `csv-wave` or `interactive` | "Invalid exec_mode: {value}" |
|
||||
| Description non-empty | Every task has description | "Empty description for task: {id}" |
|
||||
| Status enum | status in {pending, completed, failed, skipped} | "Invalid status: {status}" |
|
||||
| Role valid | role in {researcher, designer, reviewer, implementer} | "Invalid role: {role}" |
|
||||
| Pipeline mode valid | pipeline_mode in {component, system, full-system} | "Invalid pipeline_mode: {mode}" |
|
||||
| Audit signal valid | audit_signal in {audit_passed, audit_result, fix_required, ""} | "Invalid audit_signal: {signal}" |
|
||||
| Cross-mechanism deps | Interactive to CSV deps resolve correctly | "Cross-mechanism dependency unresolvable: {id}" |
|
||||
Reference in New Issue
Block a user