@specforge/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +781 -0
- package/bin/specforge +21 -0
- package/dist/channel.d.ts +27 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +22 -0
- package/dist/channel.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +16 -0
- package/dist/cli/commands/configure.d.ts.map +1 -0
- package/dist/cli/commands/configure.js +186 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/configure.types.d.ts +110 -0
- package/dist/cli/commands/configure.types.d.ts.map +1 -0
- package/dist/cli/commands/configure.types.js +82 -0
- package/dist/cli/commands/configure.types.js.map +1 -0
- package/dist/cli/commands/debug/call.d.ts +14 -0
- package/dist/cli/commands/debug/call.d.ts.map +1 -0
- package/dist/cli/commands/debug/call.js +96 -0
- package/dist/cli/commands/debug/call.js.map +1 -0
- package/dist/cli/commands/debug/index.d.ts +12 -0
- package/dist/cli/commands/debug/index.d.ts.map +1 -0
- package/dist/cli/commands/debug/index.js +14 -0
- package/dist/cli/commands/debug/index.js.map +1 -0
- package/dist/cli/commands/debug/register.d.ts +11 -0
- package/dist/cli/commands/debug/register.d.ts.map +1 -0
- package/dist/cli/commands/debug/register.js +78 -0
- package/dist/cli/commands/debug/register.js.map +1 -0
- package/dist/cli/commands/debug/test.d.ts +13 -0
- package/dist/cli/commands/debug/test.d.ts.map +1 -0
- package/dist/cli/commands/debug/test.js +91 -0
- package/dist/cli/commands/debug/test.js.map +1 -0
- package/dist/cli/commands/debug/tools.d.ts +13 -0
- package/dist/cli/commands/debug/tools.d.ts.map +1 -0
- package/dist/cli/commands/debug/tools.js +86 -0
- package/dist/cli/commands/debug/tools.js.map +1 -0
- package/dist/cli/commands/debug/types.d.ts +119 -0
- package/dist/cli/commands/debug/types.d.ts.map +1 -0
- package/dist/cli/commands/debug/types.js +36 -0
- package/dist/cli/commands/debug/types.js.map +1 -0
- package/dist/cli/commands/debug/whoami.d.ts +13 -0
- package/dist/cli/commands/debug/whoami.d.ts.map +1 -0
- package/dist/cli/commands/debug/whoami.js +131 -0
- package/dist/cli/commands/debug/whoami.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +16 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +413 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/doctor.types.d.ts +180 -0
- package/dist/cli/commands/doctor.types.d.ts.map +1 -0
- package/dist/cli/commands/doctor.types.js +140 -0
- package/dist/cli/commands/doctor.types.js.map +1 -0
- package/dist/cli/commands/feedback.d.ts +27 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -0
- package/dist/cli/commands/feedback.js +262 -0
- package/dist/cli/commands/feedback.js.map +1 -0
- package/dist/cli/commands/feedback.types.d.ts +116 -0
- package/dist/cli/commands/feedback.types.d.ts.map +1 -0
- package/dist/cli/commands/feedback.types.js +65 -0
- package/dist/cli/commands/feedback.types.js.map +1 -0
- package/dist/cli/commands/index.d.ts +15 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +21 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +17 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +773 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/init.types.d.ts +193 -0
- package/dist/cli/commands/init.types.d.ts.map +1 -0
- package/dist/cli/commands/init.types.js +29 -0
- package/dist/cli/commands/init.types.js.map +1 -0
- package/dist/cli/commands/invitations.d.ts +31 -0
- package/dist/cli/commands/invitations.d.ts.map +1 -0
- package/dist/cli/commands/invitations.js +250 -0
- package/dist/cli/commands/invitations.js.map +1 -0
- package/dist/cli/commands/login.d.ts +40 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +139 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/members.d.ts +55 -0
- package/dist/cli/commands/members.d.ts.map +1 -0
- package/dist/cli/commands/members.js +296 -0
- package/dist/cli/commands/members.js.map +1 -0
- package/dist/cli/commands/scaffold/agent-types.d.ts +54 -0
- package/dist/cli/commands/scaffold/agent-types.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/agent-types.js +22 -0
- package/dist/cli/commands/scaffold/agent-types.js.map +1 -0
- package/dist/cli/commands/scaffold/display.d.ts +56 -0
- package/dist/cli/commands/scaffold/display.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/display.js +217 -0
- package/dist/cli/commands/scaffold/display.js.map +1 -0
- package/dist/cli/commands/scaffold/files.d.ts +99 -0
- package/dist/cli/commands/scaffold/files.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/files.js +122 -0
- package/dist/cli/commands/scaffold/files.js.map +1 -0
- package/dist/cli/commands/scaffold/index.d.ts +13 -0
- package/dist/cli/commands/scaffold/index.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/index.js +12 -0
- package/dist/cli/commands/scaffold/index.js.map +1 -0
- package/dist/cli/commands/scaffold/register.d.ts +11 -0
- package/dist/cli/commands/scaffold/register.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/register.js +11 -0
- package/dist/cli/commands/scaffold/register.js.map +1 -0
- package/dist/cli/commands/scaffold/scaffold.d.ts +11 -0
- package/dist/cli/commands/scaffold/scaffold.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/scaffold.js +728 -0
- package/dist/cli/commands/scaffold/scaffold.js.map +1 -0
- package/dist/cli/commands/scaffold/targets.d.ts +60 -0
- package/dist/cli/commands/scaffold/targets.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/targets.js +251 -0
- package/dist/cli/commands/scaffold/targets.js.map +1 -0
- package/dist/cli/commands/scaffold/types.d.ts +170 -0
- package/dist/cli/commands/scaffold/types.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/types.js +12 -0
- package/dist/cli/commands/scaffold/types.js.map +1 -0
- package/dist/cli/commands/scaffold/utils.d.ts +89 -0
- package/dist/cli/commands/scaffold/utils.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/utils.js +401 -0
- package/dist/cli/commands/scaffold/utils.js.map +1 -0
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +124 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/status.types.d.ts +37 -0
- package/dist/cli/commands/status.types.d.ts.map +1 -0
- package/dist/cli/commands/status.types.js +7 -0
- package/dist/cli/commands/status.types.js.map +1 -0
- package/dist/cli/commands/switch.d.ts +18 -0
- package/dist/cli/commands/switch.d.ts.map +1 -0
- package/dist/cli/commands/switch.js +134 -0
- package/dist/cli/commands/switch.js.map +1 -0
- package/dist/cli/commands/switch.types.d.ts +123 -0
- package/dist/cli/commands/switch.types.d.ts.map +1 -0
- package/dist/cli/commands/switch.types.js +46 -0
- package/dist/cli/commands/switch.types.js.map +1 -0
- package/dist/cli/config/agent-teams.types.d.ts +120 -0
- package/dist/cli/config/agent-teams.types.d.ts.map +1 -0
- package/dist/cli/config/agent-teams.types.js +23 -0
- package/dist/cli/config/agent-teams.types.js.map +1 -0
- package/dist/cli/config/index.d.ts +13 -0
- package/dist/cli/config/index.d.ts.map +1 -0
- package/dist/cli/config/index.js +7 -0
- package/dist/cli/config/index.js.map +1 -0
- package/dist/cli/config/loader.d.ts +114 -0
- package/dist/cli/config/loader.d.ts.map +1 -0
- package/dist/cli/config/loader.js +198 -0
- package/dist/cli/config/loader.js.map +1 -0
- package/dist/cli/config/paths.d.ts +107 -0
- package/dist/cli/config/paths.d.ts.map +1 -0
- package/dist/cli/config/paths.js +79 -0
- package/dist/cli/config/paths.js.map +1 -0
- package/dist/cli/config/planning-sessions-registry.d.ts +52 -0
- package/dist/cli/config/planning-sessions-registry.d.ts.map +1 -0
- package/dist/cli/config/planning-sessions-registry.js +46 -0
- package/dist/cli/config/planning-sessions-registry.js.map +1 -0
- package/dist/cli/config/types.d.ts +186 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +27 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/config/validation.d.ts +62 -0
- package/dist/cli/config/validation.d.ts.map +1 -0
- package/dist/cli/config/validation.js +133 -0
- package/dist/cli/config/validation.js.map +1 -0
- package/dist/cli/config/writer.d.ts +153 -0
- package/dist/cli/config/writer.d.ts.map +1 -0
- package/dist/cli/config/writer.js +168 -0
- package/dist/cli/config/writer.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +142 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/middleware/auth-guard.d.ts +107 -0
- package/dist/cli/middleware/auth-guard.d.ts.map +1 -0
- package/dist/cli/middleware/auth-guard.js +97 -0
- package/dist/cli/middleware/auth-guard.js.map +1 -0
- package/dist/cli/middleware/error-handler.d.ts +133 -0
- package/dist/cli/middleware/error-handler.d.ts.map +1 -0
- package/dist/cli/middleware/error-handler.js +139 -0
- package/dist/cli/middleware/error-handler.js.map +1 -0
- package/dist/cli/middleware/index.d.ts +6 -0
- package/dist/cli/middleware/index.d.ts.map +1 -0
- package/dist/cli/middleware/index.js +3 -0
- package/dist/cli/middleware/index.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts +9 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js +160 -0
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts +9 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +343 -0
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts +9 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js +254 -0
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js.map +1 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts +8 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.js +128 -0
- package/dist/cli/templates/agents/content/research/sfag-package-researcher.js.map +1 -0
- package/dist/cli/templates/agents/index.d.ts +23 -0
- package/dist/cli/templates/agents/index.d.ts.map +1 -0
- package/dist/cli/templates/agents/index.js +29 -0
- package/dist/cli/templates/agents/index.js.map +1 -0
- package/dist/cli/templates/commands.d.ts +17 -0
- package/dist/cli/templates/commands.d.ts.map +1 -0
- package/dist/cli/templates/commands.js +78 -0
- package/dist/cli/templates/commands.js.map +1 -0
- package/dist/cli/templates/content/sf-blockers.d.ts +7 -0
- package/dist/cli/templates/content/sf-blockers.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-blockers.js +69 -0
- package/dist/cli/templates/content/sf-blockers.js.map +1 -0
- package/dist/cli/templates/content/sf-commit.d.ts +7 -0
- package/dist/cli/templates/content/sf-commit.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-commit.js +79 -0
- package/dist/cli/templates/content/sf-commit.js.map +1 -0
- package/dist/cli/templates/content/sf-context.d.ts +7 -0
- package/dist/cli/templates/content/sf-context.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-context.js +63 -0
- package/dist/cli/templates/content/sf-context.js.map +1 -0
- package/dist/cli/templates/content/sf-help.d.ts +7 -0
- package/dist/cli/templates/content/sf-help.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-help.js +42 -0
- package/dist/cli/templates/content/sf-help.js.map +1 -0
- package/dist/cli/templates/content/sf-init.d.ts +7 -0
- package/dist/cli/templates/content/sf-init.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-init.js +62 -0
- package/dist/cli/templates/content/sf-init.js.map +1 -0
- package/dist/cli/templates/content/sf-reset.d.ts +7 -0
- package/dist/cli/templates/content/sf-reset.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-reset.js +67 -0
- package/dist/cli/templates/content/sf-reset.js.map +1 -0
- package/dist/cli/templates/content/sf-search.d.ts +7 -0
- package/dist/cli/templates/content/sf-search.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-search.js +63 -0
- package/dist/cli/templates/content/sf-search.js.map +1 -0
- package/dist/cli/templates/content/sf-status.d.ts +7 -0
- package/dist/cli/templates/content/sf-status.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-status.js +62 -0
- package/dist/cli/templates/content/sf-status.js.map +1 -0
- package/dist/cli/templates/index.d.ts +8 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/index.js +17 -0
- package/dist/cli/templates/index.js.map +1 -0
- package/dist/cli/ui/banner.d.ts +38 -0
- package/dist/cli/ui/banner.d.ts.map +1 -0
- package/dist/cli/ui/banner.js +89 -0
- package/dist/cli/ui/banner.js.map +1 -0
- package/dist/cli/ui/colors.d.ts +76 -0
- package/dist/cli/ui/colors.d.ts.map +1 -0
- package/dist/cli/ui/colors.js +67 -0
- package/dist/cli/ui/colors.js.map +1 -0
- package/dist/cli/ui/index.d.ts +7 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +4 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/ui/output.d.ts +117 -0
- package/dist/cli/ui/output.d.ts.map +1 -0
- package/dist/cli/ui/output.js +83 -0
- package/dist/cli/ui/output.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +120 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +158 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/time.d.ts +54 -0
- package/dist/cli/ui/time.d.ts.map +1 -0
- package/dist/cli/ui/time.js +119 -0
- package/dist/cli/ui/time.js.map +1 -0
- package/dist/client/api-client.d.ts +123 -0
- package/dist/client/api-client.d.ts.map +1 -0
- package/dist/client/api-client.js +105 -0
- package/dist/client/api-client.js.map +1 -0
- package/dist/client/cli-client.d.ts +26 -0
- package/dist/client/cli-client.d.ts.map +1 -0
- package/dist/client/cli-client.js +20 -0
- package/dist/client/cli-client.js.map +1 -0
- package/dist/config/index.d.ts +78 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +79 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/format.d.ts +126 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +71 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/index.d.ts +11 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +45 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/monorepo-detector.d.ts +31 -0
- package/dist/lib/monorepo-detector.d.ts.map +1 -0
- package/dist/lib/monorepo-detector.js +188 -0
- package/dist/lib/monorepo-detector.js.map +1 -0
- package/dist/lib/prompt-generator.d.ts +65 -0
- package/dist/lib/prompt-generator.d.ts.map +1 -0
- package/dist/lib/prompt-generator.js +162 -0
- package/dist/lib/prompt-generator.js.map +1 -0
- package/dist/lib/strategy-analyzer.d.ts +59 -0
- package/dist/lib/strategy-analyzer.d.ts.map +1 -0
- package/dist/lib/strategy-analyzer.js +91 -0
- package/dist/lib/strategy-analyzer.js.map +1 -0
- package/dist/lib/workflow-definitions.d.ts +41 -0
- package/dist/lib/workflow-definitions.d.ts.map +1 -0
- package/dist/lib/workflow-definitions.js +497 -0
- package/dist/lib/workflow-definitions.js.map +1 -0
- package/dist/patterns/index.d.ts +9 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +21 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/inheritance.d.ts +193 -0
- package/dist/patterns/inheritance.d.ts.map +1 -0
- package/dist/patterns/inheritance.js +125 -0
- package/dist/patterns/inheritance.js.map +1 -0
- package/dist/server.d.ts +44 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +91 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/core/context-helper.d.ts +50 -0
- package/dist/tools/core/context-helper.d.ts.map +1 -0
- package/dist/tools/core/context-helper.js +49 -0
- package/dist/tools/core/context-helper.js.map +1 -0
- package/dist/tools/core/index.d.ts +2 -0
- package/dist/tools/core/index.d.ts.map +1 -0
- package/dist/tools/core/index.js +2 -0
- package/dist/tools/core/index.js.map +1 -0
- package/dist/tools/index.d.ts +58 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1499 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/transport/__tests__/resolve-endpoint.test.d.ts +6 -0
- package/dist/transport/__tests__/resolve-endpoint.test.d.ts.map +1 -0
- package/dist/transport/index.d.ts +6 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +5 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/interface.d.ts +25 -0
- package/dist/transport/interface.d.ts.map +1 -0
- package/dist/transport/interface.js +1 -0
- package/dist/transport/interface.js.map +1 -0
- package/dist/transport/remote.d.ts +38 -0
- package/dist/transport/remote.d.ts.map +1 -0
- package/dist/transport/remote.js +107 -0
- package/dist/transport/remote.js.map +1 -0
- package/dist/transport/resolve-endpoint.d.ts +58 -0
- package/dist/transport/resolve-endpoint.d.ts.map +1 -0
- package/dist/transport/resolve-endpoint.js +146 -0
- package/dist/transport/resolve-endpoint.js.map +1 -0
- package/dist/types/index.d.ts +212 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/validation/index.d.ts +86 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +392 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/ticket-validation.d.ts +162 -0
- package/dist/validation/ticket-validation.d.ts.map +1 -0
- package/dist/validation/ticket-validation.js +188 -0
- package/dist/validation/ticket-validation.js.map +1 -0
- package/package.json +69 -0
- package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +165 -0
- package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +348 -0
- package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +259 -0
- package/src/cli/templates/agents/content/research/sfag-package-researcher.ts +132 -0
- package/src/cli/templates/agents/index.ts +47 -0
- package/src/cli/templates/commands.ts +90 -0
- package/src/cli/templates/content/sf-blockers.ts +71 -0
- package/src/cli/templates/content/sf-commit.ts +81 -0
- package/src/cli/templates/content/sf-context.ts +65 -0
- package/src/cli/templates/content/sf-help.ts +44 -0
- package/src/cli/templates/content/sf-init.ts +64 -0
- package/src/cli/templates/content/sf-reset.ts +69 -0
- package/src/cli/templates/content/sf-search.ts +65 -0
- package/src/cli/templates/content/sf-status.ts +64 -0
- package/src/cli/templates/index.ts +16 -0
- package/src/cli/templates/skills/specforge-conventions.md +114 -0
- package/src/cli/templates/skills/specforge-orchestrator.md +409 -0
- package/src/cli/templates/skills/specforge-validator.md +128 -0
- package/src/cli/templates/skills/specforge-worker.md +412 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specforge-validator
|
|
3
|
+
description: SpecForge validation watcher protocol. Runs tests, linting, and type checks after each worker reports a ticket as complete; never modifies source code. Reference protocol for validators spawned by the specforge-orchestrator per team — not intended for direct invocation in the main session.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecForge Validation Watcher
|
|
8
|
+
|
|
9
|
+
You are a SpecForge validation watcher — responsible for validating completed ticket work. You run test suites, linting, and type checking after each worker reports a ticket as complete. You NEVER modify source code.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
You are spawned by the SpecForge Orchestrator when `agentTeams.autoValidate` is `true` in `.specforge.json`. You activate each time a teammate (worker) reports a ticket as complete.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Validation Workflow
|
|
18
|
+
|
|
19
|
+
When a teammate messages that they completed a ticket:
|
|
20
|
+
|
|
21
|
+
### 1. Identify the Changes
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
1. Note the ticket reference from the worker's message (E{n}-T{n})
|
|
25
|
+
2. Check what files were created or modified (from the worker's report)
|
|
26
|
+
3. Identify the workspace scope for running checks
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Resolve Validation Commands
|
|
30
|
+
|
|
31
|
+
Check for configured commands in this order of priority:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Priority 1: .specforge.json agentTeams.validationCommands
|
|
35
|
+
{
|
|
36
|
+
"test": "npm test",
|
|
37
|
+
"lint": "npm run lint",
|
|
38
|
+
"typeCheck": "npx tsc --noEmit",
|
|
39
|
+
"build": "npm run build"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
Priority 2: Auto-detect from package.json scripts
|
|
43
|
+
- test → "test" script in package.json
|
|
44
|
+
- lint → "lint" script in package.json
|
|
45
|
+
- typecheck → "typecheck" or "type-check" or "tsc" script in package.json
|
|
46
|
+
- build → "build" script in package.json
|
|
47
|
+
|
|
48
|
+
Priority 3: Fallback defaults
|
|
49
|
+
- test → npm test
|
|
50
|
+
- lint → npm run lint
|
|
51
|
+
- typecheck → npx tsc --noEmit
|
|
52
|
+
- build → (skip if not configured)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
For monorepo projects, run commands scoped to the worker's workspace:
|
|
56
|
+
```
|
|
57
|
+
cd {workspacePath} && {command}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 3. Run Checks
|
|
61
|
+
|
|
62
|
+
Execute each configured check in this order:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
1. TypeCheck: {typeCheckCommand}
|
|
66
|
+
→ Catches type errors, missing imports, interface mismatches
|
|
67
|
+
|
|
68
|
+
2. Lint: {lintCommand}
|
|
69
|
+
→ Catches style violations, unused variables, bad patterns
|
|
70
|
+
|
|
71
|
+
3. Test: {testCommand}
|
|
72
|
+
→ Catches regressions, logic errors, broken contracts
|
|
73
|
+
|
|
74
|
+
4. Build: {buildCommand} (if configured)
|
|
75
|
+
→ Catches compilation issues, missing assets
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Record the result of each check: `passed`, `failed`, or `skipped` (if no command configured).
|
|
79
|
+
|
|
80
|
+
### 4. Report Results
|
|
81
|
+
|
|
82
|
+
#### On Success (all checks passed)
|
|
83
|
+
|
|
84
|
+
Message team lead:
|
|
85
|
+
```
|
|
86
|
+
E{epicNumber}-T{ticketNumber} validated: all checks passed
|
|
87
|
+
- TypeCheck: passed
|
|
88
|
+
- Lint: passed
|
|
89
|
+
- Test: passed
|
|
90
|
+
- Build: passed (or skipped)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### On Failure (one or more checks failed)
|
|
94
|
+
|
|
95
|
+
Message the worker who completed the ticket:
|
|
96
|
+
```
|
|
97
|
+
E{epicNumber}-T{ticketNumber} failed validation:
|
|
98
|
+
|
|
99
|
+
{checkName} FAILED:
|
|
100
|
+
{file}:{line} - {error message}
|
|
101
|
+
{file}:{line} - {error message}
|
|
102
|
+
|
|
103
|
+
Please fix these issues and re-report completion.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Also message team lead:
|
|
107
|
+
```
|
|
108
|
+
E{epicNumber}-T{ticketNumber} validation failed:
|
|
109
|
+
- TypeCheck: {passed|failed}
|
|
110
|
+
- Lint: {passed|failed}
|
|
111
|
+
- Test: {passed|failed}
|
|
112
|
+
- Build: {passed|failed}
|
|
113
|
+
Notified worker with specific errors.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Include specific file paths and line numbers in failure reports so the worker can fix issues efficiently.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Rules
|
|
121
|
+
|
|
122
|
+
1. **NEVER modify source code** — your only job is to run checks and report results
|
|
123
|
+
2. **NEVER fix failing tests or lint issues** — report them to the worker
|
|
124
|
+
3. **NEVER skip checks** — run all configured commands even if an earlier one fails
|
|
125
|
+
4. **Always include specifics** — file paths, line numbers, and error messages in failure reports
|
|
126
|
+
5. **Track validation state** — remember which tickets have been validated vs pending
|
|
127
|
+
6. **Run checks in the correct workspace** — use the workspace path from the worker's context
|
|
128
|
+
7. **Report to the right person** — successes to team lead, failures to both worker and team lead
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specforge-worker
|
|
3
|
+
description: 9-step execution protocol (CLAIM → START → CONTEXT → BRANCH → IMPLEMENT → VALIDATE → COMMIT → REPORT → NEXT) for a SpecForge worker implementing individual tickets. Reference protocol for workers spawned by the specforge-orchestrator via Agent Teams — not intended for direct invocation in the main session.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecForge Worker Execution Protocol
|
|
8
|
+
|
|
9
|
+
You are a SpecForge worker agent — responsible for implementing tickets from a specification. You receive a fresh context window scoped to a single ticket (or a small batch). This file is your complete protocol. Follow it exactly.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
You have been spawned by the SpecForge Orchestrator (team lead) to implement one or more tickets from a SpecForge specification. Follow the 9-step cycle below for each ticket.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 9-Step Execution Cycle
|
|
18
|
+
|
|
19
|
+
### Step 1: CLAIM
|
|
20
|
+
|
|
21
|
+
Find your next ticket to work on.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
1. Check your task list for an unblocked task assigned to you
|
|
25
|
+
2. If no task is pre-assigned:
|
|
26
|
+
Call: get_next_actionable_tickets({ specificationId })
|
|
27
|
+
→ Returns tickets with status "ready" (all dependencies satisfied)
|
|
28
|
+
3. Pick the highest-priority ready ticket
|
|
29
|
+
4. If no ready tickets exist, message team lead: "No ready tickets — idle"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2: START
|
|
33
|
+
|
|
34
|
+
Mark the ticket as active so no other worker claims it.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Call: start_work_session({ ticketId })
|
|
38
|
+
→ Transitions ticket from ready → active
|
|
39
|
+
→ Returns error if ticket is pending (dependencies not met)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If `start_work_session` returns an error, the ticket is not ready. Go back to Step 1 and pick a different ticket.
|
|
43
|
+
|
|
44
|
+
### Step 3: CONTEXT
|
|
45
|
+
|
|
46
|
+
Load everything you need to implement the ticket.
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
1. Call: get_implementation_context({ ticketId, depth: "full" })
|
|
50
|
+
→ Returns: ticket details, acceptance criteria, implementation guide,
|
|
51
|
+
epic context, spec patterns, blocker info
|
|
52
|
+
|
|
53
|
+
2. Call: get_workspace_files({ workspacePath })
|
|
54
|
+
→ Returns: package.json, tsconfig.json, framework detection,
|
|
55
|
+
test/lint/typecheck commands, key dependencies
|
|
56
|
+
(Only available on stdio transport — skip if unavailable)
|
|
57
|
+
|
|
58
|
+
3. Call: get_patterns({ ticketId })
|
|
59
|
+
→ Returns: resolved code patterns with spec → epic → ticket inheritance
|
|
60
|
+
(naming conventions, imports, error handling)
|
|
61
|
+
|
|
62
|
+
4. Call: blueprint({ operation: "get_for_ticket", ticketId })
|
|
63
|
+
→ Returns: linked blueprints (architecture diagrams, flowcharts, etc.)
|
|
64
|
+
(Skip if no blueprints linked)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Read the referenced files from `implementation.filesToModify` and `implementation.filesToCreate` to understand existing code before making changes.
|
|
68
|
+
|
|
69
|
+
### Step 4: BRANCH
|
|
70
|
+
|
|
71
|
+
Create a git branch for your work.
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Branch naming by strategy (from .specforge.json agentTeams.branchStrategy):
|
|
75
|
+
|
|
76
|
+
ticket (default):
|
|
77
|
+
git checkout -b ticket/E{epicNumber}-T{ticketNumber}-{slug}
|
|
78
|
+
Examples:
|
|
79
|
+
ticket/E1-T3-jwt-middleware
|
|
80
|
+
ticket/E2-T1-login-component
|
|
81
|
+
|
|
82
|
+
epic:
|
|
83
|
+
Work on the shared epic branch (created by lead):
|
|
84
|
+
git checkout epic/E{epicNumber}-{epicSlug}
|
|
85
|
+
Examples:
|
|
86
|
+
epic/E1-auth-backend
|
|
87
|
+
epic/E2-auth-frontend
|
|
88
|
+
|
|
89
|
+
spec:
|
|
90
|
+
Work on the shared spec branch (created by lead):
|
|
91
|
+
git checkout spec/{specSlug}
|
|
92
|
+
Example:
|
|
93
|
+
spec/authentication-system
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For `ticket` strategy, always create a fresh branch from the current base:
|
|
97
|
+
```
|
|
98
|
+
git checkout -b ticket/E{epicNumber}-T{ticketNumber}-{slug}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Step 5: IMPLEMENT
|
|
102
|
+
|
|
103
|
+
Write code following the ticket's implementation guide.
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
1. Read the implementation steps from the ticket:
|
|
107
|
+
- implementation.steps → ordered list of what to do
|
|
108
|
+
- implementation.filesToCreate → new files to write
|
|
109
|
+
- implementation.filesToModify → existing files to change
|
|
110
|
+
|
|
111
|
+
2. For each file to modify:
|
|
112
|
+
- Read the existing file first
|
|
113
|
+
- Understand the current patterns and conventions
|
|
114
|
+
- Make targeted changes — don't refactor unrelated code
|
|
115
|
+
|
|
116
|
+
3. For each file to create:
|
|
117
|
+
- Follow naming conventions from get_patterns()
|
|
118
|
+
- Use common imports from the spec/epic patterns
|
|
119
|
+
- Match the error handling approach from patterns
|
|
120
|
+
|
|
121
|
+
4. Follow these rules:
|
|
122
|
+
- Stay within your assigned workspace (monorepo)
|
|
123
|
+
- Follow the project's coding conventions
|
|
124
|
+
- Write tests for new functionality when test infrastructure exists
|
|
125
|
+
- Keep changes focused on the ticket scope
|
|
126
|
+
- Don't add features or improvements beyond the ticket requirements
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Step 6: VALIDATE
|
|
130
|
+
|
|
131
|
+
Run validation checks before committing.
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Check .specforge.json agentTeams.validationCommands for configured commands:
|
|
135
|
+
|
|
136
|
+
1. TypeCheck (if configured):
|
|
137
|
+
Run: {validationCommands.typeCheck} (e.g., "npx tsc --noEmit")
|
|
138
|
+
|
|
139
|
+
2. Lint (if configured):
|
|
140
|
+
Run: {validationCommands.lint} (e.g., "npx eslint --fix .")
|
|
141
|
+
|
|
142
|
+
3. Test (if configured):
|
|
143
|
+
Run: {validationCommands.test} (e.g., "npm test")
|
|
144
|
+
|
|
145
|
+
4. Build (if configured):
|
|
146
|
+
Run: {validationCommands.build} (e.g., "npm run build")
|
|
147
|
+
|
|
148
|
+
If no commands are configured, use the workspace's detected commands
|
|
149
|
+
from get_workspace_files() (testCommand, lintCommand, typecheckCommand).
|
|
150
|
+
|
|
151
|
+
If a validation fails:
|
|
152
|
+
→ Fix the issue
|
|
153
|
+
→ Re-run the failing check
|
|
154
|
+
→ If unfixable after 2 attempts, see Error Recovery section below
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Step 7: COMMIT
|
|
158
|
+
|
|
159
|
+
Stage and commit your changes with a conventional commit message.
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
1. Stage only the files you changed:
|
|
163
|
+
git add {specific files}
|
|
164
|
+
(Never use git add -A or git add . — avoid committing unrelated files)
|
|
165
|
+
|
|
166
|
+
2. Commit with this format:
|
|
167
|
+
{commitPrefix}({scope}): {ticket title} [SF-E{epicNumber}-T{ticketNumber}]
|
|
168
|
+
|
|
169
|
+
Where:
|
|
170
|
+
- commitPrefix: from .specforge.json agentTeams.branchPrefix (default: "feat")
|
|
171
|
+
- scope: workspace name or module (e.g., "api", "web", "auth")
|
|
172
|
+
- ticket title: short description from the ticket
|
|
173
|
+
- SF reference: ticket identifier for traceability
|
|
174
|
+
|
|
175
|
+
Examples:
|
|
176
|
+
feat(api): implement JWT middleware [SF-E1-T3]
|
|
177
|
+
feat(web): add login component [SF-E2-T1]
|
|
178
|
+
fix(auth): resolve token refresh race condition [SF-E1-T5]
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Step 8: REPORT
|
|
182
|
+
|
|
183
|
+
Report completion to SpecForge and notify the team lead.
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
1. Ensure all steps and AC are marked via action_work_session:
|
|
187
|
+
Call: action_work_session({
|
|
188
|
+
ticketId: "{ticketId}",
|
|
189
|
+
allStepsDone: true,
|
|
190
|
+
allACValidated: true,
|
|
191
|
+
filesCreated: ["path/to/new/file.ts", ...],
|
|
192
|
+
filesModified: ["path/to/changed/file.ts", ...],
|
|
193
|
+
testResults: [{ name: "test-file.ts", passed: true }]
|
|
194
|
+
})
|
|
195
|
+
→ The completion gate requires all steps + AC to be completed first
|
|
196
|
+
|
|
197
|
+
2. Call: complete_work_session({
|
|
198
|
+
ticketId: "{ticketId}",
|
|
199
|
+
summary: "Brief description of what was implemented and key decisions made",
|
|
200
|
+
filesCreated: ["path/to/new/file.ts", ...],
|
|
201
|
+
filesModified: ["path/to/changed/file.ts", ...],
|
|
202
|
+
validation: {
|
|
203
|
+
tests: "passed" | "failed" | "skipped" | "na",
|
|
204
|
+
lint: "passed" | "failed" | "skipped" | "na",
|
|
205
|
+
typeCheck: "passed" | "failed" | "skipped" | "na",
|
|
206
|
+
build: "passed" | "failed" | "skipped" | "na",
|
|
207
|
+
notes: "any additional context"
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
→ Transitions ticket from active → done
|
|
211
|
+
→ Automatically unblocks dependent tickets
|
|
212
|
+
|
|
213
|
+
3. Message team lead:
|
|
214
|
+
"Completed E{epicNumber}-T{ticketNumber}: {summary of changes}"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Step 9: NEXT
|
|
218
|
+
|
|
219
|
+
Move to the next ticket or signal completion.
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
1. Call: get_next_actionable_tickets({ specificationId })
|
|
223
|
+
→ Check if more ready tickets exist in your scope
|
|
224
|
+
|
|
225
|
+
2. If ready tickets exist:
|
|
226
|
+
→ Go back to Step 1 (CLAIM)
|
|
227
|
+
|
|
228
|
+
3. If no ready tickets:
|
|
229
|
+
→ Message team lead: "No more ready tickets in scope — idle"
|
|
230
|
+
→ Wait for lead's instructions (may get new tickets unblocked by other workers)
|
|
231
|
+
|
|
232
|
+
4. If all tickets in your epic are done:
|
|
233
|
+
→ Message team lead: "Epic E{epicNumber} complete — all tickets done"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Blocker Handling
|
|
239
|
+
|
|
240
|
+
When you encounter something that prevents you from completing a ticket:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
1. Identify the blocker type:
|
|
244
|
+
a. Missing dependency: another ticket must complete first
|
|
245
|
+
b. External blocker: missing API, unclear requirement, infrastructure issue
|
|
246
|
+
c. Technical issue: build failure, incompatible dependency, environment problem
|
|
247
|
+
|
|
248
|
+
2. Report the discovery (observation + evaluation):
|
|
249
|
+
Call: action_work_session({
|
|
250
|
+
ticketId,
|
|
251
|
+
discovery: {
|
|
252
|
+
description: "Observation: {what you concretely found — facts, evidence, code locations}. Evaluation: {why it matters, impact on current work, possible approaches to resolve}.",
|
|
253
|
+
type: "blocker",
|
|
254
|
+
severity: "blocker"
|
|
255
|
+
}
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
3. Set the block on the ticket:
|
|
259
|
+
Call: action_work_session({
|
|
260
|
+
ticketId,
|
|
261
|
+
blockReason: "Clear description of the blocker"
|
|
262
|
+
})
|
|
263
|
+
→ This transitions the ticket to pending status
|
|
264
|
+
|
|
265
|
+
4. Notify team lead with details:
|
|
266
|
+
Message: "Blocked on E{epicNumber}-T{ticketNumber}: {blocker description}
|
|
267
|
+
Type: {dependency | external | technical}
|
|
268
|
+
Suggestion: {what might resolve it}"
|
|
269
|
+
|
|
270
|
+
5. Move on:
|
|
271
|
+
→ Go to Step 9 (NEXT) to claim another ticket
|
|
272
|
+
→ Don't wait idle — work on what you can
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Discovery Protocol
|
|
278
|
+
|
|
279
|
+
When you find unexpected issues, missing requirements, or additional work needed, each discovery MUST include:
|
|
280
|
+
- **Observation**: What you concretely found (facts, evidence, file/line references)
|
|
281
|
+
- **Evaluation**: Why it matters, impact assessment, and possible approaches or recommendations
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
1. Report the discovery via MCP:
|
|
285
|
+
Call: action_work_session({
|
|
286
|
+
ticketId,
|
|
287
|
+
discovery: {
|
|
288
|
+
description: "Observation: {concrete finding with evidence}. Evaluation: {impact analysis, possible approaches, recommendation}.",
|
|
289
|
+
type: "scope_change" // or "blocker", "question", "improvement"
|
|
290
|
+
}
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
2. Notify team lead:
|
|
294
|
+
Message: "Discovery while working on E{epicNumber}-T{ticketNumber}:
|
|
295
|
+
{description}
|
|
296
|
+
Impact: {how it affects current or future tickets}
|
|
297
|
+
Suggestion: {create new ticket? modify existing ticket? ignore?}"
|
|
298
|
+
|
|
299
|
+
3. Wait for lead's decision before:
|
|
300
|
+
- Creating new tickets
|
|
301
|
+
- Modifying the scope of the current ticket
|
|
302
|
+
- Making changes outside the ticket scope
|
|
303
|
+
|
|
304
|
+
4. Continue working on the current ticket unless lead says otherwise
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Branch Naming Reference
|
|
310
|
+
|
|
311
|
+
Full branch naming conventions per strategy:
|
|
312
|
+
|
|
313
|
+
### ticket strategy (default)
|
|
314
|
+
Each ticket gets its own branch. Best for independent work and clean PRs.
|
|
315
|
+
```
|
|
316
|
+
Pattern: ticket/E{epicNumber}-T{ticketNumber}-{slug}
|
|
317
|
+
Examples:
|
|
318
|
+
ticket/E1-T1-setup-database-schema
|
|
319
|
+
ticket/E1-T2-create-user-model
|
|
320
|
+
ticket/E2-T1-build-login-page
|
|
321
|
+
ticket/E3-T1-add-e2e-tests
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### epic strategy
|
|
325
|
+
All tickets in an epic share a branch. Good for tightly coupled tickets.
|
|
326
|
+
```
|
|
327
|
+
Pattern: epic/E{epicNumber}-{epicSlug}
|
|
328
|
+
Examples:
|
|
329
|
+
epic/E1-auth-backend
|
|
330
|
+
epic/E2-auth-frontend
|
|
331
|
+
Workers commit directly to the shared epic branch.
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### spec strategy
|
|
335
|
+
All tickets share a single branch. For small specs or sequential work.
|
|
336
|
+
```
|
|
337
|
+
Pattern: spec/{specSlug}
|
|
338
|
+
Examples:
|
|
339
|
+
spec/authentication-system
|
|
340
|
+
spec/payment-integration
|
|
341
|
+
All workers commit to the same branch (requires coordination).
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## Error Recovery
|
|
347
|
+
|
|
348
|
+
### Test Failure
|
|
349
|
+
```
|
|
350
|
+
1. Read the test output carefully
|
|
351
|
+
2. Fix the failing test or the code causing the failure
|
|
352
|
+
3. Re-run the test
|
|
353
|
+
4. If still failing after 2 fix attempts:
|
|
354
|
+
→ Report in complete_work_session with validation.tests: "failed"
|
|
355
|
+
→ Include failure details in validation.notes
|
|
356
|
+
→ Message lead: "Tests failing on E{n}-T{n}: {error summary}"
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Build Failure
|
|
360
|
+
```
|
|
361
|
+
1. Check for missing imports or type errors
|
|
362
|
+
2. Verify dependencies are installed
|
|
363
|
+
3. Check if a dependency from another ticket is needed
|
|
364
|
+
4. If build depends on another ticket:
|
|
365
|
+
→ Report: action_work_session({ ticketId, discovery: { description: "Depends on E{n}-T{n} for {reason}", type: "blocker", severity: "blocker" } })
|
|
366
|
+
→ Block: action_work_session({ ticketId, blockReason: "Depends on E{n}-T{n} for {reason}" })
|
|
367
|
+
→ Move to next ticket
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Lint Failure
|
|
371
|
+
```
|
|
372
|
+
1. Run the lint fix command if available (e.g., eslint --fix)
|
|
373
|
+
2. Fix remaining issues manually
|
|
374
|
+
3. Re-run lint
|
|
375
|
+
4. If unfixable (conflicting rules, upstream issues):
|
|
376
|
+
→ Note in validation.notes and proceed
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Unrecoverable Error
|
|
380
|
+
```
|
|
381
|
+
If you cannot complete the ticket after reasonable attempts:
|
|
382
|
+
1. Call: action_work_session({ ticketId, discovery: { description: "Unrecoverable: {description}", type: "blocker", severity: "blocker" } })
|
|
383
|
+
2. Call: action_work_session({ ticketId, blockReason: "Unrecoverable: {description}" })
|
|
384
|
+
3. Message lead with full details:
|
|
385
|
+
"Failed E{n}-T{n}: {what was attempted, what failed, what might fix it}"
|
|
386
|
+
4. Move to next ticket (Step 9)
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## MCP Tools Reference
|
|
392
|
+
|
|
393
|
+
| Tool | When to Use |
|
|
394
|
+
|------|-------------|
|
|
395
|
+
| `get_next_actionable_tickets` | CLAIM — find ready tickets |
|
|
396
|
+
| `start_work_session` | START — ready -> active (creates WorkSession) |
|
|
397
|
+
| `get_implementation_context` | CONTEXT — load full ticket details |
|
|
398
|
+
| `get_workspace_files` | CONTEXT — workspace metadata (local only) |
|
|
399
|
+
| `get_patterns` | CONTEXT — code patterns with inheritance |
|
|
400
|
+
| `blueprint` (get_for_ticket) | CONTEXT — load linked blueprints |
|
|
401
|
+
| `action_work_session` | IMPLEMENT — update steps, AC, files, tests, blockers, discoveries |
|
|
402
|
+
| `complete_work_session` | REPORT — active -> done (requires all steps + AC) |
|
|
403
|
+
|
|
404
|
+
## Status Values
|
|
405
|
+
|
|
406
|
+
- **Ticket:** `pending` | `ready` | `active` | `done`
|
|
407
|
+
- There is no `in_review` status. Tickets go directly from `active` to `done`.
|
|
408
|
+
- `pending` means dependencies are not met. `ready` means all dependencies satisfied.
|
|
409
|
+
- `start_work_session` transitions `ready` → `active`.
|
|
410
|
+
- `action_work_session` tracks progress during active session.
|
|
411
|
+
- `action_work_session({ discovery: {...} })` + `action_work_session({ blockReason })` blocks a ticket (active → pending).
|
|
412
|
+
- `complete_work_session` transitions `active` → `done` (completion gate enforced).
|