persona-harness 0.8.33 → 0.8.35
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/dist/context-comparison/context-comparison-evaluator.d.ts +2 -0
- package/dist/context-comparison/context-comparison-evaluator.js +190 -0
- package/dist/context-comparison/context-comparison-evaluator.js.map +1 -0
- package/dist/context-comparison/context-comparison-manifest.d.ts +8 -0
- package/dist/context-comparison/context-comparison-manifest.js +190 -0
- package/dist/context-comparison/context-comparison-manifest.js.map +1 -0
- package/dist/context-comparison/context-comparison-types.d.ts +123 -0
- package/dist/context-comparison/context-comparison-types.js +19 -0
- package/dist/context-comparison/context-comparison-types.js.map +1 -0
- package/dist/context-comparison/index.d.ts +2 -0
- package/dist/context-comparison/index.js +3 -0
- package/dist/context-comparison/index.js.map +1 -0
- package/dist/context-profile/team-profile-v2-model.d.ts +30 -0
- package/dist/context-profile/team-profile-v2-model.js +118 -0
- package/dist/context-profile/team-profile-v2-model.js.map +1 -0
- package/dist/context-profile/team-profile-v2-store.d.ts +16 -0
- package/dist/context-profile/team-profile-v2-store.js +32 -0
- package/dist/context-profile/team-profile-v2-store.js.map +1 -0
- package/docs/current/README.md +1 -0
- package/docs/current/canonical-docs-index.md +1 -0
- package/docs/current/context-program-status.md +134 -62
- package/docs/current/context-team-profile-v2.md +86 -0
- package/docs/current/docs-inventory.md +4 -2
- package/docs/current/release/consumer-authority-current-acceptance.json +1 -1
- package/docs/current/release/v0.8.34-release-notes.md +39 -0
- package/docs/current/release/v0.8.35-release-notes.md +33 -0
- package/package.json +5 -3
- package/packages/shared-skills/package.json +1 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { buildContextEnvelope, canonicalContextDigest, resolveEffectiveContext } from "../context-core/index.js";
|
|
2
|
+
import { matchesContextRelevance } from "../context-core/effective-context-v2-input.js";
|
|
3
|
+
import { contextComparisonRules, parseContextComparisonCandidate, parseContextComparisonManifest, } from "./context-comparison-manifest.js";
|
|
4
|
+
import { CONTEXT_COMPARISON_ARMS, CONTEXT_COMPARISON_PROTOCOL, CONTEXT_COMPARISON_RESULT_SCHEMA, } from "./context-comparison-types.js";
|
|
5
|
+
export function evaluateContextComparison(manifestInput, candidateInput) {
|
|
6
|
+
const manifest = parseContextComparisonManifest(manifestInput);
|
|
7
|
+
if (manifest === undefined)
|
|
8
|
+
return blocked("context-comparison-manifest-invalid");
|
|
9
|
+
const candidate = parseContextComparisonCandidate(candidateInput);
|
|
10
|
+
if (candidate === undefined)
|
|
11
|
+
return blocked("context-comparison-candidate-invalid");
|
|
12
|
+
const manifestDigest = canonicalContextDigest(manifestInput);
|
|
13
|
+
const records = manifest.fixtures.flatMap((fixture) => CONTEXT_COMPARISON_ARMS.map((arm) => evaluateArm(fixture, candidate, arm)));
|
|
14
|
+
return {
|
|
15
|
+
candidate,
|
|
16
|
+
manifestDigest,
|
|
17
|
+
productVerdict: "INCONCLUSIVE",
|
|
18
|
+
protocolVersion: CONTEXT_COMPARISON_PROTOCOL,
|
|
19
|
+
records,
|
|
20
|
+
schemaVersion: CONTEXT_COMPARISON_RESULT_SCHEMA,
|
|
21
|
+
status: "ready",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function evaluateArm(fixture, candidate, arm) {
|
|
25
|
+
if (arm === "off")
|
|
26
|
+
return offRecord(fixture, candidate);
|
|
27
|
+
if (arm === "legacy-broad")
|
|
28
|
+
return legacyBroadRecord(fixture, candidate);
|
|
29
|
+
return targetedRecord(fixture, candidate);
|
|
30
|
+
}
|
|
31
|
+
function offRecord(fixture, candidate) {
|
|
32
|
+
return recordBase(fixture, candidate, "off", {
|
|
33
|
+
capsules: { chars: 0, count: 0 },
|
|
34
|
+
conflicts: [],
|
|
35
|
+
context: { blockReason: null, digest: null, mode: "disabled", status: "disabled" },
|
|
36
|
+
selected: [],
|
|
37
|
+
shadowed: [],
|
|
38
|
+
structural: { activeRuleCount: activeRules(fixture).length, applicableRuleCount: applicableRules(fixture).length, contradictionCount: 0, overreachCount: 0 },
|
|
39
|
+
technicalVerdict: "TECHNICAL_PASS",
|
|
40
|
+
warnings: ["context-disabled"],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function legacyBroadRecord(fixture, candidate) {
|
|
44
|
+
const active = activeRules(fixture);
|
|
45
|
+
const selected = active.map(toReference);
|
|
46
|
+
const applicable = applicableRules(fixture);
|
|
47
|
+
const chars = active.reduce((total, entry) => total + entry.rule.rule.length, 0);
|
|
48
|
+
const contradictoryTopics = duplicateTopicCount(active);
|
|
49
|
+
return recordBase(fixture, candidate, "legacy-broad", {
|
|
50
|
+
capsules: { chars, count: active.length },
|
|
51
|
+
conflicts: [],
|
|
52
|
+
context: {
|
|
53
|
+
blockReason: null,
|
|
54
|
+
digest: canonicalContextDigest(active.map(({ layer, rule }) => ({ id: rule.id, layer, rule: rule.rule, topic: rule.topic }))),
|
|
55
|
+
mode: "legacy-broad-compatibility",
|
|
56
|
+
status: "resolved",
|
|
57
|
+
},
|
|
58
|
+
selected,
|
|
59
|
+
shadowed: [],
|
|
60
|
+
structural: {
|
|
61
|
+
activeRuleCount: active.length,
|
|
62
|
+
applicableRuleCount: applicable.length,
|
|
63
|
+
contradictionCount: contradictoryTopics,
|
|
64
|
+
overreachCount: active.length - applicable.length,
|
|
65
|
+
},
|
|
66
|
+
technicalVerdict: "TECHNICAL_PASS",
|
|
67
|
+
warnings: ["legacy-broad-compatibility-only"],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function targetedRecord(fixture, candidate) {
|
|
71
|
+
const resolution = resolveEffectiveContext(fixture.context);
|
|
72
|
+
const envelope = buildContextEnvelope({
|
|
73
|
+
budget: {
|
|
74
|
+
maxCapsules: fixture.budget.maxCapsules,
|
|
75
|
+
maxChars: fixture.budget.maxChars,
|
|
76
|
+
},
|
|
77
|
+
resolution,
|
|
78
|
+
target: fixture.target,
|
|
79
|
+
});
|
|
80
|
+
const selected = envelope.selected.map((capsule) => ({ id: capsule.id, layer: capsule.layer }));
|
|
81
|
+
const layerByRuleId = new Map(activeRules(fixture).map(({ layer, rule }) => [rule.id, layer]));
|
|
82
|
+
const shadowed = envelope.shadowed.flatMap((entry) => {
|
|
83
|
+
const layer = layerByRuleId.get(entry.id);
|
|
84
|
+
return layer === undefined ? [] : [{ id: entry.id, layer }];
|
|
85
|
+
});
|
|
86
|
+
const conflicts = envelope.conflicts.map((conflict) => ({
|
|
87
|
+
reason: "same-layer-conflict",
|
|
88
|
+
ruleIds: conflict.ruleIds,
|
|
89
|
+
topic: conflict.topic,
|
|
90
|
+
}));
|
|
91
|
+
const matchesExpectation = matchesTargetedExpectation(fixture, resolution.status, envelope.status, envelope.status === "blocked" ? envelope.blockReason : undefined, selected, shadowed, conflicts);
|
|
92
|
+
return recordBase(fixture, candidate, "targeted-layered", {
|
|
93
|
+
capsules: { chars: envelope.budget.usedChars, count: envelope.budget.usedCapsules },
|
|
94
|
+
conflicts,
|
|
95
|
+
context: {
|
|
96
|
+
blockReason: envelope.status === "blocked" ? envelope.blockReason : null,
|
|
97
|
+
digest: envelope.digest,
|
|
98
|
+
mode: "targeted-layered",
|
|
99
|
+
status: envelope.status,
|
|
100
|
+
},
|
|
101
|
+
selected,
|
|
102
|
+
shadowed,
|
|
103
|
+
structural: {
|
|
104
|
+
activeRuleCount: activeRules(fixture).length,
|
|
105
|
+
applicableRuleCount: applicableRules(fixture).length,
|
|
106
|
+
contradictionCount: duplicateTopicCount(envelope.selected.map((capsule) => ({ layer: capsule.layer, rule: { ...capsule, rule: capsule.content } }))),
|
|
107
|
+
overreachCount: 0,
|
|
108
|
+
},
|
|
109
|
+
technicalVerdict: matchesExpectation ? "TECHNICAL_PASS" : "TECHNICAL_FAIL",
|
|
110
|
+
warnings: envelope.warnings.map((warning) => warning.code),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function recordBase(fixture, candidate, arm, values) {
|
|
114
|
+
const digest = values.context.digest;
|
|
115
|
+
return {
|
|
116
|
+
arm,
|
|
117
|
+
candidate,
|
|
118
|
+
capsules: values.capsules,
|
|
119
|
+
claimScope: fixture.claimScope,
|
|
120
|
+
conflicts: values.conflicts,
|
|
121
|
+
context: values.context,
|
|
122
|
+
delivery: { attempts: fixture.deliveryAttempts, uniqueDigestCount: digest === null ? 0 : 1 },
|
|
123
|
+
fixtureId: fixture.id,
|
|
124
|
+
hostAdapter: null,
|
|
125
|
+
measurements: unavailableMeasurements(),
|
|
126
|
+
model: { provider: null, version: null },
|
|
127
|
+
productVerdict: "INCONCLUSIVE",
|
|
128
|
+
selected: values.selected,
|
|
129
|
+
shadowed: values.shadowed,
|
|
130
|
+
sourceDigest: canonicalContextDigest(fixture.target),
|
|
131
|
+
structural: values.structural,
|
|
132
|
+
taskDigest: canonicalContextDigest(fixture.task),
|
|
133
|
+
technicalVerdict: values.technicalVerdict,
|
|
134
|
+
warnings: values.warnings,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function matchesTargetedExpectation(fixture, resolutionStatus, envelopeStatus, blockReason, selected, shadowed, conflicts) {
|
|
138
|
+
const expected = fixture.expectation;
|
|
139
|
+
return resolutionStatus === expected.resolutionStatus
|
|
140
|
+
&& envelopeStatus === expected.envelopeStatus
|
|
141
|
+
&& blockReason === expected.blockReason
|
|
142
|
+
&& equalJson(selected, expected.selected)
|
|
143
|
+
&& equalJson(shadowed, expected.shadowed)
|
|
144
|
+
&& equalJson(conflicts, expected.conflicts);
|
|
145
|
+
}
|
|
146
|
+
function activeRules(fixture) {
|
|
147
|
+
return contextComparisonRules(fixture.context)
|
|
148
|
+
.filter(({ rule }) => rule.status === undefined || rule.status === "active")
|
|
149
|
+
.sort(compareLayeredRules);
|
|
150
|
+
}
|
|
151
|
+
function applicableRules(fixture) {
|
|
152
|
+
return activeRules(fixture).filter(({ rule }) => matchesContextRelevance(rule, fixture.context.relevance));
|
|
153
|
+
}
|
|
154
|
+
function toReference(entry) {
|
|
155
|
+
return { id: entry.rule.id, layer: entry.layer };
|
|
156
|
+
}
|
|
157
|
+
function compareLayeredRules(left, right) {
|
|
158
|
+
return layerPriority(right.layer) - layerPriority(left.layer)
|
|
159
|
+
|| left.rule.topic.localeCompare(right.rule.topic)
|
|
160
|
+
|| left.rule.id.localeCompare(right.rule.id);
|
|
161
|
+
}
|
|
162
|
+
function layerPriority(layer) {
|
|
163
|
+
return ["common", "language", "personal", "team", "project", "task", "invariant"].indexOf(layer);
|
|
164
|
+
}
|
|
165
|
+
function duplicateTopicCount(entries) {
|
|
166
|
+
const counts = new Map();
|
|
167
|
+
for (const { rule } of entries)
|
|
168
|
+
counts.set(rule.topic, (counts.get(rule.topic) ?? 0) + 1);
|
|
169
|
+
return [...counts.values()].reduce((total, count) => total + Math.max(0, count - 1), 0);
|
|
170
|
+
}
|
|
171
|
+
function unavailableMeasurements() {
|
|
172
|
+
return {
|
|
173
|
+
conflictResolutionAccuracy: null,
|
|
174
|
+
correctionCount: null,
|
|
175
|
+
correctionRate: null,
|
|
176
|
+
latencyMs: null,
|
|
177
|
+
maintainerIntervention: null,
|
|
178
|
+
policySurvival: null,
|
|
179
|
+
taskSuccess: null,
|
|
180
|
+
tokenOverhead: null,
|
|
181
|
+
toolCallCount: null,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function blocked(code) {
|
|
185
|
+
return { code, schemaVersion: CONTEXT_COMPARISON_RESULT_SCHEMA, status: "blocked" };
|
|
186
|
+
}
|
|
187
|
+
function equalJson(left, right) {
|
|
188
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=context-comparison-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-comparison-evaluator.js","sourceRoot":"","sources":["../../src/context-comparison/context-comparison-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ContextLayer, ContextRule, EffectiveContextInput } from "../context-core/rule-types.js";
|
|
2
|
+
import { type ContextComparisonCandidate, type ContextComparisonManifest } from "./context-comparison-types.js";
|
|
3
|
+
export declare function parseContextComparisonManifest(value: unknown): ContextComparisonManifest | undefined;
|
|
4
|
+
export declare function parseContextComparisonCandidate(value: unknown): ContextComparisonCandidate | undefined;
|
|
5
|
+
export declare function contextComparisonRules(input: EffectiveContextInput): readonly {
|
|
6
|
+
readonly layer: ContextLayer;
|
|
7
|
+
readonly rule: ContextRule;
|
|
8
|
+
}[];
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { parseEffectiveContextInput } from "../context-core/effective-context-v2-input.js";
|
|
2
|
+
import { CONTEXT_COMPARISON_FIXTURE_SET, CONTEXT_COMPARISON_LAYERS, CONTEXT_COMPARISON_MANIFEST_SCHEMA, REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS, } from "./context-comparison-types.js";
|
|
3
|
+
const FIXTURE_KEYS = ["budget", "claimScope", "context", "deliveryAttempts", "expectation", "id", "target", "task"];
|
|
4
|
+
const MANIFEST_KEYS = ["fixtureSet", "fixtures", "schemaVersion"];
|
|
5
|
+
const TARGET_KEYS = ["fileRole", "language", "path"];
|
|
6
|
+
const EXPECTATION_KEYS = ["blockReason", "conflicts", "envelopeStatus", "resolutionStatus", "selected", "shadowed"];
|
|
7
|
+
const RULE_REFERENCE_KEYS = ["id", "layer"];
|
|
8
|
+
const CONFLICT_KEYS = ["reason", "ruleIds", "topic"];
|
|
9
|
+
const BUDGET_KEYS = ["maxCapsules", "maxChars"];
|
|
10
|
+
const BLOCK_REASONS = ["malformed-input", "resolution-blocked", "budget-exceeded", "unsafe-content"];
|
|
11
|
+
const CONTEXT_INPUT_KEYS = [
|
|
12
|
+
"productInvariants",
|
|
13
|
+
"taskDecisions",
|
|
14
|
+
"projectContracts",
|
|
15
|
+
"teamContracts",
|
|
16
|
+
"personalRules",
|
|
17
|
+
"languageDefaults",
|
|
18
|
+
"commonDefaults",
|
|
19
|
+
];
|
|
20
|
+
export function parseContextComparisonManifest(value) {
|
|
21
|
+
if (!isRecord(value) || !hasOnlyKeys(value, MANIFEST_KEYS) || value.schemaVersion !== CONTEXT_COMPARISON_MANIFEST_SCHEMA)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (value.fixtureSet !== CONTEXT_COMPARISON_FIXTURE_SET || !Array.isArray(value.fixtures))
|
|
24
|
+
return undefined;
|
|
25
|
+
const fixtures = value.fixtures.map(parseFixture);
|
|
26
|
+
if (fixtures.some((fixture) => fixture === undefined))
|
|
27
|
+
return undefined;
|
|
28
|
+
const parsed = fixtures;
|
|
29
|
+
return hasRequiredFixtureSet(parsed)
|
|
30
|
+
? { fixtureSet: value.fixtureSet, fixtures: parsed, schemaVersion: CONTEXT_COMPARISON_MANIFEST_SCHEMA }
|
|
31
|
+
: undefined;
|
|
32
|
+
}
|
|
33
|
+
export function parseContextComparisonCandidate(value) {
|
|
34
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ["commit", "packageVersion"]))
|
|
35
|
+
return undefined;
|
|
36
|
+
if (typeof value.commit !== "string" || !/^[0-9a-f]{7,64}$/u.test(value.commit))
|
|
37
|
+
return undefined;
|
|
38
|
+
if (typeof value.packageVersion !== "string" || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u.test(value.packageVersion))
|
|
39
|
+
return undefined;
|
|
40
|
+
return { commit: value.commit, packageVersion: value.packageVersion };
|
|
41
|
+
}
|
|
42
|
+
export function contextComparisonRules(input) {
|
|
43
|
+
return CONTEXT_INPUT_KEYS.flatMap((key) => input[key].map((rule) => ({ layer: layerFor(key), rule })));
|
|
44
|
+
}
|
|
45
|
+
function parseFixture(value) {
|
|
46
|
+
if (!isRecord(value) || !hasOnlyKeys(value, FIXTURE_KEYS))
|
|
47
|
+
return undefined;
|
|
48
|
+
const id = parseFixtureId(value.id);
|
|
49
|
+
const target = parseTarget(value.target);
|
|
50
|
+
const context = parseEffectiveContextInput(value.context);
|
|
51
|
+
const expectation = parseExpectation(value.expectation);
|
|
52
|
+
const budget = parseBudget(value.budget);
|
|
53
|
+
if (id === undefined || target === undefined || context === undefined || expectation === undefined || budget === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (!isSafeText(value.task, 500) || (value.claimScope !== "context-resolution" && value.claimScope !== "core-portability-only"))
|
|
56
|
+
return undefined;
|
|
57
|
+
if (value.deliveryAttempts !== 1 && value.deliveryAttempts !== 2)
|
|
58
|
+
return undefined;
|
|
59
|
+
if (!hasUniqueRuleIds(context))
|
|
60
|
+
return undefined;
|
|
61
|
+
return { budget, claimScope: value.claimScope, context, deliveryAttempts: value.deliveryAttempts, expectation, id, target, task: value.task };
|
|
62
|
+
}
|
|
63
|
+
function parseBudget(value) {
|
|
64
|
+
if (value === undefined)
|
|
65
|
+
return { maxCapsules: 8, maxChars: 1_600 };
|
|
66
|
+
if (!isRecord(value) || !hasOnlyKeys(value, BUDGET_KEYS))
|
|
67
|
+
return undefined;
|
|
68
|
+
const maxCapsules = value.maxCapsules;
|
|
69
|
+
const maxChars = value.maxChars;
|
|
70
|
+
if (typeof maxCapsules !== "number" || !Number.isInteger(maxCapsules) || maxCapsules < 1 || maxCapsules > 8)
|
|
71
|
+
return undefined;
|
|
72
|
+
if (typeof maxChars !== "number" || !Number.isInteger(maxChars) || maxChars < 1 || maxChars > 1_600)
|
|
73
|
+
return undefined;
|
|
74
|
+
return { maxCapsules, maxChars };
|
|
75
|
+
}
|
|
76
|
+
function parseFixtureId(value) {
|
|
77
|
+
return REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS.includes(value) ? value : undefined;
|
|
78
|
+
}
|
|
79
|
+
function parseTarget(value) {
|
|
80
|
+
if (!isRecord(value) || !hasOnlyKeys(value, TARGET_KEYS))
|
|
81
|
+
return undefined;
|
|
82
|
+
if (!isSafeIdentifier(value.fileRole) || !isSafeIdentifier(value.language) || !isSafeRelativePath(value.path))
|
|
83
|
+
return undefined;
|
|
84
|
+
return { fileRole: value.fileRole, language: value.language, path: value.path };
|
|
85
|
+
}
|
|
86
|
+
function parseExpectation(value) {
|
|
87
|
+
if (!isRecord(value) || !hasOnlyKeys(value, EXPECTATION_KEYS))
|
|
88
|
+
return undefined;
|
|
89
|
+
const selected = parseRuleReferences(value.selected);
|
|
90
|
+
const shadowed = parseRuleReferences(value.shadowed);
|
|
91
|
+
const conflicts = parseConflicts(value.conflicts);
|
|
92
|
+
if (selected === undefined || shadowed === undefined || conflicts === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
if (value.resolutionStatus !== "blocked" && value.resolutionStatus !== "resolved")
|
|
95
|
+
return undefined;
|
|
96
|
+
if (value.envelopeStatus !== "blocked" && value.envelopeStatus !== "resolved")
|
|
97
|
+
return undefined;
|
|
98
|
+
const blockReason = parseBlockReason(value.blockReason);
|
|
99
|
+
if ((value.envelopeStatus === "blocked" && blockReason === undefined) || (value.envelopeStatus === "resolved" && value.blockReason !== undefined))
|
|
100
|
+
return undefined;
|
|
101
|
+
return {
|
|
102
|
+
...(blockReason === undefined ? {} : { blockReason }),
|
|
103
|
+
conflicts,
|
|
104
|
+
envelopeStatus: value.envelopeStatus,
|
|
105
|
+
resolutionStatus: value.resolutionStatus,
|
|
106
|
+
selected,
|
|
107
|
+
shadowed,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function parseRuleReferences(value) {
|
|
111
|
+
if (!Array.isArray(value))
|
|
112
|
+
return undefined;
|
|
113
|
+
const references = value.map((entry) => {
|
|
114
|
+
if (!isRecord(entry) || !hasOnlyKeys(entry, RULE_REFERENCE_KEYS))
|
|
115
|
+
return undefined;
|
|
116
|
+
if (!isSafeIdentifier(entry.id) || !isContextLayer(entry.layer))
|
|
117
|
+
return undefined;
|
|
118
|
+
return { id: entry.id, layer: entry.layer };
|
|
119
|
+
});
|
|
120
|
+
return references.some((entry) => entry === undefined) ? undefined : references;
|
|
121
|
+
}
|
|
122
|
+
function parseConflicts(value) {
|
|
123
|
+
if (!Array.isArray(value))
|
|
124
|
+
return undefined;
|
|
125
|
+
const conflicts = value.map((entry) => {
|
|
126
|
+
if (!isRecord(entry) || !hasOnlyKeys(entry, CONFLICT_KEYS) || entry.reason !== "same-layer-conflict")
|
|
127
|
+
return undefined;
|
|
128
|
+
if (!isSafeIdentifier(entry.topic) || !Array.isArray(entry.ruleIds) || entry.ruleIds.length < 2 || entry.ruleIds.some((id) => !isSafeIdentifier(id)))
|
|
129
|
+
return undefined;
|
|
130
|
+
const ruleIds = [...entry.ruleIds].sort();
|
|
131
|
+
if (ruleIds.join("\u0000") !== entry.ruleIds.join("\u0000"))
|
|
132
|
+
return undefined;
|
|
133
|
+
return { reason: "same-layer-conflict", ruleIds, topic: entry.topic };
|
|
134
|
+
});
|
|
135
|
+
return conflicts.some((entry) => entry === undefined) ? undefined : conflicts;
|
|
136
|
+
}
|
|
137
|
+
function parseBlockReason(value) {
|
|
138
|
+
return BLOCK_REASONS.includes(value) ? value : undefined;
|
|
139
|
+
}
|
|
140
|
+
function hasRequiredFixtureSet(fixtures) {
|
|
141
|
+
const ids = fixtures.map((fixture) => fixture.id).sort();
|
|
142
|
+
const required = [...REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS].sort();
|
|
143
|
+
return ids.length === required.length && ids.every((id, index) => id === required[index]);
|
|
144
|
+
}
|
|
145
|
+
function hasUniqueRuleIds(input) {
|
|
146
|
+
const seen = new Set();
|
|
147
|
+
for (const { rule } of contextComparisonRules(input)) {
|
|
148
|
+
if (seen.has(rule.id))
|
|
149
|
+
return false;
|
|
150
|
+
seen.add(rule.id);
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
function layerFor(key) {
|
|
155
|
+
if (key === "productInvariants")
|
|
156
|
+
return "invariant";
|
|
157
|
+
if (key === "taskDecisions")
|
|
158
|
+
return "task";
|
|
159
|
+
if (key === "projectContracts")
|
|
160
|
+
return "project";
|
|
161
|
+
if (key === "teamContracts")
|
|
162
|
+
return "team";
|
|
163
|
+
if (key === "personalRules")
|
|
164
|
+
return "personal";
|
|
165
|
+
if (key === "languageDefaults")
|
|
166
|
+
return "language";
|
|
167
|
+
return "common";
|
|
168
|
+
}
|
|
169
|
+
function hasOnlyKeys(value, keys) {
|
|
170
|
+
const allowed = new Set(keys);
|
|
171
|
+
return Object.keys(value).every((key) => allowed.has(key));
|
|
172
|
+
}
|
|
173
|
+
function isContextLayer(value) {
|
|
174
|
+
return CONTEXT_COMPARISON_LAYERS.includes(value);
|
|
175
|
+
}
|
|
176
|
+
function isRecord(value) {
|
|
177
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
178
|
+
}
|
|
179
|
+
function isSafeIdentifier(value) {
|
|
180
|
+
return typeof value === "string" && /^[a-z][a-z0-9-]{0,119}$/u.test(value);
|
|
181
|
+
}
|
|
182
|
+
function isSafeRelativePath(value) {
|
|
183
|
+
return typeof value === "string" && value.length > 0 && value.length <= 240
|
|
184
|
+
&& !value.startsWith("/") && !value.includes("\\") && !value.split("/").includes("..")
|
|
185
|
+
&& !/[\u0000-\u001f\u007f]/u.test(value);
|
|
186
|
+
}
|
|
187
|
+
function isSafeText(value, maxLength) {
|
|
188
|
+
return typeof value === "string" && value.length > 0 && value.length <= maxLength && !/[\u0000-\u001f\u007f]/u.test(value);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=context-comparison-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-comparison-manifest.js","sourceRoot":"","sources":["../../src/context-comparison/context-comparison-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { ContextEnvelopeBlockReason } from "../context-core/context-envelope.js";
|
|
2
|
+
import type { ContextLayer, EffectiveContextInput } from "../context-core/rule-types.js";
|
|
3
|
+
export declare const CONTEXT_COMPARISON_MANIFEST_SCHEMA: "persona-context-comparison-manifest.1";
|
|
4
|
+
export declare const CONTEXT_COMPARISON_PROTOCOL: "persona-context-comparison-protocol.1";
|
|
5
|
+
export declare const CONTEXT_COMPARISON_RESULT_SCHEMA: "persona-context-comparison-result.1";
|
|
6
|
+
export declare const CONTEXT_COMPARISON_FIXTURE_SET: "p0-context-three-arm";
|
|
7
|
+
export declare const CONTEXT_COMPARISON_ARMS: readonly ["off", "legacy-broad", "targeted-layered"];
|
|
8
|
+
export declare const CONTEXT_COMPARISON_LAYERS: readonly ["invariant", "task", "project", "team", "personal", "language", "common"];
|
|
9
|
+
export declare const REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS: readonly ["personal-vs-team", "team-vs-project", "project-vs-task", "invariant-vs-project-team", "same-layer-ambiguity", "java-controller", "java-service", "typescript-core-reference", "duplicate-delivery", "context-budget-overflow"];
|
|
10
|
+
export type ContextComparisonArm = (typeof CONTEXT_COMPARISON_ARMS)[number];
|
|
11
|
+
export type ContextComparisonLayer = (typeof CONTEXT_COMPARISON_LAYERS)[number];
|
|
12
|
+
export type ContextComparisonFixtureId = (typeof REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS)[number];
|
|
13
|
+
export type ContextComparisonCandidate = {
|
|
14
|
+
readonly commit: string;
|
|
15
|
+
readonly packageVersion: string;
|
|
16
|
+
};
|
|
17
|
+
export type ContextComparisonTarget = {
|
|
18
|
+
readonly fileRole: string;
|
|
19
|
+
readonly language: string;
|
|
20
|
+
readonly path: string;
|
|
21
|
+
};
|
|
22
|
+
export type ContextComparisonBudget = {
|
|
23
|
+
readonly maxCapsules: number;
|
|
24
|
+
readonly maxChars: number;
|
|
25
|
+
};
|
|
26
|
+
export type ContextComparisonRuleReference = {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
readonly layer: ContextLayer;
|
|
29
|
+
};
|
|
30
|
+
export type ContextComparisonConflict = {
|
|
31
|
+
readonly reason: "same-layer-conflict";
|
|
32
|
+
readonly ruleIds: readonly string[];
|
|
33
|
+
readonly topic: string;
|
|
34
|
+
};
|
|
35
|
+
export type ContextComparisonExpectation = {
|
|
36
|
+
readonly blockReason?: ContextEnvelopeBlockReason;
|
|
37
|
+
readonly conflicts: readonly ContextComparisonConflict[];
|
|
38
|
+
readonly envelopeStatus: "blocked" | "resolved";
|
|
39
|
+
readonly resolutionStatus: "blocked" | "resolved";
|
|
40
|
+
readonly selected: readonly ContextComparisonRuleReference[];
|
|
41
|
+
readonly shadowed: readonly ContextComparisonRuleReference[];
|
|
42
|
+
};
|
|
43
|
+
export type ContextComparisonFixture = {
|
|
44
|
+
readonly budget: ContextComparisonBudget;
|
|
45
|
+
readonly claimScope: "context-resolution" | "core-portability-only";
|
|
46
|
+
readonly context: EffectiveContextInput;
|
|
47
|
+
readonly deliveryAttempts: 1 | 2;
|
|
48
|
+
readonly expectation: ContextComparisonExpectation;
|
|
49
|
+
readonly id: ContextComparisonFixtureId;
|
|
50
|
+
readonly target: ContextComparisonTarget;
|
|
51
|
+
readonly task: string;
|
|
52
|
+
};
|
|
53
|
+
export type ContextComparisonManifest = {
|
|
54
|
+
readonly fixtureSet: typeof CONTEXT_COMPARISON_FIXTURE_SET;
|
|
55
|
+
readonly fixtures: readonly ContextComparisonFixture[];
|
|
56
|
+
readonly schemaVersion: typeof CONTEXT_COMPARISON_MANIFEST_SCHEMA;
|
|
57
|
+
};
|
|
58
|
+
export type ContextComparisonMeasurements = {
|
|
59
|
+
readonly conflictResolutionAccuracy: number | null;
|
|
60
|
+
readonly correctionCount: number | null;
|
|
61
|
+
readonly correctionRate: number | null;
|
|
62
|
+
readonly latencyMs: number | null;
|
|
63
|
+
readonly maintainerIntervention: boolean | null;
|
|
64
|
+
readonly policySurvival: boolean | null;
|
|
65
|
+
readonly taskSuccess: boolean | null;
|
|
66
|
+
readonly tokenOverhead: number | null;
|
|
67
|
+
readonly toolCallCount: number | null;
|
|
68
|
+
};
|
|
69
|
+
export type ContextComparisonProductVerdict = "INCONCLUSIVE" | "PRODUCT_GO" | "PRODUCT_NO_GO";
|
|
70
|
+
export type ContextComparisonStructuralMetrics = {
|
|
71
|
+
readonly activeRuleCount: number;
|
|
72
|
+
readonly applicableRuleCount: number;
|
|
73
|
+
readonly contradictionCount: number;
|
|
74
|
+
readonly overreachCount: number;
|
|
75
|
+
};
|
|
76
|
+
export type ContextComparisonRecord = {
|
|
77
|
+
readonly arm: ContextComparisonArm;
|
|
78
|
+
readonly candidate: ContextComparisonCandidate;
|
|
79
|
+
readonly capsules: {
|
|
80
|
+
readonly chars: number;
|
|
81
|
+
readonly count: number;
|
|
82
|
+
};
|
|
83
|
+
readonly claimScope: ContextComparisonFixture["claimScope"];
|
|
84
|
+
readonly conflicts: readonly ContextComparisonConflict[];
|
|
85
|
+
readonly context: {
|
|
86
|
+
readonly blockReason: ContextEnvelopeBlockReason | null;
|
|
87
|
+
readonly digest: string | null;
|
|
88
|
+
readonly mode: "disabled" | "legacy-broad-compatibility" | "targeted-layered";
|
|
89
|
+
readonly status: "blocked" | "disabled" | "resolved";
|
|
90
|
+
};
|
|
91
|
+
readonly delivery: {
|
|
92
|
+
readonly attempts: 1 | 2;
|
|
93
|
+
readonly uniqueDigestCount: number;
|
|
94
|
+
};
|
|
95
|
+
readonly fixtureId: ContextComparisonFixtureId;
|
|
96
|
+
readonly hostAdapter: string | null;
|
|
97
|
+
readonly measurements: ContextComparisonMeasurements;
|
|
98
|
+
readonly model: {
|
|
99
|
+
readonly provider: string | null;
|
|
100
|
+
readonly version: string | null;
|
|
101
|
+
};
|
|
102
|
+
readonly productVerdict: ContextComparisonProductVerdict;
|
|
103
|
+
readonly selected: readonly ContextComparisonRuleReference[];
|
|
104
|
+
readonly shadowed: readonly ContextComparisonRuleReference[];
|
|
105
|
+
readonly sourceDigest: string;
|
|
106
|
+
readonly structural: ContextComparisonStructuralMetrics;
|
|
107
|
+
readonly taskDigest: string;
|
|
108
|
+
readonly technicalVerdict: "TECHNICAL_FAIL" | "TECHNICAL_PASS";
|
|
109
|
+
readonly warnings: readonly string[];
|
|
110
|
+
};
|
|
111
|
+
export type ContextComparisonResult = {
|
|
112
|
+
readonly code: "context-comparison-candidate-invalid" | "context-comparison-manifest-invalid";
|
|
113
|
+
readonly schemaVersion: typeof CONTEXT_COMPARISON_RESULT_SCHEMA;
|
|
114
|
+
readonly status: "blocked";
|
|
115
|
+
} | {
|
|
116
|
+
readonly candidate: ContextComparisonCandidate;
|
|
117
|
+
readonly manifestDigest: string;
|
|
118
|
+
readonly productVerdict: ContextComparisonProductVerdict;
|
|
119
|
+
readonly protocolVersion: typeof CONTEXT_COMPARISON_PROTOCOL;
|
|
120
|
+
readonly records: readonly ContextComparisonRecord[];
|
|
121
|
+
readonly schemaVersion: typeof CONTEXT_COMPARISON_RESULT_SCHEMA;
|
|
122
|
+
readonly status: "ready";
|
|
123
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const CONTEXT_COMPARISON_MANIFEST_SCHEMA = "persona-context-comparison-manifest.1";
|
|
2
|
+
export const CONTEXT_COMPARISON_PROTOCOL = "persona-context-comparison-protocol.1";
|
|
3
|
+
export const CONTEXT_COMPARISON_RESULT_SCHEMA = "persona-context-comparison-result.1";
|
|
4
|
+
export const CONTEXT_COMPARISON_FIXTURE_SET = "p0-context-three-arm";
|
|
5
|
+
export const CONTEXT_COMPARISON_ARMS = ["off", "legacy-broad", "targeted-layered"];
|
|
6
|
+
export const CONTEXT_COMPARISON_LAYERS = ["invariant", "task", "project", "team", "personal", "language", "common"];
|
|
7
|
+
export const REQUIRED_CONTEXT_COMPARISON_FIXTURE_IDS = [
|
|
8
|
+
"personal-vs-team",
|
|
9
|
+
"team-vs-project",
|
|
10
|
+
"project-vs-task",
|
|
11
|
+
"invariant-vs-project-team",
|
|
12
|
+
"same-layer-ambiguity",
|
|
13
|
+
"java-controller",
|
|
14
|
+
"java-service",
|
|
15
|
+
"typescript-core-reference",
|
|
16
|
+
"duplicate-delivery",
|
|
17
|
+
"context-budget-overflow",
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=context-comparison-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-comparison-types.js","sourceRoot":"","sources":["../../src/context-comparison/context-comparison-types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kCAAkC,GAAG,uCAAgD,CAAA;AAClG,MAAM,CAAC,MAAM,2BAA2B,GAAG,uCAAgD,CAAA;AAC3F,MAAM,CAAC,MAAM,gCAAgC,GAAG,qCAA8C,CAAA;AAC9F,MAAM,CAAC,MAAM,8BAA8B,GAAG,sBAA+B,CAAA;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,CAAU,CAAA;AAC3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAA;AAC5H,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,2BAA2B;IAC3B,sBAAsB;IACtB,iBAAiB;IACjB,cAAc;IACd,2BAA2B;IAC3B,oBAAoB;IACpB,yBAAyB;CACjB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context-comparison/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA;AACjD,cAAc,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ContextRule } from "../context-core/rule-types.js";
|
|
2
|
+
export declare const TEAM_PROFILE_V2_SCHEMA: "persona-context-team-profile.2";
|
|
3
|
+
export type TeamProfileV2Relevance = {
|
|
4
|
+
readonly fileRoles?: readonly string[];
|
|
5
|
+
readonly languages?: readonly string[];
|
|
6
|
+
readonly skillIds?: readonly string[];
|
|
7
|
+
};
|
|
8
|
+
export type TeamProfileV2Rule = {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly topic: string;
|
|
11
|
+
readonly text: string;
|
|
12
|
+
readonly status: "active" | "pending" | "superseded";
|
|
13
|
+
readonly relevance?: TeamProfileV2Relevance;
|
|
14
|
+
};
|
|
15
|
+
export type TeamProfileV2 = {
|
|
16
|
+
readonly schemaVersion: typeof TEAM_PROFILE_V2_SCHEMA;
|
|
17
|
+
readonly teamKey: string;
|
|
18
|
+
readonly rules: readonly TeamProfileV2Rule[];
|
|
19
|
+
};
|
|
20
|
+
export type TeamContextLayerV2 = {
|
|
21
|
+
readonly teamKey: string;
|
|
22
|
+
readonly teamContracts: readonly ContextRule[];
|
|
23
|
+
};
|
|
24
|
+
export type TeamProfileV2ValidationCode = "team-profile-v2-invalid-schema" | "team-profile-v2-unsafe-content";
|
|
25
|
+
export declare class TeamProfileV2ValidationError extends Error {
|
|
26
|
+
readonly code: TeamProfileV2ValidationCode;
|
|
27
|
+
constructor(code: TeamProfileV2ValidationCode);
|
|
28
|
+
}
|
|
29
|
+
export declare function parseTeamProfileV2(value: unknown): TeamProfileV2;
|
|
30
|
+
export declare function toTeamContextLayerV2(profile: TeamProfileV2): TeamContextLayerV2;
|