---
name: issue
lang: go
domain: infra
version: "0.1.0"
algebraic: product
definition: |
  type Issue struct {
      ID       string   `yaml:"id"`
      Title    string   `yaml:"title"`
      Status   string   `yaml:"status"`
      Type     string   `yaml:"type"`
      Domain   []string `yaml:"domain"`
      Scope    string   `yaml:"scope"`
      Priority string   `yaml:"priority"`
      Depends  []string `yaml:"depends"`
      Blocks   []string `yaml:"blocks"`
      Related  []string `yaml:"related"`
      Tags     []string `yaml:"tags"`
      Flow     string   `yaml:"flow,omitempty"`
      Created  string   `yaml:"created"`
      Updated  string   `yaml:"updated"`
      FilePath string   `yaml:"-"`
      MtimeNs  int64    `yaml:"-"`
      Completed bool    `yaml:"-"`
  }
description: "Frontmatter YAML de un archivo dev/issues/*.md. Campos de runtime (FilePath, MtimeNs, Completed) no se serializan en YAML."
tags: [issue, frontmatter, yaml, kanban, dev-ux, registry]
uses_types: []
file_path: "functions/infra/issue_type.go"
---

## Ejemplo

```go
iss := infra.Issue{
    ID:       "0130",
    Title:    "Kanban C++ v2",
    Status:   "pendiente",
    Priority: "alta",
    Domain:   []string{"cpp-stack", "apps-infra"},
    Scope:    "multi-app",
    Tags:     []string{"kanban", "cpp"},
    Created:  "2026-05-22",
    Updated:  "2026-05-22",
}
```

## Notas

Producido por `parse_issue_md_go_infra`. Los campos `Depends`, `Blocks`, `Related`, `Tags`, `Domain` se deserializan como `[]string` — si el YAML los omite, quedan como slice vacio (no nil). `Completed` se deduce del path (contiene `/completed/`), no del frontmatter.
