{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Inventory",
"description": "Top-level inventory document.",
"type": "object",
"properties": {
"inventory": {
"description": "Inventory metadata.",
"$ref": "#/$defs/InventoryMeta"
},
"package": {
"description": "Packages in the inventory.",
"type": "array",
"default": [],
"items": {
"$ref": "#/$defs/Package"
}
}
},
"required": [
"inventory"
],
"$defs": {
"InventoryMeta": {
"description": "Inventory metadata.",
"type": "object",
"properties": {
"description": {
"description": "Human-readable description.",
"type": "string"
},
"labels": {
"description": "Labels/tags for the inventory (e.g. \"eln-extras\").",
"type": "array",
"default": [],
"items": {
"type": "string"
}
},
"maintainer": {
"description": "Maintainer (person or team).",
"type": "string"
},
"name": {
"description": "Inventory name (e.g. \"hyperscale-packages\").",
"type": "string"
},
"private_fields": {
"description": "Field names to strip from all packages on export.",
"type": "array",
"default": [],
"items": {
"type": "string"
}
},
"workloads": {
"description": "Workload definitions. Keys are workload identifiers; values\ncarry per-workload metadata for content-resolver export.\nPackages without explicit workloads inherit all keys.",
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/WorkloadMeta"
},
"default": {}
}
},
"required": [
"name",
"description",
"maintainer"
]
},
"Package": {
"description": "A package of interest (source RPM).",
"type": "object",
"properties": {
"arch_rpms": {
"description": "Architecture-specific RPMs.",
"type": [
"object",
"null"
],
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"archived_builds": {
"description": "Set when the package's upstream repo is archived but it\nstill has builds tagged into CBS release tags — recorded by\n`poi-tracker sync-gitlab --mark-unshipped`. The value records\nwhy. Unlike [`Self::unshipped`] the package still ships, so\nit is NOT skipped by triage/audit; instead it is a build\ncleanup candidate for `hs-relmon` to untag. Refreshed — in\nboth directions — each `--mark-unshipped` run.",
"type": [
"string",
"null"
]
},
"distros": {
"description": "Comma-separated distribution list for hs-relmon.",
"type": [
"string",
"null"
]
},
"file_issue": {
"description": "Whether to file GitLab issues for version updates.",
"type": [
"boolean",
"null"
]
},
"name": {
"description": "Source RPM name (required).",
"type": "string"
},
"poc": {
"description": "Point of contact (\"Name <email>\").",
"type": [
"string",
"null"
]
},
"priority": {
"description": "Bugzilla priority to apply to release-monitoring bugs for\nthis package. Overrides any workload-level\n`default_priority`. Set to `unspecified` to explicitly\nopt out of a workload default.",
"anyOf": [
{
"$ref": "#/$defs/Priority"
},
{
"type": "null"
}
]
},
"reason": {
"description": "Reason for tracking this package.",
"type": [
"string",
"null"
]
},
"repology_name": {
"description": "Name in Repology if different from RPM name.",
"type": [
"string",
"null"
]
},
"retired_on": {
"description": "Dist-git branches where this package is retired (a\n`dead.package` marker is present), as recorded by\n`poi-tracker triage-retired --mark`. Consumers skip checks\nthat can't succeed for a retired branch (e.g. auditing\nrawhide update requests). Refreshed — in both directions —\neach time `triage-retired --mark` checks the branch.",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"rpms": {
"description": "Binary RPM subpackages to track. If omitted, all are assumed.",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"task": {
"description": "Internal task/ticket reference.",
"type": [
"string",
"null"
]
},
"team": {
"description": "Team responsible.",
"type": [
"string",
"null"
]
},
"track": {
"description": "Which branch/repository to track (upstream, fedora-rawhide, etc.).",
"type": [
"string",
"null"
]
},
"unshipped": {
"description": "Set when the package is no longer shipped on any active\nbranch — the dist-git project is gone, it has no branch on\nan active release, or it is retired everywhere — as\nrecorded by `poi-tracker prune-retired`. The value records\nwhy. Most operations skip such packages; `triage-retired`\nstill processes them so remaining bugs get closed, and the\nsync commands' `--prune` preserves them (a fresh sync\nwould otherwise re-add retired packages, whose ACLs\nremain). Refreshed — in both directions — each time\n`prune-retired` checks the package.",
"type": [
"string",
"null"
]
}
},
"required": [
"name"
]
},
"Priority": {
"description": "A Bugzilla priority level. Variants are ordered from\nleast- to most-important so a `max(...)` across several\ncandidates picks the highest priority.",
"oneOf": [
{
"type": "string",
"enum": [
"low",
"medium",
"high",
"urgent"
]
},
{
"description": "Bugzilla's `unspecified` — the default a release-monitoring\nbug arrives at. Treated as \"don't manage\" when resolving\nfrom inventory; valid as an explicit override that opts\na package out of a workload-level default.",
"type": "string",
"const": "unspecified"
}
]
},
"WorkloadMeta": {
"description": "Per-workload metadata for content-resolver export.\n\nAll fields except `packages` are optional — omitted fields\nfall back to the inventory-level values.",
"type": "object",
"properties": {
"default_priority": {
"description": "Default Bugzilla priority for packages in this workload\nwhen they don't carry an explicit `priority`. The\nresolved priority is the max across all workloads listing\nthe package, so a package in both a \"best-effort\" and a\n\"security-sensitive\" workload picks up the latter.",
"anyOf": [
{
"$ref": "#/$defs/Priority"
},
{
"type": "null"
}
]
},
"description": {
"description": "Human-readable description.",
"type": [
"string",
"null"
]
},
"labels": {
"description": "Content-resolver labels.",
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"maintainer": {
"description": "Maintainer override.",
"type": [
"string",
"null"
]
},
"name": {
"description": "Workload name in content-resolver.",
"type": [
"string",
"null"
]
},
"packages": {
"description": "Source RPM names belonging to this workload.",
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}