review-council 4.4.8 → 4.4.9
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.
- package/README.md +4 -1
- package/dist/converge/legacy-launch-health.js +3 -1
- package/dist/converge/legacy-launch-health.js.map +1 -1
- package/dist/converge/legacy-roster.d.ts +18 -0
- package/dist/converge/legacy-roster.js +180 -0
- package/dist/converge/legacy-roster.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -221,7 +221,10 @@ config and add `--retry-report original-report.json` with an explicit bounded
|
|
|
221
221
|
`--retry-reason` and a fresh `--json-file` destination. RCL binds the exact original
|
|
222
222
|
report, config, target, head, input, round, attempt, cycle and roster before deriving
|
|
223
223
|
blocking-only health with the shared quorum policy. The new launch may review changed
|
|
224
|
-
current inputs, but its original proof stays bound to those original identities.
|
|
224
|
+
current inputs, but its original proof stays bound to those original identities. When
|
|
225
|
+
roles or verifier defaults have since changed, RCL reconstructs the producer version's
|
|
226
|
+
deterministic roster from that bound config; unknown, substituted or ambiguous identities
|
|
227
|
+
still refuse before a claim. Healthy or ambiguous evidence refuses.
|
|
225
228
|
The 4.1.10 producer predates review cycles and is accepted only when the retained
|
|
226
229
|
report, native state and attempt state all remain cycle-free.
|
|
227
230
|
An unadmitted source retries its pending round; an exact latest admitted source
|
|
@@ -10,6 +10,7 @@ import { retainStaleFile } from './stale-report-storage.js';
|
|
|
10
10
|
import { convergeRunStatePath } from './run-state.js';
|
|
11
11
|
import { convergeAttemptStatePath, validateConvergeAttemptState } from './attempt-budget.js';
|
|
12
12
|
import { retrySourceSchema } from './retry-source.js';
|
|
13
|
+
import { authenticHistoricalRoster } from './legacy-roster.js';
|
|
13
14
|
/**
|
|
14
15
|
* 4.1.10 is the last guarded-launch producer before review cycles were added.
|
|
15
16
|
* It already bound the exact roster, config digest, converge ordinals and
|
|
@@ -85,7 +86,8 @@ export async function inspectLegacyRetry(input, common, state, previous, attempt
|
|
|
85
86
|
report.run.target.head_sha !== previous.headSha || report.run.converge?.target !== state.target ||
|
|
86
87
|
report.run.converge?.round !== previous.round || report.run.converge?.attempt !== previous.attempt ||
|
|
87
88
|
report.run.cycle_id !== state.cycle?.id || report.run.config_sha256 !== sha256Hex(configBytes) ||
|
|
88
|
-
!isDeepStrictEqual(report.run.roster, input.roster)
|
|
89
|
+
(!isDeepStrictEqual(report.run.roster, input.roster) && !authenticHistoricalRoster(report.run, input.config)) ||
|
|
90
|
+
report.run.provenance === 'backfill' ||
|
|
89
91
|
!supportedLegacyRetryProducer(report, state, attempts) ||
|
|
90
92
|
report.stats.totalReviews !== previous.totalReviews || report.stats.successfulReviews !== previous.successfulReviews ||
|
|
91
93
|
report.reviews.length !== previous.totalReviews ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-launch-health.js","sourceRoot":"","sources":["../../src/converge/legacy-launch-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAE7F,OAAO,EAAE,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"legacy-launch-health.js","sourceRoot":"","sources":["../../src/converge/legacy-launch-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Config } from '../config/schema.js';
|
|
2
|
+
import type { RosterEntry } from '../report/run-header.js';
|
|
3
|
+
interface LegacyRunIdentity {
|
|
4
|
+
rcl_version: string;
|
|
5
|
+
roster: RosterEntry[];
|
|
6
|
+
gating: {
|
|
7
|
+
mode: 'verified-consensus' | 'all-findings';
|
|
8
|
+
min_models: number;
|
|
9
|
+
verification_model?: string;
|
|
10
|
+
verification_reasoning_effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
11
|
+
verification_timeout_ms: number;
|
|
12
|
+
verification_pass_timeout_ms?: number;
|
|
13
|
+
};
|
|
14
|
+
spec?: unknown;
|
|
15
|
+
}
|
|
16
|
+
/** Authenticate a removed producer's deterministic roster without consulting today's role/default registry. */
|
|
17
|
+
export declare function authenticHistoricalRoster(run: LegacyRunIdentity, config: Config): boolean;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
const CATALOGS = {
|
|
3
|
+
'4.1.10': {
|
|
4
|
+
roles: [
|
|
5
|
+
'general', 'security-auditor', 'performance-engineer', 'api-design',
|
|
6
|
+
'test-coverage', 'dx-critic', 'architecture', 'bug-hunter',
|
|
7
|
+
'accessibility-auditor', 'project-rules', 'spec-compliance',
|
|
8
|
+
'regression-hunter', 'dead-code', 'dependency-hygiene', 'edge-case-hunter',
|
|
9
|
+
],
|
|
10
|
+
defaultVerifier: 'google/gemini-3.8-flash',
|
|
11
|
+
},
|
|
12
|
+
'4.1.11': {
|
|
13
|
+
roles: [
|
|
14
|
+
'general', 'security-auditor', 'performance-engineer', 'api-design',
|
|
15
|
+
'test-coverage', 'dx-critic', 'architecture', 'bug-hunter',
|
|
16
|
+
'accessibility-auditor', 'project-rules', 'spec-compliance',
|
|
17
|
+
'regression-hunter', 'dead-code', 'dependency-hygiene', 'edge-case-hunter',
|
|
18
|
+
],
|
|
19
|
+
defaultVerifier: 'google/gemini-3.8-flash',
|
|
20
|
+
},
|
|
21
|
+
'4.1.12': {
|
|
22
|
+
roles: [
|
|
23
|
+
'general', 'security-auditor', 'performance-engineer', 'api-design',
|
|
24
|
+
'test-coverage', 'dx-critic', 'architecture', 'bug-hunter',
|
|
25
|
+
'accessibility-auditor', 'spec-compliance', 'regression-hunter',
|
|
26
|
+
'dependency-hygiene', 'edge-case-hunter',
|
|
27
|
+
],
|
|
28
|
+
defaultVerifier: 'openai/gpt-6-astra',
|
|
29
|
+
verificationReasoningEffort: 'high',
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
function historicalProvider(model) {
|
|
33
|
+
if (model.startsWith('anthropic/'))
|
|
34
|
+
return 'anthropic';
|
|
35
|
+
if (model.startsWith('openai/'))
|
|
36
|
+
return 'openai';
|
|
37
|
+
if (model.startsWith('google/'))
|
|
38
|
+
return 'google';
|
|
39
|
+
if (model.startsWith('openrouter/'))
|
|
40
|
+
return 'openrouter';
|
|
41
|
+
if (model.startsWith('openai-compat/'))
|
|
42
|
+
return 'openai-compat';
|
|
43
|
+
if (model.startsWith('claude'))
|
|
44
|
+
return 'anthropic';
|
|
45
|
+
if (/^(?:gpt|o1|o3|o4)/.test(model))
|
|
46
|
+
return 'openai';
|
|
47
|
+
if (model.startsWith('gemini'))
|
|
48
|
+
return 'google';
|
|
49
|
+
return 'openai-compat';
|
|
50
|
+
}
|
|
51
|
+
function roleDefinitions(config, catalog) {
|
|
52
|
+
const roles = new Map(catalog.roles.map(name => [name, { name, specialized: name !== 'general' }]));
|
|
53
|
+
for (const custom of config.customRoles ?? []) {
|
|
54
|
+
const builtin = roles.get(custom.name) ?? roles.get(custom.name.toLowerCase());
|
|
55
|
+
const role = builtin ?? { name: custom.name, specialized: true };
|
|
56
|
+
roles.set(role.name, role);
|
|
57
|
+
}
|
|
58
|
+
return roles;
|
|
59
|
+
}
|
|
60
|
+
function resolveRequestedRoles(config, catalog, hasSpec, projectRulesPresent) {
|
|
61
|
+
const definitions = roleDefinitions(config, catalog);
|
|
62
|
+
const requested = config.roles;
|
|
63
|
+
if (requested && requested.length > 0) {
|
|
64
|
+
const all = requested.some(name => name.toLowerCase() === 'all');
|
|
65
|
+
if (all && requested.length !== 1)
|
|
66
|
+
return undefined;
|
|
67
|
+
if (all) {
|
|
68
|
+
return [...definitions.values()].filter(role => (role.name !== 'project-rules' || projectRulesPresent) &&
|
|
69
|
+
(role.name !== 'spec-compliance' || hasSpec));
|
|
70
|
+
}
|
|
71
|
+
const resolved = [];
|
|
72
|
+
for (const name of requested) {
|
|
73
|
+
const role = definitions.get(name) ?? definitions.get(name.toLowerCase());
|
|
74
|
+
if (!role)
|
|
75
|
+
return undefined;
|
|
76
|
+
resolved.push(role);
|
|
77
|
+
}
|
|
78
|
+
return resolved.length > 0 ? resolved : undefined;
|
|
79
|
+
}
|
|
80
|
+
return [...definitions.values()].filter(role => (role.name !== 'project-rules' || projectRulesPresent) &&
|
|
81
|
+
(role.name !== 'spec-compliance' || hasSpec));
|
|
82
|
+
}
|
|
83
|
+
function historicalGating(config, catalog, rosterModels) {
|
|
84
|
+
const input = config.gating;
|
|
85
|
+
const mode = input?.mode ?? 'verified-consensus';
|
|
86
|
+
const minModels = input?.minModels ?? 2;
|
|
87
|
+
if (!Number.isSafeInteger(minModels) || minModels < 2)
|
|
88
|
+
return undefined;
|
|
89
|
+
let verificationModel = input?.verificationModel;
|
|
90
|
+
if (verificationModel?.startsWith('openrouter/'))
|
|
91
|
+
return undefined;
|
|
92
|
+
if (verificationModel === undefined) {
|
|
93
|
+
const providers = new Set(rosterModels.map(historicalProvider));
|
|
94
|
+
verificationModel = providers.has(historicalProvider(catalog.defaultVerifier))
|
|
95
|
+
? catalog.defaultVerifier
|
|
96
|
+
: rosterModels.find(model => ['anthropic', 'openai', 'google'].includes(historicalProvider(model)));
|
|
97
|
+
}
|
|
98
|
+
const effort = input?.verificationReasoningEffort ??
|
|
99
|
+
(verificationModel === catalog.defaultVerifier ? catalog.verificationReasoningEffort : undefined);
|
|
100
|
+
if (effort !== undefined && (!verificationModel || historicalProvider(verificationModel) !== 'openai'))
|
|
101
|
+
return undefined;
|
|
102
|
+
const passTimeout = input?.verificationPassTimeout ?? 180_000;
|
|
103
|
+
const timeout = input?.verificationTimeout ?? passTimeout;
|
|
104
|
+
if (![passTimeout, timeout].every(value => Number.isFinite(value) && value > 0 && value <= 2_147_483_647))
|
|
105
|
+
return undefined;
|
|
106
|
+
return {
|
|
107
|
+
mode,
|
|
108
|
+
min_models: minModels,
|
|
109
|
+
...(verificationModel ? { verification_model: verificationModel } : {}),
|
|
110
|
+
...(effort ? { verification_reasoning_effort: effort } : {}),
|
|
111
|
+
verification_timeout_ms: timeout,
|
|
112
|
+
verification_pass_timeout_ms: passTimeout,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function buildRoster(config, roles, gating) {
|
|
116
|
+
if (!gating)
|
|
117
|
+
return undefined;
|
|
118
|
+
const models = config.models ?? [];
|
|
119
|
+
const secondaryModels = config.secondaryModels ?? [];
|
|
120
|
+
const asyncModels = (config.asyncModels ?? []).filter(model => !models.includes(model));
|
|
121
|
+
const definitions = new Map(roles.map(role => [role.name, role]));
|
|
122
|
+
let blocking;
|
|
123
|
+
if ((config.reviewers?.length ?? 0) > 0) {
|
|
124
|
+
blocking = config.reviewers.flatMap(pair => {
|
|
125
|
+
const role = definitions.get(pair.role) ?? definitions.get(pair.role.toLowerCase());
|
|
126
|
+
return role ? [{ model: pair.model, role: role.name, provider: historicalProvider(pair.model), lane: 'blocking' }] : [];
|
|
127
|
+
});
|
|
128
|
+
if (blocking.length === 0)
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const core = new Set(models);
|
|
133
|
+
blocking = [];
|
|
134
|
+
for (const model of models) {
|
|
135
|
+
for (const role of roles.filter(candidate => !candidate.specialized)) {
|
|
136
|
+
blocking.push({ model, role: role.name, provider: historicalProvider(model), lane: 'blocking' });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const allModels = [...new Set([...models, ...secondaryModels])];
|
|
140
|
+
if (allModels.length === 0 && roles.some(role => role.specialized))
|
|
141
|
+
return undefined;
|
|
142
|
+
roles.filter(role => role.specialized).forEach((role, index) => {
|
|
143
|
+
const model = allModels[index % allModels.length];
|
|
144
|
+
blocking.push({ model, role: role.name, provider: historicalProvider(model),
|
|
145
|
+
lane: core.has(model) ? 'blocking' : 'secondary' });
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const async = config.reviewers?.length ? [] : asyncModels.flatMap(model => roles.filter(role => !role.specialized).map(role => ({ model, role: role.name,
|
|
149
|
+
provider: historicalProvider(model), lane: 'async' })));
|
|
150
|
+
const verification = gating.mode === 'verified-consensus' && gating.verification_model
|
|
151
|
+
? [{ model: gating.verification_model, role: 'verification',
|
|
152
|
+
provider: historicalProvider(gating.verification_model), lane: 'verification' }]
|
|
153
|
+
: [];
|
|
154
|
+
return [...blocking, ...async, ...verification];
|
|
155
|
+
}
|
|
156
|
+
/** Authenticate a removed producer's deterministic roster without consulting today's role/default registry. */
|
|
157
|
+
export function authenticHistoricalRoster(run, config) {
|
|
158
|
+
if (!Object.hasOwn(CATALOGS, run.rcl_version))
|
|
159
|
+
return false;
|
|
160
|
+
const catalog = CATALOGS[run.rcl_version];
|
|
161
|
+
if (!catalog || !Array.isArray(run.roster) || run.roster.length === 0)
|
|
162
|
+
return false;
|
|
163
|
+
// A retained report has no authenticated source for either custom prompts or
|
|
164
|
+
// explicit reviewer selection. Preserve the current-roster path for those
|
|
165
|
+
// configurations, but never infer them from a historical default catalog.
|
|
166
|
+
if ((config.customRoles?.length ?? 0) > 0 || (config.reviewers?.length ?? 0) > 0)
|
|
167
|
+
return false;
|
|
168
|
+
const rosterModels = [...(config.models ?? []), ...(config.secondaryModels ?? []), ...(config.asyncModels ?? [])];
|
|
169
|
+
const gating = historicalGating(config, catalog, rosterModels);
|
|
170
|
+
if (!gating || !isDeepStrictEqual(run.gating, gating))
|
|
171
|
+
return false;
|
|
172
|
+
const projectVariants = catalog.roles.includes('project-rules') && !config.roles?.includes('project-rules')
|
|
173
|
+
? [false, true] : [true];
|
|
174
|
+
return projectVariants.some(projectRulesPresent => {
|
|
175
|
+
const roles = resolveRequestedRoles(config, catalog, run.spec !== undefined, projectRulesPresent);
|
|
176
|
+
const roster = roles && buildRoster(config, roles, gating);
|
|
177
|
+
return roster !== undefined && isDeepStrictEqual(run.roster, roster);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=legacy-roster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-roster.js","sourceRoot":"","sources":["../../src/converge/legacy-roster.ts"],"names":[],"mappings":"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"}
|