@reviewsensei/cli-win32-x64 0.1.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/bin/_internal/base_library.zip +0 -0
  2. package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +1 -1
  3. package/bin/_internal/review_sensei/default_stages/01-default-review.json +1 -1
  4. package/bin/_internal/review_sensei/schemas/blocker-admission.schema.json +97 -0
  5. package/bin/_internal/review_sensei/schemas/canary-binding.schema.json +22 -0
  6. package/bin/_internal/review_sensei/schemas/candidate-finding.schema.json +59 -0
  7. package/bin/_internal/review_sensei/schemas/channel-promotion.schema.json +30 -0
  8. package/bin/_internal/review_sensei/schemas/compatibility-manifest.schema.json +44 -0
  9. package/bin/_internal/review_sensei/schemas/convergence-sequence-report.schema.json +72 -0
  10. package/bin/_internal/review_sensei/schemas/conversation-reply.schema.json +6 -1
  11. package/bin/_internal/review_sensei/schemas/coverage-manifest.schema.json +99 -0
  12. package/bin/_internal/review_sensei/schemas/evaluation-report.schema.json +17 -0
  13. package/bin/_internal/review_sensei/schemas/later-finding-classification.schema.json +81 -0
  14. package/bin/_internal/review_sensei/schemas/learning-entry.schema.json +11 -1
  15. package/bin/_internal/review_sensei/schemas/learning-feedback.schema.json +56 -0
  16. package/bin/_internal/review_sensei/schemas/openrouter-qualification.schema.json +108 -0
  17. package/bin/_internal/review_sensei/schemas/promotion-record.schema.json +39 -0
  18. package/bin/_internal/review_sensei/schemas/recovery-artifact.schema.json +26 -0
  19. package/bin/_internal/review_sensei/schemas/review-comment.schema.json +22 -3
  20. package/bin/_internal/review_sensei/schemas/review-convergence-policy.schema.json +49 -0
  21. package/bin/_internal/review_sensei/schemas/review-result.schema.json +109 -3
  22. package/bin/_internal/review_sensei/schemas/review-round-decision.schema.json +58 -0
  23. package/bin/_internal/review_sensei/schemas/review-stage.schema.json +13 -0
  24. package/bin/_internal/review_sensei/schemas/review-transaction.schema.json +71 -0
  25. package/bin/_internal/review_sensei/schemas/run-outcome.schema.json +29 -0
  26. package/bin/_internal/review_sensei/schemas/session-record.schema.json +312 -0
  27. package/bin/_internal/review_sensei/schemas/stage.schema.json +6 -0
  28. package/bin/_internal/review_sensei/schemas/verification-result.schema.json +14 -0
  29. package/bin/_internal/review_sensei/schemas/verification-scope.schema.json +80 -0
  30. package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/METADATA +208 -56
  31. package/bin/_internal/review_sensei-0.6.0.dist-info/RECORD +169 -0
  32. package/bin/review-sensei.exe +0 -0
  33. package/package.json +1 -1
  34. package/bin/_internal/review_sensei-0.1.1.dist-info/RECORD +0 -103
  35. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/INSTALLER +0 -0
  36. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/REQUESTED +0 -0
  37. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/WHEEL +0 -0
  38. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/direct_url.json +0 -0
  39. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/entry_points.txt +0 -0
  40. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/licenses/LICENSE +0 -0
  41. /package/bin/_internal/{review_sensei-0.1.1.dist-info → review_sensei-0.6.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/learning-feedback.schema.json",
4
+ "title": "ReviewSensei learning feedback v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "records"],
8
+ "properties": {
9
+ "schema_version": {"const": "1.0"},
10
+ "records": {
11
+ "type": "array",
12
+ "maxItems": 256,
13
+ "items": {
14
+ "type": "object",
15
+ "additionalProperties": false,
16
+ "required": ["learning_id", "finding_id", "outcome"],
17
+ "properties": {
18
+ "learning_id": {
19
+ "type": "string",
20
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
21
+ },
22
+ "finding_id": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "maxLength": 256,
26
+ "pattern": "\\S",
27
+ "description": "Must contain a non-whitespace character. maxLength counts characters; the loader additionally enforces an authoritative 256 UTF-8 byte bound, so a multibyte value can satisfy this schema and still be rejected."
28
+ },
29
+ "outcome": {
30
+ "type": "string",
31
+ "enum": ["useful", "incorrect", "obsolete", "unverified"]
32
+ },
33
+ "note": {
34
+ "type": "string",
35
+ "minLength": 1,
36
+ "maxLength": 512,
37
+ "pattern": "\\S",
38
+ "description": "Must contain a non-whitespace character. maxLength counts characters; the loader additionally enforces an authoritative 512 UTF-8 byte bound, so a multibyte value can satisfy this schema and still be rejected."
39
+ }
40
+ }
41
+ }
42
+ }
43
+ },
44
+ "examples": [
45
+ {
46
+ "schema_version": "1.0",
47
+ "records": [
48
+ {
49
+ "learning_id": "provider-boundary",
50
+ "finding_id": "finding-1",
51
+ "outcome": "useful"
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/openrouter-qualification.schema.json",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "schema_version",
8
+ "engine_digest",
9
+ "prompt_digest",
10
+ "configuration_digest",
11
+ "corpus_digest",
12
+ "provider",
13
+ "model",
14
+ "observed_revision",
15
+ "run_count",
16
+ "evaluated_at",
17
+ "reproducibility",
18
+ "status",
19
+ "rollback_decision",
20
+ "qualification_target",
21
+ "evidence_references",
22
+ "limitations"
23
+ ],
24
+ "properties": {
25
+ "schema_version": {"const": "1.0"},
26
+ "engine_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
27
+ "prompt_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
28
+ "configuration_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
29
+ "corpus_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
30
+ "provider": {"const": "openrouter"},
31
+ "model": {"type": "string", "minLength": 1, "maxLength": 256},
32
+ "observed_revision": {"type": "string", "minLength": 1, "maxLength": 256},
33
+ "run_count": {"type": "integer", "minimum": 1},
34
+ "evaluated_at": {"type": "string", "minLength": 1, "maxLength": 64},
35
+ "reproducibility": {"type": "object", "minProperties": 1, "maxProperties": 32},
36
+ "status": {"enum": ["supported", "insufficient", "unsupported"]},
37
+ "rollback_decision": {"enum": ["revert-to-baseline", "hold", "none"]},
38
+ "qualification_target": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": [
42
+ "provider",
43
+ "model",
44
+ "upstream_provider",
45
+ "base_url",
46
+ "routing_policy_digest"
47
+ ],
48
+ "properties": {
49
+ "provider": {"const": "openrouter"},
50
+ "model": {"type": "string", "minLength": 1, "maxLength": 256},
51
+ "upstream_provider": {"type": "string", "minLength": 1, "maxLength": 128},
52
+ "base_url": {"type": "string", "minLength": 1, "maxLength": 256},
53
+ "routing_policy_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
54
+ }
55
+ },
56
+ "evidence_references": {
57
+ "type": "array",
58
+ "items": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
59
+ "maxItems": 32
60
+ },
61
+ "evidence_reference_kind": {
62
+ "description": "What evidence_references are digests of. Digests are taken over the retained report bytes; a digest of a re-serialized document is not interchangeable.",
63
+ "const": "retained-bytes-v1"
64
+ },
65
+ "limitations": {
66
+ "type": "array",
67
+ "items": {"type": "string", "minLength": 1, "maxLength": 512},
68
+ "maxItems": 32
69
+ }
70
+ },
71
+ "allOf": [
72
+ {
73
+ "if": {"properties": {"status": {"const": "supported"}}, "required": ["status"]},
74
+ "then": {
75
+ "properties": {"evidence_references": {"minItems": 3}},
76
+ "required": ["evidence_reference_kind"]
77
+ }
78
+ }
79
+ ],
80
+ "examples": [
81
+ {
82
+ "schema_version": "1.0",
83
+ "engine_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
84
+ "prompt_digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
85
+ "configuration_digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
86
+ "corpus_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
87
+ "provider": "openrouter",
88
+ "model": "anthropic/claude-3.5-haiku",
89
+ "observed_revision": "pending-operator-live-evidence",
90
+ "run_count": 1,
91
+ "evaluated_at": "2026-09-16T00:00:00Z",
92
+ "reproducibility": {"temperature": 0},
93
+ "status": "insufficient",
94
+ "rollback_decision": "hold",
95
+ "qualification_target": {
96
+ "provider": "openrouter",
97
+ "model": "anthropic/claude-3.5-haiku",
98
+ "upstream_provider": "anthropic",
99
+ "base_url": "https://openrouter.ai/api/v1",
100
+ "routing_policy_digest": "97ee4e2219c11ea18a569068db74dbcce5eb8df5366eb8ffeb56ec98b81f11dd"
101
+ },
102
+ "evidence_references": [],
103
+ "limitations": [
104
+ "Harness-only record; live operator evidence is required before supported status."
105
+ ]
106
+ }
107
+ ]
108
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/promotion-record.schema.json",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schema_version", "engine_digest", "prompt_digest", "configuration_digest", "corpus_digest", "provider", "model", "observed_revision", "run_count", "evaluated_at", "reproducibility", "status", "rollback_decision"],
7
+ "properties": {
8
+ "schema_version": {"const": "1.0"},
9
+ "engine_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
10
+ "prompt_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
11
+ "configuration_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
12
+ "corpus_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
13
+ "provider": {"type": "string", "minLength": 1, "maxLength": 128},
14
+ "model": {"type": "string", "minLength": 1, "maxLength": 256},
15
+ "observed_revision": {"type": "string", "minLength": 1, "maxLength": 256},
16
+ "run_count": {"type": "integer", "minimum": 1, "description": "At least one observed run is required for every status; supported promotions require at least three."},
17
+ "evaluated_at": {"type": "string", "minLength": 1, "maxLength": 64},
18
+ "reproducibility": {"type": "object", "minProperties": 1, "maxProperties": 32, "description": "Reproducibility settings are required for every status."},
19
+ "status": {"enum": ["supported", "insufficient", "unsupported"], "description": "Only supported with at least three runs can authorize promotion."},
20
+ "rollback_decision": {"enum": ["revert-to-baseline", "hold", "none"]}
21
+ },
22
+ "examples": [
23
+ {
24
+ "schema_version": "1.0",
25
+ "engine_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
26
+ "prompt_digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
27
+ "configuration_digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
28
+ "corpus_digest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
29
+ "provider": "ollama",
30
+ "model": "qwen3.5:4b",
31
+ "observed_revision": "local-ollama-1",
32
+ "run_count": 3,
33
+ "evaluated_at": "2026-09-16T00:00:00Z",
34
+ "reproducibility": {"seed": "fixed", "temperature": 0},
35
+ "status": "supported",
36
+ "rollback_decision": "revert-to-baseline"
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/recovery-artifact.schema.json",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schema_version", "repository", "pull_request_number", "base_sha", "head_sha", "result", "created_at", "expires_at", "result_sha256"],
7
+ "properties": {
8
+ "schema_version": {"const": "1.0"},
9
+ "repository": {"type": "string", "minLength": 1, "maxLength": 256},
10
+ "pull_request_number": {"type": "integer", "minimum": 1},
11
+ "base_sha": {"type": "string", "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"},
12
+ "head_sha": {"type": "string", "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"},
13
+ "result": {"$ref": "https://reviewsensei.dev/schemas/v1/review-result.schema.json"},
14
+ "created_at": {
15
+ "type": "string",
16
+ "format": "date-time",
17
+ "pattern": "^(?:\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))$"
18
+ },
19
+ "expires_at": {
20
+ "type": "string",
21
+ "format": "date-time",
22
+ "pattern": "^(?:\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2}))$"
23
+ },
24
+ "result_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
25
+ }
26
+ }
@@ -4,13 +4,32 @@
4
4
  "title": "ReviewSensei review comment v1",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
- "required": ["path", "line", "body"],
7
+ "required": ["path", "body"],
8
8
  "properties": {
9
9
  "path": {"type": "string", "minLength": 1},
10
10
  "line": {"type": "integer", "minimum": 1},
11
11
  "body": {"type": "string", "minLength": 1},
12
+ "side": {"type": "string", "enum": ["LEFT", "RIGHT", "FILE"]},
12
13
  "severity": {"type": "string", "minLength": 1},
13
14
  "fix_effort": {"type": "string", "minLength": 1},
14
- "category": {"type": "string", "minLength": 1}
15
- }
15
+ "blocking": {"type": "boolean"},
16
+ "category": {"type": "string", "minLength": 1},
17
+ "symbol": {"type": "string", "minLength": 1},
18
+ "defect_kind": {"type": "string", "minLength": 1},
19
+ "evidence_id": {"type": "string", "minLength": 1}
20
+ },
21
+ "allOf": [
22
+ {
23
+ "if": {
24
+ "properties": {"side": {"const": "FILE"}},
25
+ "required": ["side"]
26
+ },
27
+ "then": {
28
+ "not": {"required": ["line"]}
29
+ },
30
+ "else": {
31
+ "required": ["line"]
32
+ }
33
+ }
34
+ ]
16
35
  }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/review-convergence-policy.schema.json",
4
+ "title": "ReviewSensei review-convergence policy v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "mode",
10
+ "enforcement",
11
+ "max_completed_initial_reviews",
12
+ "max_completed_verification_rounds",
13
+ "max_failed_attempts",
14
+ "automatic_github_review_events",
15
+ "inline_advisory_threads"
16
+ ],
17
+ "properties": {
18
+ "schema_version": {"const": "1.0"},
19
+ "mode": {
20
+ "type": "string",
21
+ "enum": ["legacy", "advisory", "merge-focused", "strict"]
22
+ },
23
+ "enforcement": {
24
+ "type": "string",
25
+ "enum": ["display-only", "publication"]
26
+ },
27
+ "max_completed_initial_reviews": {
28
+ "type": "integer",
29
+ "minimum": 1,
30
+ "maximum": 8
31
+ },
32
+ "max_completed_verification_rounds": {
33
+ "type": "integer",
34
+ "minimum": 0,
35
+ "maximum": 8
36
+ },
37
+ "max_failed_attempts": {
38
+ "type": "integer",
39
+ "minimum": 1,
40
+ "maximum": 32
41
+ },
42
+ "automatic_github_review_events": {"type": "boolean"},
43
+ "inline_advisory_threads": {"type": "boolean"},
44
+ "policy_digest": {
45
+ "type": "string",
46
+ "pattern": "^[a-f0-9]{64}$"
47
+ }
48
+ }
49
+ }
@@ -12,18 +12,73 @@
12
12
  "items": {
13
13
  "type": "object",
14
14
  "additionalProperties": false,
15
- "required": ["path", "line", "body"],
15
+ "required": ["path", "body"],
16
16
  "properties": {
17
17
  "path": {"type": "string", "minLength": 1},
18
18
  "line": {"type": "integer", "minimum": 1},
19
19
  "body": {"type": "string", "minLength": 1},
20
+ "side": {"type": "string", "enum": ["LEFT", "RIGHT", "FILE"]},
20
21
  "severity": {"type": "string", "minLength": 1},
21
22
  "fix_effort": {"type": "string", "minLength": 1},
22
- "category": {"type": "string", "minLength": 1}
23
- }
23
+ "blocking": {"type": "boolean"},
24
+ "category": {"type": "string", "minLength": 1},
25
+ "symbol": {"type": "string", "minLength": 1},
26
+ "defect_kind": {"type": "string", "minLength": 1},
27
+ "evidence_id": {"type": "string", "minLength": 1}
28
+ },
29
+ "allOf": [
30
+ {
31
+ "if": {
32
+ "properties": {"side": {"const": "FILE"}},
33
+ "required": ["side"]
34
+ },
35
+ "then": {
36
+ "not": {"required": ["line"]}
37
+ },
38
+ "else": {
39
+ "required": ["line"]
40
+ }
41
+ }
42
+ ]
24
43
  }
25
44
  },
26
45
  "provider": {"type": "string", "minLength": 1},
46
+ "review_status": {
47
+ "type": "string",
48
+ "enum": ["complete", "partial", "incomplete", "summary-only"]
49
+ },
50
+ "evidence_policy": {
51
+ "type": "string",
52
+ "enum": ["legacy", "confirmed"]
53
+ },
54
+ "coverage_mode": {
55
+ "type": "string",
56
+ "enum": ["full", "incremental", "fallback-full"]
57
+ },
58
+ "finding_lifecycles": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": ["fingerprint", "state"],
64
+ "properties": {
65
+ "fingerprint": {
66
+ "type": "string",
67
+ "pattern": "^[a-f0-9]{64}$"
68
+ },
69
+ "state": {
70
+ "type": "string",
71
+ "enum": ["new", "still-present", "fixed", "outdated", "uncertain"]
72
+ }
73
+ }
74
+ }
75
+ },
76
+ "coverage": {
77
+ "$ref": "https://reviewsensei.dev/schemas/v1/coverage-manifest.schema.json"
78
+ },
79
+ "transaction": {
80
+ "$ref": "https://reviewsensei.dev/schemas/v1/review-transaction.schema.json"
81
+ },
27
82
  "model": {
28
83
  "anyOf": [
29
84
  {"type": "string", "minLength": 1},
@@ -48,6 +103,57 @@
48
103
  "category": {"type": "string", "minLength": 1}
49
104
  }
50
105
  }
106
+ },
107
+ "source_context": {
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "required": [
111
+ "enabled",
112
+ "complete",
113
+ "snapshot",
114
+ "languages",
115
+ "excerpt_count",
116
+ "outcomes"
117
+ ],
118
+ "properties": {
119
+ "enabled": {"type": "boolean"},
120
+ "complete": {"type": "boolean"},
121
+ "snapshot": {
122
+ "type": "object",
123
+ "additionalProperties": false,
124
+ "required": ["revision", "kind"],
125
+ "properties": {
126
+ "revision": {
127
+ "type": "string",
128
+ "pattern": "^[a-f0-9]{40}$"
129
+ },
130
+ "kind": {"type": "string", "const": "base"}
131
+ }
132
+ },
133
+ "languages": {
134
+ "type": "array",
135
+ "minItems": 1,
136
+ "maxItems": 1,
137
+ "items": {"type": "string", "const": "python"}
138
+ },
139
+ "excerpt_count": {"type": "integer", "minimum": 0},
140
+ "outcomes": {
141
+ "type": "array",
142
+ "items": {
143
+ "type": "object",
144
+ "additionalProperties": false,
145
+ "required": ["path", "status"],
146
+ "properties": {
147
+ "path": {"type": "string", "minLength": 1},
148
+ "status": {"type": "string", "minLength": 1}
149
+ }
150
+ }
151
+ },
152
+ "untrusted_head_sha": {
153
+ "type": "string",
154
+ "pattern": "^[a-f0-9]{40}$"
155
+ }
156
+ }
51
157
  }
52
158
  }
53
159
  }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/review-round-decision.schema.json",
4
+ "title": "ReviewSensei review-round admission decision v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "mode",
10
+ "admit",
11
+ "count_as_completed_round",
12
+ "round_kind",
13
+ "remaining_initial_reviews",
14
+ "remaining_verification_rounds",
15
+ "handoff",
16
+ "handoff_reason",
17
+ "may_emit_approve",
18
+ "cap_creates_approval"
19
+ ],
20
+ "properties": {
21
+ "schema_version": {"const": "1.0"},
22
+ "mode": {
23
+ "type": "string",
24
+ "enum": ["legacy", "advisory", "merge-focused", "strict"]
25
+ },
26
+ "admit": {"type": "boolean"},
27
+ "count_as_completed_round": {"type": "boolean"},
28
+ "round_kind": {
29
+ "type": "string",
30
+ "enum": ["initial", "verification", "none"]
31
+ },
32
+ "remaining_initial_reviews": {
33
+ "type": "integer",
34
+ "minimum": 0,
35
+ "maximum": 8
36
+ },
37
+ "remaining_verification_rounds": {
38
+ "type": "integer",
39
+ "minimum": 0,
40
+ "maximum": 8
41
+ },
42
+ "handoff": {"type": "boolean"},
43
+ "handoff_reason": {
44
+ "type": ["string", "null"],
45
+ "enum": [
46
+ "round-budget-exhausted",
47
+ "failed-attempt-budget-exhausted",
48
+ "no-progress",
49
+ "incomplete-coverage",
50
+ "unreviewed-head",
51
+ "paused",
52
+ null
53
+ ]
54
+ },
55
+ "may_emit_approve": {"type": "boolean"},
56
+ "cap_creates_approval": {"type": "boolean", "const": false}
57
+ }
58
+ }
@@ -39,6 +39,13 @@
39
39
  "type": "string",
40
40
  "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$"
41
41
  }
42
+ },
43
+ "provider_profile": {
44
+ "type": "string",
45
+ "minLength": 1,
46
+ "maxLength": 64,
47
+ "pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|local/private)$",
48
+ "description": "Named provider profile for this stage. Accepts canonical names and the local/private alias. Local/private runs cannot select a remote profile."
42
49
  }
43
50
  },
44
51
  "not": {
@@ -149,6 +156,12 @@
149
156
  "category_ids": ["correctness", "security"],
150
157
  "outputs": ["comments"],
151
158
  "prompt_template": "Review categories:\n{review_categories}\n{diff}"
159
+ },
160
+ {
161
+ "name": "Fast comments stage",
162
+ "provider_profile": "fast-triage",
163
+ "outputs": ["comments"],
164
+ "prompt_template": "Return JSON comments for {diff}"
152
165
  }
153
166
  ]
154
167
  }
@@ -0,0 +1,71 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/review-transaction.schema.json",
4
+ "title": "ReviewSensei logical review transaction v1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "transaction_id",
9
+ "repository",
10
+ "pull_request",
11
+ "base_sha",
12
+ "head_sha",
13
+ "policy_digest",
14
+ "configuration_digest",
15
+ "evidence_digest",
16
+ "reservation_id",
17
+ "generation",
18
+ "phase"
19
+ ],
20
+ "properties": {
21
+ "transaction_id": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
22
+ "repository": {"type": "string", "minLength": 1, "maxLength": 140},
23
+ "pull_request": {"type": "integer", "minimum": 1, "maximum": 2147483647},
24
+ "base_sha": {"type": "string", "pattern": "^[a-f0-9]{40}$"},
25
+ "head_sha": {"type": "string", "pattern": "^[a-f0-9]{40}$"},
26
+ "policy_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
27
+ "configuration_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
28
+ "evidence_digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
29
+ "reservation_id": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
30
+ "generation": {"type": "integer", "minimum": 1, "maximum": 2147483647},
31
+ "phase": {
32
+ "type": "string",
33
+ "enum": [
34
+ "analysis",
35
+ "analysis_failed",
36
+ "publication_pending",
37
+ "publication_failed",
38
+ "publication_succeeded",
39
+ "publication_suppressed"
40
+ ]
41
+ },
42
+ "result_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
43
+ },
44
+ "allOf": [
45
+ {
46
+ "if": {
47
+ "required": ["phase"],
48
+ "properties": {
49
+ "phase": {"enum": ["analysis", "analysis_failed"]}
50
+ }
51
+ },
52
+ "then": {"not": {"required": ["result_sha256"]}}
53
+ },
54
+ {
55
+ "if": {
56
+ "required": ["phase"],
57
+ "properties": {
58
+ "phase": {
59
+ "enum": [
60
+ "publication_pending",
61
+ "publication_failed",
62
+ "publication_succeeded",
63
+ "publication_suppressed"
64
+ ]
65
+ }
66
+ }
67
+ },
68
+ "then": {"required": ["result_sha256"]}
69
+ }
70
+ ]
71
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://reviewsensei.dev/schemas/v1/run-outcome.schema.json",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schema_version", "status", "stage_summary", "provider_calls", "retry_attempts", "prompt_bytes", "response_bytes", "elapsed_ms", "diagnostic"],
7
+ "properties": {
8
+ "schema_version": {"const": "1.0"},
9
+ "status": {"enum": ["reviewed", "partial", "skipped_stale", "skipped_policy", "provider_failed", "budget_exhausted", "publication_failed", "already_published", "action_required"]},
10
+ "repository": {"type": ["string", "null"], "maxLength": 256},
11
+ "pull_request_number": {"type": ["integer", "null"], "minimum": 1},
12
+ "base_sha": {"type": ["string", "null"], "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"},
13
+ "head_sha": {"type": ["string", "null"], "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"},
14
+ "stage_summary": {
15
+ "description": "Structural bounds only; runtime validation additionally requires printable Unicode keys and values without control characters.",
16
+ "type": "object",
17
+ "maxProperties": 64,
18
+ "propertyNames": {"type": "string", "minLength": 1, "maxLength": 128},
19
+ "additionalProperties": {"type": "string", "minLength": 1, "maxLength": 128}
20
+ },
21
+ "provider_calls": {"type": "integer", "minimum": 0},
22
+ "retry_attempts": {"type": "integer", "minimum": 0},
23
+ "structural_retries": {"type": "integer", "minimum": 0},
24
+ "prompt_bytes": {"type": "integer", "minimum": 0},
25
+ "response_bytes": {"type": "integer", "minimum": 0},
26
+ "elapsed_ms": {"type": "integer", "minimum": 0},
27
+ "diagnostic": {"type": ["string", "null"], "maxLength": 512}
28
+ }
29
+ }