@bonesofspring/ai-rules 0.2.16 → 0.2.17
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/CHANGELOG.md +23 -0
- package/README.md +19 -2
- package/bin/cli.js +39 -0
- package/package.json +3 -1
- package/presets/_shared/README.md +2 -2
- package/presets/_shared/assets/docs-specs/INDEX.md +9 -0
- package/presets/_shared/assets/docs-specs/_templates/feature.md +32 -0
- package/presets/_shared/assets/docs-specs/_templates/page.md +47 -0
- package/presets/_shared/assets/docs-specs/schemas/frontmatter-v1.schema.json +22 -0
- package/presets/_shared/core/architecture/product-specs-authoring.md +107 -0
- package/presets/_shared/core/architecture/product-specs.md +49 -0
- package/presets/claude/android-kotlin/agents/build-verifier.md +3 -0
- package/presets/claude/android-kotlin/agents/code-reviewer.md +2 -0
- package/presets/claude/android-kotlin/agents/feature-developer.md +7 -0
- package/presets/claude/android-kotlin/agents/task-analyst.md +19 -0
- package/presets/claude/android-kotlin/agents/task-router.md +11 -0
- package/presets/claude/android-kotlin/agents/tech-writer.md +5 -0
- package/presets/claude/android-kotlin/commands/feature-continue.md +4 -0
- package/presets/claude/android-kotlin/commands/feature-start.md +8 -0
- package/presets/claude/android-kotlin/commands/spec-start.md +29 -0
- package/presets/claude/android-kotlin/commands/task-continue.md +6 -3
- package/presets/claude/android-kotlin/rules/README.md +2 -0
- package/presets/claude/android-kotlin/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/android-kotlin/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/android-kotlin/rules/architecture/product-specs.md +62 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/android-kotlin/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/android-kotlin/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/go/agents/build-verifier.md +3 -0
- package/presets/claude/go/agents/code-reviewer.md +2 -0
- package/presets/claude/go/agents/feature-developer.md +7 -0
- package/presets/claude/go/agents/task-analyst.md +19 -0
- package/presets/claude/go/agents/task-router.md +11 -0
- package/presets/claude/go/agents/tech-writer.md +5 -0
- package/presets/claude/go/commands/feature-continue.md +1 -0
- package/presets/claude/go/commands/feature-start.md +8 -0
- package/presets/claude/go/commands/spec-start.md +29 -0
- package/presets/claude/go/commands/task-continue.md +6 -3
- package/presets/claude/go/rules/README.md +2 -0
- package/presets/claude/go/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/go/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/go/rules/architecture/product-specs.md +63 -0
- package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/go/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/go/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/ios-swift/agents/build-verifier.md +3 -0
- package/presets/claude/ios-swift/agents/code-reviewer.md +2 -0
- package/presets/claude/ios-swift/agents/feature-developer.md +7 -0
- package/presets/claude/ios-swift/agents/task-analyst.md +19 -0
- package/presets/claude/ios-swift/agents/task-router.md +11 -0
- package/presets/claude/ios-swift/agents/tech-writer.md +2 -15
- package/presets/claude/ios-swift/commands/feature-continue.md +4 -0
- package/presets/claude/ios-swift/commands/feature-start.md +8 -0
- package/presets/claude/ios-swift/commands/spec-start.md +29 -0
- package/presets/claude/ios-swift/commands/task-continue.md +6 -3
- package/presets/claude/ios-swift/rules/README.md +3 -0
- package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/ios-swift/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/ios-swift/rules/architecture/product-specs.md +62 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/ios-swift/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/ios-swift/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/java/agents/build-verifier.md +3 -0
- package/presets/claude/java/agents/code-reviewer.md +2 -0
- package/presets/claude/java/agents/feature-developer.md +7 -0
- package/presets/claude/java/agents/task-analyst.md +19 -0
- package/presets/claude/java/agents/task-router.md +11 -0
- package/presets/claude/java/agents/tech-writer.md +5 -0
- package/presets/claude/java/commands/feature-continue.md +1 -0
- package/presets/claude/java/commands/feature-start.md +8 -0
- package/presets/claude/java/commands/spec-start.md +29 -0
- package/presets/claude/java/commands/task-continue.md +6 -3
- package/presets/claude/java/rules/README.md +2 -0
- package/presets/claude/java/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/java/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/java/rules/architecture/product-specs.md +63 -0
- package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/java/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/java/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/mcp-ts/agents/build-verifier.md +3 -0
- package/presets/claude/mcp-ts/agents/feature-developer.md +7 -0
- package/presets/claude/mcp-ts/agents/task-analyst.md +21 -0
- package/presets/claude/mcp-ts/agents/task-router.md +11 -0
- package/presets/claude/mcp-ts/commands/feature-continue.md +4 -0
- package/presets/claude/mcp-ts/commands/feature-start.md +8 -0
- package/presets/claude/mcp-ts/commands/spec-start.md +29 -0
- package/presets/claude/mcp-ts/commands/task-continue.md +6 -3
- package/presets/claude/mcp-ts/rules/README.md +2 -0
- package/presets/claude/mcp-ts/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/mcp-ts/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/mcp-ts/rules/architecture/product-specs.md +63 -0
- package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/mcp-ts/skills/feature-delivery/SKILL.md +4 -3
- package/presets/claude/mcp-ts/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/next/agents/build-verifier.md +3 -0
- package/presets/claude/next/agents/code-reviewer.md +1 -0
- package/presets/claude/next/agents/feature-developer.md +7 -0
- package/presets/claude/next/agents/task-analyst.md +19 -0
- package/presets/claude/next/agents/task-router.md +11 -0
- package/presets/claude/next/agents/tech-writer.md +5 -0
- package/presets/claude/next/commands/feature-continue.md +1 -0
- package/presets/claude/next/commands/feature-start.md +8 -0
- package/presets/claude/next/commands/spec-start.md +29 -0
- package/presets/claude/next/commands/task-continue.md +6 -3
- package/presets/claude/next/rules/README.md +3 -0
- package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +4 -0
- package/presets/claude/next/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/next/rules/architecture/product-specs.md +63 -0
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/next/skills/feature-delivery/SKILL.md +4 -3
- package/presets/claude/next/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/nuxt/agents/build-verifier.md +3 -0
- package/presets/claude/nuxt/agents/code-reviewer.md +2 -0
- package/presets/claude/nuxt/agents/feature-developer.md +7 -0
- package/presets/claude/nuxt/agents/task-analyst.md +19 -0
- package/presets/claude/nuxt/agents/task-router.md +11 -0
- package/presets/claude/nuxt/agents/tech-writer.md +5 -0
- package/presets/claude/nuxt/commands/feature-continue.md +4 -0
- package/presets/claude/nuxt/commands/feature-start.md +8 -0
- package/presets/claude/nuxt/commands/spec-start.md +29 -0
- package/presets/claude/nuxt/commands/task-continue.md +6 -3
- package/presets/claude/nuxt/rules/README.md +3 -0
- package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +4 -0
- package/presets/claude/nuxt/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/nuxt/rules/architecture/product-specs.md +62 -0
- package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +4 -3
- package/presets/claude/nuxt/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/php-hexagonal/agents/build-verifier.md +3 -0
- package/presets/claude/php-hexagonal/agents/code-reviewer.md +2 -0
- package/presets/claude/php-hexagonal/agents/feature-developer.md +7 -0
- package/presets/claude/php-hexagonal/agents/task-analyst.md +19 -0
- package/presets/claude/php-hexagonal/agents/task-router.md +11 -0
- package/presets/claude/php-hexagonal/agents/tech-writer.md +5 -0
- package/presets/claude/php-hexagonal/commands/feature-continue.md +1 -0
- package/presets/claude/php-hexagonal/commands/feature-start.md +8 -0
- package/presets/claude/php-hexagonal/commands/spec-start.md +29 -0
- package/presets/claude/php-hexagonal/commands/task-continue.md +6 -3
- package/presets/claude/php-hexagonal/rules/README.md +2 -0
- package/presets/claude/php-hexagonal/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/php-hexagonal/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/php-hexagonal/rules/architecture/product-specs.md +63 -0
- package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/php-hexagonal/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/php-hexagonal/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/php-laravel/agents/build-verifier.md +3 -0
- package/presets/claude/php-laravel/agents/code-reviewer.md +2 -0
- package/presets/claude/php-laravel/agents/feature-developer.md +7 -0
- package/presets/claude/php-laravel/agents/task-analyst.md +19 -0
- package/presets/claude/php-laravel/agents/task-router.md +11 -0
- package/presets/claude/php-laravel/agents/tech-writer.md +5 -0
- package/presets/claude/php-laravel/commands/feature-continue.md +1 -0
- package/presets/claude/php-laravel/commands/feature-start.md +8 -0
- package/presets/claude/php-laravel/commands/spec-start.md +29 -0
- package/presets/claude/php-laravel/commands/task-continue.md +6 -3
- package/presets/claude/php-laravel/rules/README.md +2 -0
- package/presets/claude/php-laravel/rules/architecture/feature-delivery.md +4 -0
- package/presets/claude/php-laravel/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/php-laravel/rules/architecture/product-specs.md +63 -0
- package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/php-laravel/skills/feature-delivery/SKILL.md +5 -4
- package/presets/claude/php-laravel/skills/spec-authoring/SKILL.md +26 -0
- package/presets/claude/svelte/agents/build-verifier.md +3 -0
- package/presets/claude/svelte/agents/code-reviewer.md +2 -0
- package/presets/claude/svelte/agents/feature-developer.md +7 -0
- package/presets/claude/svelte/agents/task-analyst.md +19 -0
- package/presets/claude/svelte/agents/task-router.md +11 -0
- package/presets/claude/svelte/agents/tech-writer.md +5 -0
- package/presets/claude/svelte/commands/feature-continue.md +4 -0
- package/presets/claude/svelte/commands/feature-start.md +8 -0
- package/presets/claude/svelte/commands/spec-start.md +29 -0
- package/presets/claude/svelte/commands/task-continue.md +6 -3
- package/presets/claude/svelte/rules/README.md +3 -0
- package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +4 -0
- package/presets/claude/svelte/rules/architecture/product-specs-authoring.md +121 -0
- package/presets/claude/svelte/rules/architecture/product-specs.md +62 -0
- package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +2 -0
- package/presets/claude/svelte/skills/feature-delivery/SKILL.md +4 -3
- package/presets/claude/svelte/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/android-kotlin/agents/build-verifier.md +3 -0
- package/presets/cursor/android-kotlin/agents/code-reviewer.md +2 -0
- package/presets/cursor/android-kotlin/agents/feature-developer.md +7 -0
- package/presets/cursor/android-kotlin/agents/task-analyst.md +19 -0
- package/presets/cursor/android-kotlin/agents/task-router.md +11 -0
- package/presets/cursor/android-kotlin/agents/tech-writer.md +5 -0
- package/presets/cursor/android-kotlin/commands/feature-continue.md +4 -0
- package/presets/cursor/android-kotlin/commands/feature-start.md +8 -0
- package/presets/cursor/android-kotlin/commands/spec-start.md +29 -0
- package/presets/cursor/android-kotlin/commands/task-continue.md +6 -3
- package/presets/cursor/android-kotlin/rules/README.md +3 -0
- package/presets/cursor/android-kotlin/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/android-kotlin/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/android-kotlin/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/android-kotlin/rules/product-specs.mdc +64 -0
- package/presets/cursor/android-kotlin/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/android-kotlin/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/go/agents/build-verifier.md +3 -0
- package/presets/cursor/go/agents/code-reviewer.md +2 -0
- package/presets/cursor/go/agents/feature-developer.md +7 -0
- package/presets/cursor/go/agents/task-analyst.md +19 -0
- package/presets/cursor/go/agents/task-router.md +11 -0
- package/presets/cursor/go/agents/tech-writer.md +5 -0
- package/presets/cursor/go/commands/feature-continue.md +4 -0
- package/presets/cursor/go/commands/feature-start.md +8 -0
- package/presets/cursor/go/commands/spec-start.md +29 -0
- package/presets/cursor/go/commands/task-continue.md +6 -3
- package/presets/cursor/go/rules/README.md +4 -1
- package/presets/cursor/go/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/go/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/go/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/go/rules/product-specs.mdc +65 -0
- package/presets/cursor/go/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/go/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/ios-swift/agents/build-verifier.md +3 -0
- package/presets/cursor/ios-swift/agents/code-reviewer.md +2 -0
- package/presets/cursor/ios-swift/agents/feature-developer.md +7 -0
- package/presets/cursor/ios-swift/agents/task-analyst.md +19 -0
- package/presets/cursor/ios-swift/agents/task-router.md +11 -0
- package/presets/cursor/ios-swift/agents/tech-writer.md +2 -15
- package/presets/cursor/ios-swift/commands/feature-continue.md +4 -0
- package/presets/cursor/ios-swift/commands/feature-start.md +8 -0
- package/presets/cursor/ios-swift/commands/spec-start.md +29 -0
- package/presets/cursor/ios-swift/commands/task-continue.md +6 -3
- package/presets/cursor/ios-swift/rules/README.md +4 -1
- package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/ios-swift/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/ios-swift/rules/product-specs.mdc +64 -0
- package/presets/cursor/ios-swift/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/ios-swift/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/java/agents/build-verifier.md +3 -0
- package/presets/cursor/java/agents/code-reviewer.md +2 -0
- package/presets/cursor/java/agents/feature-developer.md +7 -0
- package/presets/cursor/java/agents/task-analyst.md +19 -0
- package/presets/cursor/java/agents/task-router.md +11 -0
- package/presets/cursor/java/agents/tech-writer.md +5 -0
- package/presets/cursor/java/commands/feature-continue.md +4 -0
- package/presets/cursor/java/commands/feature-start.md +8 -0
- package/presets/cursor/java/commands/spec-start.md +29 -0
- package/presets/cursor/java/commands/task-continue.md +6 -3
- package/presets/cursor/java/rules/README.md +4 -1
- package/presets/cursor/java/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/java/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/java/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/java/rules/product-specs.mdc +65 -0
- package/presets/cursor/java/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/java/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/mcp-ts/agents/build-verifier.md +3 -0
- package/presets/cursor/mcp-ts/agents/feature-developer.md +7 -0
- package/presets/cursor/mcp-ts/agents/task-analyst.md +21 -0
- package/presets/cursor/mcp-ts/agents/task-router.md +11 -0
- package/presets/cursor/mcp-ts/commands/feature-continue.md +4 -0
- package/presets/cursor/mcp-ts/commands/feature-start.md +8 -0
- package/presets/cursor/mcp-ts/commands/spec-start.md +29 -0
- package/presets/cursor/mcp-ts/commands/task-continue.md +6 -3
- package/presets/cursor/mcp-ts/rules/README.md +2 -0
- package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/mcp-ts/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/mcp-ts/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/mcp-ts/rules/product-specs.mdc +65 -0
- package/presets/cursor/mcp-ts/skills/feature-delivery/SKILL.md +4 -3
- package/presets/cursor/mcp-ts/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/next/agents/build-verifier.md +3 -0
- package/presets/cursor/next/agents/code-reviewer.md +1 -0
- package/presets/cursor/next/agents/feature-developer.md +7 -0
- package/presets/cursor/next/agents/task-analyst.md +19 -0
- package/presets/cursor/next/agents/task-router.md +11 -0
- package/presets/cursor/next/agents/tech-writer.md +5 -0
- package/presets/cursor/next/commands/feature-continue.md +4 -0
- package/presets/cursor/next/commands/feature-start.md +8 -0
- package/presets/cursor/next/commands/spec-start.md +29 -0
- package/presets/cursor/next/commands/task-continue.md +6 -3
- package/presets/cursor/next/rules/README.md +3 -1
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/next/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/next/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/next/rules/product-specs.mdc +65 -0
- package/presets/cursor/next/skills/feature-delivery/SKILL.md +4 -3
- package/presets/cursor/next/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/nuxt/agents/build-verifier.md +3 -0
- package/presets/cursor/nuxt/agents/code-reviewer.md +2 -0
- package/presets/cursor/nuxt/agents/feature-developer.md +7 -0
- package/presets/cursor/nuxt/agents/task-analyst.md +19 -0
- package/presets/cursor/nuxt/agents/task-router.md +11 -0
- package/presets/cursor/nuxt/agents/tech-writer.md +5 -0
- package/presets/cursor/nuxt/commands/feature-continue.md +4 -0
- package/presets/cursor/nuxt/commands/feature-start.md +8 -0
- package/presets/cursor/nuxt/commands/spec-start.md +29 -0
- package/presets/cursor/nuxt/commands/task-continue.md +6 -3
- package/presets/cursor/nuxt/rules/README.md +3 -1
- package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/nuxt/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/nuxt/rules/product-specs.mdc +64 -0
- package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +4 -3
- package/presets/cursor/nuxt/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/php-hexagonal/agents/build-verifier.md +3 -0
- package/presets/cursor/php-hexagonal/agents/code-reviewer.md +2 -0
- package/presets/cursor/php-hexagonal/agents/feature-developer.md +7 -0
- package/presets/cursor/php-hexagonal/agents/task-analyst.md +19 -0
- package/presets/cursor/php-hexagonal/agents/task-router.md +11 -0
- package/presets/cursor/php-hexagonal/agents/tech-writer.md +5 -0
- package/presets/cursor/php-hexagonal/commands/feature-continue.md +4 -0
- package/presets/cursor/php-hexagonal/commands/feature-start.md +8 -0
- package/presets/cursor/php-hexagonal/commands/spec-start.md +29 -0
- package/presets/cursor/php-hexagonal/commands/task-continue.md +6 -3
- package/presets/cursor/php-hexagonal/rules/README.md +4 -1
- package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/php-hexagonal/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/php-hexagonal/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/php-hexagonal/rules/product-specs.mdc +65 -0
- package/presets/cursor/php-hexagonal/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/php-hexagonal/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/php-laravel/agents/build-verifier.md +3 -0
- package/presets/cursor/php-laravel/agents/code-reviewer.md +2 -0
- package/presets/cursor/php-laravel/agents/feature-developer.md +7 -0
- package/presets/cursor/php-laravel/agents/task-analyst.md +19 -0
- package/presets/cursor/php-laravel/agents/task-router.md +11 -0
- package/presets/cursor/php-laravel/agents/tech-writer.md +5 -0
- package/presets/cursor/php-laravel/commands/feature-continue.md +4 -0
- package/presets/cursor/php-laravel/commands/feature-start.md +8 -0
- package/presets/cursor/php-laravel/commands/spec-start.md +29 -0
- package/presets/cursor/php-laravel/commands/task-continue.md +6 -3
- package/presets/cursor/php-laravel/rules/README.md +4 -1
- package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/php-laravel/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/php-laravel/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/php-laravel/rules/product-specs.mdc +65 -0
- package/presets/cursor/php-laravel/skills/feature-delivery/SKILL.md +5 -4
- package/presets/cursor/php-laravel/skills/spec-authoring/SKILL.md +26 -0
- package/presets/cursor/svelte/agents/build-verifier.md +3 -0
- package/presets/cursor/svelte/agents/code-reviewer.md +2 -0
- package/presets/cursor/svelte/agents/feature-developer.md +7 -0
- package/presets/cursor/svelte/agents/task-analyst.md +19 -0
- package/presets/cursor/svelte/agents/task-router.md +11 -0
- package/presets/cursor/svelte/agents/tech-writer.md +5 -0
- package/presets/cursor/svelte/commands/feature-continue.md +4 -0
- package/presets/cursor/svelte/commands/feature-start.md +8 -0
- package/presets/cursor/svelte/commands/spec-start.md +29 -0
- package/presets/cursor/svelte/commands/task-continue.md +6 -3
- package/presets/cursor/svelte/rules/README.md +3 -1
- package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +2 -0
- package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/svelte/rules/product-specs-authoring.mdc +123 -0
- package/presets/cursor/svelte/rules/product-specs.mdc +64 -0
- package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +4 -3
- package/presets/cursor/svelte/skills/spec-authoring/SKILL.md +26 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
### Product specs authoring (Phases A–E)
|
|
6
|
+
|
|
7
|
+
- **Generation modes** (shared-core): **Consume** (default discovery, soft-fail on miss) · **Generate** (explicit intent / AC / `/spec-start` with existing tree) · **Bootstrap** (same triggers when `docs/specs/` absent). Greenfield policy: no INDEX/spec invention without explicit intent; conflict precedence human > brief AC > approved spec > code.
|
|
8
|
+
- Split requestable stems: lean `architecture/product-specs.md` (Consume) + `architecture/product-specs-authoring.md` (Generate / Bootstrap, INDEX + frontmatter v1, body checklist). Both ×20 Cursor + Claude adapters (`alwaysApply: false` / Claude `paths: docs/specs/**/*`); Stack notes map `routes` / `ui` / `store` / `e2e` per stack class (mcp-ts: tool names; empty `ui`/`store`).
|
|
9
|
+
- **Assets SoT:** `presets/_shared/assets/docs-specs/` — INDEX stub, `_templates/page.md` / `feature.md`, optional `schemas/frontmatter-v1.schema.json`.
|
|
10
|
+
- **CLI seed policy:** on `init`, when consumer `docs/specs/` directory is **absent**, copy INDEX stub + `_templates/*` from assets (idempotent; **never overwrite** existing INDEX). If the directory already exists (even empty), seed is skipped — remove the folder or copy templates manually if you created an empty tree before first `init`.
|
|
11
|
+
- **Author surface:** extend **task-analyst** (primary author; **mcp-ts analyst-only** — no tech-writer) + **tech-writer** post-delivery sync (9 stacks); requestable skill **`spec-authoring`**; **feature-developer** / **feature-delivery** treat approved specs as behavior SoT.
|
|
12
|
+
- **Pipeline:** optional `/spec-start` (spec-gen → analyst author mode → human gate); task-router `spec-gen` / bootstrap signals; orchestrator passes spec paths + INDEX diff (no dedicated `spec-author` agent).
|
|
13
|
+
- **Validation severity:** code-reviewer **WARN** code/spec drift, **FAIL** broken INDEX links or missing required frontmatter on touched `docs/specs/**`; build-verifier **FAIL** missing shared assets / broken twins / non-requestable stems; optional `scripts/check-product-specs.sh` (**WARN** default, **`--strict`** FAIL) — not mandatory consumer CI.
|
|
14
|
+
- **Dogfood:** `dogfood/mcp-ts-sample/docs/specs/` (INDEX + `domains/echo/echo-tool.md`; sample spec human-promoted to `active`). Soft WARN in `check:preset-structure` + GitHub `preset-structure` workflow (`yarn check:product-specs:dogfood`, `continue-on-error`).
|
|
15
|
+
- **Follow-ups:** dogfood `.cursor/` re-synced from next; removed ambiguous `**mcp-ts:**` footnote from non–mcp-ts `task-analyst` twins (mcp-ts analyst-only wording kept on mcp-ts only).
|
|
16
|
+
- **Consumers:** after publish, re-run `npx @bonesofspring/ai-rules init cursor|claude --preset <stack>` to pick up new stems, `/spec-start`, and `spec-authoring` skill; preset files under `.cursor/` / `.claude/` are overwritten on init — existing consumer `docs/specs/` trees are **not** overwritten.
|
|
17
|
+
|
|
18
|
+
### Product specs stem (`product-specs`)
|
|
19
|
+
|
|
20
|
+
- New shared-core embed stem `architecture/product-specs.md`: stack-agnostic `docs/specs` INDEX discovery, soft-fail on miss, authoring/INDEX same-PR, non-goals vs `.ai/context` / `reference-features`.
|
|
21
|
+
- Requestable Cursor + Claude adapters ×10 stacks (`product-specs.mdc` / `architecture/product-specs.md`) with frontend / mobile / backend Stack notes (no cross-stack UI-path leakage).
|
|
22
|
+
- Agent one-liners: `task-analyst`, `feature-developer`, orchestrator adapters; `tech-writer` (stacks with tech-writer agent; mcp-ts excluded); `feature-delivery` skill early INDEX step; optional Related on `feature-delivery-workflow`.
|
|
23
|
+
- Token budget: `alwaysApply: false` / Claude `paths: docs/specs/**` — not session-start.
|
|
24
|
+
- Consumers: after publish, re-run `npx @bonesofspring/ai-rules init cursor|claude --preset <stack>` to pick up the stem.
|
|
25
|
+
- Follow-up polish: android-kotlin Stack notes use `features/**` (not iOS `Features/**`); Claude next/nuxt/ios/android feature-delivery INDEX step numbering aligned with Cursor; next `code-reviewer` checks `docs/specs/**` drift via `product-specs`.
|
|
26
|
+
|
|
27
|
+
|
|
5
28
|
### Android Kotlin preset (`android-kotlin`)
|
|
6
29
|
|
|
7
30
|
- New installable preset **`android-kotlin`** (Cursor + Claude twins): Clean Architecture multimodule Android/Kotlin — Compose Material 3, MVI/UDF ViewModels, Dagger feature holders (no Hilt by default), `api`/`impl` modules, Gradle convention plugins / version catalog discovery, instrumentation UI-test agents.
|
package/README.md
CHANGED
|
@@ -50,8 +50,25 @@ Where things go on `init`:
|
|
|
50
50
|
| MCP | `mcp.json` → `.cursor/mcp.json`, `MCP.md` → `.cursor/` | `mcp.json` → **`.mcp.json`** (project root), `MCP.md` → `.claude/` |
|
|
51
51
|
| tool map | `AGENTS.md` → `.cursor/AGENTS.md`, `BUGBOT.md` | `CLAUDE.md` → `.claude/CLAUDE.md` |
|
|
52
52
|
| **repo-root agents** | `REPO_AGENTS.md` → **`<cwd>/AGENTS.md`** | same |
|
|
53
|
+
| **docs/specs seed** | When `<cwd>/docs/specs/` is **absent**, copy INDEX stub + `_templates/*` from `presets/_shared/assets/docs-specs/` (never overwrite existing INDEX) | same |
|
|
53
54
|
|
|
54
|
-
Skills of note: `write-adr` (all stacks); `react-performance` (**next only**); `vue-performance` (**nuxt only**); `svelte-performance` (**svelte only**). Living gotchas: `team/conventions.md`. Opt-in rule samples eval: `yarn check:rule-eval` (workflow `rule-eval.yml`; not part of `check:preset-structure`).
|
|
55
|
+
Skills of note: `write-adr` (all stacks); `spec-authoring` (Generate/Bootstrap `docs/specs`); `react-performance` (**next only**); `vue-performance` (**nuxt only**); `svelte-performance` (**svelte only**). Optional command `/spec-start`. Living gotchas: `team/conventions.md`. Opt-in rule samples eval: `yarn check:rule-eval` (workflow `rule-eval.yml`; not part of `check:preset-structure`). Optional consumer specs check: `yarn check:product-specs` (WARN default; `--strict` FAIL).
|
|
56
|
+
|
|
57
|
+
## Product specs (`docs/specs/`)
|
|
58
|
+
|
|
59
|
+
Presets support **behavior specs** under `docs/specs/**` (INDEX, frontmatter v1, page/feature templates). Three modes:
|
|
60
|
+
|
|
61
|
+
| Mode | Trigger | Agent behavior |
|
|
62
|
+
|------|---------|----------------|
|
|
63
|
+
| **Consume** | Default when working on listed routes/features | Discover via INDEX; soft-fail on miss; do not invent product behavior |
|
|
64
|
+
| **Generate** | Brief AC, `/spec-start`, or router `spec-gen` with existing tree | **task-analyst** authors/updates specs + INDEX (skill **`spec-authoring`**) |
|
|
65
|
+
| **Bootstrap** | Same triggers when `docs/specs/` absent | Create INDEX + templates + first domain spec |
|
|
66
|
+
|
|
67
|
+
**First-time seed:** `init` copies INDEX stub + `_templates/*` from package assets when `<cwd>/docs/specs/` is **absent** (see table above). **Troubleshooting:** if you created an empty `docs/specs/` folder before `init`, seed is skipped — delete the folder and re-run `init`, or copy from `presets/_shared/assets/docs-specs/` manually.
|
|
68
|
+
|
|
69
|
+
**After a package upgrade:** re-run `init` for your stack to refresh rules, `/spec-start`, and `spec-authoring` skill. Agent-generated specs default to `status: draft` until a human promotes them.
|
|
70
|
+
|
|
71
|
+
**Optional validation** (from `packages/ai-rules/`): `yarn check:product-specs <repo-root>` (WARN) or `--strict` (FAIL). Monorepo dogfood example: `dogfood/mcp-ts-sample/docs/specs/`.
|
|
55
72
|
|
|
56
73
|
The package ships presets including **`next`** (Next.js stack), **`nuxt`** (Nuxt 3 / Vue 3 / Pinia), **`svelte`** (SvelteKit / Svelte 5 / TypeScript / `store-svelte`), **`ios-swift`** (iOS apps on Swift / SwiftUI), **`android-kotlin`** (Android multimodule Kotlin / Compose / Gradle), **`go`** (Go backends with hexagonal architecture), **`java`** (Java / Spring Boot hexagonal backends), **`mcp-ts`** (TypeScript MCP servers with `@modelcontextprotocol/sdk`), **`php-hexagonal`** (PHP / Composer hexagonal backends), and **`php-laravel`** (Laravel backend/API with Eloquent, Form Requests, Policies, Actions/Services). Other preset names: see `presets/` in the [repo](https://github.com/bonesofspring/ai-rules). Name is a single path segment, no `/` or `.`.
|
|
57
74
|
|
|
@@ -82,7 +99,7 @@ Help: `ai-rules --help`.
|
|
|
82
99
|
|
|
83
100
|
Presets are developed in this monorepo under `presets/`. If you add or change rules, agents, or platform artifacts:
|
|
84
101
|
|
|
85
|
-
- **Taxonomy & layers:** [`presets/_shared/README.md`](presets/_shared/README.md) — shared core (`_shared/core`), stack adapters, platform packaging
|
|
102
|
+
- **Taxonomy & layers:** [`presets/_shared/README.md`](presets/_shared/README.md) — shared core (`_shared/core`), stack adapters, platform packaging (includes requestable embed stem `architecture/product-specs` for consumer `docs/specs` INDEX discovery)
|
|
86
103
|
- **Contribution guide:** [`docs/PRESET-CONTRIBUTION.md`](docs/PRESET-CONTRIBUTION.md) — SoT, twin sync, embed vs lineage, token budget (≤3 always-on), PR checklist, new stack preset, platform-only files (`BUGBOT.md`, `CLAUDE.md`)
|
|
87
104
|
- **Dogfood / drift scripts:** [`scripts/sync-dogfood-cursor.sh`](scripts/sync-dogfood-cursor.sh) (also syncs root `AGENTS.md` from `REPO_AGENTS.md`; seeds `team/conventions.md` if absent), [`scripts/check-shared-core-drift.sh`](scripts/check-shared-core-drift.sh)
|
|
88
105
|
- **Preset structure CI gates** (exit non-zero on FAIL): `yarn check:preset-structure` (or `bash scripts/check-preset-structure.sh`) — twin map, session-start budget (Option A), leakage, shared-core drift (`AI_RULES_DRIFT_FAIL=1`)
|
package/bin/cli.js
CHANGED
|
@@ -64,6 +64,7 @@ Notes:
|
|
|
64
64
|
Cursor init copies rules, commands, agents, hooks, skills, team, hooks.json, BUGBOT.md, AGENTS.md → .cursor/AGENTS.md, MCP.md, mcp.json → .cursor/mcp.json.
|
|
65
65
|
Claude init copies rules, commands, skills, agents, hooks, team, CLAUDE.md, MCP.md, and mcp.json → .mcp.json (project root).
|
|
66
66
|
Both tools also copy REPO_AGENTS.md → <cwd>/AGENTS.md (repo-root cross-tool agents file; overwrite).
|
|
67
|
+
When <cwd>/docs/specs/ is absent, init also seeds INDEX.md stub + _templates/* from package assets (never overwrites an existing INDEX).
|
|
67
68
|
clean removes tool dirs/files and <cwd>/AGENTS.md (shared across tools — re-init the other tool to restore).
|
|
68
69
|
Command forms: "init cursor --preset next", "init cursor next", "--preset next init cursor", "cursor init --preset next".
|
|
69
70
|
|
|
@@ -223,6 +224,40 @@ function copyDir(src, dest) {
|
|
|
223
224
|
}
|
|
224
225
|
}
|
|
225
226
|
|
|
227
|
+
/**
|
|
228
|
+
* Seed consumer docs/specs when the tree is absent.
|
|
229
|
+
* Idempotent: never overwrite existing INDEX; skip entirely if docs/specs exists.
|
|
230
|
+
*/
|
|
231
|
+
function seedDocsSpecsIfAbsent(packageRoot, cwd) {
|
|
232
|
+
const destRoot = path.join(cwd, 'docs', 'specs');
|
|
233
|
+
if (fs.existsSync(destRoot)) {
|
|
234
|
+
console.log('Skipped docs/specs seed (directory already exists)');
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
const assetsRoot = path.join(
|
|
238
|
+
packageRoot,
|
|
239
|
+
'presets',
|
|
240
|
+
'_shared',
|
|
241
|
+
'assets',
|
|
242
|
+
'docs-specs'
|
|
243
|
+
);
|
|
244
|
+
if (!fs.existsSync(assetsRoot)) {
|
|
245
|
+
console.log('Skipped docs/specs seed (package assets missing)');
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
fs.mkdirSync(destRoot, { recursive: true });
|
|
249
|
+
const indexSrc = path.join(assetsRoot, 'INDEX.md');
|
|
250
|
+
if (fs.existsSync(indexSrc)) {
|
|
251
|
+
fs.copyFileSync(indexSrc, path.join(destRoot, 'INDEX.md'));
|
|
252
|
+
}
|
|
253
|
+
const templatesSrc = path.join(assetsRoot, '_templates');
|
|
254
|
+
if (fs.existsSync(templatesSrc)) {
|
|
255
|
+
copyDir(templatesSrc, path.join(destRoot, '_templates'));
|
|
256
|
+
}
|
|
257
|
+
console.log('Seeded docs/specs/ (INDEX stub + _templates)');
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
|
|
226
261
|
function getOptionalDirs(cfg) {
|
|
227
262
|
return cfg.optionalCursorDirs || cfg.optionalClaudeDirs || [];
|
|
228
263
|
}
|
|
@@ -422,6 +457,10 @@ function cmdInit(tool, preset, cwdOption) {
|
|
|
422
457
|
copiedSteps++;
|
|
423
458
|
}
|
|
424
459
|
}
|
|
460
|
+
|
|
461
|
+
if (seedDocsSpecsIfAbsent(packageRoot, cwd)) {
|
|
462
|
+
copiedSteps++;
|
|
463
|
+
}
|
|
425
464
|
} catch (err) {
|
|
426
465
|
const msg = err instanceof Error ? err.message : String(err);
|
|
427
466
|
console.error(`init failed: ${msg}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bonesofspring/ai-rules",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"description": "Presets of Cursor and Claude rules/commands for Revy Ross personal use",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Revy Ross",
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
"check:preset-leakage": "bash scripts/check-preset-leakage.sh",
|
|
32
32
|
"check:preset-i18n": "AI_RULES_I18N_FAIL=1 AI_RULES_I18N_SOFT=0 bash scripts/check-preset-i18n.sh",
|
|
33
33
|
"check:shared-core-drift": "bash scripts/check-shared-core-drift.sh",
|
|
34
|
+
"check:product-specs": "bash scripts/check-product-specs.sh",
|
|
35
|
+
"check:product-specs:dogfood": "bash scripts/check-product-specs.sh ../../dogfood/mcp-ts-sample",
|
|
34
36
|
"check:rule-eval": "node scripts/check-rule-eval.mjs"
|
|
35
37
|
},
|
|
36
38
|
"engines": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Shared preset core (`presets/_shared`)
|
|
2
2
|
|
|
3
|
-
Stack-agnostic **prose and checklists** for all installable presets: `next`, `nuxt`, `ios-swift`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (`cursor/<stack>`, `claude/<stack>`).
|
|
3
|
+
Stack-agnostic **prose and checklists** for all installable presets: `next`, `nuxt`, `svelte`, `ios-swift`, `android-kotlin`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (`cursor/<stack>`, `claude/<stack>`).
|
|
4
4
|
|
|
5
5
|
**Not an installable preset.** CLI `init` copies only under `presets/cursor/<name>/` or `presets/claude/<name>/` — this sibling is never shipped to consumer apps.
|
|
6
6
|
|
|
@@ -38,7 +38,7 @@ Do **not** expect lineage adapters to byte-match core. Embed adapters should mat
|
|
|
38
38
|
|-----|----------|
|
|
39
39
|
| `core/quality/` | Boy-scout + Principles (always-on slim); requestable `anti-sycophancy-discipline` (~17 rules); requestable `design-guidance` (smells ≤12 + GoF ≤8) |
|
|
40
40
|
| `core/agent-team/` | Orchestrator + intake (pipeline language) |
|
|
41
|
-
| `core/architecture/` | Feature-delivery abstract + reference-features template |
|
|
41
|
+
| `core/architecture/` | Feature-delivery abstract + reference-features template + product-specs (+ product-specs-authoring) + assets/docs-specs templates |
|
|
42
42
|
| `core/review/` | Code-review MR + technical-retro alias |
|
|
43
43
|
| `core/meta/` | Author-facing preset meta-rules |
|
|
44
44
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Product specs INDEX
|
|
2
|
+
|
|
3
|
+
Discovery table for `docs/specs/**`. Agents start here when the file exists.
|
|
4
|
+
|
|
5
|
+
| id | type | domain | title | path | routes | aliases | status |
|
|
6
|
+
|----|------|--------|-------|------|--------|---------|--------|
|
|
7
|
+
| <!-- example-row: example-page | page | example | Example page | docs/specs/domains/example/example-page.md | /example | ExamplePage | draft --> |
|
|
8
|
+
|
|
9
|
+
<!-- Add one row per page/feature spec. Keep `id` and `path` in sync with frontmatter. -->
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: example-feature
|
|
3
|
+
type: feature
|
|
4
|
+
domain: example
|
|
5
|
+
routes: []
|
|
6
|
+
ui: []
|
|
7
|
+
store: []
|
|
8
|
+
api: []
|
|
9
|
+
aliases: []
|
|
10
|
+
e2e: []
|
|
11
|
+
status: draft
|
|
12
|
+
owners: []
|
|
13
|
+
related: []
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Example feature
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
Cross-page shared behavior for this domain. Prefer `type: feature` on backend/MCP stacks.
|
|
21
|
+
|
|
22
|
+
## Shared behavior / constraints
|
|
23
|
+
|
|
24
|
+
- Invariants that apply across related pages/tools.
|
|
25
|
+
|
|
26
|
+
## Related pages
|
|
27
|
+
|
|
28
|
+
- Link page specs in this domain (or N/A).
|
|
29
|
+
|
|
30
|
+
## Cross-cutting states
|
|
31
|
+
|
|
32
|
+
N/A
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: example-page
|
|
3
|
+
type: page
|
|
4
|
+
domain: example
|
|
5
|
+
routes: []
|
|
6
|
+
ui: []
|
|
7
|
+
store: []
|
|
8
|
+
api: []
|
|
9
|
+
aliases: []
|
|
10
|
+
e2e: []
|
|
11
|
+
status: draft
|
|
12
|
+
owners: []
|
|
13
|
+
related: []
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Example page
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
Short product behavior summary. Replace placeholders from brief AC / user / labeled sources.
|
|
21
|
+
|
|
22
|
+
## Entry / actors
|
|
23
|
+
|
|
24
|
+
Who enters this page and from where.
|
|
25
|
+
|
|
26
|
+
## Primary flows
|
|
27
|
+
|
|
28
|
+
1. Happy path steps.
|
|
29
|
+
|
|
30
|
+
## States
|
|
31
|
+
|
|
32
|
+
- Loading: …
|
|
33
|
+
- Empty: …
|
|
34
|
+
- Error: …
|
|
35
|
+
- Success: …
|
|
36
|
+
|
|
37
|
+
## Acceptance criteria
|
|
38
|
+
|
|
39
|
+
- [ ] Link or restated AC from brief / product source.
|
|
40
|
+
|
|
41
|
+
## Edge cases
|
|
42
|
+
|
|
43
|
+
N/A
|
|
44
|
+
|
|
45
|
+
## Related specs
|
|
46
|
+
|
|
47
|
+
- (optional feature.md or sibling page ids)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://bonesofspring.github.io/ai-rules/schemas/frontmatter-v1.schema.json",
|
|
4
|
+
"title": "Product spec frontmatter v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["id", "type", "domain", "routes", "ui", "store", "api", "aliases", "e2e"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": { "type": "string", "minLength": 1 },
|
|
9
|
+
"type": { "type": "string", "enum": ["page", "feature"] },
|
|
10
|
+
"domain": { "type": "string", "minLength": 1 },
|
|
11
|
+
"routes": { "type": "array", "items": { "type": "string" } },
|
|
12
|
+
"ui": { "type": "array", "items": { "type": "string" } },
|
|
13
|
+
"store": { "type": "array", "items": { "type": "string" } },
|
|
14
|
+
"api": { "type": "array", "items": { "type": "string" } },
|
|
15
|
+
"aliases": { "type": "array", "items": { "type": "string" } },
|
|
16
|
+
"e2e": { "type": "array", "items": { "type": "string" } },
|
|
17
|
+
"status": { "type": "string", "enum": ["draft", "active", "deprecated"] },
|
|
18
|
+
"owners": { "type": "array", "items": { "type": "string" } },
|
|
19
|
+
"related": { "type": "array", "items": { "type": "string" } }
|
|
20
|
+
},
|
|
21
|
+
"additionalProperties": true
|
|
22
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Product specs authoring
|
|
2
|
+
|
|
3
|
+
Load when **Generate** or **Bootstrap** is requested (`/spec-start`, router `spec-gen`, brief AC, or analyst author mode). Discovery-only work stays on **`product-specs`**.
|
|
4
|
+
|
|
5
|
+
## Modes
|
|
6
|
+
|
|
7
|
+
1. **Consume** — default; never invent INDEX/specs (see `product-specs`).
|
|
8
|
+
2. **Generate** — create/update page/feature specs + INDEX rows from brief AC, user intent, Figma, or code archaeology. Inventing *product* behavior is forbidden without a stated source (AC / user / UI copy / code-observed behavior labeled `status: draft` or `inferred`).
|
|
9
|
+
3. **Bootstrap** — create `INDEX.md` + `_templates/` copies + first domain spec under greenfield policy.
|
|
10
|
+
|
|
11
|
+
## Greenfield policy
|
|
12
|
+
|
|
13
|
+
Agents **may** create INDEX + first specs **only when** one of:
|
|
14
|
+
|
|
15
|
+
1. User runs `/spec-start` or explicitly asks to bootstrap `docs/specs`.
|
|
16
|
+
2. Brief/AC includes generation or bootstrap language.
|
|
17
|
+
3. Router detects `spec-gen` intent.
|
|
18
|
+
|
|
19
|
+
Otherwise: missing INDEX → optional tree; do **not** invent INDEX merely because discovery loaded.
|
|
20
|
+
|
|
21
|
+
## Conflict precedence
|
|
22
|
+
|
|
23
|
+
1. **Human gate** decision (approved brief/spec edits).
|
|
24
|
+
2. **Current task `brief.md` AC** — if AC contradicts an existing spec, analyst must reconcile (update spec as `draft` or revise AC) before developer; no silent contradiction.
|
|
25
|
+
3. **Approved `docs/specs/**`** — behavior SoT for feature-developer once gate passed.
|
|
26
|
+
4. **Code / `.ai/context`** — discovery evidence only; never override approved spec without gate.
|
|
27
|
+
|
|
28
|
+
Label inferred-from-code lines with `status: draft` until human promotes.
|
|
29
|
+
|
|
30
|
+
## INDEX.md contract (v1)
|
|
31
|
+
|
|
32
|
+
| Column | Required | Notes |
|
|
33
|
+
|--------|----------|-------|
|
|
34
|
+
| `id` | yes | Stable kebab/id matching frontmatter `id` |
|
|
35
|
+
| `type` | yes | `page` \| `feature` |
|
|
36
|
+
| `domain` | yes | Domain folder under `docs/specs/domains/<domain>/` |
|
|
37
|
+
| `title` | yes | Human label |
|
|
38
|
+
| `path` | yes | Repo-relative path to markdown file |
|
|
39
|
+
| `routes` | no | Summary; may duplicate frontmatter |
|
|
40
|
+
| `aliases` | no | Comma-separated PageName / deep-link aliases |
|
|
41
|
+
| `status` | no | `draft` \| `active` \| `deprecated` |
|
|
42
|
+
|
|
43
|
+
Layout: `docs/specs/domains/<domain>/<id>.md` (page) and optional `docs/specs/domains/<domain>/feature.md`. Adding/renaming/removing a linked file **must** update INDEX in the **same change set**.
|
|
44
|
+
|
|
45
|
+
## Frontmatter v1
|
|
46
|
+
|
|
47
|
+
| Field | Type | Required | Notes |
|
|
48
|
+
|-------|------|----------|-------|
|
|
49
|
+
| `id` | string | yes | Unique; matches INDEX |
|
|
50
|
+
| `type` | enum `page` \| `feature` | yes | Backend/MCP: prefer `feature` |
|
|
51
|
+
| `domain` | string | yes | |
|
|
52
|
+
| `routes` | string[] | yes (may be `[]`) | Web: URL paths; mobile: deep links/screens; backend: HTTP paths; mcp-ts: tool names |
|
|
53
|
+
| `ui` | string[] | yes (may be `[]`) | Component/screen refs; empty on backend/mcp |
|
|
54
|
+
| `store` | string[] | yes (may be `[]`) | Slice/module refs; empty when N/A |
|
|
55
|
+
| `api` | string[] | yes (may be `[]`) | Services/ports/tools |
|
|
56
|
+
| `aliases` | string[] | yes (may be `[]`) | |
|
|
57
|
+
| `e2e` | string[] | yes (may be `[]`) | Stack-appropriate test paths |
|
|
58
|
+
| `status` | enum | no | default `draft` on agent generate |
|
|
59
|
+
| `owners` | string[] | no | |
|
|
60
|
+
| `related` | string[] | no | Spec ids or paths |
|
|
61
|
+
|
|
62
|
+
Arrays are **always present** (empty allowed). Do not omit keys for N/A stacks.
|
|
63
|
+
|
|
64
|
+
## Body headings (minimum)
|
|
65
|
+
|
|
66
|
+
**`page` required:** Overview; Entry / actors; Primary flows; States (loading / empty / error / success as applicable — mark N/A explicitly); Acceptance criteria (links or bullets to brief AC / product source).
|
|
67
|
+
|
|
68
|
+
**`page` optional:** Analytics, Accessibility, Edge cases, Related specs.
|
|
69
|
+
|
|
70
|
+
**`feature` required:** Overview; Shared behavior / constraints; Related pages (links).
|
|
71
|
+
|
|
72
|
+
**`feature` optional:** Cross-cutting states, Analytics.
|
|
73
|
+
|
|
74
|
+
Compliant = valid frontmatter + all required headings present (non-empty prose or explicit `N/A`) + INDEX row with resolvable `path`.
|
|
75
|
+
|
|
76
|
+
## Templates & assets
|
|
77
|
+
|
|
78
|
+
**Package SoT:** `packages/ai-rules/presets/_shared/assets/docs-specs/` (`INDEX.md` stub, `_templates/page.md`, `_templates/feature.md`; optional `schemas/frontmatter-v1.schema.json`).
|
|
79
|
+
|
|
80
|
+
**CLI `init`:** when consumer `docs/specs/` is **absent**, copy INDEX stub + `_templates/*` (idempotent; **never overwrite** existing INDEX). When the tree already exists, skip seed entirely.
|
|
81
|
+
|
|
82
|
+
**Skill fallback:** if consumer `_templates/` missing during author mode, copy from package/skill assets before authoring.
|
|
83
|
+
|
|
84
|
+
## Author roles
|
|
85
|
+
|
|
86
|
+
| Role | Responsibility |
|
|
87
|
+
|------|----------------|
|
|
88
|
+
| **task-analyst** | Primary author (Generate + Bootstrap); INDEX bootstrap; brief **Related specs** + **Spec gaps / generation requested**; loads this stem + skill `spec-authoring` |
|
|
89
|
+
| **tech-writer** | Post-delivery sync where present; never invent product behavior without AC/code source |
|
|
90
|
+
| **feature-developer** | Consumes approved specs as SoT; mechanical INDEX/frontmatter fixes only on renames |
|
|
91
|
+
| **mcp-ts** | No tech-writer — author + post-sync via **task-analyst** only |
|
|
92
|
+
|
|
93
|
+
## Self-check before handoff (soft block)
|
|
94
|
+
|
|
95
|
+
Block handoff via `open_questions` until fixed:
|
|
96
|
+
|
|
97
|
+
- [ ] Required frontmatter keys present; arrays always present (may be `[]`)
|
|
98
|
+
- [ ] Required body headings present (or explicit `N/A`)
|
|
99
|
+
- [ ] INDEX row added/updated with resolvable `path` in the **same change set**
|
|
100
|
+
- [ ] Sources cited; invented product behavior absent (or labeled `draft` / `inferred`)
|
|
101
|
+
- [ ] Conflict with brief AC reconciled or flagged
|
|
102
|
+
|
|
103
|
+
## Related
|
|
104
|
+
|
|
105
|
+
- `product-specs` — discovery / consume
|
|
106
|
+
- Skill `spec-authoring` — procedural checklist
|
|
107
|
+
- Optional consumer script `scripts/check-product-specs.sh` (WARN default; `--strict` FAIL)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Product specs (docs/specs)
|
|
2
|
+
|
|
3
|
+
Product page/feature **behavior** specs live under the consumer repo `docs/specs/**`. This stem covers **discovery and presence** — not layer implementation order (see `feature-delivery-workflow`) and not code-structure mirroring (see `reference-features`).
|
|
4
|
+
|
|
5
|
+
**Authoring** (Generate / Bootstrap modes, INDEX/frontmatter v1, body checklist, greenfield, conflict precedence) → load **`product-specs-authoring`** when generation is requested (`/spec-start`, brief AC, or router `spec-gen`).
|
|
6
|
+
|
|
7
|
+
## Modes (summary)
|
|
8
|
+
|
|
9
|
+
| Mode | When | Behavior |
|
|
10
|
+
|------|------|----------|
|
|
11
|
+
| **Consume** (default) | INDEX exists or globs hit `docs/specs/**` without generate intent | Discover via INDEX; soft-fail on miss; **never invent** INDEX/specs |
|
|
12
|
+
| **Generate** | Explicit generate intent / AC / `/spec-start` with existing tree | Create/update page/feature specs + INDEX from stated sources |
|
|
13
|
+
| **Bootstrap** | Explicit bootstrap / `/spec-start` when tree absent | Create INDEX + templates + first domain spec |
|
|
14
|
+
|
|
15
|
+
Greenfield: agents may create INDEX/specs **only** on explicit intent, AC, or `/spec-start`. Missing INDEX alone does **not** authorize inventing the tree.
|
|
16
|
+
|
|
17
|
+
## Presence policy
|
|
18
|
+
|
|
19
|
+
- If `docs/specs/INDEX.md` is **missing** → the tree is **optional** (greenfield OK for *consume*). Continue with code/brief discovery; do not invent an INDEX solely because this stem loaded.
|
|
20
|
+
- If INDEX **exists** → it is the **required discovery path** for work that touches a listed page, feature, route, or alias.
|
|
21
|
+
|
|
22
|
+
## Discovery algorithm
|
|
23
|
+
|
|
24
|
+
1. Always start at `docs/specs/INDEX.md` when present.
|
|
25
|
+
2. Resolve the entry by: route, stable `id`, PageName / alias, or domain folder.
|
|
26
|
+
3. Read the linked page spec (and optional domain `feature.md` when the INDEX or page Related links it).
|
|
27
|
+
|
|
28
|
+
## Miss policy (INDEX present, row or file missing)
|
|
29
|
+
|
|
30
|
+
- Record the gap in `open_questions` / handoff gaps.
|
|
31
|
+
- Fall back to code discovery and consumer `.ai/context/**` when present.
|
|
32
|
+
- **Do not invent** product behavior, states, interactions, or contracts.
|
|
33
|
+
- Hard-fail / block only when the task’s acceptance criteria explicitly require a named spec that is absent (human/gate decision).
|
|
34
|
+
|
|
35
|
+
## Authoring pointer
|
|
36
|
+
|
|
37
|
+
Same-changeset INDEX updates, frontmatter v1, required body headings, templates, and conflict precedence live in **`product-specs-authoring`**. Do not paste the full checklist here.
|
|
38
|
+
|
|
39
|
+
## Non-goals
|
|
40
|
+
|
|
41
|
+
- Not a replacement for `.ai/context/**` (external AI Code Review glossary) or `reference-features` (file-layout mirror).
|
|
42
|
+
- Not Tessl / an external host as primary SoT.
|
|
43
|
+
- No stack filesystem path recipes in this core body — path examples belong only in adapter **Stack notes**.
|
|
44
|
+
|
|
45
|
+
## Related
|
|
46
|
+
|
|
47
|
+
- `product-specs-authoring` — generation modes, contracts, self-check.
|
|
48
|
+
- `reference-features` — code structure mirror (how to layout files), not product behavior.
|
|
49
|
+
- Consumer `.ai/context/**` when present — review/domain glossary; cross-link, do not replace.
|
|
@@ -65,3 +65,6 @@ Write the owned validation receipt (`completed` or `validation_failed`). Do not
|
|
|
65
65
|
- **Owned outputs:** `validation-report.md`; upsert only the assigned manifest entry; preserve foreign entries.
|
|
66
66
|
- **Terminal receipt:** cover applicable AC/task IDs; emit `completed` or `validation_failed`.
|
|
67
67
|
- **Shared state:** never mutate `status.json` or `metrics.json`.
|
|
68
|
+
|
|
69
|
+
13. **Product-specs assets (FAIL):** package must ship `presets/_shared/assets/docs-specs/INDEX.md`, `_templates/page.md`, `_templates/feature.md`. Cursor+Claude twins for `product-specs` and `product-specs-authoring` must embed matching shared-core markers; both stems **requestable** (`alwaysApply: false` / Claude `paths: docs/specs/**`) — never session-start.
|
|
70
|
+
14. **Optional consumer check (WARN default):** `scripts/check-product-specs.sh` + schema stub may exist for opt-in consumer CI; **FAIL** only with `--strict` or AC that requires named specs — do not force consumer CI.
|
|
@@ -18,6 +18,8 @@ Apply the **`code-review` skill** and `tooling-and-review/code-review.md` checkl
|
|
|
18
18
|
|
|
19
19
|
## Review focus (Android)
|
|
20
20
|
|
|
21
|
+
- If the MR touches `docs/specs/**`, load **`product-specs`** (+ **`product-specs-authoring`** when new/changed specs): **WARN** code/spec drift; **FAIL** broken INDEX `path` link or missing required frontmatter keys/arrays on touched spec files; required body headings missing → **FAIL** on touched files. Do not invent missing product behavior.
|
|
22
|
+
|
|
21
23
|
- **Layers:** View does not call API / know DTO; ViewModel does not depend on Data implementations; Domain has no Jetpack Compose/Android View system; Data does not pull Presentation.
|
|
22
24
|
- **DI / modules:** composition root in `applications/`; protocol-based dependencies; no deep-imports across Features; Gradle modules public API when relevant (`architecture/module-public-api.md`).
|
|
23
25
|
- **Kotlin concurrency:** `main-safe / viewModelScope` on UI surfaces; typed errors; no unjustified `!!`; Task cancellation where needed (`stack/kotlin-conventions.md`).
|
|
@@ -55,6 +55,13 @@ Emit the owned implementation receipt with outcome `completed`. Handoff by layer
|
|
|
55
55
|
|
|
56
56
|
- When writing or changing code, load / follow rule `anti-sycophancy-discipline`.
|
|
57
57
|
|
|
58
|
+
## Product specs (docs/specs)
|
|
59
|
+
|
|
60
|
+
When work touches a page/feature/route/alias: if `docs/specs/INDEX.md` exists (or brief lists approved specs), load **`product-specs`** and treat **approved** specs from brief/handoff as **behavior SoT**. Soft-fail on miss (`open_questions` + code / `.ai/context` fallback); **never invent** product behavior.
|
|
61
|
+
|
|
62
|
+
Mechanical INDEX/frontmatter fixes only when implementation renames routes/ids. Substantive behavior edits → hand back to task-analyst (or tech-writer where present). If INDEX is absent and generation was not approved, treat specs as optional (greenfield).
|
|
63
|
+
|
|
64
|
+
|
|
58
65
|
## Artifact contract
|
|
59
66
|
|
|
60
67
|
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for `brief.md`, `decomposition.md`, current scope, and applicable prior findings.
|
|
@@ -28,6 +28,25 @@ Do not invent architecture or persistence stacks — frame “as in the repo”.
|
|
|
28
28
|
|
|
29
29
|
- Optional: Load `design-guidance` (rule stem) when assessing structure, smells, or pattern fit — only when decomposing refactor/architecture tasks (not default).
|
|
30
30
|
|
|
31
|
+
## Product specs (docs/specs)
|
|
32
|
+
|
|
33
|
+
**Consume (default):** When work touches a page/feature/route/alias and `docs/specs/INDEX.md` exists, load **`product-specs`**, resolve the linked page/feature spec, and cite it under **Related specs** in `brief.md`. Soft-fail on miss (`open_questions` + code / `.ai/context` fallback); **never invent** product behavior. If INDEX is absent, treat specs as optional unless author mode applies.
|
|
34
|
+
|
|
35
|
+
**Author mode (Generate / Bootstrap):** When the user runs `/spec-start`, router intent is `spec-gen` / bootstrap, or brief/AC requests generation: load **`product-specs`** + **`product-specs-authoring`** and skill **`spec-authoring`**. You are the **primary author** (INDEX bootstrap included). Follow frontmatter v1 + required headings; update INDEX in the **same change set**; default `status: draft`. Block handoff via `open_questions` until the authoring self-check passes.
|
|
36
|
+
|
|
37
|
+
### Brief sections (when author mode or INDEX exists)
|
|
38
|
+
|
|
39
|
+
Add to `brief.md`:
|
|
40
|
+
|
|
41
|
+
```markdown
|
|
42
|
+
## Related specs
|
|
43
|
+
- path or id (or N/A)
|
|
44
|
+
|
|
45
|
+
## Spec gaps / generation requested
|
|
46
|
+
- [ ] none | generate | bootstrap — sources: …
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
|
|
31
50
|
## Artifact contract
|
|
32
51
|
|
|
33
52
|
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume `pipeline.json`, the manifest routing entry, user-approved decisions, and any authoritative architecture/approval entries.
|
|
@@ -91,6 +91,17 @@ Write `.claude/team/tasks/<slug>/pipeline.json` and initialize the routing entry
|
|
|
91
91
|
|
|
92
92
|
Intent + steps table + skipped + gates → invoke `steps[0].agent` (unless retro).
|
|
93
93
|
|
|
94
|
+
## Spec generation intents
|
|
95
|
+
|
|
96
|
+
Detect and set routing reasons when the user asks to **generate / bootstrap product specs**, mentions `docs/specs`, or runs `/spec-start`:
|
|
97
|
+
|
|
98
|
+
| Signal | Intent | Steps |
|
|
99
|
+
|--------|--------|-------|
|
|
100
|
+
| `/spec-start`, "bootstrap docs/specs", "generate product spec" | `spec-gen` | task-analyst (**author mode**) → human gate → stop (or continue to feature-developer only if implement-after) |
|
|
101
|
+
| Feature/task with AC "generate specs" / missing INDEX + bootstrap AC | `spec-gen` inside feature profile | task-analyst author mode first; **not** a separate agent step |
|
|
102
|
+
|
|
103
|
+
Do **not** add a dedicated `spec-author` agent. Do not require solution-architect for routine spec authoring.
|
|
104
|
+
|
|
94
105
|
## Runtime initialization
|
|
95
106
|
|
|
96
107
|
Return the routing receipt to the orchestrator. The orchestration runtime/hook exclusively initializes and updates `status.json`, `metrics.json`, attempt identities, and gate lifecycle; the router does not write those shared runtime files.
|
|
@@ -48,6 +48,11 @@ Conventional commit / release note snippet.
|
|
|
48
48
|
|
|
49
49
|
Write the owned terminal receipt described under **Artifact contract**.
|
|
50
50
|
|
|
51
|
+
## Product specs (docs/specs)
|
|
52
|
+
|
|
53
|
+
Post-delivery: when behavior or public docs changed and `docs/specs/` is in play, load **`product-specs`** (+ **`product-specs-authoring`** if updating specs). Sync page/feature specs + INDEX in the **same change set**. **Never invent** product behavior without AC/code source; label inferred lines `status: draft`. Soft-fail on miss; no-op if INDEX absent and sync not requested.
|
|
54
|
+
|
|
55
|
+
|
|
51
56
|
## Artifact contract
|
|
52
57
|
|
|
53
58
|
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for `brief.md`, `decomposition.md`, and other authoritative prior artifacts for this step.
|
|
@@ -17,3 +17,7 @@ Continue after a human gate. Full logic is in **`task-continue.md`**.
|
|
|
17
17
|
4. The hook continues the chain when `autoChain: true`.
|
|
18
18
|
|
|
19
19
|
See `task-continue.md` for details and the handoff table.
|
|
20
|
+
|
|
21
|
+
## Product specs (docs/specs)
|
|
22
|
+
|
|
23
|
+
When the next agent is **feature-developer** (or other implementer): if `docs/specs/INDEX.md` exists, instruct them to load **`product-specs`** and honor **Related specs** from `brief.md` (behavior SoT). Soft-fail on miss; never invent product behavior. No-op if INDEX is absent.
|
|
@@ -19,11 +19,19 @@ Starts the **analysis phase** without the router. The parent agent acts as orche
|
|
|
19
19
|
6. Invoke subagent **task-analyst** (Task tool) with the full task description and artifact paths.
|
|
20
20
|
7. Wait for the analyst to finish. **Do not invoke developer** at this stage.
|
|
21
21
|
|
|
22
|
+
## Product specs (docs/specs)
|
|
23
|
+
|
|
24
|
+
When invoking **task-analyst**: if `docs/specs/INDEX.md` exists, instruct consume via **`product-specs`** and cite **Related specs**. Soft-fail on miss; never invent behavior.
|
|
25
|
+
|
|
26
|
+
If the user/AC requests generation or bootstrap, or INDEX is missing **with** bootstrap AC / `/spec-start` intent: instruct **author mode** inside the same analyst step — load **`product-specs-authoring`** + skill **`spec-authoring`**. Authoring is **not** a separate pipeline agent. Handoff must list created paths + INDEX diff; human gate must approve generated specs before feature-developer.
|
|
27
|
+
|
|
28
|
+
|
|
22
29
|
## Human gate
|
|
23
30
|
|
|
24
31
|
After the analyst:
|
|
25
32
|
|
|
26
33
|
- Show the user links to `brief.md` and `decomposition.md`.
|
|
34
|
+
- Also ask them to check **Related specs** in `brief.md` when `docs/specs/INDEX.md` exists.
|
|
27
35
|
- Ask them to review and approve or send edits.
|
|
28
36
|
- To continue: `/task-continue <slug>` or `/feature-continue <slug>`.
|
|
29
37
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-start
|
|
3
|
+
description: Bootstrap or generate docs/specs (INDEX + page/feature) via task-analyst author mode. Optional docs-only path with human gate.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spec start — generate / bootstrap product specs
|
|
7
|
+
|
|
8
|
+
Routes intent **`spec-gen`** (or bootstrap) → **task-analyst** in **author mode** → human gate (`after:task-analyst`) → stop, or continue to feature-developer if the user asked to implement after.
|
|
9
|
+
|
|
10
|
+
## What to do
|
|
11
|
+
|
|
12
|
+
1. Extract description from arguments after `/spec-start` (domain, page/feature ids, sources).
|
|
13
|
+
2. Generate a **slug** (kebab-case, ≤48 chars), e.g. `spec-<domain>-<id>`.
|
|
14
|
+
3. Ensure `.claude/team/tasks/<slug>/` exists (Write artifacts; not Shell mkdir).
|
|
15
|
+
4. Write `.claude/team/active-task.json` → `{ "slug": "<slug>" }`.
|
|
16
|
+
5. Write minimal `pipeline.json`: task-analyst → (optional stop) → feature-developer only if user asked implement-after. **No separate spec-author agent.**
|
|
17
|
+
6. Invoke **task-analyst** with: author mode; load **`product-specs`** + **`product-specs-authoring`** + skill **`spec-authoring`**; Bootstrap if `docs/specs/` absent, else Generate.
|
|
18
|
+
7. Wait for analyst. **Do not** invoke feature-developer until human gate passes.
|
|
19
|
+
|
|
20
|
+
## Human gate
|
|
21
|
+
|
|
22
|
+
- Show created/updated spec paths and INDEX diff.
|
|
23
|
+
- Ask user to approve drafts (`status: draft` → promote) or send edits.
|
|
24
|
+
- Continue: `/task-continue <slug>` only after approval when implementation follows; otherwise stop after docs.
|
|
25
|
+
|
|
26
|
+
## Notes
|
|
27
|
+
|
|
28
|
+
- Greenfield invent of INDEX is allowed **only** via this command, explicit ask, or AC bootstrap language.
|
|
29
|
+
- mcp-ts: analyst-only author/sync (no tech-writer).
|
|
@@ -40,11 +40,14 @@ printf '%s\n' '{"status":"completed","action":"end_human_gate","activateNext":tr
|
|
|
40
40
|
|
|
41
41
|
| Agent | Read |
|
|
42
42
|
|-------|------|
|
|
43
|
-
| feature-developer | brief.md, decomposition.md, validation-report.md (if retry), review.md (if retry), architecture.md |
|
|
43
|
+
| feature-developer | brief.md (incl. **Related specs**), decomposition.md, validation-report.md (if retry), review.md (if retry), architecture.md; if `docs/specs/INDEX.md` exists → load **`product-specs`** |
|
|
44
44
|
| build-verifier | git diff, decomposition.md |
|
|
45
45
|
| code-reviewer | brief.md, validation-report.md, git diff |
|
|
46
46
|
| qa-tester | brief.md, decomposition.md, scope from pipeline step |
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## Product specs (docs/specs)
|
|
49
|
+
|
|
50
|
+
When the next agent is **feature-developer** (or other implementer): if `docs/specs/INDEX.md` exists or brief lists approved specs, instruct them to load **`product-specs`** and honor **Related specs** / approved generated specs as behavior SoT. Soft-fail on miss; never invent product behavior.
|
|
51
|
+
|
|
52
|
+
If analyst ran **author mode**, confirm human approved drafts before developer. Pass spec paths + INDEX diff in the handoff. No-op if INDEX is absent and no approved specs.
|
|
49
53
|
|
|
50
|
-
On human-gate resume, the hook action above appends `human_gate_ended` under the per-task lock **before** any new `attempt_started`. Agents must not calculate durations.
|
|
@@ -26,6 +26,8 @@ In Claude Code all `.md` files under `rules/` are **discovered recursively**. Bo
|
|
|
26
26
|
| `architecture-boundaries.mdc` | `architecture/boundaries.md` |
|
|
27
27
|
| `feature-delivery-workflow.mdc` | `architecture/feature-delivery.md` |
|
|
28
28
|
| `reference-features.mdc` | `architecture/reference-features.md` |
|
|
29
|
+
| `product-specs.mdc` | `architecture/product-specs.md` |
|
|
30
|
+
| `product-specs-authoring.mdc` | `architecture/product-specs-authoring.md` | Generate/Bootstrap; requestable |
|
|
29
31
|
| `module-public-api.mdc` | `architecture/module-public-api.md` |
|
|
30
32
|
| `di-dagger-feature-holders.mdc` | `architecture/di-dagger-feature-holders.md` |
|
|
31
33
|
| `networking-data.mdc` | `api-and-data/networking.md` |
|
|
@@ -39,3 +39,7 @@ Deliver features in layer order. Prefer neighboring `features/<name>/` analogs.
|
|
|
39
39
|
|
|
40
40
|
- Skill `feature-delivery` owns the end-to-end path; do not skip api/impl boundaries for speed.
|
|
41
41
|
- Local type names only in consumer `team/conventions.md`.
|
|
42
|
+
|
|
43
|
+
## Related
|
|
44
|
+
|
|
45
|
+
- Product behavior discovery: requestable **`product-specs`** (`docs/specs/INDEX.md`) — do not paste the discovery algorithm here.
|