changedOutput schema / properties / final_review_report / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "Structured synthesis stored with a review-bound orchestration session.",
- "properties": {
- "candidate_decisions": {
- "default": [],
- "description": "One host decision per submitted candidate; absent on legacy saved reports.",
- "items": {
- "additionalProperties": false,
- "description": "The host's disposition of one profile-local candidate.",
- "properties": {
- "evidence_refs": {
- "items": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "maxItems": 32,
- "minItems": 1,
- "type": "array"
- },
- "final_finding_id": {
- "anyOf": [
- {
- "pattern": "^F-[0-9]{2,}$",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "rationale": {
- "maxLength": 2000,
- "minLength": 1,
- "type": "string"
- },
- "source": {
- "additionalProperties": false,
- "description": "A profile-local candidate that contributed to one synthesized finding.",
- "properties": {
- "candidate_id": {
- "pattern": "^F-[0-9]{2,}$",
- "type": "string"
- },
- "profile": {
- "enum": [
- "pr_test_analyzer",
- "code_reviewer",
- "security_reviewer",
- "silent_failure_hunter",
- "code_explorer",
- "typescript_reviewer",
- "react_reviewer",
- "ruby_reviewer",
- "python_reviewer",
- "mobile_reviewer"
- ],
- "type": "string"
- }
- },
- "required": [
- "profile",
- "candidate_id"
- ],
- "type": "object"
- },
- "verdict": {
- "enum": [
- "confirmed",
- "rejected",
- "duplicate",
- "unverified"
- ],
- "type": "string"
- }
- },
- "required": [
- "source",
- "verdict",
- "rationale",
- "evidence_refs"
- ],
- "type": "object"
- },
- "maxItems": 1000,
- "type": "array"
- },
- "coverage_gaps": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "evidence_refs": {
- "default": [],
- "items": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "maxItems": 32,
- "type": "array"
- },
- "text": {
- "maxLength": 2000,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "type": "array"
- },
- "finding_candidates": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "affected_area": {
- "anyOf": [
- {
- "maxLength": 256,
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null,
- "description": "Affected user flow or system area, when supported by the evidence."
- },
- "candidate_id": {
- "pattern": "^F-[0-9]{2,}$",
- "type": "string"
- },
- "confidence": {
- "enum": [
- "high",
- "medium",
- "low"
- ],
- "type": "string"
- },
- "description": {
- "maxLength": 5000,
- "minLength": 1,
- "type": "string"
- },
- "evidence_refs": {
- "items": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "maxItems": 32,
- "minItems": 1,
- "type": "array"
- },
- "impact": {
- "anyOf": [
- {
- "maxLength": 2000,
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null,
- "description": "Concrete effect on users or contracts; severity remains host-owned."
- },
- "severity": {
- "anyOf": [
- {
- "enum": [
- "high",
- "medium",
- "low"
- ],
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null,
- "description": "Impact severity selected by the host for a confirmed finding."
- },
- "source_candidates": {
- "default": [],
- "description": "Required for new final reports; empty only on reports persisted before source linkage.",
- "items": {
- "additionalProperties": false,
- "description": "A profile-local candidate that contributed to one synthesized finding.",
- "properties": {
- "candidate_id": {
- "pattern": "^F-[0-9]{2,}$",
- "type": "string"
- },
- "profile": {
- "enum": [
- "pr_test_analyzer",
- "code_reviewer",
- "security_reviewer",
- "silent_failure_hunter",
- "code_explorer",
- "typescript_reviewer",
- "react_reviewer",
- "ruby_reviewer",
- "python_reviewer",
- "mobile_reviewer"
- ],
- "type": "string"
- }
- },
- "required": [
- "profile",
- "candidate_id"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "source_locations": {
- "default": [],
- "description": "Precise source locations supporting this candidate when available.",
- "items": {
- "additionalProperties": false,
- "description": "A stable source locator for a finding candidate.",
- "properties": {
- "end_line": {
- "anyOf": [
- {
- "minimum": 1,
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "path": {
- "maxLength": 1024,
- "minLength": 1,
- "type": "string"
- },
- "start_line": {
- "minimum": 1,
- "type": "integer"
- }
- },
- "required": [
- "path",
- "start_line"
- ],
- "type": "object"
- },
- "maxItems": 20,
- "type": "array"
- },
- "source_profiles": {
- "items": {
- "enum": [
- "pr_test_analyzer",
- "code_reviewer",
- "security_reviewer",
- "silent_failure_hunter",
- "code_explorer",
- "typescript_reviewer",
- "react_reviewer",
- "ruby_reviewer",
- "python_reviewer",
- "mobile_reviewer"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "title": {
- "maxLength": 256,
- "minLength": 1,
- "type": "string"
- },
- "verification_gap": {
- "maxLength": 2000,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "candidate_id",
- "title",
- "description",
- "confidence",
- "verification_gap",
- "evidence_refs",
- "source_profiles"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "type": "array"
- },
- "profiles_reviewed": {
- "items": {
- "enum": [
- "pr_test_analyzer",
- "code_reviewer",
- "security_reviewer",
- "silent_failure_hunter",
- "code_explorer",
- "typescript_reviewer",
- "react_reviewer",
- "ruby_reviewer",
- "python_reviewer",
- "mobile_reviewer"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "summary": {
- "maxLength": 5000,
- "minLength": 1,
- "type": "string"
- },
- "unverified": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "evidence_refs": {
- "default": [],
- "items": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "maxItems": 32,
- "type": "array"
- },
- "text": {
- "maxLength": 2000,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "text"
- ],
- "type": "object"
- },
- "maxItems": 100,
- "type": "array"
- }
- },
- "required": [
- "summary",
- "profiles_reviewed"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "Structured synthesis stored with a review-bound orchestration session.",
+ "properties": {
+ "candidate_decisions": {
+ "default": [],
+ "description": "One host decision per submitted candidate; absent on legacy saved reports.",
+ "items": {
+ "additionalProperties": false,
+ "description": "The host's disposition of one profile-local candidate.",
+ "properties": {
+ "evidence_refs": {
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 32,
+ "minItems": 1,
+ "type": "array"
+ },
+ "final_finding_id": {
+ "anyOf": [
+ {
+ "pattern": "^F-[0-9]{2,}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "rationale": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "refutation": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "description": "Host's evidence-backed assessment, not a vote or proof of another agent's execution.",
+ "properties": {
+ "candidate_sha256": {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "context_sha256": {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "evidence_refs": {
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 32,
+ "minItems": 1,
+ "type": "array"
+ },
+ "rationale": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "refuted",
+ "not_refuted",
+ "unverified"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "context_sha256",
+ "candidate_sha256",
+ "status",
+ "rationale",
+ "evidence_refs"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "source": {
+ "additionalProperties": false,
+ "description": "A profile-local candidate that contributed to one synthesized finding.",
+ "properties": {
+ "candidate_id": {
+ "pattern": "^F-[0-9]{2,}$",
+ "type": "string"
+ },
+ "profile": {
+ "enum": [
+ "pr_test_analyzer",
+ "code_reviewer",
+ "security_reviewer",
+ "silent_failure_hunter",
+ "code_explorer",
+ "typescript_reviewer",
+ "react_reviewer",
+ "ruby_reviewer",
+ "python_reviewer",
+ "mobile_reviewer"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "profile",
+ "candidate_id"
+ ],
+ "type": "object"
+ },
+ "verdict": {
+ "enum": [
+ "confirmed",
+ "rejected",
+ "duplicate",
+ "unverified"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "verdict",
+ "rationale",
+ "evidence_refs"
+ ],
+ "type": "object"
+ },
+ "maxItems": 1000,
+ "type": "array"
+ },
+ "coverage_gaps": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "evidence_refs": {
+ "default": [],
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 32,
+ "type": "array"
+ },
+ "text": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "type": "array"
+ },
+ "finding_candidates": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "affected_area": {
+ "anyOf": [
+ {
+ "maxLength": 256,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Affected user flow or system area, when supported by the evidence."
+ },
+ "candidate_id": {
+ "pattern": "^F-[0-9]{2,}$",
+ "type": "string"
+ },
+ "confidence": {
+ "enum": [
+ "high",
+ "medium",
+ "low"
+ ],
+ "type": "string"
+ },
+ "description": {
+ "maxLength": 5000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "evidence_refs": {
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 32,
+ "minItems": 1,
+ "type": "array"
+ },
+ "failure_condition": {
+ "anyOf": [
+ {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Specific preconditions that make the alleged failure occur."
+ },
+ "flip_condition": {
+ "anyOf": [
+ {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Concrete source/contract evidence that would refute this candidate."
+ },
+ "impact": {
+ "anyOf": [
+ {
+ "maxLength": 2000,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Concrete effect on users or contracts; severity remains host-owned."
+ },
+ "severity": {
+ "anyOf": [
+ {
+ "enum": [
+ "high",
+ "medium",
+ "low"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Impact severity selected by the host for a confirmed finding."
+ },
+ "source_candidates": {
+ "default": [],
+ "description": "Required for new final reports; empty only on reports persisted before source linkage.",
+ "items": {
+ "additionalProperties": false,
+ "description": "A profile-local candidate that contributed to one synthesized finding.",
+ "properties": {
+ "candidate_id": {
+ "pattern": "^F-[0-9]{2,}$",
+ "type": "string"
+ },
+ "profile": {
+ "enum": [
+ "pr_test_analyzer",
+ "code_reviewer",
+ "security_reviewer",
+ "silent_failure_hunter",
+ "code_explorer",
+ "typescript_reviewer",
+ "react_reviewer",
+ "ruby_reviewer",
+ "python_reviewer",
+ "mobile_reviewer"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "profile",
+ "candidate_id"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "source_locations": {
+ "default": [],
+ "description": "Precise source locations supporting this candidate when available.",
+ "items": {
+ "additionalProperties": false,
+ "description": "A stable source locator for a finding candidate.",
+ "properties": {
+ "end_line": {
+ "anyOf": [
+ {
+ "minimum": 1,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "path": {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ "start_line": {
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "path",
+ "start_line"
+ ],
+ "type": "object"
+ },
+ "maxItems": 20,
+ "type": "array"
+ },
+ "source_profiles": {
+ "items": {
+ "enum": [
+ "pr_test_analyzer",
+ "code_reviewer",
+ "security_reviewer",
+ "silent_failure_hunter",
+ "code_explorer",
+ "typescript_reviewer",
+ "react_reviewer",
+ "ruby_reviewer",
+ "python_reviewer",
+ "mobile_reviewer"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "title": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "verification_gap": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "candidate_id",
+ "title",
+ "description",
+ "confidence",
+ "verification_gap",
+ "evidence_refs",
+ "source_profiles"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "type": "array"
+ },
+ "profiles_reviewed": {
+ "items": {
+ "enum": [
+ "pr_test_analyzer",
+ "code_reviewer",
+ "security_reviewer",
+ "silent_failure_hunter",
+ "code_explorer",
+ "typescript_reviewer",
+ "react_reviewer",
+ "ruby_reviewer",
+ "python_reviewer",
+ "mobile_reviewer"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "review_rules_sha256": {
+ "anyOf": [
+ {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "summary": {
+ "maxLength": 5000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "unverified": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "evidence_refs": {
+ "default": [],
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 32,
+ "type": "array"
+ },
+ "text": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "type": "array"
+ }
+ },
+ "required": [
+ "summary",
+ "profiles_reviewed"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]
changedOutput schema / properties / profile_reports / items / properties / execution_metrics / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "Optional host-reported timing and token counts for one completed profile.",
- "properties": {
- "attempt_count": {
- "default": 1,
- "maximum": 4,
- "minimum": 1,
- "type": "integer"
- },
- "completed_at": {
- "format": "date-time",
- "type": "string"
- },
- "input_tokens": {
- "anyOf": [
- {
- "minimum": 0,
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "output_tokens": {
- "anyOf": [
- {
- "minimum": 0,
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "started_at": {
- "format": "date-time",
- "type": "string"
- }
- },
- "required": [
- "started_at",
- "completed_at"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "Optional host-reported timing and token counts for one completed profile.",
+ "properties": {
+ "attempt_count": {
+ "default": 1,
+ "maximum": 4,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "attempts": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "description": "One actual executor call; no exception bodies or source content.",
+ "properties": {
+ "attempt": {
+ "maximum": 4,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "cached_input_tokens": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "completed_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "executor_seconds": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "input_tokens": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "model_seconds": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "outcome": {
+ "enum": [
+ "completed",
+ "retryable_error",
+ "timeout",
+ "failed",
+ "cancelled"
+ ],
+ "type": "string"
+ },
+ "output_tokens": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "preparation_seconds": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "profile": {
+ "enum": [
+ "pr_test_analyzer",
+ "code_reviewer",
+ "security_reviewer",
+ "silent_failure_hunter",
+ "code_explorer",
+ "typescript_reviewer",
+ "react_reviewer",
+ "ruby_reviewer",
+ "python_reviewer",
+ "mobile_reviewer"
+ ],
+ "type": "string"
+ },
+ "queue_seconds": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "started_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "validation_seconds": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ }
+ },
+ "required": [
+ "profile",
+ "attempt",
+ "outcome",
+ "started_at",
+ "completed_at",
+ "queue_seconds",
+ "executor_seconds"
+ ],
+ "type": "object"
+ },
+ "maxItems": 4,
+ "type": "array"
+ },
+ "completed_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "input_tokens": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "output_tokens": {
+ "anyOf": [
+ {
+ "minimum": 0,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "started_at": {
+ "format": "date-time",
+ "type": "string"
+ }
+ },
+ "required": [
+ "started_at",
+ "completed_at"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]
changedOutput schema / properties / review_context / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "Immutable identifiers for the exact source and evidence packet reviewed.",
- "properties": {
- "base_sha": {
- "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
- "type": "string"
- },
- "changed_files": {
- "items": {
- "maxLength": 1024,
- "minLength": 1,
- "type": "string"
- },
- "maxItems": 500,
- "minItems": 1,
- "type": "array"
- },
- "diff_sha256": {
- "pattern": "(?i)^[a-f0-9]{64}$",
- "type": "string"
- },
- "evidence_packet_sha256": {
- "pattern": "(?i)^[a-f0-9]{64}$",
- "type": "string"
- },
- "evidence_refs": {
- "items": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "maxItems": 1000,
- "minItems": 1,
- "type": "array"
- },
- "evidence_registry": {
- "default": [],
- "description": "Optional complete ref-to-source registry with revision, coordinates and hashes.",
- "items": {
- "additionalProperties": false,
- "description": "Metadata for one evidence item; raw content remains with the host.",
- "properties": {
- "end_line": {
- "anyOf": [
- {
- "minimum": 1,
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "evidence_ref": {
- "maxLength": 128,
- "minLength": 1,
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
- "type": "string"
- },
- "kind": {
- "enum": [
- "source",
- "diff",
- "requirement",
- "runtime",
- "other"
- ],
- "type": "string"
- },
- "locator": {
- "anyOf": [
- {
- "maxLength": 1024,
- "minLength": 1,
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "path": {
- "anyOf": [
- {
- "maxLength": 1024,
- "minLength": 1,
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "revision": {
- "anyOf": [
- {
- "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- },
- "sha256": {
- "pattern": "(?i)^[a-f0-9]{64}$",
- "type": "string"
- },
- "start_line": {
- "anyOf": [
- {
- "minimum": 1,
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "default": null
- }
- },
- "required": [
- "evidence_ref",
- "kind",
- "sha256"
- ],
- "type": "object"
- },
- "maxItems": 1000,
- "type": "array"
- },
- "head_sha": {
- "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
- "type": "string"
- },
- "repository": {
- "maxLength": 512,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "repository",
- "base_sha",
- "head_sha",
- "diff_sha256",
- "evidence_packet_sha256",
- "changed_files",
- "evidence_refs"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "Immutable identifiers for the exact source and evidence packet reviewed.",
+ "properties": {
+ "base_sha": {
+ "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
+ "type": "string"
+ },
+ "changed_files": {
+ "items": {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 500,
+ "minItems": 1,
+ "type": "array"
+ },
+ "diff_sha256": {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "evidence_packet_sha256": {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "evidence_refs": {
+ "items": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "maxItems": 1000,
+ "minItems": 1,
+ "type": "array"
+ },
+ "evidence_registry": {
+ "default": [],
+ "description": "Optional complete ref-to-source registry with revision, coordinates and hashes.",
+ "items": {
+ "additionalProperties": false,
+ "description": "Metadata for one evidence item; raw content remains with the host.",
+ "properties": {
+ "end_line": {
+ "anyOf": [
+ {
+ "minimum": 1,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "evidence_ref": {
+ "maxLength": 128,
+ "minLength": 1,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
+ "type": "string"
+ },
+ "kind": {
+ "enum": [
+ "source",
+ "diff",
+ "requirement",
+ "runtime",
+ "other"
+ ],
+ "type": "string"
+ },
+ "locator": {
+ "anyOf": [
+ {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "path": {
+ "anyOf": [
+ {
+ "maxLength": 1024,
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "revision": {
+ "anyOf": [
+ {
+ "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "sha256": {
+ "pattern": "(?i)^[a-f0-9]{64}$",
+ "type": "string"
+ },
+ "start_line": {
+ "anyOf": [
+ {
+ "minimum": 1,
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ }
+ },
+ "required": [
+ "evidence_ref",
+ "kind",
+ "sha256"
+ ],
+ "type": "object"
+ },
+ "maxItems": 1000,
+ "type": "array"
+ },
+ "head_sha": {
+ "pattern": "(?i)^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
+ "type": "string"
+ },
+ "repository": {
+ "maxLength": 512,
+ "minLength": 1,
+ "type": "string"
+ },
+ "review_rules": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "rules": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "condition": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "kind": {
+ "enum": [
+ "raise",
+ "guard"
+ ],
+ "type": "string"
+ },
+ "paths": {
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 32,
+ "minItems": 1,
+ "type": "array"
+ },
+ "rationale": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ },
+ "rule_id": {
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$",
+ "type": "string"
+ },
+ "text": {
+ "maxLength": 2000,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "rule_id",
+ "kind",
+ "paths",
+ "condition",
+ "text",
+ "rationale"
+ ],
+ "type": "object"
+ },
+ "maxItems": 100,
+ "type": "array"
+ },
+ "schema_version": {
+ "const": 1,
+ "default": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ }
+ },
+ "required": [
+ "repository",
+ "base_sha",
+ "head_sha",
+ "diff_sha256",
+ "evidence_packet_sha256",
+ "changed_files",
+ "evidence_refs"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]