govctl 0.8.2

Project governance CLI for RFC, ADR, and Work Item management
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Work Item Specification",
  "description": "JSON Schema for Work Item TOML artifacts after parsing and normalization",
  "type": "object",
  "required": ["govctl", "content"],
  "properties": {
    "govctl": {
      "type": "object",
      "required": ["id", "title", "status"],
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^WI-\\d{4}-\\d{2}-\\d{2}-(?:[a-f0-9]{4}(?:-\\d{3})?|\\d{3})$"
        },
        "title": {
          "type": "string",
          "minLength": 1
        },
        "status": {
          "type": "string",
          "enum": ["queue", "active", "done", "cancelled"]
        },
        "created": {
          "type": "string",
          "format": "date"
        },
        "started": {
          "type": "string",
          "format": "date"
        },
        "completed": {
          "type": "string",
          "format": "date"
        },
        "refs": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(RFC-\\d{4}(?::C-[A-Z][A-Z0-9-]*)?|ADR-\\d{4}|WI-\\d{4}-\\d{2}-\\d{2}-(?:[a-f0-9]{4}(?:-\\d{3})?|\\d{3}))$"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9-]*$"
          }
        },
        "schema": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "content": {
      "type": "object",
      "required": ["description"],
      "properties": {
        "description": {
          "type": "string"
        },
        "journal": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["date", "content"],
            "properties": {
              "date": {
                "type": "string",
                "format": "date"
              },
              "scope": {
                "type": "string"
              },
              "content": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          }
        },
        "acceptance_criteria": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["text"],
            "properties": {
              "text": {
                "type": "string",
                "minLength": 1
              },
              "status": {
                "type": "string",
                "enum": ["pending", "done", "cancelled"]
              },
              "category": {
                "type": "string",
                "enum": [
                  "added",
                  "changed",
                  "deprecated",
                  "removed",
                  "fixed",
                  "security",
                  "chore"
                ]
              }
            },
            "additionalProperties": false
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "verification": {
      "type": "object",
      "properties": {
        "required_guards": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^GUARD-[A-Z][A-Z0-9-]*$"
          },
          "uniqueItems": true
        },
        "waivers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["guard", "reason"],
            "properties": {
              "guard": {
                "type": "string",
                "pattern": "^GUARD-[A-Z][A-Z0-9-]*$"
              },
              "reason": {
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}