{
  "name": "generate-go-feature",
  "description": "Generate a multi-file Go backend feature bundle for Go service projects.",
  "origin": "EOC",
  "level": "L3",
  "languages": [
    "go"
  ],
  "frameworks": [
    "go",
    "gin",
    "chi",
    "fiber"
  ],
  "triggers": [
    "generate go feature",
    "add go module",
    "create go feature"
  ],
  "inputs": [
    {
      "name": "name",
      "required": true
    },
    {
      "name": "subject",
      "required": true
    },
    {
      "name": "feature_kind",
      "default": "crud"
    },
    {
      "name": "with_repository",
      "default": true
    },
    {
      "name": "with_test",
      "default": true
    },
    {
      "name": "with_docs",
      "default": true
    }
  ],
  "actions": [
    {
      "id": "go-feature",
      "type": "feature_bundle",
      "when": {
        "runtime": "go"
      },
      "plan": {
        "strategy": "auto",
        "dependency_graph": {
          "controller": [
            "service"
          ],
          "service": [
            "repository",
            "schema"
          ],
          "repository": [
            "schema"
          ],
          "schema": [],
          "route": [
            "controller"
          ],
          "test": [
            "route",
            "service"
          ],
          "docs": [
            "route"
          ],
          "integration": [
            "route",
            "service",
            "repository",
            "schema"
          ]
        }
      },
      "modules": [
        {
          "id": "controller",
          "template": "feature/controller.go.tpl",
          "output": "{{paths.controller}}/{{controller_filename}}",
          "primary": true
        },
        {
          "id": "service",
          "template": "feature/service.go.tpl",
          "output": "{{paths.service}}/{{service_filename}}"
        },
        {
          "id": "repository",
          "template": "feature/repository.go.tpl",
          "output": "{{paths.repository}}/{{repository_filename}}",
          "condition": "with_repository"
        },
        {
          "id": "schema",
          "template": "feature/schema.go.tpl",
          "output": "{{paths.schema}}/{{schema_filename}}"
        },
        {
          "id": "route",
          "template": "feature/route.go.tpl",
          "output": "{{paths.route}}/{{route_filename}}"
        },
        {
          "id": "test",
          "template": "feature/test.go.tpl",
          "output": "{{paths.test}}/{{test_filename}}",
          "condition": "with_test"
        },
        {
          "id": "docs",
          "template": "feature/api.md.tpl",
          "output": "{{paths.docs}}/{{docs_filename}}",
          "condition": "with_docs"
        },
        {
          "id": "integration",
          "template": "feature/integration.md.tpl",
          "output": ".opencode/feature-bundles/{{kebab_name}}.integration.md"
        }
      ],
      "updates": [
        {
          "type": "ensure_block",
          "file": "{{paths.docs_index}}",
          "content": "- [{{subject}}](./{{docs_filename}}) \u2014 generated feature",
          "create_if_missing": true
        }
      ]
    }
  ],
  "verify": [
    "go build ./...",
    "go test ./..."
  ],
  "task_family": "feature"
}
