67 lines
3.0 KiB
JSON
67 lines
3.0 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://jyotisha.chat/contracts/yinduzhanxing-import-manifest.v1.schema.json",
|
|
"title": "Yinduzhanxing one-way import manifest",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version", "source_repository", "source_commit", "source_tree_hash",
|
|
"source_mode", "target_repository", "target_base_commit", "policy_version",
|
|
"generated_at", "mirror_files", "semantic_merge_files", "protected_rejections",
|
|
"tests_run", "privacy_scan", "operator_review_required"
|
|
],
|
|
"properties": {
|
|
"schema_version": {"const": 1},
|
|
"source_repository": {"type": "string", "minLength": 1},
|
|
"source_commit": {"type": "string", "pattern": "^(unknown|[0-9a-f]{40})$"},
|
|
"source_tree_hash": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
|
"source_mode": {"enum": ["git", "snapshot"]},
|
|
"target_repository": {"type": "string", "minLength": 1},
|
|
"target_base_commit": {"type": "string", "pattern": "^[0-9a-f]{40}$"},
|
|
"policy_version": {"const": 2},
|
|
"generated_at": {"type": "string", "format": "date-time"},
|
|
"mirror_files": {"type": "array", "items": {"$ref": "#/$defs/file"}},
|
|
"semantic_merge_files": {"type": "array", "items": {"$ref": "#/$defs/semantic"}},
|
|
"protected_rejections": {"type": "array", "items": {"type": "string"}},
|
|
"tests_run": {"type": "array", "items": {"type": "string"}},
|
|
"privacy_scan": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["status", "scanned_files", "rejections"],
|
|
"properties": {
|
|
"status": {"enum": ["pass", "rejected"]},
|
|
"scanned_files": {"type": "integer", "minimum": 0},
|
|
"rejections": {"type": "array", "items": {"type": "string"}}
|
|
}
|
|
},
|
|
"operator_review_required": {"type": "boolean"}
|
|
},
|
|
"$defs": {
|
|
"file": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["source", "target", "status", "source_sha256", "target_sha256_before", "target_sha256_after", "license"],
|
|
"properties": {
|
|
"source": {"type": "string"}, "target": {"type": "string"},
|
|
"status": {"enum": ["new", "update", "unchanged", "applied"]},
|
|
"source_sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
|
"target_sha256_before": {"type": ["string", "null"], "pattern": "^[0-9a-f]{64}$"},
|
|
"target_sha256_after": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
|
"license": {"type": "string"}
|
|
}
|
|
},
|
|
"semantic": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["path", "status", "source_sha256", "target_sha256", "diff_summary"],
|
|
"properties": {
|
|
"path": {"type": "string"},
|
|
"status": {"enum": ["unchanged", "source_missing", "target_missing", "review_required"]},
|
|
"source_sha256": {"type": ["string", "null"], "pattern": "^[0-9a-f]{64}$"},
|
|
"target_sha256": {"type": ["string", "null"], "pattern": "^[0-9a-f]{64}$"},
|
|
"diff_summary": {"type": "string"}
|
|
}
|
|
}
|
|
}
|
|
}
|