{
  "title": "Website content inventory and review field specification",
  "version": "1.0",
  "date_representation": "ISO 8601 date-only YYYY-MM-DD",
  "fields": [
    {
      "name": "import_id",
      "type": "string",
      "required": true,
      "purpose": "Stable identifier for the source row; never reuse for a later import."
    },
    {
      "name": "source_name",
      "type": "enum/string",
      "required": true,
      "purpose": "CMS export, sitemap, spreadsheet, or other named origin."
    },
    {
      "name": "source_row_id",
      "type": "string",
      "required": true,
      "purpose": "Original source record identifier when available."
    },
    {
      "name": "raw_url",
      "type": "string",
      "required": true,
      "preserve_exactly": true,
      "purpose": "Original URL string as imported; do not normalize case, query, or trailing slash."
    },
    {
      "name": "reviewed_url",
      "type": "URL/string",
      "required": false,
      "purpose": "URL value explicitly reviewed by a person."
    },
    {
      "name": "canonical_candidate",
      "type": "URL/string",
      "required": false,
      "purpose": "Candidate to investigate; never an automatic redirect or merge instruction."
    },
    {
      "name": "content_title",
      "type": "string",
      "required": false,
      "purpose": "Human-readable page or asset name."
    },
    {
      "name": "owner_user_id",
      "type": "stable user ID",
      "required": true,
      "purpose": "Person responsible for the next review."
    },
    {
      "name": "format",
      "type": "enum/string",
      "required": false,
      "purpose": "Article, landing page, video, image, PDF, or local taxonomy."
    },
    {
      "name": "topic",
      "type": "string",
      "required": false,
      "purpose": "Subject or content area."
    },
    {
      "name": "last_review_date",
      "type": "date",
      "required": false,
      "purpose": "Date of the most recent human review."
    },
    {
      "name": "next_review_date",
      "type": "date",
      "required": true,
      "purpose": "Date used for overdue status against a declared as-of date."
    },
    {
      "name": "proposal",
      "type": "enum",
      "allowed": [
        "keep",
        "update",
        "archive"
      ],
      "required": false,
      "purpose": "Suggested next action; not a publication action."
    },
    {
      "name": "proposal_status",
      "type": "enum",
      "allowed": [
        "draft",
        "proposed",
        "approved",
        "rejected",
        "completed"
      ],
      "required": true,
      "purpose": "Review state for the proposal."
    },
    {
      "name": "action_receipt_id",
      "type": "string",
      "required": false,
      "purpose": "Reference returned by the separate authorized publishing or deletion workflow."
    },
    {
      "name": "duplicate_group_id",
      "type": "string",
      "required": false,
      "purpose": "Set only after reviewer confirmation; all source rows remain available."
    }
  ],
  "validation": [
    "Import IDs are unique and stable.",
    "Raw URL is immutable after import.",
    "Dates are valid date-only values.",
    "Duplicate grouping requires a reviewer decision.",
    "Archive remains a proposal until an external action receipt is recorded."
  ]
}
