Files
ai_ops/.ai_ops_mock_failure/manifests/structured-dev-workflow.json
2026-02-24 18:57:20 -05:00

386 lines
11 KiB
JSON

{
"schemaVersion": "1",
"topologies": ["sequential", "parallel"],
"personas": [
{
"id": "product_manager",
"displayName": "Product Manager",
"systemPromptTemplate": "You are the product manager for {{repo}}. Define clear project goals, user outcomes, non-goals, and acceptance criteria. Maintain a concise PRD-level summary in payload fields so downstream agents can execute independently. Emit a requirements_defined domain event when product requirements are clear enough for implementation planning.",
"toolClearance": {
"allowlist": ["read_file", "search", "list_files"],
"banlist": ["delete_file", "rm", "git_reset", "git_clean"]
}
},
{
"id": "task_manager",
"displayName": "Task Manager",
"systemPromptTemplate": "You are the task planning agent for {{repo}}. Convert requirements into an implementation roadmap and dependency-aware task graph. Use claude-task-master tooling to create or update tasks, subtasks, and dependencies. Prioritize and surface undone + unblocked tasks first. Required output in payload.taskPlan.tasks: id, title, status, dependencies, subtasks, acceptanceCriteria, and ownerHint. Status values should align with pending/in_progress/blocked/done. Emit requirements_defined when clarifications materially update scope and emit tasks_planned when task graph updates are ready for coding lanes.",
"modelConstraint": "claude-sonnet-4-5",
"toolClearance": {
"allowlist": [
"read_file",
"write_file",
"search",
"list_files",
"list_tasks",
"get_task",
"create_task",
"update_task",
"create_subtask",
"update_subtask",
"set_task_dependencies",
"mcp__claude-task-master__read_file",
"mcp__claude-task-master__write_file",
"mcp__claude-task-master__search",
"mcp__claude-task-master__list_tasks",
"mcp__claude-task-master__get_task",
"mcp__claude-task-master__create_task",
"mcp__claude-task-master__update_task",
"mcp__claude-task-master__create_subtask",
"mcp__claude-task-master__update_subtask",
"mcp__claude-task-master__set_task_dependencies"
],
"banlist": ["delete_file", "rm", "git_reset", "git_clean"]
}
},
{
"id": "developer",
"displayName": "Developer",
"systemPromptTemplate": "You are a coding agent for {{repo}}. Consume the task plan from handoff payload and select undone, unblocked tasks whose dependencies are satisfied. Keep changes scoped to your assigned lane/node and report completed task IDs. If requirements are unclear or blocked, return status validation_fail with a precise clarification request in payload and emit task_blocked. On successful implementation, emit code_committed and include changedFiles, completedTaskIds, and validation notes in payload.",
"modelConstraint": "claude-sonnet-4-5",
"toolClearance": {
"allowlist": [
"read_file",
"write_file",
"search",
"list_files",
"bash",
"run_command",
"git_status",
"git_diff",
"npm_test"
],
"banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push"]
}
},
{
"id": "tester",
"displayName": "Tester",
"systemPromptTemplate": "You are the testing and validation agent for {{repo}}. Validate code and task acceptance criteria for your lane, prioritizing deterministic checks (tests, build, lint, targeted runtime checks). If validation fails, return status validation_fail with reproducible steps and concrete remediation notes. If validation passes, return success, include evidence in payload, and emit validation_passed.",
"modelConstraint": "claude-sonnet-4-5",
"toolClearance": {
"allowlist": [
"read_file",
"write_file",
"search",
"list_files",
"bash",
"run_command",
"npm_test",
"npm_run"
],
"banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push"]
}
},
{
"id": "git_integrator",
"displayName": "Git Integrator",
"systemPromptTemplate": "You are the git integration agent for {{repo}}. Validate lane readiness for merge into the integration target and ensure the worktree is merge-ready. Run status checks and report risks clearly. Do not force risky merge strategies. On successful readiness checks emit branch_merged and include mergeCommit (or readiness marker), mergedBranch, and targetBranch in payload.",
"modelConstraint": "claude-sonnet-4-5",
"toolClearance": {
"allowlist": [
"read_file",
"write_file",
"search",
"list_files",
"bash",
"run_command",
"git",
"git_status",
"git_diff",
"git_add",
"git_commit",
"git_merge"
],
"banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push", "git_rebase"]
}
},
{
"id": "conflict_resolver",
"displayName": "Conflict Resolver",
"systemPromptTemplate": "You are the merge conflict resolver for {{repo}}. Resolve conflict markers for the assigned task/worktree, run targeted validation checks, and return success only when conflicts are cleanly resolved. Include resolvedFiles and validation evidence in payload.",
"modelConstraint": "claude-sonnet-4-5",
"toolClearance": {
"allowlist": [
"read_file",
"write_file",
"search",
"list_files",
"bash",
"run_command",
"git",
"git_status",
"git_diff",
"git_add",
"git_commit",
"npm_test",
"npm_run"
],
"banlist": ["delete_file", "rm", "git_reset", "git_clean", "git_push", "git_rebase"]
}
}
],
"relationships": [
{
"parentPersonaId": "product_manager",
"childPersonaId": "task_manager",
"constraints": {
"maxDepth": 2,
"maxChildren": 1
}
},
{
"parentPersonaId": "task_manager",
"childPersonaId": "developer",
"constraints": {
"maxDepth": 4,
"maxChildren": 4
}
},
{
"parentPersonaId": "task_manager",
"childPersonaId": "tester",
"constraints": {
"maxDepth": 4,
"maxChildren": 4
}
},
{
"parentPersonaId": "task_manager",
"childPersonaId": "git_integrator",
"constraints": {
"maxDepth": 5,
"maxChildren": 2
}
}
],
"topologyConstraints": {
"maxDepth": 6,
"maxRetries": 0
},
"pipeline": {
"entryNodeId": "product-intake",
"nodes": [
{
"id": "product-intake",
"actorId": "product_manager_actor",
"personaId": "product_manager"
},
{
"id": "task-roadmap",
"actorId": "task_manager_actor",
"personaId": "task_manager"
},
{
"id": "dev-impl-a",
"actorId": "developer_actor",
"personaId": "developer",
"topology": {
"kind": "parallel",
"blockId": "implementation-pass-1"
}
},
{
"id": "dev-impl-b",
"actorId": "developer_actor",
"personaId": "developer",
"topology": {
"kind": "parallel",
"blockId": "implementation-pass-1"
}
},
{
"id": "qa-a",
"actorId": "tester_actor",
"personaId": "tester",
"topology": {
"kind": "parallel",
"blockId": "validation-pass-1"
}
},
{
"id": "qa-b",
"actorId": "tester_actor",
"personaId": "tester",
"topology": {
"kind": "parallel",
"blockId": "validation-pass-1"
}
},
{
"id": "task-clarify-a",
"actorId": "task_manager_actor",
"personaId": "task_manager"
},
{
"id": "task-clarify-b",
"actorId": "task_manager_actor",
"personaId": "task_manager"
},
{
"id": "dev-rework-a",
"actorId": "developer_actor",
"personaId": "developer",
"topology": {
"kind": "parallel",
"blockId": "implementation-pass-2"
}
},
{
"id": "dev-rework-b",
"actorId": "developer_actor",
"personaId": "developer",
"topology": {
"kind": "parallel",
"blockId": "implementation-pass-2"
}
},
{
"id": "qa-rework-a",
"actorId": "tester_actor",
"personaId": "tester",
"topology": {
"kind": "parallel",
"blockId": "validation-pass-2"
}
},
{
"id": "qa-rework-b",
"actorId": "tester_actor",
"personaId": "tester",
"topology": {
"kind": "parallel",
"blockId": "validation-pass-2"
}
},
{
"id": "merge-a",
"actorId": "git_integrator_actor",
"personaId": "git_integrator"
},
{
"id": "merge-b",
"actorId": "git_integrator_actor",
"personaId": "git_integrator"
},
{
"id": "merge-conflict-resolve-a",
"actorId": "conflict_resolver_actor",
"personaId": "conflict_resolver"
},
{
"id": "merge-conflict-resolve-b",
"actorId": "conflict_resolver_actor",
"personaId": "conflict_resolver"
}
],
"edges": [
{
"from": "product-intake",
"to": "task-roadmap",
"on": "success"
},
{
"from": "task-roadmap",
"to": "dev-impl-a",
"on": "success"
},
{
"from": "task-roadmap",
"to": "dev-impl-b",
"on": "success"
},
{
"from": "dev-impl-a",
"to": "qa-a",
"on": "success"
},
{
"from": "dev-impl-b",
"to": "qa-b",
"on": "success"
},
{
"from": "dev-impl-a",
"to": "task-clarify-a",
"on": "validation_fail"
},
{
"from": "dev-impl-b",
"to": "task-clarify-b",
"on": "validation_fail"
},
{
"from": "qa-a",
"to": "dev-rework-a",
"on": "validation_fail"
},
{
"from": "qa-b",
"to": "dev-rework-b",
"on": "validation_fail"
},
{
"from": "task-clarify-a",
"to": "dev-rework-a",
"on": "success"
},
{
"from": "task-clarify-b",
"to": "dev-rework-b",
"on": "success"
},
{
"from": "dev-rework-a",
"to": "qa-rework-a",
"on": "success"
},
{
"from": "dev-rework-b",
"to": "qa-rework-b",
"on": "success"
},
{
"from": "qa-a",
"to": "merge-a",
"on": "success"
},
{
"from": "qa-b",
"to": "merge-b",
"on": "success"
},
{
"from": "qa-rework-a",
"to": "merge-a",
"on": "success"
},
{
"from": "qa-rework-b",
"to": "merge-b",
"on": "success"
},
{
"from": "merge-a",
"to": "merge-conflict-resolve-a",
"event": "merge_conflict_detected"
},
{
"from": "merge-b",
"to": "merge-conflict-resolve-b",
"event": "merge_conflict_detected"
}
]
}
}