@sayoriqwq/effect-harness 0.0.3 → 0.0.4
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/src/harness/ProviderDiscovery.d.ts +5 -2
- package/dist/src/harness/ProviderDiscovery.js +11 -7
- package/dist/src/harness/ProviderDiscovery.js.map +1 -1
- package/dist/src/harness/verify/ProviderProfile.js +29 -9
- package/dist/src/harness/verify/ProviderProfile.js.map +1 -1
- package/dist/src/harness/verify/TsgoPolicy.d.ts +3 -0
- package/dist/src/harness/verify/TsgoPolicy.js +3 -0
- package/dist/src/harness/verify/TsgoPolicy.js.map +1 -1
- package/harness/diagnostic-layers.md +1 -1
- package/package.json +1 -1
- package/provider/docs/package-config.md +16 -0
- package/provider/docs/quality-policy.md +14 -4
- package/provider/effect-harness.provider.json +43 -7
- package/provider/index.md +4 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Path } from 'effect';
|
|
1
|
+
import { Effect, FileSystem, Path } from 'effect';
|
|
2
2
|
import { HarnessError } from './Errors.ts';
|
|
3
3
|
type JsonRecord = Record<string, unknown>;
|
|
4
4
|
interface ManagedFileDeclaration {
|
|
@@ -7,6 +7,7 @@ interface ManagedFileDeclaration {
|
|
|
7
7
|
readonly targetPath: string;
|
|
8
8
|
readonly contentType: string;
|
|
9
9
|
readonly managed: boolean;
|
|
10
|
+
readonly content: string;
|
|
10
11
|
readonly targetUsage?: string;
|
|
11
12
|
}
|
|
12
13
|
interface ManagedFilesContribution {
|
|
@@ -123,6 +124,7 @@ export declare const discoverProvider: (harness: string) => Effect.Effect<{
|
|
|
123
124
|
targetPath: string;
|
|
124
125
|
contentType: string;
|
|
125
126
|
managed: boolean;
|
|
127
|
+
content: string;
|
|
126
128
|
}[];
|
|
127
129
|
};
|
|
128
130
|
snippets: {
|
|
@@ -135,6 +137,7 @@ export declare const discoverProvider: (harness: string) => Effect.Effect<{
|
|
|
135
137
|
targetPath: string;
|
|
136
138
|
contentType: string;
|
|
137
139
|
managed: boolean;
|
|
140
|
+
content: string;
|
|
138
141
|
}[];
|
|
139
142
|
};
|
|
140
143
|
contributions: {
|
|
@@ -165,5 +168,5 @@ export declare const discoverProvider: (harness: string) => Effect.Effect<{
|
|
|
165
168
|
artifactReferences: JsonRecord;
|
|
166
169
|
};
|
|
167
170
|
internalHarnessSurfaces: JsonRecord;
|
|
168
|
-
}, HarnessError | import("effect/PlatformError").PlatformError,
|
|
171
|
+
}, HarnessError | import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path>;
|
|
169
172
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Path } from 'effect';
|
|
1
|
+
import { Effect, FileSystem, Path } from 'effect';
|
|
2
2
|
import { readJson } from "../platform/Json.js";
|
|
3
3
|
import { HarnessError } from "./Errors.js";
|
|
4
4
|
import { isRecord } from "./verify/JsonFields.js";
|
|
@@ -31,27 +31,31 @@ const expectStringArray = Effect.fnUntraced(function* (value, source) {
|
|
|
31
31
|
const array = yield* expectArray(value, source);
|
|
32
32
|
return yield* Effect.forEach(array, (entry, index) => expectString(entry, `${source}[${index}]`));
|
|
33
33
|
});
|
|
34
|
-
const expectManagedFileDeclaration = Effect.fnUntraced(function* (value, source) {
|
|
34
|
+
const expectManagedFileDeclaration = Effect.fnUntraced(function* (value, source, artifactRoot) {
|
|
35
35
|
const file = yield* expectRecord(value, source);
|
|
36
|
+
const path = yield* Path.Path;
|
|
37
|
+
const fs = yield* FileSystem.FileSystem;
|
|
38
|
+
const sourcePath = yield* expectString(file.sourcePath, `${source}.sourcePath`);
|
|
36
39
|
const targetUsage = file.targetUsage === undefined
|
|
37
40
|
? undefined
|
|
38
41
|
: yield* expectString(file.targetUsage, `${source}.targetUsage`);
|
|
39
42
|
return {
|
|
40
43
|
id: yield* expectString(file.id, `${source}.id`),
|
|
41
|
-
sourcePath
|
|
44
|
+
sourcePath,
|
|
42
45
|
targetPath: yield* expectString(file.targetPath, `${source}.targetPath`),
|
|
43
46
|
contentType: yield* expectString(file.contentType, `${source}.contentType`),
|
|
44
47
|
managed: yield* expectBoolean(file.managed, `${source}.managed`),
|
|
48
|
+
content: yield* fs.readFileString(path.join(artifactRoot, sourcePath)),
|
|
45
49
|
...(targetUsage === undefined ? {} : { targetUsage }),
|
|
46
50
|
};
|
|
47
51
|
});
|
|
48
|
-
const expectManagedFilesContribution = Effect.fnUntraced(function* (value, source) {
|
|
52
|
+
const expectManagedFilesContribution = Effect.fnUntraced(function* (value, source, artifactRoot) {
|
|
49
53
|
const contribution = yield* expectRecord(value, source);
|
|
50
54
|
const files = yield* expectArray(contribution.files, `${source}.files`);
|
|
51
55
|
return {
|
|
52
56
|
mode: yield* expectString(contribution.mode, `${source}.mode`),
|
|
53
57
|
targetBasePath: yield* expectString(contribution.targetBasePath, `${source}.targetBasePath`),
|
|
54
|
-
files: yield* Effect.forEach(files, (file, index) => expectManagedFileDeclaration(file, `${source}.files[${index}]
|
|
58
|
+
files: yield* Effect.forEach(files, (file, index) => expectManagedFileDeclaration(file, `${source}.files[${index}]`, artifactRoot)),
|
|
55
59
|
};
|
|
56
60
|
});
|
|
57
61
|
function expectNamedRecord(record, field, source) {
|
|
@@ -123,8 +127,8 @@ export const discoverProvider = Effect.fnUntraced(function* (harness) {
|
|
|
123
127
|
targetManagedSurfaces: {
|
|
124
128
|
targetReceives: yield* expectStringArray(managedSurfaces.targetReceives, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetReceives`),
|
|
125
129
|
targetDoesNotReceive: yield* expectStringArray(managedSurfaces.targetDoesNotReceive, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetDoesNotReceive`),
|
|
126
|
-
documentationBundle: yield* expectManagedFilesContribution(contributions.documentationBundle, `provider profile.profiles.${defaultProfile}.contributions.documentationBundle
|
|
127
|
-
snippets: yield* expectManagedFilesContribution(contributions.snippets, `provider profile.profiles.${defaultProfile}.contributions.snippets
|
|
130
|
+
documentationBundle: yield* expectManagedFilesContribution(contributions.documentationBundle, `provider profile.profiles.${defaultProfile}.contributions.documentationBundle`, artifactRoot),
|
|
131
|
+
snippets: yield* expectManagedFilesContribution(contributions.snippets, `provider profile.profiles.${defaultProfile}.contributions.snippets`, artifactRoot),
|
|
128
132
|
contributions: {
|
|
129
133
|
packageJson: yield* expectNamedRecord(contributions, 'packageJson', `provider profile.profiles.${defaultProfile}.contributions`),
|
|
130
134
|
tsconfig: yield* expectNamedRecord(contributions, 'tsconfig', `provider profile.profiles.${defaultProfile}.contributions`),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderDiscovery.js","sourceRoot":"","sources":["../../../src/harness/ProviderDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAqFjD,SAAS,gBAAgB,CAAC,KAAc,EAAE,MAAc;IACtD,OAAO,QAAQ,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC,CAAC,CAAA;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,MAAc;IAClD,OAAO,QAAQ,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,EAAE,CAAC,CAAC,CAAA;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,MAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,MAAc;IACnD,OAAO,OAAO,KAAK,KAAK,SAAS;QAC/B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,oBAAoB,EAAE,CAAC,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,MAAc;IACjD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAc,EAAE,MAAc;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;AACnG,CAAC,CAAC,CAAA;AAEF,MAAM,4BAA4B,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAc,EAAE,MAAc;IAC9F,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS;QAChD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC,CAAA;IAElE,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,KAAK,CAAC;QAChD,UAAU,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,aAAa,CAAC;QACxE,UAAU,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,aAAa,CAAC;QACxE,WAAW,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC;QAC3E,OAAO,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;QAChE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KACrB,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,MAAM,8BAA8B,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAc,EAAE,MAAc;IAChG,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,CAAA;IACvE,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC;QAC9D,cAAc,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,MAAM,iBAAiB,CAAC;QAC5F,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,EAAE,GAAG,MAAM,UAAU,KAAK,GAAG,CAAC,CAAC;KACnF,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,SAAS,iBAAiB,CAAC,MAAkB,EAAE,KAAa,EAAE,MAAc;IAC1E,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,eAA2B;IAClF,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAA;IACpG,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,iBAAiB,EAAE,gCAAgC,CAAC;QAC7G,yBAAyB,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,2BAA2B,EAAE,gCAAgC,CAAC;QACjI,eAAe,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,iBAAiB,EAAE,gCAAgC,CAAC;KAC9G,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,eAA2B;IACvF,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAA;IAC9G,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,YAAY,EAAE,qCAAqC,CAAC,CAAA;IACpH,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,0CAA0C,CAAC;QAC9F,cAAc,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,EAAE,oDAAoD,CAAC;QAC5H,cAAc,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,cAAc,EAAE,oDAAoD,CAAC;QACjI,UAAU;KACX,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAe;IAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,2BAA2B,GAAG,uCAAuC,CAAA;IAC3E,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAA;IAEhF,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;IAC9E,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAClG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;IAC1F,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;IAC1F,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAA;IAC/G,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,6BAA6B,cAAc,EAAE,CAAC,CAAA;IACzH,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,6BAA6B,cAAc,EAAE,CAAC,CAAA;IAC/H,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,EAAE,6BAA6B,cAAc,EAAE,CAAC,CAAA;IACnI,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,gBAAgB,EAAE,6BAA6B,cAAc,EAAE,CAAC,CAAA;IACjI,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAA;IACxG,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;IACnF,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAA;IAC/E,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAA;IAEjE,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,YAAY;QACZ,mBAAmB;QACnB,2BAA2B;QAC3B,cAAc,EAAE;YACd,WAAW,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB,CAAC;YAC3E,cAAc,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,EAAE,sBAAsB,CAAC;YACpF,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,iCAAiC,CAAC;YAC7F,gBAAgB,EAAE,uDAAuD;YACzE,YAAY,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,oBAAoB,CAAC;SACpF;QACD,QAAQ,EAAE;YACR,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,8BAA8B,CAAC;YACpE,eAAe,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,2CAA2C,CAAC;YAC3G,eAAe,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,2CAA2C,CAAC;YAC3G,cAAc;SACf;QACD,eAAe,EAAE,cAAc;QAC/B,SAAS,EAAE;YACT,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,2BAA2B;YAC1C,oBAAoB,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,cAAc,EAAE,iDAAiD,CAAC;SAC7H;QACD,aAAa;QACb,qBAAqB,EAAE;YACrB,cAAc,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,cAAc,EAAE,6BAA6B,cAAc,iCAAiC,CAAC;YACtJ,oBAAoB,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,oBAAoB,EAAE,6BAA6B,cAAc,uCAAuC,CAAC;YACxK,mBAAmB,EAAE,KAAK,CAAC,CAAC,8BAA8B,CAAC,aAAa,CAAC,mBAAmB,EAAE,6BAA6B,cAAc,oCAAoC,CAAC;YAC9K,QAAQ,EAAE,KAAK,CAAC,CAAC,8BAA8B,CAAC,aAAa,CAAC,QAAQ,EAAE,6BAA6B,cAAc,yBAAyB,CAAC;YAC7I,aAAa,EAAE;gBACb,WAAW,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;gBAChI,QAAQ,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;gBAC1H,YAAY,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,cAAc,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;gBAClI,cAAc,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,gBAAgB,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;gBACtI,UAAU,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;gBAC9H,kBAAkB,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,aAAa,EAAE,oBAAoB,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;aAC/I;SACF;QACD,sBAAsB;QACtB,gBAAgB,EAAE;YAChB,kBAAkB,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,6BAA6B,cAAc,cAAc,CAAC;YAC/H,aAAa,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,aAAa,EAAE,6BAA6B,cAAc,gBAAgB,CAAC;YACnI,cAAc,EAAE;gBACd,oBAAoB,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,oBAAoB,EAAE,6BAA6B,cAAc,sCAAsC,CAAC;gBAClK,cAAc,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,EAAE,6BAA6B,cAAc,gCAAgC,CAAC;gBAC/I,oBAAoB,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,oBAAoB,EAAE,6BAA6B,cAAc,sCAAsC,CAAC;gBACtK,2BAA2B,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,2BAA2B,EAAE,6BAA6B,cAAc,6CAA6C,CAAC;aAC5L;YACD,qBAAqB,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,kBAAkB,CAAC;YACrG,kBAAkB,EAAE,sBAAsB,CAAC,UAAU;SACtD;QACD,uBAAuB,EAAE,aAAa,CAAC,eAAe;KAC3B,CAAA;AAC/B,CAAC,CAAC,CAAA","sourcesContent":["import { Effect, Path } from 'effect'\nimport { readJson } from '../platform/Json.ts'\nimport { HarnessError } from './Errors.ts'\nimport { isRecord } from './verify/JsonFields.ts'\n\ntype JsonRecord = Record<string, unknown>\n\ninterface ManagedFileDeclaration {\n readonly id: string\n readonly sourcePath: string\n readonly targetPath: string\n readonly contentType: string\n readonly managed: boolean\n readonly targetUsage?: string\n}\n\ninterface ManagedFilesContribution {\n readonly mode: string\n readonly targetBasePath: string\n readonly files: ReadonlyArray<ManagedFileDeclaration>\n}\n\nexport interface ProviderDiscovery {\n readonly schemaVersion: 1\n readonly artifactRoot: string\n readonly providerProfilePath: string\n readonly providerProfileRelativePath: 'provider/effect-harness.provider.json'\n readonly packageLocator: {\n readonly packageName: string\n readonly packageVersion: string\n readonly binName: 'effect-harness'\n readonly binPath: string\n readonly discoveryCommand: string\n readonly packageFiles: ReadonlyArray<string>\n }\n readonly provider: {\n readonly id: string\n readonly contractVersion: string\n readonly providerVersion: string\n readonly defaultProfile: string\n }\n readonly selectedProfile: string\n readonly discovery: {\n readonly mode: 'provider-discovery'\n readonly consumer: 'prelude'\n readonly profileSource: 'provider/effect-harness.provider.json'\n readonly targetLifecycleOwner: string\n }\n readonly deliveryModes: {\n readonly internalHarness: JsonRecord\n readonly providerArtifactReference: JsonRecord\n readonly exportedHarness: JsonRecord\n }\n readonly targetManagedSurfaces: {\n readonly targetReceives: ReadonlyArray<string>\n readonly targetDoesNotReceive: ReadonlyArray<string>\n readonly documentationBundle: ManagedFilesContribution\n readonly snippets: ManagedFilesContribution\n readonly contributions: {\n readonly packageJson: JsonRecord\n readonly tsconfig: JsonRecord\n readonly editorPolicy: JsonRecord\n readonly lintGuardrails: JsonRecord\n readonly testPolicy: JsonRecord\n readonly verificationPolicy: JsonRecord\n }\n }\n readonly artifactOnlyReferences: {\n readonly mode: string\n readonly targetDelivery: string\n readonly packageSurface: ReadonlyArray<string>\n readonly references: JsonRecord\n }\n readonly sourceIdentities: {\n readonly defaultSourceEntry: string\n readonly sourceEntries: ReadonlyArray<string>\n readonly sourceBoundary: {\n readonly providerRepoInternal: boolean\n readonly targetDelivery: string\n readonly targetMustNotReceive: ReadonlyArray<string>\n readonly allowedTargetSourceIdentity: ReadonlyArray<string>\n }\n readonly providerSourceEntries: JsonRecord\n readonly artifactReferences: JsonRecord\n }\n readonly internalHarnessSurfaces: JsonRecord\n}\n\nfunction decodeJsonRecord(value: unknown, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction expectRecord(value: unknown, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction expectString(value: unknown, source: string): Effect.Effect<string, HarnessError> {\n return typeof value === 'string'\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a string` }))\n}\n\nfunction expectBoolean(value: unknown, source: string): Effect.Effect<boolean, HarnessError> {\n return typeof value === 'boolean'\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a boolean` }))\n}\n\nfunction expectArray(value: unknown, source: string): Effect.Effect<ReadonlyArray<unknown>, HarnessError> {\n return Array.isArray(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be an array` }))\n}\n\nconst expectStringArray = Effect.fnUntraced(function* (value: unknown, source: string) {\n const array = yield* expectArray(value, source)\n return yield* Effect.forEach(array, (entry, index) => expectString(entry, `${source}[${index}]`))\n})\n\nconst expectManagedFileDeclaration = Effect.fnUntraced(function* (value: unknown, source: string) {\n const file = yield* expectRecord(value, source)\n const targetUsage = file.targetUsage === undefined\n ? undefined\n : yield* expectString(file.targetUsage, `${source}.targetUsage`)\n\n return {\n id: yield* expectString(file.id, `${source}.id`),\n sourcePath: yield* expectString(file.sourcePath, `${source}.sourcePath`),\n targetPath: yield* expectString(file.targetPath, `${source}.targetPath`),\n contentType: yield* expectString(file.contentType, `${source}.contentType`),\n managed: yield* expectBoolean(file.managed, `${source}.managed`),\n ...(targetUsage === undefined ? {} : { targetUsage }),\n } satisfies ManagedFileDeclaration\n})\n\nconst expectManagedFilesContribution = Effect.fnUntraced(function* (value: unknown, source: string) {\n const contribution = yield* expectRecord(value, source)\n const files = yield* expectArray(contribution.files, `${source}.files`)\n return {\n mode: yield* expectString(contribution.mode, `${source}.mode`),\n targetBasePath: yield* expectString(contribution.targetBasePath, `${source}.targetBasePath`),\n files: yield* Effect.forEach(files, (file, index) => expectManagedFileDeclaration(file, `${source}.files[${index}]`)),\n } satisfies ManagedFilesContribution\n})\n\nfunction expectNamedRecord(record: JsonRecord, field: string, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return expectRecord(record[field], `${source}.${field}`)\n}\n\nconst expectDeliveryModes = Effect.fnUntraced(function* (providerProfile: JsonRecord) {\n const deliveryModes = yield* expectNamedRecord(providerProfile, 'deliveryModes', 'provider profile')\n return {\n internalHarness: yield* expectNamedRecord(deliveryModes, 'internalHarness', 'provider profile.deliveryModes'),\n providerArtifactReference: yield* expectNamedRecord(deliveryModes, 'providerArtifactReference', 'provider profile.deliveryModes'),\n exportedHarness: yield* expectNamedRecord(deliveryModes, 'exportedHarness', 'provider profile.deliveryModes'),\n }\n})\n\nconst expectArtifactReferences = Effect.fnUntraced(function* (providerProfile: JsonRecord) {\n const artifactReferences = yield* expectNamedRecord(providerProfile, 'artifactReferences', 'provider profile')\n const references = yield* expectNamedRecord(artifactReferences, 'references', 'provider profile.artifactReferences')\n return {\n mode: yield* expectString(artifactReferences.mode, 'provider profile.artifactReferences.mode'),\n targetDelivery: yield* expectString(artifactReferences.targetDelivery, 'provider profile.artifactReferences.targetDelivery'),\n packageSurface: yield* expectStringArray(artifactReferences.packageSurface, 'provider profile.artifactReferences.packageSurface'),\n references,\n }\n})\n\nexport const discoverProvider = Effect.fnUntraced(function* (harness: string) {\n const path = yield* Path.Path\n const artifactRoot = path.resolve(harness)\n const providerProfileRelativePath = 'provider/effect-harness.provider.json'\n const providerProfilePath = path.join(artifactRoot, providerProfileRelativePath)\n\n const providerProfile = yield* readJson(providerProfilePath, decodeJsonRecord)\n const packageManifest = yield* readJson(path.join(artifactRoot, 'package.json'), decodeJsonRecord)\n const provider = yield* expectNamedRecord(providerProfile, 'provider', 'provider profile')\n const profiles = yield* expectNamedRecord(providerProfile, 'profiles', 'provider profile')\n const defaultProfile = yield* expectString(provider.defaultProfile, 'provider profile.provider.defaultProfile')\n const selectedProfile = yield* expectNamedRecord(profiles, defaultProfile, `provider profile.profiles.${defaultProfile}`)\n const contributions = yield* expectNamedRecord(selectedProfile, 'contributions', `provider profile.profiles.${defaultProfile}`)\n const managedSurfaces = yield* expectNamedRecord(selectedProfile, 'managedSurfaces', `provider profile.profiles.${defaultProfile}`)\n const sourceBoundary = yield* expectNamedRecord(selectedProfile, 'sourceBoundary', `provider profile.profiles.${defaultProfile}`)\n const selfConformance = yield* expectNamedRecord(providerProfile, 'selfConformance', 'provider profile')\n const packageBin = yield* expectNamedRecord(packageManifest, 'bin', 'package.json')\n const artifactOnlyReferences = yield* expectArtifactReferences(providerProfile)\n const deliveryModes = yield* expectDeliveryModes(providerProfile)\n\n return {\n schemaVersion: 1,\n artifactRoot,\n providerProfilePath,\n providerProfileRelativePath,\n packageLocator: {\n packageName: yield* expectString(packageManifest.name, 'package.json.name'),\n packageVersion: yield* expectString(packageManifest.version, 'package.json.version'),\n binName: 'effect-harness',\n binPath: yield* expectString(packageBin['effect-harness'], 'package.json.bin.effect-harness'),\n discoveryCommand: 'npx --yes @sayoriqwq/effect-harness provider-discover',\n packageFiles: yield* expectStringArray(packageManifest.files, 'package.json.files'),\n },\n provider: {\n id: yield* expectString(provider.id, 'provider profile.provider.id'),\n contractVersion: yield* expectString(provider.contractVersion, 'provider profile.provider.contractVersion'),\n providerVersion: yield* expectString(provider.providerVersion, 'provider profile.provider.providerVersion'),\n defaultProfile,\n },\n selectedProfile: defaultProfile,\n discovery: {\n mode: 'provider-discovery',\n consumer: 'prelude',\n profileSource: providerProfileRelativePath,\n targetLifecycleOwner: yield* expectString(selfConformance.lifecycleOwner, 'provider profile.selfConformance.lifecycleOwner'),\n },\n deliveryModes,\n targetManagedSurfaces: {\n targetReceives: yield* expectStringArray(managedSurfaces.targetReceives, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetReceives`),\n targetDoesNotReceive: yield* expectStringArray(managedSurfaces.targetDoesNotReceive, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetDoesNotReceive`),\n documentationBundle: yield* expectManagedFilesContribution(contributions.documentationBundle, `provider profile.profiles.${defaultProfile}.contributions.documentationBundle`),\n snippets: yield* expectManagedFilesContribution(contributions.snippets, `provider profile.profiles.${defaultProfile}.contributions.snippets`),\n contributions: {\n packageJson: yield* expectNamedRecord(contributions, 'packageJson', `provider profile.profiles.${defaultProfile}.contributions`),\n tsconfig: yield* expectNamedRecord(contributions, 'tsconfig', `provider profile.profiles.${defaultProfile}.contributions`),\n editorPolicy: yield* expectNamedRecord(contributions, 'editorPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n lintGuardrails: yield* expectNamedRecord(contributions, 'lintGuardrails', `provider profile.profiles.${defaultProfile}.contributions`),\n testPolicy: yield* expectNamedRecord(contributions, 'testPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n verificationPolicy: yield* expectNamedRecord(contributions, 'verificationPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n },\n },\n artifactOnlyReferences,\n sourceIdentities: {\n defaultSourceEntry: yield* expectString(selectedProfile.sourceEntry, `provider profile.profiles.${defaultProfile}.sourceEntry`),\n sourceEntries: yield* expectStringArray(selectedProfile.sourceEntries, `provider profile.profiles.${defaultProfile}.sourceEntries`),\n sourceBoundary: {\n providerRepoInternal: yield* expectBoolean(sourceBoundary.providerRepoInternal, `provider profile.profiles.${defaultProfile}.sourceBoundary.providerRepoInternal`),\n targetDelivery: yield* expectString(sourceBoundary.targetDelivery, `provider profile.profiles.${defaultProfile}.sourceBoundary.targetDelivery`),\n targetMustNotReceive: yield* expectStringArray(sourceBoundary.targetMustNotReceive, `provider profile.profiles.${defaultProfile}.sourceBoundary.targetMustNotReceive`),\n allowedTargetSourceIdentity: yield* expectStringArray(sourceBoundary.allowedTargetSourceIdentity, `provider profile.profiles.${defaultProfile}.sourceBoundary.allowedTargetSourceIdentity`),\n },\n providerSourceEntries: yield* expectNamedRecord(providerProfile, 'sourceEntries', 'provider profile'),\n artifactReferences: artifactOnlyReferences.references,\n },\n internalHarnessSurfaces: deliveryModes.internalHarness,\n } satisfies ProviderDiscovery\n})\n"]}
|
|
1
|
+
{"version":3,"file":"ProviderDiscovery.js","sourceRoot":"","sources":["../../../src/harness/ProviderDiscovery.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, FileSystem, Path } from 'effect'\nimport { readJson } from '../platform/Json.ts'\nimport { HarnessError } from './Errors.ts'\nimport { isRecord } from './verify/JsonFields.ts'\n\ntype JsonRecord = Record<string, unknown>\n\ninterface ManagedFileDeclaration {\n readonly id: string\n readonly sourcePath: string\n readonly targetPath: string\n readonly contentType: string\n readonly managed: boolean\n readonly content: string\n readonly targetUsage?: string\n}\n\ninterface ManagedFilesContribution {\n readonly mode: string\n readonly targetBasePath: string\n readonly files: ReadonlyArray<ManagedFileDeclaration>\n}\n\nexport interface ProviderDiscovery {\n readonly schemaVersion: 1\n readonly artifactRoot: string\n readonly providerProfilePath: string\n readonly providerProfileRelativePath: 'provider/effect-harness.provider.json'\n readonly packageLocator: {\n readonly packageName: string\n readonly packageVersion: string\n readonly binName: 'effect-harness'\n readonly binPath: string\n readonly discoveryCommand: string\n readonly packageFiles: ReadonlyArray<string>\n }\n readonly provider: {\n readonly id: string\n readonly contractVersion: string\n readonly providerVersion: string\n readonly defaultProfile: string\n }\n readonly selectedProfile: string\n readonly discovery: {\n readonly mode: 'provider-discovery'\n readonly consumer: 'prelude'\n readonly profileSource: 'provider/effect-harness.provider.json'\n readonly targetLifecycleOwner: string\n }\n readonly deliveryModes: {\n readonly internalHarness: JsonRecord\n readonly providerArtifactReference: JsonRecord\n readonly exportedHarness: JsonRecord\n }\n readonly targetManagedSurfaces: {\n readonly targetReceives: ReadonlyArray<string>\n readonly targetDoesNotReceive: ReadonlyArray<string>\n readonly documentationBundle: ManagedFilesContribution\n readonly snippets: ManagedFilesContribution\n readonly contributions: {\n readonly packageJson: JsonRecord\n readonly tsconfig: JsonRecord\n readonly editorPolicy: JsonRecord\n readonly lintGuardrails: JsonRecord\n readonly testPolicy: JsonRecord\n readonly verificationPolicy: JsonRecord\n }\n }\n readonly artifactOnlyReferences: {\n readonly mode: string\n readonly targetDelivery: string\n readonly packageSurface: ReadonlyArray<string>\n readonly references: JsonRecord\n }\n readonly sourceIdentities: {\n readonly defaultSourceEntry: string\n readonly sourceEntries: ReadonlyArray<string>\n readonly sourceBoundary: {\n readonly providerRepoInternal: boolean\n readonly targetDelivery: string\n readonly targetMustNotReceive: ReadonlyArray<string>\n readonly allowedTargetSourceIdentity: ReadonlyArray<string>\n }\n readonly providerSourceEntries: JsonRecord\n readonly artifactReferences: JsonRecord\n }\n readonly internalHarnessSurfaces: JsonRecord\n}\n\nfunction decodeJsonRecord(value: unknown, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction expectRecord(value: unknown, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction expectString(value: unknown, source: string): Effect.Effect<string, HarnessError> {\n return typeof value === 'string'\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a string` }))\n}\n\nfunction expectBoolean(value: unknown, source: string): Effect.Effect<boolean, HarnessError> {\n return typeof value === 'boolean'\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a boolean` }))\n}\n\nfunction expectArray(value: unknown, source: string): Effect.Effect<ReadonlyArray<unknown>, HarnessError> {\n return Array.isArray(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be an array` }))\n}\n\nconst expectStringArray = Effect.fnUntraced(function* (value: unknown, source: string) {\n const array = yield* expectArray(value, source)\n return yield* Effect.forEach(array, (entry, index) => expectString(entry, `${source}[${index}]`))\n})\n\nconst expectManagedFileDeclaration = Effect.fnUntraced(function* (value: unknown, source: string, artifactRoot: string) {\n const file = yield* expectRecord(value, source)\n const path = yield* Path.Path\n const fs = yield* FileSystem.FileSystem\n const sourcePath = yield* expectString(file.sourcePath, `${source}.sourcePath`)\n const targetUsage = file.targetUsage === undefined\n ? undefined\n : yield* expectString(file.targetUsage, `${source}.targetUsage`)\n\n return {\n id: yield* expectString(file.id, `${source}.id`),\n sourcePath,\n targetPath: yield* expectString(file.targetPath, `${source}.targetPath`),\n contentType: yield* expectString(file.contentType, `${source}.contentType`),\n managed: yield* expectBoolean(file.managed, `${source}.managed`),\n content: yield* fs.readFileString(path.join(artifactRoot, sourcePath)),\n ...(targetUsage === undefined ? {} : { targetUsage }),\n } satisfies ManagedFileDeclaration\n})\n\nconst expectManagedFilesContribution = Effect.fnUntraced(function* (value: unknown, source: string, artifactRoot: string) {\n const contribution = yield* expectRecord(value, source)\n const files = yield* expectArray(contribution.files, `${source}.files`)\n return {\n mode: yield* expectString(contribution.mode, `${source}.mode`),\n targetBasePath: yield* expectString(contribution.targetBasePath, `${source}.targetBasePath`),\n files: yield* Effect.forEach(files, (file, index) => expectManagedFileDeclaration(file, `${source}.files[${index}]`, artifactRoot)),\n } satisfies ManagedFilesContribution\n})\n\nfunction expectNamedRecord(record: JsonRecord, field: string, source: string): Effect.Effect<JsonRecord, HarnessError> {\n return expectRecord(record[field], `${source}.${field}`)\n}\n\nconst expectDeliveryModes = Effect.fnUntraced(function* (providerProfile: JsonRecord) {\n const deliveryModes = yield* expectNamedRecord(providerProfile, 'deliveryModes', 'provider profile')\n return {\n internalHarness: yield* expectNamedRecord(deliveryModes, 'internalHarness', 'provider profile.deliveryModes'),\n providerArtifactReference: yield* expectNamedRecord(deliveryModes, 'providerArtifactReference', 'provider profile.deliveryModes'),\n exportedHarness: yield* expectNamedRecord(deliveryModes, 'exportedHarness', 'provider profile.deliveryModes'),\n }\n})\n\nconst expectArtifactReferences = Effect.fnUntraced(function* (providerProfile: JsonRecord) {\n const artifactReferences = yield* expectNamedRecord(providerProfile, 'artifactReferences', 'provider profile')\n const references = yield* expectNamedRecord(artifactReferences, 'references', 'provider profile.artifactReferences')\n return {\n mode: yield* expectString(artifactReferences.mode, 'provider profile.artifactReferences.mode'),\n targetDelivery: yield* expectString(artifactReferences.targetDelivery, 'provider profile.artifactReferences.targetDelivery'),\n packageSurface: yield* expectStringArray(artifactReferences.packageSurface, 'provider profile.artifactReferences.packageSurface'),\n references,\n }\n})\n\nexport const discoverProvider = Effect.fnUntraced(function* (harness: string) {\n const path = yield* Path.Path\n const artifactRoot = path.resolve(harness)\n const providerProfileRelativePath = 'provider/effect-harness.provider.json'\n const providerProfilePath = path.join(artifactRoot, providerProfileRelativePath)\n\n const providerProfile = yield* readJson(providerProfilePath, decodeJsonRecord)\n const packageManifest = yield* readJson(path.join(artifactRoot, 'package.json'), decodeJsonRecord)\n const provider = yield* expectNamedRecord(providerProfile, 'provider', 'provider profile')\n const profiles = yield* expectNamedRecord(providerProfile, 'profiles', 'provider profile')\n const defaultProfile = yield* expectString(provider.defaultProfile, 'provider profile.provider.defaultProfile')\n const selectedProfile = yield* expectNamedRecord(profiles, defaultProfile, `provider profile.profiles.${defaultProfile}`)\n const contributions = yield* expectNamedRecord(selectedProfile, 'contributions', `provider profile.profiles.${defaultProfile}`)\n const managedSurfaces = yield* expectNamedRecord(selectedProfile, 'managedSurfaces', `provider profile.profiles.${defaultProfile}`)\n const sourceBoundary = yield* expectNamedRecord(selectedProfile, 'sourceBoundary', `provider profile.profiles.${defaultProfile}`)\n const selfConformance = yield* expectNamedRecord(providerProfile, 'selfConformance', 'provider profile')\n const packageBin = yield* expectNamedRecord(packageManifest, 'bin', 'package.json')\n const artifactOnlyReferences = yield* expectArtifactReferences(providerProfile)\n const deliveryModes = yield* expectDeliveryModes(providerProfile)\n\n return {\n schemaVersion: 1,\n artifactRoot,\n providerProfilePath,\n providerProfileRelativePath,\n packageLocator: {\n packageName: yield* expectString(packageManifest.name, 'package.json.name'),\n packageVersion: yield* expectString(packageManifest.version, 'package.json.version'),\n binName: 'effect-harness',\n binPath: yield* expectString(packageBin['effect-harness'], 'package.json.bin.effect-harness'),\n discoveryCommand: 'npx --yes @sayoriqwq/effect-harness provider-discover',\n packageFiles: yield* expectStringArray(packageManifest.files, 'package.json.files'),\n },\n provider: {\n id: yield* expectString(provider.id, 'provider profile.provider.id'),\n contractVersion: yield* expectString(provider.contractVersion, 'provider profile.provider.contractVersion'),\n providerVersion: yield* expectString(provider.providerVersion, 'provider profile.provider.providerVersion'),\n defaultProfile,\n },\n selectedProfile: defaultProfile,\n discovery: {\n mode: 'provider-discovery',\n consumer: 'prelude',\n profileSource: providerProfileRelativePath,\n targetLifecycleOwner: yield* expectString(selfConformance.lifecycleOwner, 'provider profile.selfConformance.lifecycleOwner'),\n },\n deliveryModes,\n targetManagedSurfaces: {\n targetReceives: yield* expectStringArray(managedSurfaces.targetReceives, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetReceives`),\n targetDoesNotReceive: yield* expectStringArray(managedSurfaces.targetDoesNotReceive, `provider profile.profiles.${defaultProfile}.managedSurfaces.targetDoesNotReceive`),\n documentationBundle: yield* expectManagedFilesContribution(contributions.documentationBundle, `provider profile.profiles.${defaultProfile}.contributions.documentationBundle`, artifactRoot),\n snippets: yield* expectManagedFilesContribution(contributions.snippets, `provider profile.profiles.${defaultProfile}.contributions.snippets`, artifactRoot),\n contributions: {\n packageJson: yield* expectNamedRecord(contributions, 'packageJson', `provider profile.profiles.${defaultProfile}.contributions`),\n tsconfig: yield* expectNamedRecord(contributions, 'tsconfig', `provider profile.profiles.${defaultProfile}.contributions`),\n editorPolicy: yield* expectNamedRecord(contributions, 'editorPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n lintGuardrails: yield* expectNamedRecord(contributions, 'lintGuardrails', `provider profile.profiles.${defaultProfile}.contributions`),\n testPolicy: yield* expectNamedRecord(contributions, 'testPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n verificationPolicy: yield* expectNamedRecord(contributions, 'verificationPolicy', `provider profile.profiles.${defaultProfile}.contributions`),\n },\n },\n artifactOnlyReferences,\n sourceIdentities: {\n defaultSourceEntry: yield* expectString(selectedProfile.sourceEntry, `provider profile.profiles.${defaultProfile}.sourceEntry`),\n sourceEntries: yield* expectStringArray(selectedProfile.sourceEntries, `provider profile.profiles.${defaultProfile}.sourceEntries`),\n sourceBoundary: {\n providerRepoInternal: yield* expectBoolean(sourceBoundary.providerRepoInternal, `provider profile.profiles.${defaultProfile}.sourceBoundary.providerRepoInternal`),\n targetDelivery: yield* expectString(sourceBoundary.targetDelivery, `provider profile.profiles.${defaultProfile}.sourceBoundary.targetDelivery`),\n targetMustNotReceive: yield* expectStringArray(sourceBoundary.targetMustNotReceive, `provider profile.profiles.${defaultProfile}.sourceBoundary.targetMustNotReceive`),\n allowedTargetSourceIdentity: yield* expectStringArray(sourceBoundary.allowedTargetSourceIdentity, `provider profile.profiles.${defaultProfile}.sourceBoundary.allowedTargetSourceIdentity`),\n },\n providerSourceEntries: yield* expectNamedRecord(providerProfile, 'sourceEntries', 'provider profile'),\n artifactReferences: artifactOnlyReferences.references,\n },\n internalHarnessSurfaces: deliveryModes.internalHarness,\n } satisfies ProviderDiscovery\n})\n"]}
|
|
@@ -158,7 +158,7 @@ const expectedPackageGroups = {
|
|
|
158
158
|
},
|
|
159
159
|
testing: {
|
|
160
160
|
field: 'devDependencies',
|
|
161
|
-
packageNames: ['@effect/vitest'],
|
|
161
|
+
packageNames: ['@effect/vitest', 'vitest'],
|
|
162
162
|
},
|
|
163
163
|
diagnostics: {
|
|
164
164
|
field: 'devDependencies',
|
|
@@ -168,11 +168,15 @@ const expectedPackageGroups = {
|
|
|
168
168
|
field: 'devDependencies',
|
|
169
169
|
packageNames: ['@typescript/native-preview'],
|
|
170
170
|
},
|
|
171
|
+
linting: {
|
|
172
|
+
field: 'devDependencies',
|
|
173
|
+
packageNames: ['@antfu/eslint-config', 'eslint'],
|
|
174
|
+
},
|
|
171
175
|
};
|
|
172
176
|
const expectedLintCommand = 'pnpm lint --max-warnings 0';
|
|
173
177
|
const expectedLintScript = 'eslint';
|
|
174
178
|
const expectedTestCommand = 'pnpm test';
|
|
175
|
-
const expectedTestScript = 'vitest run
|
|
179
|
+
const expectedTestScript = 'vitest run';
|
|
176
180
|
const expectedVerifyCommand = 'pnpm verify';
|
|
177
181
|
const expectedVerifyScript = 'node bin/effect-harness.ts verify --harness .';
|
|
178
182
|
function assertPackageBaseline(errors, profileBaseline) {
|
|
@@ -275,7 +279,7 @@ function assertLintGuardrailsContribution(errors, contributions, packageManifest
|
|
|
275
279
|
assertArrayContainsString(errors, doesNotOwn, 'tsgo rule severity map', 'provider profile lintGuardrails.layers.doesNotOwn');
|
|
276
280
|
const rules = recordField(errors, lintGuardrails, 'rules', 'provider profile lintGuardrails contribution');
|
|
277
281
|
const restrictedImports = arrayField(errors, rules, 'restrictedImports', 'provider profile lintGuardrails.rules');
|
|
278
|
-
for (const source of ['node:test', '
|
|
282
|
+
for (const source of ['node:test', '@effect/cli', '@effect/cli/*', 'repos/effect/**', 'repos/tsgo/**']) {
|
|
279
283
|
assertArrayContainsString(errors, restrictedImports, source, 'provider profile lintGuardrails.rules.restrictedImports');
|
|
280
284
|
const eslintMarker = source.endsWith('/**')
|
|
281
285
|
? source.slice(0, -3)
|
|
@@ -284,6 +288,16 @@ function assertLintGuardrailsContribution(errors, contributions, packageManifest
|
|
|
284
288
|
: source;
|
|
285
289
|
assertEslintConfigContains(errors, eslintText, eslintMarker);
|
|
286
290
|
}
|
|
291
|
+
const restrictedVitestImports = arrayField(errors, rules, 'restrictedVitestImports', 'provider profile lintGuardrails.rules');
|
|
292
|
+
for (const importName of ['describe', 'it', 'test']) {
|
|
293
|
+
assertArrayContainsString(errors, restrictedVitestImports, importName, 'provider profile lintGuardrails.rules.restrictedVitestImports');
|
|
294
|
+
}
|
|
295
|
+
const allowedVitestImports = arrayField(errors, rules, 'allowedVitestImports', 'provider profile lintGuardrails.rules');
|
|
296
|
+
for (const importName of ['vi', 'beforeEach', 'afterEach', 'beforeAll', 'afterAll']) {
|
|
297
|
+
assertArrayContainsString(errors, allowedVitestImports, importName, 'provider profile lintGuardrails.rules.allowedVitestImports');
|
|
298
|
+
}
|
|
299
|
+
assertEslintConfigContains(errors, eslintText, 'vitest');
|
|
300
|
+
assertEslintConfigContains(errors, eslintText, 'importNames');
|
|
287
301
|
const restrictedSyntax = arrayField(errors, rules, 'restrictedSyntax', 'provider profile lintGuardrails.rules');
|
|
288
302
|
for (const syntax of ['Context.Tag', 'Effect.catchAllCause', 'Effect.ignore', 'Effect.serviceOption', '{ disableValidation: true }', 'plain it() in tests']) {
|
|
289
303
|
assertArrayContainsString(errors, restrictedSyntax, syntax, 'provider profile lintGuardrails.rules.restrictedSyntax');
|
|
@@ -297,21 +311,22 @@ function assertLintGuardrailsContribution(errors, contributions, packageManifest
|
|
|
297
311
|
assertEslintConfigContains(errors, eslintText, marker);
|
|
298
312
|
}
|
|
299
313
|
}
|
|
300
|
-
function assertTestPolicyContribution(errors, contributions
|
|
314
|
+
function assertTestPolicyContribution(errors, contributions) {
|
|
301
315
|
const testPolicy = recordField(errors, contributions, 'testPolicy', 'provider profile.profiles.codex-effect-v4.contributions');
|
|
302
316
|
assertStringValue(errors, stringField(errors, testPolicy, 'mode', 'provider profile testPolicy contribution'), 'command-policy', 'provider profile testPolicy.mode');
|
|
303
317
|
assertStringValue(errors, stringField(errors, testPolicy, 'stage', 'provider profile testPolicy contribution'), 'tests', 'provider profile testPolicy.stage');
|
|
304
318
|
assertStringValue(errors, stringField(errors, testPolicy, 'command', 'provider profile testPolicy contribution'), expectedTestCommand, 'provider profile testPolicy.command');
|
|
305
319
|
assertStringValue(errors, stringField(errors, testPolicy, 'packageScript', 'provider profile testPolicy contribution'), expectedTestScript, 'provider profile testPolicy.packageScript');
|
|
306
320
|
assertStringValue(errors, stringField(errors, testPolicy, 'framework', 'provider profile testPolicy contribution'), '@effect/vitest', 'provider profile testPolicy.framework');
|
|
307
|
-
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'expectedEntries', 'provider profile testPolicy contribution'), 'tests
|
|
321
|
+
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'expectedEntries', 'provider profile testPolicy contribution'), 'tests/**/*.test.ts', 'provider profile testPolicy.expectedEntries');
|
|
308
322
|
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.effect', 'provider profile testPolicy.effectEntrypoints');
|
|
309
323
|
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.live', 'provider profile testPolicy.effectEntrypoints');
|
|
310
324
|
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'layer', 'provider profile testPolicy.effectEntrypoints');
|
|
311
325
|
assertArrayContainsString(errors, arrayField(errors, testPolicy, 'disallowedImports', 'provider profile testPolicy contribution'), 'node:test', 'provider profile testPolicy.disallowedImports');
|
|
312
|
-
|
|
313
|
-
const
|
|
314
|
-
|
|
326
|
+
const disallowedVitestImports = arrayField(errors, testPolicy, 'disallowedVitestImports', 'provider profile testPolicy contribution');
|
|
327
|
+
for (const importName of ['describe', 'it', 'test']) {
|
|
328
|
+
assertArrayContainsString(errors, disallowedVitestImports, importName, 'provider profile testPolicy.disallowedVitestImports');
|
|
329
|
+
}
|
|
315
330
|
}
|
|
316
331
|
function stageRecordByTag(stages, tag) {
|
|
317
332
|
return stages?.find(stage => isRecord(stage) && stage.tag === tag);
|
|
@@ -377,11 +392,16 @@ function assertPackageScriptsContribution(errors, packageContribution, packageMa
|
|
|
377
392
|
const contributionScripts = recordField(errors, packageContribution, 'scripts', 'provider profile packageJson contribution');
|
|
378
393
|
const prepare = recordField(errors, contributionScripts, 'prepare', 'provider profile packageJson.scripts');
|
|
379
394
|
const typecheck = recordField(errors, contributionScripts, 'typecheck', 'provider profile packageJson.scripts');
|
|
395
|
+
const test = recordField(errors, contributionScripts, 'test', 'provider profile packageJson.scripts');
|
|
396
|
+
const lint = recordField(errors, contributionScripts, 'lint', 'provider profile packageJson.scripts');
|
|
380
397
|
assertStringValue(errors, stringField(errors, prepare, 'defaultCommand', 'provider profile packageJson.scripts.prepare'), expectedPrepareCommand, 'provider profile packageJson.scripts.prepare.defaultCommand');
|
|
381
398
|
assertStringValue(errors, stringField(errors, typecheck, 'defaultCommand', 'provider profile packageJson.scripts.typecheck'), expectedTypecheckCommand, 'provider profile packageJson.scripts.typecheck.defaultCommand');
|
|
399
|
+
assertStringValue(errors, stringField(errors, test, 'defaultCommand', 'provider profile packageJson.scripts.test'), expectedTestScript, 'provider profile packageJson.scripts.test.defaultCommand');
|
|
400
|
+
assertStringValue(errors, stringField(errors, lint, 'defaultCommand', 'provider profile packageJson.scripts.lint'), expectedLintScript, 'provider profile packageJson.scripts.lint.defaultCommand');
|
|
382
401
|
const manifestScripts = recordField(errors, packageManifest, 'scripts', 'package.json');
|
|
383
402
|
assertStringValue(errors, stringField(errors, manifestScripts, 'prepare', 'package.json.scripts'), expectedPrepareCommand, 'package.json.scripts.prepare');
|
|
384
403
|
assertStringValue(errors, stringField(errors, manifestScripts, 'typecheck', 'package.json.scripts'), expectedTypecheckCommand, 'package.json.scripts.typecheck');
|
|
404
|
+
assertStringValue(errors, stringField(errors, manifestScripts, 'lint', 'package.json.scripts'), expectedLintScript, 'package.json.scripts.lint');
|
|
385
405
|
}
|
|
386
406
|
function assertPackageJsonContribution(errors, contributions, packageManifest, workspaceText) {
|
|
387
407
|
const packageJson = recordField(errors, contributions, 'packageJson', 'provider profile.profiles.codex-effect-v4.contributions');
|
|
@@ -592,7 +612,7 @@ export const verifyProviderProfileContract = Effect.fnUntraced(function* (errors
|
|
|
592
612
|
assertTsconfigContributionMetadata(errors, contributions);
|
|
593
613
|
assertEditorPolicyContribution(errors, contributions, effectContract, tsgoContract, vscodeSettings);
|
|
594
614
|
assertLintGuardrailsContribution(errors, contributions, packageManifest, eslintText);
|
|
595
|
-
assertTestPolicyContribution(errors, contributions
|
|
615
|
+
assertTestPolicyContribution(errors, contributions);
|
|
596
616
|
assertVerificationPolicyContribution(errors, contributions, packageManifest);
|
|
597
617
|
yield* assertManagedFileBundle(errors, harness, recordField(errors, contributions, 'documentationBundle', 'provider profile.profiles.codex-effect-v4.contributions'), '.prelude/providers/effect-harness/docs', [
|
|
598
618
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderProfile.js","sourceRoot":"","sources":["../../../../src/harness/verify/ProviderProfile.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, FileSystem } from 'effect'\nimport { readJson } from '../../platform/Json.ts'\nimport { HarnessError } from '../Errors.ts'\nimport { isRecord } from './JsonFields.ts'\nimport {\n expectedPackageBaseline,\n expectedPrepareCommand,\n expectedTypecheckCommand,\n strictDiagnosticGate,\n strictDiagnosticSeverity,\n} from './TsgoPolicy.ts'\nimport { verifyStageSpecs } from './VerifyStage.ts'\n\nfunction decodeJsonRecord(value: unknown, source: string): Effect.Effect<Record<string, unknown>, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction recordField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): Record<string, unknown> | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (!isRecord(value)) {\n errors.push(`${source}.${key} must be an object.`)\n return undefined\n }\n return value\n}\n\nfunction stringField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): string | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (typeof value !== 'string') {\n errors.push(`${source}.${key} must be a string.`)\n return undefined\n }\n return value\n}\n\nfunction booleanField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): boolean | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (typeof value !== 'boolean') {\n errors.push(`${source}.${key} must be a boolean.`)\n return undefined\n }\n return value\n}\n\nfunction arrayField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): ReadonlyArray<unknown> | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (!Array.isArray(value)) {\n errors.push(`${source}.${key} must be an array.`)\n return undefined\n }\n return value\n}\n\nfunction assertStringValue(errors: Array<string>, actual: string | undefined, expected: string, source: string): void {\n if (actual !== undefined && actual !== expected) {\n errors.push(`${source} is ${actual}; expected ${expected}.`)\n }\n}\n\nfunction assertBooleanValue(errors: Array<string>, actual: boolean | undefined, expected: boolean, source: string): void {\n if (actual !== undefined && actual !== expected) {\n errors.push(`${source} is ${String(actual)}; expected ${String(expected)}.`)\n }\n}\n\nfunction assertArrayContainsString(\n errors: Array<string>,\n values: ReadonlyArray<unknown> | undefined,\n expected: string,\n source: string,\n): void {\n if (values !== undefined && !values.includes(expected)) {\n errors.push(`${source} must include ${expected}.`)\n }\n}\n\nfunction assertArrayDoesNotContainText(\n errors: Array<string>,\n values: ReadonlyArray<unknown> | undefined,\n text: string,\n source: string,\n): void {\n if (values?.some(value => typeof value === 'string' && value.includes(text)) === true) {\n errors.push(`${source} must not include text containing ${text}.`)\n }\n}\n\nfunction assertRecordDoesNotContain(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): void {\n if (record !== undefined && key in record) {\n errors.push(`${source} must not contain field ${key}.`)\n }\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableJson).join(',')}]`\n }\n if (isRecord(value)) {\n return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(',')}}`\n }\n return JSON.stringify(value)\n}\n\nfunction assertJsonValue(errors: Array<string>, actual: unknown, expected: unknown, source: string): void {\n if (stableJson(actual) !== stableJson(expected)) {\n errors.push(`${source} does not match the expected provider contract value.`)\n }\n}\n\ninterface ExpectedManagedFile {\n readonly id: string\n readonly requiredKeywords?: ReadonlyArray<string>\n readonly sourcePath: string\n readonly targetPath: string\n readonly targetUsage?: string\n}\n\nconst expectedSelfMaterializationForbiddenSurfaces = [\n '.prelude',\n '.prelude/providers',\n '.prelude/providers/effect-harness',\n '.prelude/providers/effect-harness/provider.json',\n '.prelude/providers/effect-harness/docs',\n '.prelude/providers/effect-harness/snippets',\n] as const\n\nfunction fileRecordById(\n files: ReadonlyArray<unknown> | undefined,\n id: string,\n): Record<string, unknown> | undefined {\n return files?.find(file => isRecord(file) && file.id === id) as Record<string, unknown> | undefined\n}\n\nconst forbiddenTargetLocalSourceClaims = [\n 'target SHOULD receive `repos/',\n 'target MUST receive `repos/',\n 'target 应该接收 `repos/',\n 'target 必须接收 `repos/',\n] as const\n\nconst assertManagedFileContribution = Effect.fnUntraced(function* (\n errors: Array<string>,\n harness: string,\n files: ReadonlyArray<unknown> | undefined,\n expected: ExpectedManagedFile,\n source: string,\n) {\n const file = fileRecordById(files, expected.id)\n if (file === undefined) {\n errors.push(`${source}.files must include ${expected.id}.`)\n return\n }\n\n assertStringValue(errors, stringField(errors, file, 'sourcePath', `${source}.files[${expected.id}]`), expected.sourcePath, `${source}.files[${expected.id}].sourcePath`)\n assertStringValue(errors, stringField(errors, file, 'targetPath', `${source}.files[${expected.id}]`), expected.targetPath, `${source}.files[${expected.id}].targetPath`)\n assertStringValue(errors, stringField(errors, file, 'contentType', `${source}.files[${expected.id}]`), 'text/markdown', `${source}.files[${expected.id}].contentType`)\n assertBooleanValue(errors, booleanField(errors, file, 'managed', `${source}.files[${expected.id}]`), true, `${source}.files[${expected.id}].managed`)\n if (expected.targetUsage !== undefined) {\n assertStringValue(errors, stringField(errors, file, 'targetUsage', `${source}.files[${expected.id}]`), expected.targetUsage, `${source}.files[${expected.id}].targetUsage`)\n }\n\n const fs = yield* FileSystem.FileSystem\n const path = `${harness}/${expected.sourcePath}`\n if (!(yield* fs.exists(path))) {\n errors.push(`${source}.files[${expected.id}].sourcePath does not exist: ${expected.sourcePath}.`)\n return\n }\n\n const text = yield* fs.readFileString(path)\n for (const keyword of expected.requiredKeywords ?? []) {\n if (!text.includes(keyword)) {\n errors.push(`${expected.sourcePath} must contain managed docs topic ${keyword}.`)\n }\n }\n for (const phrase of forbiddenTargetLocalSourceClaims) {\n if (text.includes(phrase)) {\n errors.push(`${expected.sourcePath} must not describe provider-internal repos as target-local content.`)\n }\n }\n})\n\nconst assertManagedFileBundle = Effect.fnUntraced(function* (\n errors: Array<string>,\n harness: string,\n bundle: Record<string, unknown> | undefined,\n expectedBasePath: string,\n expectedFiles: ReadonlyArray<ExpectedManagedFile>,\n source: string,\n) {\n if (bundle === undefined) {\n return\n }\n\n assertStringValue(errors, stringField(errors, bundle, 'mode', source), 'managed-files', `${source}.mode`)\n assertStringValue(errors, stringField(errors, bundle, 'targetBasePath', source), expectedBasePath, `${source}.targetBasePath`)\n\n const files = arrayField(errors, bundle, 'files', source)\n for (const expected of expectedFiles) {\n yield* assertManagedFileContribution(errors, harness, files, expected, source)\n }\n})\n\ntype PackageName = keyof typeof expectedPackageBaseline\ntype PackageField = 'dependencies' | 'devDependencies'\n\ninterface ExpectedPackageGroup {\n readonly field: PackageField\n readonly packageNames: ReadonlyArray<PackageName>\n}\n\nconst expectedPackageGroups = {\n runtime: {\n field: 'dependencies',\n packageNames: ['effect', '@effect/platform-node'],\n },\n testing: {\n field: 'devDependencies',\n packageNames: ['@effect/vitest'],\n },\n diagnostics: {\n field: 'devDependencies',\n packageNames: ['@effect/tsgo', '@effect/language-service'],\n },\n nativeBackend: {\n field: 'devDependencies',\n packageNames: ['@typescript/native-preview'],\n },\n} as const satisfies Readonly<Record<string, ExpectedPackageGroup>>\n\nconst expectedLintCommand = 'pnpm lint --max-warnings 0'\nconst expectedLintScript = 'eslint'\nconst expectedTestCommand = 'pnpm test'\nconst expectedTestScript = 'vitest run tests/*.test.ts'\nconst expectedVerifyCommand = 'pnpm verify'\nconst expectedVerifyScript = 'node bin/effect-harness.ts verify --harness .'\n\nfunction assertPackageBaseline(\n errors: Array<string>,\n profileBaseline: Record<string, unknown> | undefined,\n): void {\n if (profileBaseline === undefined) {\n return\n }\n\n for (const [name, expected] of Object.entries(expectedPackageBaseline)) {\n const actual = profileBaseline[name]\n if (actual !== expected) {\n errors.push(`provider profile packageBaseline.${name} is ${String(actual ?? 'missing')}; expected ${expected}.`)\n }\n }\n}\n\nfunction assertSourceEntryEditorPolicy(\n errors: Array<string>,\n sourceContract: Record<string, unknown>,\n sourceEntryId: string,\n filesExclude: 'disabled' | 'enabled',\n): void {\n const editorPolicy = recordField(errors, sourceContract, 'editorPolicy', `${sourceEntryId} source contract`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'autoImportExclude', `${sourceEntryId} source contract.editorPolicy`), 'block', `${sourceEntryId} source contract.editorPolicy.autoImportExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'watcherExclude', `${sourceEntryId} source contract.editorPolicy`), 'recommended', `${sourceEntryId} source contract.editorPolicy.watcherExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'searchExclude', `${sourceEntryId} source contract.editorPolicy`), 'recommended', `${sourceEntryId} source contract.editorPolicy.searchExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'filesExclude', `${sourceEntryId} source contract.editorPolicy`), filesExclude, `${sourceEntryId} source contract.editorPolicy.filesExclude`)\n}\n\nfunction assertEditorPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n effectContract: Record<string, unknown>,\n tsgoContract: Record<string, unknown>,\n vscodeSettings: Record<string, unknown>,\n): void {\n const editorPolicy = recordField(errors, contributions, 'editorPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, editorPolicy, 'mode', 'provider profile editorPolicy contribution'), 'structured-merge', 'provider profile editorPolicy.mode')\n assertArrayContainsString(errors, arrayField(errors, editorPolicy, 'targetPaths', 'provider profile editorPolicy contribution'), '.vscode/settings.json', 'provider profile editorPolicy.targetPaths')\n assertArrayContainsString(errors, arrayField(errors, editorPolicy, 'targetPaths', 'provider profile editorPolicy contribution'), '.zed/settings.json', 'provider profile editorPolicy.targetPaths')\n\n const sourceIdentity = recordField(errors, editorPolicy, 'sourceIdentity', 'provider profile editorPolicy contribution')\n assertArrayContainsString(errors, arrayField(errors, sourceIdentity, 'providerInternalPatterns', 'provider profile editorPolicy.sourceIdentity'), 'repos/**', 'provider profile editorPolicy.sourceIdentity.providerInternalPatterns')\n assertBooleanValue(errors, booleanField(errors, sourceIdentity, 'targetReceivesSourceTrees', 'provider profile editorPolicy.sourceIdentity'), false, 'provider profile editorPolicy.sourceIdentity.targetReceivesSourceTrees')\n\n const policies = recordField(errors, editorPolicy, 'policies', 'provider profile editorPolicy contribution')\n const autoImport = recordField(errors, policies, 'autoImportExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, autoImport, 'level', 'provider profile editorPolicy.policies.autoImportExclude'), 'hard-boundary', 'provider profile editorPolicy.policies.autoImportExclude.level')\n assertStringValue(errors, stringField(errors, autoImport, 'sourceEntryContractField', 'provider profile editorPolicy.policies.autoImportExclude'), 'editorPolicy.autoImportExclude', 'provider profile editorPolicy.policies.autoImportExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, autoImport, 'expectedContractValue', 'provider profile editorPolicy.policies.autoImportExclude'), 'block', 'provider profile editorPolicy.policies.autoImportExclude.expectedContractValue')\n assertArrayContainsString(errors, arrayField(errors, autoImport, 'patterns', 'provider profile editorPolicy.policies.autoImportExclude'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.patterns')\n const vscodeAutoImport = recordField(errors, autoImport, 'vscode', 'provider profile editorPolicy.policies.autoImportExclude')\n assertArrayContainsString(errors, arrayField(errors, vscodeAutoImport, 'typescript.preferences.autoImportFileExcludePatterns', 'provider profile editorPolicy.policies.autoImportExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.vscode.typescript.preferences.autoImportFileExcludePatterns')\n assertArrayContainsString(errors, arrayField(errors, vscodeAutoImport, 'javascript.preferences.autoImportFileExcludePatterns', 'provider profile editorPolicy.policies.autoImportExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.vscode.javascript.preferences.autoImportFileExcludePatterns')\n const zedAutoImport = recordField(errors, autoImport, 'zed', 'provider profile editorPolicy.policies.autoImportExclude')\n assertStringValue(errors, stringField(errors, zedAutoImport, 'settingsPath', 'provider profile editorPolicy.policies.autoImportExclude.zed'), '.zed/settings.json', 'provider profile editorPolicy.policies.autoImportExclude.zed.settingsPath')\n if (recordField(errors, zedAutoImport, 'lsp', 'provider profile editorPolicy.policies.autoImportExclude.zed') === undefined) {\n errors.push('provider profile editorPolicy.policies.autoImportExclude.zed must use a Zed-specific lsp settings shape.')\n }\n\n const watchExclude = recordField(errors, policies, 'watchExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, watchExclude, 'level', 'provider profile editorPolicy.policies.watchExclude'), 'recommended', 'provider profile editorPolicy.policies.watchExclude.level')\n assertStringValue(errors, stringField(errors, watchExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.watchExclude'), 'editorPolicy.watcherExclude', 'provider profile editorPolicy.policies.watchExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, watchExclude, 'expectedContractValue', 'provider profile editorPolicy.policies.watchExclude'), 'recommended', 'provider profile editorPolicy.policies.watchExclude.expectedContractValue')\n assertBooleanValue(errors, booleanField(errors, watchExclude, 'requiresConfiguration', 'provider profile editorPolicy.policies.watchExclude'), true, 'provider profile editorPolicy.policies.watchExclude.requiresConfiguration')\n assertArrayContainsString(errors, arrayField(errors, watchExclude, 'patterns', 'provider profile editorPolicy.policies.watchExclude'), 'repos/**', 'provider profile editorPolicy.policies.watchExclude.patterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, recordField(errors, watchExclude, 'vscode', 'provider profile editorPolicy.policies.watchExclude'), 'files.watcherExclude', 'provider profile editorPolicy.policies.watchExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.watchExclude.vscode.files.watcherExclude'), true, 'provider profile editorPolicy.policies.watchExclude.vscode.files.watcherExclude[\"repos/**\"]')\n\n const searchExclude = recordField(errors, policies, 'searchExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, searchExclude, 'level', 'provider profile editorPolicy.policies.searchExclude'), 'recommended', 'provider profile editorPolicy.policies.searchExclude.level')\n assertStringValue(errors, stringField(errors, searchExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.searchExclude'), 'editorPolicy.searchExclude', 'provider profile editorPolicy.policies.searchExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, searchExclude, 'expectedContractValue', 'provider profile editorPolicy.policies.searchExclude'), 'recommended', 'provider profile editorPolicy.policies.searchExclude.expectedContractValue')\n assertBooleanValue(errors, booleanField(errors, searchExclude, 'requiresConfiguration', 'provider profile editorPolicy.policies.searchExclude'), true, 'provider profile editorPolicy.policies.searchExclude.requiresConfiguration')\n assertArrayContainsString(errors, arrayField(errors, searchExclude, 'patterns', 'provider profile editorPolicy.policies.searchExclude'), 'repos/**', 'provider profile editorPolicy.policies.searchExclude.patterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, recordField(errors, searchExclude, 'vscode', 'provider profile editorPolicy.policies.searchExclude'), 'search.exclude', 'provider profile editorPolicy.policies.searchExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.searchExclude.vscode.search.exclude'), true, 'provider profile editorPolicy.policies.searchExclude.vscode.search.exclude[\"repos/**\"]')\n\n const filesExclude = recordField(errors, policies, 'filesExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, filesExclude, 'level', 'provider profile editorPolicy.policies.filesExclude'), 'preference', 'provider profile editorPolicy.policies.filesExclude.level')\n assertStringValue(errors, stringField(errors, filesExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.filesExclude'), 'editorPolicy.filesExclude', 'provider profile editorPolicy.policies.filesExclude.sourceEntryContractField')\n assertBooleanValue(errors, booleanField(errors, filesExclude, 'requiresExplicitOptIn', 'provider profile editorPolicy.policies.filesExclude'), true, 'provider profile editorPolicy.policies.filesExclude.requiresExplicitOptIn')\n const sourceEntryDefaults = recordField(errors, filesExclude, 'sourceEntryDefaults', 'provider profile editorPolicy.policies.filesExclude')\n assertStringValue(errors, stringField(errors, sourceEntryDefaults, 'effect-official-source', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults'), 'enabled', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults.effect-official-source')\n assertStringValue(errors, stringField(errors, sourceEntryDefaults, 'tsgo-official-source', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults'), 'disabled', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults.tsgo-official-source')\n const contributionFilesExclude = recordField(errors, recordField(errors, filesExclude, 'vscode', 'provider profile editorPolicy.policies.filesExclude'), 'files.exclude', 'provider profile editorPolicy.policies.filesExclude.vscode')\n assertBooleanValue(errors, booleanField(errors, contributionFilesExclude, 'repos/effect/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude'), true, 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude[\"repos/effect/**\"]')\n assertRecordDoesNotContain(errors, contributionFilesExclude, 'repos/tsgo/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude')\n assertRecordDoesNotContain(errors, contributionFilesExclude, 'repos/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude')\n\n assertArrayContainsString(errors, arrayField(errors, vscodeSettings, 'typescript.preferences.autoImportFileExcludePatterns', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.typescript.preferences.autoImportFileExcludePatterns')\n assertArrayContainsString(errors, arrayField(errors, vscodeSettings, 'javascript.preferences.autoImportFileExcludePatterns', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.javascript.preferences.autoImportFileExcludePatterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, vscodeSettings, 'files.watcherExclude', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.files.watcherExclude'), true, '.vscode/settings.json.files.watcherExclude[\"repos/**\"]')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, vscodeSettings, 'search.exclude', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.search.exclude'), true, '.vscode/settings.json.search.exclude[\"repos/**\"]')\n const vscodeFilesExclude = recordField(errors, vscodeSettings, 'files.exclude', '.vscode/settings.json')\n assertBooleanValue(errors, booleanField(errors, vscodeFilesExclude, 'repos/effect/**', '.vscode/settings.json.files.exclude'), true, '.vscode/settings.json.files.exclude[\"repos/effect/**\"]')\n assertRecordDoesNotContain(errors, vscodeFilesExclude, 'repos/tsgo/**', '.vscode/settings.json.files.exclude')\n assertRecordDoesNotContain(errors, vscodeFilesExclude, 'repos/**', '.vscode/settings.json.files.exclude')\n\n assertSourceEntryEditorPolicy(errors, effectContract, 'effect-official-source', 'enabled')\n assertSourceEntryEditorPolicy(errors, tsgoContract, 'tsgo-official-source', 'disabled')\n}\n\nfunction assertEslintConfigContains(errors: Array<string>, eslintText: string, marker: string): void {\n if (!eslintText.includes(marker)) {\n errors.push(`eslint.config.mjs must contain ${marker}.`)\n }\n}\n\nfunction assertLintGuardrailsContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n eslintText: string,\n): void {\n const lintGuardrails = recordField(errors, contributions, 'lintGuardrails', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'mode', 'provider profile lintGuardrails contribution'), 'command-policy', 'provider profile lintGuardrails.mode')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'stage', 'provider profile lintGuardrails contribution'), 'lint', 'provider profile lintGuardrails.stage')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'command', 'provider profile lintGuardrails contribution'), expectedLintCommand, 'provider profile lintGuardrails.command')\n assertArrayContainsString(errors, arrayField(errors, lintGuardrails, 'configFiles', 'provider profile lintGuardrails contribution'), 'eslint.config.mjs', 'provider profile lintGuardrails.configFiles')\n\n const scripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, scripts, 'lint', 'package.json.scripts'), expectedLintScript, 'package.json.scripts.lint')\n\n const layers = recordField(errors, lintGuardrails, 'layers', 'provider profile lintGuardrails contribution')\n const owns = arrayField(errors, layers, 'owns', 'provider profile lintGuardrails.layers')\n assertArrayContainsString(errors, owns, 'repository import boundary', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'Effect v4 CLI import boundary', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'Effect test entry', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'syntax-level Effect guardrails', 'provider profile lintGuardrails.layers.owns')\n const doesNotOwn = arrayField(errors, layers, 'doesNotOwn', 'provider profile lintGuardrails.layers')\n assertArrayContainsString(errors, doesNotOwn, 'Effect semantic diagnostics', 'provider profile lintGuardrails.layers.doesNotOwn')\n assertArrayContainsString(errors, doesNotOwn, 'tsgo rule severity map', 'provider profile lintGuardrails.layers.doesNotOwn')\n\n const rules = recordField(errors, lintGuardrails, 'rules', 'provider profile lintGuardrails contribution')\n const restrictedImports = arrayField(errors, rules, 'restrictedImports', 'provider profile lintGuardrails.rules')\n for (const source of ['node:test', 'vitest', '@effect/cli', '@effect/cli/*', 'repos/effect/**', 'repos/tsgo/**']) {\n assertArrayContainsString(errors, restrictedImports, source, 'provider profile lintGuardrails.rules.restrictedImports')\n const eslintMarker = source.endsWith('/**')\n ? source.slice(0, -3)\n : source.endsWith('/*')\n ? source.slice(0, -2)\n : source\n assertEslintConfigContains(errors, eslintText, eslintMarker)\n }\n\n const restrictedSyntax = arrayField(errors, rules, 'restrictedSyntax', 'provider profile lintGuardrails.rules')\n for (const syntax of ['Context.Tag', 'Effect.catchAllCause', 'Effect.ignore', 'Effect.serviceOption', '{ disableValidation: true }', 'plain it() in tests']) {\n assertArrayContainsString(errors, restrictedSyntax, syntax, 'provider profile lintGuardrails.rules.restrictedSyntax')\n }\n for (const marker of [\n 'MemberExpression[object.name=\"Context\"][property.name=\"Tag\"]',\n 'catchAllCause|ignore|serviceOption',\n 'disableValidation',\n 'CallExpression[callee.name=\"it\"]',\n ]) {\n assertEslintConfigContains(errors, eslintText, marker)\n }\n}\n\nfunction assertTestPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n): void {\n const testPolicy = recordField(errors, contributions, 'testPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, testPolicy, 'mode', 'provider profile testPolicy contribution'), 'command-policy', 'provider profile testPolicy.mode')\n assertStringValue(errors, stringField(errors, testPolicy, 'stage', 'provider profile testPolicy contribution'), 'tests', 'provider profile testPolicy.stage')\n assertStringValue(errors, stringField(errors, testPolicy, 'command', 'provider profile testPolicy contribution'), expectedTestCommand, 'provider profile testPolicy.command')\n assertStringValue(errors, stringField(errors, testPolicy, 'packageScript', 'provider profile testPolicy contribution'), expectedTestScript, 'provider profile testPolicy.packageScript')\n assertStringValue(errors, stringField(errors, testPolicy, 'framework', 'provider profile testPolicy contribution'), '@effect/vitest', 'provider profile testPolicy.framework')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'expectedEntries', 'provider profile testPolicy contribution'), 'tests/*.test.ts', 'provider profile testPolicy.expectedEntries')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.effect', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.live', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'layer', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'disallowedImports', 'provider profile testPolicy contribution'), 'node:test', 'provider profile testPolicy.disallowedImports')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'disallowedImports', 'provider profile testPolicy contribution'), 'vitest', 'provider profile testPolicy.disallowedImports')\n\n const scripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, scripts, 'test', 'package.json.scripts'), expectedTestScript, 'package.json.scripts.test')\n}\n\nfunction stageRecordByTag(\n stages: ReadonlyArray<unknown> | undefined,\n tag: string,\n): Record<string, unknown> | undefined {\n return stages?.find(stage => isRecord(stage) && stage.tag === tag) as Record<string, unknown> | undefined\n}\n\nfunction assertVerificationPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n): void {\n const verificationPolicy = recordField(errors, contributions, 'verificationPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'mode', 'provider profile verificationPolicy contribution'), 'pipeline-policy', 'provider profile verificationPolicy.mode')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'completionGate', 'provider profile verificationPolicy contribution'), expectedVerifyCommand, 'provider profile verificationPolicy.completionGate')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'packageScript', 'provider profile verificationPolicy contribution'), expectedVerifyScript, 'provider profile verificationPolicy.packageScript')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'lifecycleOwner', 'provider profile verificationPolicy contribution'), 'prelude', 'provider profile verificationPolicy.lifecycleOwner')\n\n const scripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, scripts, 'verify', 'package.json.scripts'), expectedVerifyScript, 'package.json.scripts.verify')\n\n const localCommands = recordField(errors, verificationPolicy, 'localCommands', 'provider profile verificationPolicy contribution')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'diagnostics', 'provider profile verificationPolicy.localCommands'), 'pnpm typecheck', 'provider profile verificationPolicy.localCommands.diagnostics')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'tests', 'provider profile verificationPolicy.localCommands'), expectedTestCommand, 'provider profile verificationPolicy.localCommands.tests')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'lint', 'provider profile verificationPolicy.localCommands'), expectedLintCommand, 'provider profile verificationPolicy.localCommands.lint')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'completion', 'provider profile verificationPolicy.localCommands'), expectedVerifyCommand, 'provider profile verificationPolicy.localCommands.completion')\n\n const stages = arrayField(errors, verificationPolicy, 'stages', 'provider profile verificationPolicy contribution')\n for (const spec of verifyStageSpecs) {\n const stage = stageRecordByTag(stages, spec.tag)\n if (stage === undefined) {\n errors.push(`provider profile verificationPolicy.stages must include ${spec.tag}.`)\n continue\n }\n assertStringValue(errors, stringField(errors, stage, 'summary', `provider profile verificationPolicy.stages[${spec.tag}]`), spec.summary, `provider profile verificationPolicy.stages[${spec.tag}].summary`)\n }\n}\n\nfunction assertPackageGroup(\n errors: Array<string>,\n dependencyGroups: Record<string, unknown> | undefined,\n groupName: string,\n expected: ExpectedPackageGroup,\n): void {\n const group = recordField(errors, dependencyGroups, groupName, 'provider profile packageJson.dependencyGroups')\n assertStringValue(errors, stringField(errors, group, 'field', `provider profile packageJson.dependencyGroups.${groupName}`), expected.field, `provider profile packageJson.dependencyGroups.${groupName}.field`)\n const packages = recordField(errors, group, 'packages', `provider profile packageJson.dependencyGroups.${groupName}`)\n if (packages === undefined) {\n return\n }\n\n const expectedNames = new Set<string>(expected.packageNames)\n for (const name of Object.keys(packages)) {\n if (!expectedNames.has(name)) {\n errors.push(`provider profile packageJson.dependencyGroups.${groupName}.packages must not include ${name}.`)\n }\n }\n\n for (const name of expected.packageNames) {\n assertStringValue(\n errors,\n stringField(errors, packages, name, `provider profile packageJson.dependencyGroups.${groupName}.packages`),\n expectedPackageBaseline[name],\n `provider profile packageJson.dependencyGroups.${groupName}.packages.${name}`,\n )\n }\n}\n\nfunction assertWorkspaceCatalogEntry(\n errors: Array<string>,\n workspaceText: string,\n name: PackageName,\n): void {\n const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/gu, String.raw`\\$&`)\n const escapedVersion = expectedPackageBaseline[name].replace(/[.*+?^${}()|[\\]\\\\]/gu, String.raw`\\$&`)\n const pattern = new RegExp(`(?:^|\\\\n)\\\\s*['\"]?${escapedName}['\"]?:\\\\s*${escapedVersion}(?:\\\\n|$)`, 'u')\n if (!pattern.test(workspaceText)) {\n errors.push(`pnpm-workspace.yaml catalog must pin ${name} to ${expectedPackageBaseline[name]}.`)\n }\n}\n\nfunction assertPackageGroupSelfConformance(\n errors: Array<string>,\n dependencyGroups: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n workspaceText: string,\n groupName: keyof typeof expectedPackageGroups,\n selfConformanceSpecifier: string,\n): void {\n const expected = expectedPackageGroups[groupName]\n assertPackageGroup(errors, dependencyGroups, groupName, expected)\n\n const packageSection = recordField(errors, packageManifest, expected.field, 'package.json')\n for (const name of expected.packageNames) {\n assertStringValue(\n errors,\n stringField(errors, packageSection, name, `package.json.${expected.field}`),\n selfConformanceSpecifier,\n `package.json.${expected.field}.${name}`,\n )\n assertWorkspaceCatalogEntry(errors, workspaceText, name)\n }\n}\n\nfunction assertPackageScriptsContribution(\n errors: Array<string>,\n packageContribution: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n): void {\n const contributionScripts = recordField(errors, packageContribution, 'scripts', 'provider profile packageJson contribution')\n const prepare = recordField(errors, contributionScripts, 'prepare', 'provider profile packageJson.scripts')\n const typecheck = recordField(errors, contributionScripts, 'typecheck', 'provider profile packageJson.scripts')\n assertStringValue(errors, stringField(errors, prepare, 'defaultCommand', 'provider profile packageJson.scripts.prepare'), expectedPrepareCommand, 'provider profile packageJson.scripts.prepare.defaultCommand')\n assertStringValue(errors, stringField(errors, typecheck, 'defaultCommand', 'provider profile packageJson.scripts.typecheck'), expectedTypecheckCommand, 'provider profile packageJson.scripts.typecheck.defaultCommand')\n\n const manifestScripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, manifestScripts, 'prepare', 'package.json.scripts'), expectedPrepareCommand, 'package.json.scripts.prepare')\n assertStringValue(errors, stringField(errors, manifestScripts, 'typecheck', 'package.json.scripts'), expectedTypecheckCommand, 'package.json.scripts.typecheck')\n}\n\nfunction assertPackageJsonContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n workspaceText: string,\n): void {\n const packageJson = recordField(errors, contributions, 'packageJson', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, packageJson, 'mode', 'provider profile packageJson contribution'), 'structured-merge', 'provider profile packageJson.mode')\n assertStringValue(errors, stringField(errors, packageJson, 'targetPath', 'provider profile packageJson contribution'), 'package.json', 'provider profile packageJson.targetPath')\n const selfConformanceSpecifier = stringField(errors, packageJson, 'selfConformanceSpecifier', 'provider profile packageJson contribution')\n assertStringValue(errors, selfConformanceSpecifier, 'catalog:', 'provider profile packageJson.selfConformanceSpecifier')\n assertRecordDoesNotContain(errors, packageJson, 'dependencies', 'provider profile packageJson contribution')\n assertRecordDoesNotContain(errors, packageJson, 'devDependencies', 'provider profile packageJson contribution')\n\n const dependencyGroups = recordField(errors, packageJson, 'dependencyGroups', 'provider profile packageJson contribution')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'runtime', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'testing', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'diagnostics', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'nativeBackend', selfConformanceSpecifier ?? '')\n assertPackageScriptsContribution(errors, packageJson, packageManifest)\n}\n\nfunction assertTsconfigContributionMetadata(errors: Array<string>, contributions: Record<string, unknown> | undefined): void {\n const tsconfig = recordField(errors, contributions, 'tsconfig', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, tsconfig, 'mode', 'provider profile tsconfig contribution'), 'structured-merge', 'provider profile tsconfig.mode')\n assertStringValue(errors, stringField(errors, tsconfig, 'targetPath', 'provider profile tsconfig contribution'), 'tsconfig.json', 'provider profile tsconfig.targetPath')\n\n const tsgo = recordField(errors, tsconfig, 'tsgo', 'provider profile tsconfig contribution')\n assertStringValue(errors, stringField(errors, tsgo, 'diagnosticCommand', 'provider profile tsconfig.tsgo'), expectedTypecheckCommand, 'provider profile tsconfig.tsgo.diagnosticCommand')\n\n const nativeBackend = recordField(errors, tsgo, 'nativeBackend', 'provider profile tsconfig.tsgo')\n assertStringValue(errors, stringField(errors, nativeBackend, 'package', 'provider profile tsconfig.tsgo.nativeBackend'), '@typescript/native-preview', 'provider profile tsconfig.tsgo.nativeBackend.package')\n assertStringValue(errors, stringField(errors, nativeBackend, 'version', 'provider profile tsconfig.tsgo.nativeBackend'), expectedPackageBaseline['@typescript/native-preview'], 'provider profile tsconfig.tsgo.nativeBackend.version')\n assertStringValue(errors, stringField(errors, nativeBackend, 'setupCommand', 'provider profile tsconfig.tsgo.nativeBackend'), expectedPrepareCommand, 'provider profile tsconfig.tsgo.nativeBackend.setupCommand')\n\n assertJsonValue(errors, recordField(errors, tsgo, 'diagnosticGate', 'provider profile tsconfig.tsgo'), strictDiagnosticGate, 'provider profile tsconfig.tsgo.diagnosticGate')\n\n const ruleMapSource = recordField(errors, tsgo, 'ruleMapSource', 'provider profile tsconfig.tsgo')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'metadata', 'provider profile tsconfig.tsgo.ruleMapSource'), 'repos/tsgo/_packages/tsgo/src/metadata.json', 'provider profile tsconfig.tsgo.ruleMapSource.metadata')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'policy', 'provider profile tsconfig.tsgo.ruleMapSource'), 'harness/tsgo.md', 'provider profile tsconfig.tsgo.ruleMapSource.policy')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'supportedEffect', 'provider profile tsconfig.tsgo.ruleMapSource'), 'v4', 'provider profile tsconfig.tsgo.ruleMapSource.supportedEffect')\n if (ruleMapSource?.ruleCount !== Object.keys(strictDiagnosticSeverity).length) {\n errors.push(`provider profile tsconfig.tsgo.ruleMapSource.ruleCount is ${String(ruleMapSource?.ruleCount ?? 'missing')}; expected ${Object.keys(strictDiagnosticSeverity).length}.`)\n }\n}\n\nfunction assertDeliveryModes(errors: Array<string>, providerProfile: Record<string, unknown>): void {\n const deliveryModes = recordField(errors, providerProfile, 'deliveryModes', 'provider profile')\n const internalHarness = recordField(errors, deliveryModes, 'internalHarness', 'provider profile.deliveryModes')\n const artifactReference = recordField(errors, deliveryModes, 'providerArtifactReference', 'provider profile.deliveryModes')\n const exportedHarness = recordField(errors, deliveryModes, 'exportedHarness', 'provider profile.deliveryModes')\n\n assertStringValue(errors, stringField(errors, internalHarness, 'mode', 'provider profile.deliveryModes.internalHarness'), 'internal-harness', 'provider profile.deliveryModes.internalHarness.mode')\n assertStringValue(errors, stringField(errors, artifactReference, 'mode', 'provider profile.deliveryModes.providerArtifactReference'), 'provider-artifact-reference', 'provider profile.deliveryModes.providerArtifactReference.mode')\n assertStringValue(errors, stringField(errors, exportedHarness, 'mode', 'provider profile.deliveryModes.exportedHarness'), 'exported-harness', 'provider profile.deliveryModes.exportedHarness.mode')\n}\n\nfunction assertSelfConformanceContract(errors: Array<string>, providerProfile: Record<string, unknown>): void {\n const selfConformance = recordField(errors, providerProfile, 'selfConformance', 'provider profile')\n assertStringValue(errors, stringField(errors, selfConformance, 'mode', 'provider profile.selfConformance'), 'provider-repository', 'provider profile.selfConformance.mode')\n assertStringValue(errors, stringField(errors, selfConformance, 'conformsTo', 'provider profile.selfConformance'), 'exported-harness', 'provider profile.selfConformance.conformsTo')\n assertStringValue(errors, stringField(errors, selfConformance, 'completionGate', 'provider profile.selfConformance'), 'pnpm verify', 'provider profile.selfConformance.completionGate')\n assertBooleanValue(errors, booleanField(errors, selfConformance, 'selfMaterialization', 'provider profile.selfConformance'), false, 'provider profile.selfConformance.selfMaterialization')\n assertStringValue(errors, stringField(errors, selfConformance, 'lifecycleOwner', 'provider profile.selfConformance'), 'prelude', 'provider profile.selfConformance.lifecycleOwner')\n\n const forbiddenSurfaces = arrayField(errors, selfConformance, 'forbiddenProviderRepositorySurfaces', 'provider profile.selfConformance')\n for (const surface of expectedSelfMaterializationForbiddenSurfaces) {\n assertArrayContainsString(errors, forbiddenSurfaces, surface, 'provider profile.selfConformance.forbiddenProviderRepositorySurfaces')\n }\n}\n\ninterface ExpectedArtifactReference {\n readonly id: string\n readonly path: string\n readonly sourceEntry: string\n}\n\nfunction assertArtifactReference(\n errors: Array<string>,\n references: Record<string, unknown> | undefined,\n expected: ExpectedArtifactReference,\n): void {\n const reference = recordField(errors, references, expected.id, 'provider profile.artifactReferences.references')\n assertStringValue(errors, stringField(errors, reference, 'sourceEntry', `provider profile.artifactReferences.references.${expected.id}`), expected.sourceEntry, `provider profile.artifactReferences.references.${expected.id}.sourceEntry`)\n assertStringValue(errors, stringField(errors, reference, 'path', `provider profile.artifactReferences.references.${expected.id}`), expected.path, `provider profile.artifactReferences.references.${expected.id}.path`)\n assertStringValue(errors, stringField(errors, reference, 'targetDelivery', `provider profile.artifactReferences.references.${expected.id}`), 'artifact-only', `provider profile.artifactReferences.references.${expected.id}.targetDelivery`)\n}\n\nfunction assertArtifactReferencesContract(\n errors: Array<string>,\n providerProfile: Record<string, unknown>,\n packageManifest: Record<string, unknown>,\n): void {\n const artifactReferences = recordField(errors, providerProfile, 'artifactReferences', 'provider profile')\n assertStringValue(errors, stringField(errors, artifactReferences, 'mode', 'provider profile.artifactReferences'), 'provider-artifact-reference', 'provider profile.artifactReferences.mode')\n assertStringValue(errors, stringField(errors, artifactReferences, 'targetDelivery', 'provider profile.artifactReferences'), 'identity-only', 'provider profile.artifactReferences.targetDelivery')\n\n const packageFiles = arrayField(errors, packageManifest, 'files', 'package.json')\n const packageSurface = arrayField(errors, artifactReferences, 'packageSurface', 'provider profile.artifactReferences')\n for (const path of ['provider', 'harness', 'repos', 'repos/effect.subtree.json', 'repos/tsgo.subtree.json']) {\n assertArrayContainsString(errors, packageFiles, path, 'package.json.files')\n assertArrayContainsString(errors, packageSurface, path, 'provider profile.artifactReferences.packageSurface')\n }\n\n const references = recordField(errors, artifactReferences, 'references', 'provider profile.artifactReferences')\n assertArtifactReference(errors, references, {\n id: 'effect-source-tree',\n path: 'repos/effect',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-source-contract',\n path: 'repos/effect.subtree.json',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-anchor-doc',\n path: 'repos/effect/LLMS.md',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-route-doc',\n path: 'harness/effect-routes.md',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-source-tree',\n path: 'repos/tsgo',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-source-contract',\n path: 'repos/tsgo.subtree.json',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-anchor-doc',\n path: 'repos/tsgo/README.md',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-route-doc',\n path: 'harness/tsgo-routes.md',\n sourceEntry: 'tsgo-official-source',\n })\n}\n\nexport const verifyProviderProfileContract = Effect.fnUntraced(function* (errors: Array<string>, harness: string) {\n const fs = yield* FileSystem.FileSystem\n const providerProfile = yield* readJson(`${harness}/provider/effect-harness.provider.json`, decodeJsonRecord)\n const effectContract = yield* readJson(`${harness}/repos/effect.subtree.json`, decodeJsonRecord)\n const tsgoContract = yield* readJson(`${harness}/repos/tsgo.subtree.json`, decodeJsonRecord)\n const packageManifest = yield* readJson(`${harness}/package.json`, decodeJsonRecord)\n const vscodeSettings = yield* readJson(`${harness}/.vscode/settings.json`, decodeJsonRecord)\n const eslintText = yield* fs.readFileString(`${harness}/eslint.config.mjs`)\n const workspaceText = yield* fs.readFileString(`${harness}/pnpm-workspace.yaml`)\n\n const provider = recordField(errors, providerProfile, 'provider', 'provider profile')\n assertStringValue(errors, stringField(errors, provider, 'id', 'provider profile.provider'), 'effect-harness', 'provider profile.provider.id')\n assertStringValue(errors, stringField(errors, provider, 'defaultProfile', 'provider profile.provider'), 'codex-effect-v4', 'provider profile.provider.defaultProfile')\n assertDeliveryModes(errors, providerProfile)\n assertSelfConformanceContract(errors, providerProfile)\n assertArtifactReferencesContract(errors, providerProfile, packageManifest)\n\n const sourceEntries = recordField(errors, providerProfile, 'sourceEntries', 'provider profile')\n const profiles = recordField(errors, providerProfile, 'profiles', 'provider profile')\n const profile = recordField(errors, profiles, 'codex-effect-v4', 'provider profile.profiles')\n const sourceEntryId = stringField(errors, profile, 'sourceEntry', 'provider profile.profiles.codex-effect-v4')\n assertStringValue(errors, sourceEntryId, 'effect-official-source', 'provider profile.profiles.codex-effect-v4.sourceEntry')\n\n assertProviderSourceEntry(errors, sourceEntries, {\n contractPath: 'repos/effect.subtree.json',\n id: 'effect-official-source',\n updateCommand: 'partita pin update --contract repos/effect.subtree.json --name effect --prefix repos/effect --dry-run',\n verifyCommand: 'partita pin verify --contract repos/effect.subtree.json --name effect --prefix repos/effect',\n })\n assertProviderSourceEntry(errors, sourceEntries, {\n contractPath: 'repos/tsgo.subtree.json',\n id: 'tsgo-official-source',\n updateCommand: 'partita pin update --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo --dry-run',\n verifyCommand: 'partita pin verify --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo',\n })\n assertPartitaSubtreeContract(errors, effectContract, {\n anchor: 'repos/effect/LLMS.md',\n contractPath: 'repos/effect.subtree.json',\n filesExclude: 'enabled',\n name: 'effect',\n prefix: 'repos/effect',\n repository: 'https://github.com/Effect-TS/effect-smol',\n route: 'harness/effect-routes.md',\n updateCommand: 'partita pin update --contract repos/effect.subtree.json --name effect --prefix repos/effect --dry-run',\n verifyCommand: 'partita pin verify --contract repos/effect.subtree.json --name effect --prefix repos/effect',\n })\n assertPartitaSubtreeContract(errors, tsgoContract, {\n anchor: 'repos/tsgo/README.md',\n contractPath: 'repos/tsgo.subtree.json',\n filesExclude: 'disabled',\n name: 'tsgo',\n prefix: 'repos/tsgo',\n repository: 'https://github.com/Effect-TS/tsgo',\n route: 'harness/tsgo-routes.md',\n updateCommand: 'partita pin update --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo --dry-run',\n verifyCommand: 'partita pin verify --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo',\n })\n\n const providerRecord = recordField(errors, providerProfile, 'providerRecord', 'provider profile')\n const sourceDelivery = recordField(errors, providerRecord, 'sourceDelivery', 'provider profile.providerRecord')\n assertStringValue(errors, stringField(errors, sourceDelivery, 'mode', 'provider profile.providerRecord.sourceDelivery'), 'artifact-identity-only', 'provider profile.providerRecord.sourceDelivery.mode')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'artifact.sourceIdentity', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'artifact.sourceIdentities', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'surfaces.documentationBundle', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'surfaces.snippets', 'provider profile.providerRecord.requiredFields')\n\n const sourceBoundary = recordField(errors, profile, 'sourceBoundary', 'provider profile.profiles.codex-effect-v4')\n assertBooleanValue(errors, booleanField(errors, sourceBoundary, 'providerRepoInternal', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), true, 'provider profile.profiles.codex-effect-v4.sourceBoundary.providerRepoInternal')\n assertStringValue(errors, stringField(errors, sourceBoundary, 'targetDelivery', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'identity-only', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetDelivery')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'repos/effect', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'repos/tsgo', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'harness/effect-routes.md', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'harness/tsgo-routes.md', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n\n const options = recordField(errors, profile, 'options', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, options, 'runtime', 'provider profile.profiles.codex-effect-v4.options')\n assertRecordDoesNotContain(errors, options, 'editorPolicy', 'provider profile.profiles.codex-effect-v4.options')\n\n assertPackageBaseline(errors, recordField(errors, profile, 'packageBaseline', 'provider profile.profiles.codex-effect-v4'))\n\n const managedSurfaces = recordField(errors, profile, 'managedSurfaces', 'provider profile.profiles.codex-effect-v4')\n const targetReceives = arrayField(errors, managedSurfaces, 'targetReceives', 'provider profile.profiles.codex-effect-v4.managedSurfaces')\n assertArrayContainsString(errors, targetReceives, 'provider record at .prelude/providers/effect-harness/provider.json', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'provider-managed docs bundle at .prelude/providers/effect-harness/docs', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'provider-managed snippets at .prelude/providers/effect-harness/snippets', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'editor policy structured pointer for target editor settings', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'lint, test, and verification policy records', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'runtime assets', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'AGENTS.md managed block', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'feedback', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, '.effect-harness.json', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n const targetDoesNotReceive = arrayField(errors, managedSurfaces, 'targetDoesNotReceive', 'provider profile.profiles.codex-effect-v4.managedSurfaces')\n assertArrayContainsString(errors, targetDoesNotReceive, 'provider repo internal Effect route harness/effect-routes.md', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetDoesNotReceive')\n assertArrayContainsString(errors, targetDoesNotReceive, 'provider repo internal tsgo route harness/tsgo-routes.md', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetDoesNotReceive')\n\n assertRecordDoesNotContain(errors, profile, 'state', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, profile, 'officialSource', 'provider profile.profiles.codex-effect-v4')\n const contributions = recordField(errors, profile, 'contributions', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, contributions, 'runtimeAssets', 'provider profile.profiles.codex-effect-v4.contributions')\n assertRecordDoesNotContain(errors, contributions, 'agentsBlock', 'provider profile.profiles.codex-effect-v4.contributions')\n assertRecordDoesNotContain(errors, contributions, 'codexAssets', 'provider profile.profiles.codex-effect-v4.contributions')\n assertPackageJsonContribution(errors, contributions, packageManifest, workspaceText)\n assertTsconfigContributionMetadata(errors, contributions)\n assertEditorPolicyContribution(errors, contributions, effectContract, tsgoContract, vscodeSettings)\n assertLintGuardrailsContribution(errors, contributions, packageManifest, eslintText)\n assertTestPolicyContribution(errors, contributions, packageManifest)\n assertVerificationPolicyContribution(errors, contributions, packageManifest)\n\n yield* assertManagedFileBundle(\n errors,\n harness,\n recordField(errors, contributions, 'documentationBundle', 'provider profile.profiles.codex-effect-v4.contributions'),\n '.prelude/providers/effect-harness/docs',\n [\n {\n id: 'effect-code',\n requiredKeywords: ['Effect Code', '@effect/vitest', 'Context.Service', 'effect/unstable/cli'],\n sourcePath: 'provider/docs/effect-code.md',\n targetPath: 'effect-code.md',\n },\n {\n id: 'diagnostics',\n requiredKeywords: ['tsgo --noEmit', '@effect/language-service', 'diagnostic gate', 'drift'],\n sourcePath: 'provider/docs/diagnostics.md',\n targetPath: 'diagnostics.md',\n },\n {\n id: 'editor-policy',\n requiredKeywords: ['auto-import', 'watch exclusion', 'search exclusion', 'file visibility'],\n sourcePath: 'provider/docs/editor-policy.md',\n targetPath: 'editor-policy.md',\n },\n {\n id: 'managed-surfaces',\n requiredKeywords: ['Managed Surfaces', 'target-managed surfaces', 'Artifact-Only', 'Snippets', 'Feedback Loop', 'local drift'],\n sourcePath: 'provider/docs/managed-surfaces.md',\n targetPath: 'managed-surfaces.md',\n },\n {\n id: 'discovery',\n requiredKeywords: ['Provider Discovery', 'provider-discover', 'Prelude', 'target-managed surfaces', 'artifact-only', 'internal harness'],\n sourcePath: 'provider/docs/discovery.md',\n targetPath: 'discovery.md',\n },\n {\n id: 'package-config',\n requiredKeywords: ['Package', 'effect-tsgo patch', 'tsgo --noEmit', 'tsconfig.json'],\n sourcePath: 'provider/docs/package-config.md',\n targetPath: 'package-config.md',\n },\n {\n id: 'quality-policy',\n requiredKeywords: ['lint policy', 'test policy', 'verification policy', 'Prelude'],\n sourcePath: 'provider/docs/quality-policy.md',\n targetPath: 'quality-policy.md',\n },\n {\n id: 'source-identity',\n requiredKeywords: ['Source Identity', 'artifact-only', 'target delivery', 'source pin lifecycle', 'Partita', 'provider record'],\n sourcePath: 'provider/docs/source-identity.md',\n targetPath: 'source-identity.md',\n },\n ],\n 'provider profile.profiles.codex-effect-v4.contributions.documentationBundle',\n )\n yield* assertManagedFileBundle(\n errors,\n harness,\n recordField(errors, contributions, 'snippets', 'provider profile.profiles.codex-effect-v4.contributions'),\n '.prelude/providers/effect-harness/snippets',\n [\n {\n id: 'agents-effect-harness',\n requiredKeywords: ['Effect Harness Snippet', 'provider-managed source content', 'target `AGENTS.md` block'],\n sourcePath: 'provider/snippets/agents.md',\n targetPath: 'agents.md',\n targetUsage: 'manual-copy-or-include-only',\n },\n ],\n 'provider profile.profiles.codex-effect-v4.contributions.snippets',\n )\n})\n\ninterface ExpectedProviderSourceEntry {\n readonly id: string\n readonly contractPath: string\n readonly updateCommand: string\n readonly verifyCommand: string\n}\n\nfunction assertProviderSourceEntry(\n errors: Array<string>,\n sourceEntries: Record<string, unknown> | undefined,\n expected: ExpectedProviderSourceEntry,\n): void {\n const sourceEntry = recordField(errors, sourceEntries, expected.id, 'provider profile.sourceEntries')\n assertStringValue(errors, stringField(errors, sourceEntry, 'kind', `provider profile.sourceEntries.${expected.id}`), 'provider-internal-github-subtree', `provider profile.sourceEntries.${expected.id}.kind`)\n const contract = recordField(errors, sourceEntry, 'contract', `provider profile.sourceEntries.${expected.id}`)\n assertStringValue(errors, stringField(errors, contract, 'path', `provider profile.sourceEntries.${expected.id}.contract`), expected.contractPath, `provider profile.sourceEntries.${expected.id}.contract.path`)\n assertStringValue(errors, stringField(errors, contract, 'owner', `provider profile.sourceEntries.${expected.id}.contract`), 'partita', `provider profile.sourceEntries.${expected.id}.contract.owner`)\n assertStringValue(errors, stringField(errors, contract, 'format', `provider profile.sourceEntries.${expected.id}.contract`), 'github-subtree', `provider profile.sourceEntries.${expected.id}.contract.format`)\n const commands = recordField(errors, sourceEntry, 'commands', `provider profile.sourceEntries.${expected.id}`)\n assertStringValue(errors, stringField(errors, commands, 'update', `provider profile.sourceEntries.${expected.id}.commands`), expected.updateCommand, `provider profile.sourceEntries.${expected.id}.commands.update`)\n assertStringValue(errors, stringField(errors, commands, 'verify', `provider profile.sourceEntries.${expected.id}.commands`), expected.verifyCommand, `provider profile.sourceEntries.${expected.id}.commands.verify`)\n assertRecordDoesNotContain(errors, commands, 'status', `provider profile.sourceEntries.${expected.id}.commands`)\n assertRecordDoesNotContain(errors, sourceEntry, 'repository', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'branch', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'prefix', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'anchor', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'llmDocument', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'agentRoute', `provider profile.sourceEntries.${expected.id}`)\n}\n\ninterface ExpectedPartitaSubtreeContract {\n readonly anchor: string\n readonly contractPath: string\n readonly filesExclude: string\n readonly name: string\n readonly prefix: string\n readonly repository: string\n readonly route: string\n readonly updateCommand: string\n readonly verifyCommand: string\n}\n\nfunction assertPartitaSubtreeContract(\n errors: Array<string>,\n sourceContract: Record<string, unknown>,\n expected: ExpectedPartitaSubtreeContract,\n): void {\n assertStringValue(errors, stringField(errors, sourceContract, 'name', expected.contractPath), expected.name, `${expected.contractPath}.name`)\n assertStringValue(errors, stringField(errors, sourceContract, 'mechanism', expected.contractPath), 'git-subtree', `${expected.contractPath}.mechanism`)\n\n const github = recordField(errors, sourceContract, 'github', expected.contractPath)\n const local = recordField(errors, sourceContract, 'local', expected.contractPath)\n const subtree = recordField(errors, sourceContract, 'subtree', expected.contractPath)\n const anchor = recordField(errors, sourceContract, 'anchor', expected.contractPath)\n const agent = recordField(errors, sourceContract, 'agent', expected.contractPath)\n const commands = recordField(errors, sourceContract, 'commands', expected.contractPath)\n const editorPolicy = recordField(errors, sourceContract, 'editorPolicy', expected.contractPath)\n const boundaries = recordField(errors, sourceContract, 'boundaries', expected.contractPath)\n const ownership = recordField(errors, sourceContract, 'ownership', expected.contractPath)\n\n const split = stringField(errors, subtree, 'split', `${expected.contractPath}.subtree`)\n assertStringValue(errors, stringField(errors, github, 'repository', `${expected.contractPath}.github`), expected.repository, `${expected.contractPath}.github.repository`)\n assertStringValue(errors, stringField(errors, github, 'branch', `${expected.contractPath}.github`), 'main', `${expected.contractPath}.github.branch`)\n assertStringValue(errors, stringField(errors, github, 'ref', `${expected.contractPath}.github`), split ?? '', `${expected.contractPath}.github.ref`)\n assertStringValue(errors, stringField(errors, local, 'prefix', `${expected.contractPath}.local`), expected.prefix, `${expected.contractPath}.local.prefix`)\n assertStringValue(errors, stringField(errors, subtree, 'trailer', `${expected.contractPath}.subtree`), `git-subtree-split: ${split ?? ''}`, `${expected.contractPath}.subtree.trailer`)\n assertStringValue(errors, stringField(errors, anchor, 'llmDocument', `${expected.contractPath}.anchor`), expected.anchor, `${expected.contractPath}.anchor.llmDocument`)\n assertStringValue(errors, stringField(errors, agent, 'route', `${expected.contractPath}.agent`), expected.route, `${expected.contractPath}.agent.route`)\n assertStringValue(errors, stringField(errors, commands, 'update', `${expected.contractPath}.commands`), expected.updateCommand, `${expected.contractPath}.commands.update`)\n assertStringValue(errors, stringField(errors, commands, 'verify', `${expected.contractPath}.commands`), expected.verifyCommand, `${expected.contractPath}.commands.verify`)\n assertRecordDoesNotContain(errors, commands, 'status', `${expected.contractPath}.commands`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'autoImportExclude', `${expected.contractPath}.editorPolicy`), 'block', `${expected.contractPath}.editorPolicy.autoImportExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'watcherExclude', `${expected.contractPath}.editorPolicy`), 'recommended', `${expected.contractPath}.editorPolicy.watcherExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'searchExclude', `${expected.contractPath}.editorPolicy`), 'recommended', `${expected.contractPath}.editorPolicy.searchExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'filesExclude', `${expected.contractPath}.editorPolicy`), expected.filesExclude, `${expected.contractPath}.editorPolicy.filesExclude`)\n assertStringValue(errors, stringField(errors, ownership, 'mode', `${expected.contractPath}.ownership`), 'provider', `${expected.contractPath}.ownership.mode`)\n assertBooleanValue(errors, booleanField(errors, boundaries, 'readOnly', `${expected.contractPath}.boundaries`), true, `${expected.contractPath}.boundaries.readOnly`)\n assertBooleanValue(errors, booleanField(errors, boundaries, 'importBlock', `${expected.contractPath}.boundaries`), true, `${expected.contractPath}.boundaries.importBlock`)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ProviderProfile.js","sourceRoot":"","sources":["../../../../src/harness/verify/ProviderProfile.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, FileSystem } from 'effect'\nimport { readJson } from '../../platform/Json.ts'\nimport { HarnessError } from '../Errors.ts'\nimport { isRecord } from './JsonFields.ts'\nimport {\n expectedPackageBaseline,\n expectedPrepareCommand,\n expectedTypecheckCommand,\n strictDiagnosticGate,\n strictDiagnosticSeverity,\n} from './TsgoPolicy.ts'\nimport { verifyStageSpecs } from './VerifyStage.ts'\n\nfunction decodeJsonRecord(value: unknown, source: string): Effect.Effect<Record<string, unknown>, HarnessError> {\n return isRecord(value)\n ? Effect.succeed(value)\n : Effect.fail(new HarnessError({ message: `${source} must be a JSON object` }))\n}\n\nfunction recordField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): Record<string, unknown> | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (!isRecord(value)) {\n errors.push(`${source}.${key} must be an object.`)\n return undefined\n }\n return value\n}\n\nfunction stringField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): string | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (typeof value !== 'string') {\n errors.push(`${source}.${key} must be a string.`)\n return undefined\n }\n return value\n}\n\nfunction booleanField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): boolean | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (typeof value !== 'boolean') {\n errors.push(`${source}.${key} must be a boolean.`)\n return undefined\n }\n return value\n}\n\nfunction arrayField(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): ReadonlyArray<unknown> | undefined {\n if (record === undefined) {\n return undefined\n }\n const value = record[key]\n if (!Array.isArray(value)) {\n errors.push(`${source}.${key} must be an array.`)\n return undefined\n }\n return value\n}\n\nfunction assertStringValue(errors: Array<string>, actual: string | undefined, expected: string, source: string): void {\n if (actual !== undefined && actual !== expected) {\n errors.push(`${source} is ${actual}; expected ${expected}.`)\n }\n}\n\nfunction assertBooleanValue(errors: Array<string>, actual: boolean | undefined, expected: boolean, source: string): void {\n if (actual !== undefined && actual !== expected) {\n errors.push(`${source} is ${String(actual)}; expected ${String(expected)}.`)\n }\n}\n\nfunction assertArrayContainsString(\n errors: Array<string>,\n values: ReadonlyArray<unknown> | undefined,\n expected: string,\n source: string,\n): void {\n if (values !== undefined && !values.includes(expected)) {\n errors.push(`${source} must include ${expected}.`)\n }\n}\n\nfunction assertArrayDoesNotContainText(\n errors: Array<string>,\n values: ReadonlyArray<unknown> | undefined,\n text: string,\n source: string,\n): void {\n if (values?.some(value => typeof value === 'string' && value.includes(text)) === true) {\n errors.push(`${source} must not include text containing ${text}.`)\n }\n}\n\nfunction assertRecordDoesNotContain(\n errors: Array<string>,\n record: Record<string, unknown> | undefined,\n key: string,\n source: string,\n): void {\n if (record !== undefined && key in record) {\n errors.push(`${source} must not contain field ${key}.`)\n }\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableJson).join(',')}]`\n }\n if (isRecord(value)) {\n return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(',')}}`\n }\n return JSON.stringify(value)\n}\n\nfunction assertJsonValue(errors: Array<string>, actual: unknown, expected: unknown, source: string): void {\n if (stableJson(actual) !== stableJson(expected)) {\n errors.push(`${source} does not match the expected provider contract value.`)\n }\n}\n\ninterface ExpectedManagedFile {\n readonly id: string\n readonly requiredKeywords?: ReadonlyArray<string>\n readonly sourcePath: string\n readonly targetPath: string\n readonly targetUsage?: string\n}\n\nconst expectedSelfMaterializationForbiddenSurfaces = [\n '.prelude',\n '.prelude/providers',\n '.prelude/providers/effect-harness',\n '.prelude/providers/effect-harness/provider.json',\n '.prelude/providers/effect-harness/docs',\n '.prelude/providers/effect-harness/snippets',\n] as const\n\nfunction fileRecordById(\n files: ReadonlyArray<unknown> | undefined,\n id: string,\n): Record<string, unknown> | undefined {\n return files?.find(file => isRecord(file) && file.id === id) as Record<string, unknown> | undefined\n}\n\nconst forbiddenTargetLocalSourceClaims = [\n 'target SHOULD receive `repos/',\n 'target MUST receive `repos/',\n 'target 应该接收 `repos/',\n 'target 必须接收 `repos/',\n] as const\n\nconst assertManagedFileContribution = Effect.fnUntraced(function* (\n errors: Array<string>,\n harness: string,\n files: ReadonlyArray<unknown> | undefined,\n expected: ExpectedManagedFile,\n source: string,\n) {\n const file = fileRecordById(files, expected.id)\n if (file === undefined) {\n errors.push(`${source}.files must include ${expected.id}.`)\n return\n }\n\n assertStringValue(errors, stringField(errors, file, 'sourcePath', `${source}.files[${expected.id}]`), expected.sourcePath, `${source}.files[${expected.id}].sourcePath`)\n assertStringValue(errors, stringField(errors, file, 'targetPath', `${source}.files[${expected.id}]`), expected.targetPath, `${source}.files[${expected.id}].targetPath`)\n assertStringValue(errors, stringField(errors, file, 'contentType', `${source}.files[${expected.id}]`), 'text/markdown', `${source}.files[${expected.id}].contentType`)\n assertBooleanValue(errors, booleanField(errors, file, 'managed', `${source}.files[${expected.id}]`), true, `${source}.files[${expected.id}].managed`)\n if (expected.targetUsage !== undefined) {\n assertStringValue(errors, stringField(errors, file, 'targetUsage', `${source}.files[${expected.id}]`), expected.targetUsage, `${source}.files[${expected.id}].targetUsage`)\n }\n\n const fs = yield* FileSystem.FileSystem\n const path = `${harness}/${expected.sourcePath}`\n if (!(yield* fs.exists(path))) {\n errors.push(`${source}.files[${expected.id}].sourcePath does not exist: ${expected.sourcePath}.`)\n return\n }\n\n const text = yield* fs.readFileString(path)\n for (const keyword of expected.requiredKeywords ?? []) {\n if (!text.includes(keyword)) {\n errors.push(`${expected.sourcePath} must contain managed docs topic ${keyword}.`)\n }\n }\n for (const phrase of forbiddenTargetLocalSourceClaims) {\n if (text.includes(phrase)) {\n errors.push(`${expected.sourcePath} must not describe provider-internal repos as target-local content.`)\n }\n }\n})\n\nconst assertManagedFileBundle = Effect.fnUntraced(function* (\n errors: Array<string>,\n harness: string,\n bundle: Record<string, unknown> | undefined,\n expectedBasePath: string,\n expectedFiles: ReadonlyArray<ExpectedManagedFile>,\n source: string,\n) {\n if (bundle === undefined) {\n return\n }\n\n assertStringValue(errors, stringField(errors, bundle, 'mode', source), 'managed-files', `${source}.mode`)\n assertStringValue(errors, stringField(errors, bundle, 'targetBasePath', source), expectedBasePath, `${source}.targetBasePath`)\n\n const files = arrayField(errors, bundle, 'files', source)\n for (const expected of expectedFiles) {\n yield* assertManagedFileContribution(errors, harness, files, expected, source)\n }\n})\n\ntype PackageName = keyof typeof expectedPackageBaseline\ntype PackageField = 'dependencies' | 'devDependencies'\n\ninterface ExpectedPackageGroup {\n readonly field: PackageField\n readonly packageNames: ReadonlyArray<PackageName>\n}\n\nconst expectedPackageGroups = {\n runtime: {\n field: 'dependencies',\n packageNames: ['effect', '@effect/platform-node'],\n },\n testing: {\n field: 'devDependencies',\n packageNames: ['@effect/vitest', 'vitest'],\n },\n diagnostics: {\n field: 'devDependencies',\n packageNames: ['@effect/tsgo', '@effect/language-service'],\n },\n nativeBackend: {\n field: 'devDependencies',\n packageNames: ['@typescript/native-preview'],\n },\n linting: {\n field: 'devDependencies',\n packageNames: ['@antfu/eslint-config', 'eslint'],\n },\n} as const satisfies Readonly<Record<string, ExpectedPackageGroup>>\n\nconst expectedLintCommand = 'pnpm lint --max-warnings 0'\nconst expectedLintScript = 'eslint'\nconst expectedTestCommand = 'pnpm test'\nconst expectedTestScript = 'vitest run'\nconst expectedVerifyCommand = 'pnpm verify'\nconst expectedVerifyScript = 'node bin/effect-harness.ts verify --harness .'\n\nfunction assertPackageBaseline(\n errors: Array<string>,\n profileBaseline: Record<string, unknown> | undefined,\n): void {\n if (profileBaseline === undefined) {\n return\n }\n\n for (const [name, expected] of Object.entries(expectedPackageBaseline)) {\n const actual = profileBaseline[name]\n if (actual !== expected) {\n errors.push(`provider profile packageBaseline.${name} is ${String(actual ?? 'missing')}; expected ${expected}.`)\n }\n }\n}\n\nfunction assertSourceEntryEditorPolicy(\n errors: Array<string>,\n sourceContract: Record<string, unknown>,\n sourceEntryId: string,\n filesExclude: 'disabled' | 'enabled',\n): void {\n const editorPolicy = recordField(errors, sourceContract, 'editorPolicy', `${sourceEntryId} source contract`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'autoImportExclude', `${sourceEntryId} source contract.editorPolicy`), 'block', `${sourceEntryId} source contract.editorPolicy.autoImportExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'watcherExclude', `${sourceEntryId} source contract.editorPolicy`), 'recommended', `${sourceEntryId} source contract.editorPolicy.watcherExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'searchExclude', `${sourceEntryId} source contract.editorPolicy`), 'recommended', `${sourceEntryId} source contract.editorPolicy.searchExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'filesExclude', `${sourceEntryId} source contract.editorPolicy`), filesExclude, `${sourceEntryId} source contract.editorPolicy.filesExclude`)\n}\n\nfunction assertEditorPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n effectContract: Record<string, unknown>,\n tsgoContract: Record<string, unknown>,\n vscodeSettings: Record<string, unknown>,\n): void {\n const editorPolicy = recordField(errors, contributions, 'editorPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, editorPolicy, 'mode', 'provider profile editorPolicy contribution'), 'structured-merge', 'provider profile editorPolicy.mode')\n assertArrayContainsString(errors, arrayField(errors, editorPolicy, 'targetPaths', 'provider profile editorPolicy contribution'), '.vscode/settings.json', 'provider profile editorPolicy.targetPaths')\n assertArrayContainsString(errors, arrayField(errors, editorPolicy, 'targetPaths', 'provider profile editorPolicy contribution'), '.zed/settings.json', 'provider profile editorPolicy.targetPaths')\n\n const sourceIdentity = recordField(errors, editorPolicy, 'sourceIdentity', 'provider profile editorPolicy contribution')\n assertArrayContainsString(errors, arrayField(errors, sourceIdentity, 'providerInternalPatterns', 'provider profile editorPolicy.sourceIdentity'), 'repos/**', 'provider profile editorPolicy.sourceIdentity.providerInternalPatterns')\n assertBooleanValue(errors, booleanField(errors, sourceIdentity, 'targetReceivesSourceTrees', 'provider profile editorPolicy.sourceIdentity'), false, 'provider profile editorPolicy.sourceIdentity.targetReceivesSourceTrees')\n\n const policies = recordField(errors, editorPolicy, 'policies', 'provider profile editorPolicy contribution')\n const autoImport = recordField(errors, policies, 'autoImportExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, autoImport, 'level', 'provider profile editorPolicy.policies.autoImportExclude'), 'hard-boundary', 'provider profile editorPolicy.policies.autoImportExclude.level')\n assertStringValue(errors, stringField(errors, autoImport, 'sourceEntryContractField', 'provider profile editorPolicy.policies.autoImportExclude'), 'editorPolicy.autoImportExclude', 'provider profile editorPolicy.policies.autoImportExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, autoImport, 'expectedContractValue', 'provider profile editorPolicy.policies.autoImportExclude'), 'block', 'provider profile editorPolicy.policies.autoImportExclude.expectedContractValue')\n assertArrayContainsString(errors, arrayField(errors, autoImport, 'patterns', 'provider profile editorPolicy.policies.autoImportExclude'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.patterns')\n const vscodeAutoImport = recordField(errors, autoImport, 'vscode', 'provider profile editorPolicy.policies.autoImportExclude')\n assertArrayContainsString(errors, arrayField(errors, vscodeAutoImport, 'typescript.preferences.autoImportFileExcludePatterns', 'provider profile editorPolicy.policies.autoImportExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.vscode.typescript.preferences.autoImportFileExcludePatterns')\n assertArrayContainsString(errors, arrayField(errors, vscodeAutoImport, 'javascript.preferences.autoImportFileExcludePatterns', 'provider profile editorPolicy.policies.autoImportExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.autoImportExclude.vscode.javascript.preferences.autoImportFileExcludePatterns')\n const zedAutoImport = recordField(errors, autoImport, 'zed', 'provider profile editorPolicy.policies.autoImportExclude')\n assertStringValue(errors, stringField(errors, zedAutoImport, 'settingsPath', 'provider profile editorPolicy.policies.autoImportExclude.zed'), '.zed/settings.json', 'provider profile editorPolicy.policies.autoImportExclude.zed.settingsPath')\n if (recordField(errors, zedAutoImport, 'lsp', 'provider profile editorPolicy.policies.autoImportExclude.zed') === undefined) {\n errors.push('provider profile editorPolicy.policies.autoImportExclude.zed must use a Zed-specific lsp settings shape.')\n }\n\n const watchExclude = recordField(errors, policies, 'watchExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, watchExclude, 'level', 'provider profile editorPolicy.policies.watchExclude'), 'recommended', 'provider profile editorPolicy.policies.watchExclude.level')\n assertStringValue(errors, stringField(errors, watchExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.watchExclude'), 'editorPolicy.watcherExclude', 'provider profile editorPolicy.policies.watchExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, watchExclude, 'expectedContractValue', 'provider profile editorPolicy.policies.watchExclude'), 'recommended', 'provider profile editorPolicy.policies.watchExclude.expectedContractValue')\n assertBooleanValue(errors, booleanField(errors, watchExclude, 'requiresConfiguration', 'provider profile editorPolicy.policies.watchExclude'), true, 'provider profile editorPolicy.policies.watchExclude.requiresConfiguration')\n assertArrayContainsString(errors, arrayField(errors, watchExclude, 'patterns', 'provider profile editorPolicy.policies.watchExclude'), 'repos/**', 'provider profile editorPolicy.policies.watchExclude.patterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, recordField(errors, watchExclude, 'vscode', 'provider profile editorPolicy.policies.watchExclude'), 'files.watcherExclude', 'provider profile editorPolicy.policies.watchExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.watchExclude.vscode.files.watcherExclude'), true, 'provider profile editorPolicy.policies.watchExclude.vscode.files.watcherExclude[\"repos/**\"]')\n\n const searchExclude = recordField(errors, policies, 'searchExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, searchExclude, 'level', 'provider profile editorPolicy.policies.searchExclude'), 'recommended', 'provider profile editorPolicy.policies.searchExclude.level')\n assertStringValue(errors, stringField(errors, searchExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.searchExclude'), 'editorPolicy.searchExclude', 'provider profile editorPolicy.policies.searchExclude.sourceEntryContractField')\n assertStringValue(errors, stringField(errors, searchExclude, 'expectedContractValue', 'provider profile editorPolicy.policies.searchExclude'), 'recommended', 'provider profile editorPolicy.policies.searchExclude.expectedContractValue')\n assertBooleanValue(errors, booleanField(errors, searchExclude, 'requiresConfiguration', 'provider profile editorPolicy.policies.searchExclude'), true, 'provider profile editorPolicy.policies.searchExclude.requiresConfiguration')\n assertArrayContainsString(errors, arrayField(errors, searchExclude, 'patterns', 'provider profile editorPolicy.policies.searchExclude'), 'repos/**', 'provider profile editorPolicy.policies.searchExclude.patterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, recordField(errors, searchExclude, 'vscode', 'provider profile editorPolicy.policies.searchExclude'), 'search.exclude', 'provider profile editorPolicy.policies.searchExclude.vscode'), 'repos/**', 'provider profile editorPolicy.policies.searchExclude.vscode.search.exclude'), true, 'provider profile editorPolicy.policies.searchExclude.vscode.search.exclude[\"repos/**\"]')\n\n const filesExclude = recordField(errors, policies, 'filesExclude', 'provider profile editorPolicy.policies')\n assertStringValue(errors, stringField(errors, filesExclude, 'level', 'provider profile editorPolicy.policies.filesExclude'), 'preference', 'provider profile editorPolicy.policies.filesExclude.level')\n assertStringValue(errors, stringField(errors, filesExclude, 'sourceEntryContractField', 'provider profile editorPolicy.policies.filesExclude'), 'editorPolicy.filesExclude', 'provider profile editorPolicy.policies.filesExclude.sourceEntryContractField')\n assertBooleanValue(errors, booleanField(errors, filesExclude, 'requiresExplicitOptIn', 'provider profile editorPolicy.policies.filesExclude'), true, 'provider profile editorPolicy.policies.filesExclude.requiresExplicitOptIn')\n const sourceEntryDefaults = recordField(errors, filesExclude, 'sourceEntryDefaults', 'provider profile editorPolicy.policies.filesExclude')\n assertStringValue(errors, stringField(errors, sourceEntryDefaults, 'effect-official-source', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults'), 'enabled', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults.effect-official-source')\n assertStringValue(errors, stringField(errors, sourceEntryDefaults, 'tsgo-official-source', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults'), 'disabled', 'provider profile editorPolicy.policies.filesExclude.sourceEntryDefaults.tsgo-official-source')\n const contributionFilesExclude = recordField(errors, recordField(errors, filesExclude, 'vscode', 'provider profile editorPolicy.policies.filesExclude'), 'files.exclude', 'provider profile editorPolicy.policies.filesExclude.vscode')\n assertBooleanValue(errors, booleanField(errors, contributionFilesExclude, 'repos/effect/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude'), true, 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude[\"repos/effect/**\"]')\n assertRecordDoesNotContain(errors, contributionFilesExclude, 'repos/tsgo/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude')\n assertRecordDoesNotContain(errors, contributionFilesExclude, 'repos/**', 'provider profile editorPolicy.policies.filesExclude.vscode.files.exclude')\n\n assertArrayContainsString(errors, arrayField(errors, vscodeSettings, 'typescript.preferences.autoImportFileExcludePatterns', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.typescript.preferences.autoImportFileExcludePatterns')\n assertArrayContainsString(errors, arrayField(errors, vscodeSettings, 'javascript.preferences.autoImportFileExcludePatterns', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.javascript.preferences.autoImportFileExcludePatterns')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, vscodeSettings, 'files.watcherExclude', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.files.watcherExclude'), true, '.vscode/settings.json.files.watcherExclude[\"repos/**\"]')\n assertBooleanValue(errors, booleanField(errors, recordField(errors, vscodeSettings, 'search.exclude', '.vscode/settings.json'), 'repos/**', '.vscode/settings.json.search.exclude'), true, '.vscode/settings.json.search.exclude[\"repos/**\"]')\n const vscodeFilesExclude = recordField(errors, vscodeSettings, 'files.exclude', '.vscode/settings.json')\n assertBooleanValue(errors, booleanField(errors, vscodeFilesExclude, 'repos/effect/**', '.vscode/settings.json.files.exclude'), true, '.vscode/settings.json.files.exclude[\"repos/effect/**\"]')\n assertRecordDoesNotContain(errors, vscodeFilesExclude, 'repos/tsgo/**', '.vscode/settings.json.files.exclude')\n assertRecordDoesNotContain(errors, vscodeFilesExclude, 'repos/**', '.vscode/settings.json.files.exclude')\n\n assertSourceEntryEditorPolicy(errors, effectContract, 'effect-official-source', 'enabled')\n assertSourceEntryEditorPolicy(errors, tsgoContract, 'tsgo-official-source', 'disabled')\n}\n\nfunction assertEslintConfigContains(errors: Array<string>, eslintText: string, marker: string): void {\n if (!eslintText.includes(marker)) {\n errors.push(`eslint.config.mjs must contain ${marker}.`)\n }\n}\n\nfunction assertLintGuardrailsContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n eslintText: string,\n): void {\n const lintGuardrails = recordField(errors, contributions, 'lintGuardrails', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'mode', 'provider profile lintGuardrails contribution'), 'command-policy', 'provider profile lintGuardrails.mode')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'stage', 'provider profile lintGuardrails contribution'), 'lint', 'provider profile lintGuardrails.stage')\n assertStringValue(errors, stringField(errors, lintGuardrails, 'command', 'provider profile lintGuardrails contribution'), expectedLintCommand, 'provider profile lintGuardrails.command')\n assertArrayContainsString(errors, arrayField(errors, lintGuardrails, 'configFiles', 'provider profile lintGuardrails contribution'), 'eslint.config.mjs', 'provider profile lintGuardrails.configFiles')\n\n const scripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, scripts, 'lint', 'package.json.scripts'), expectedLintScript, 'package.json.scripts.lint')\n\n const layers = recordField(errors, lintGuardrails, 'layers', 'provider profile lintGuardrails contribution')\n const owns = arrayField(errors, layers, 'owns', 'provider profile lintGuardrails.layers')\n assertArrayContainsString(errors, owns, 'repository import boundary', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'Effect v4 CLI import boundary', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'Effect test entry', 'provider profile lintGuardrails.layers.owns')\n assertArrayContainsString(errors, owns, 'syntax-level Effect guardrails', 'provider profile lintGuardrails.layers.owns')\n const doesNotOwn = arrayField(errors, layers, 'doesNotOwn', 'provider profile lintGuardrails.layers')\n assertArrayContainsString(errors, doesNotOwn, 'Effect semantic diagnostics', 'provider profile lintGuardrails.layers.doesNotOwn')\n assertArrayContainsString(errors, doesNotOwn, 'tsgo rule severity map', 'provider profile lintGuardrails.layers.doesNotOwn')\n\n const rules = recordField(errors, lintGuardrails, 'rules', 'provider profile lintGuardrails contribution')\n const restrictedImports = arrayField(errors, rules, 'restrictedImports', 'provider profile lintGuardrails.rules')\n for (const source of ['node:test', '@effect/cli', '@effect/cli/*', 'repos/effect/**', 'repos/tsgo/**']) {\n assertArrayContainsString(errors, restrictedImports, source, 'provider profile lintGuardrails.rules.restrictedImports')\n const eslintMarker = source.endsWith('/**')\n ? source.slice(0, -3)\n : source.endsWith('/*')\n ? source.slice(0, -2)\n : source\n assertEslintConfigContains(errors, eslintText, eslintMarker)\n }\n const restrictedVitestImports = arrayField(errors, rules, 'restrictedVitestImports', 'provider profile lintGuardrails.rules')\n for (const importName of ['describe', 'it', 'test']) {\n assertArrayContainsString(errors, restrictedVitestImports, importName, 'provider profile lintGuardrails.rules.restrictedVitestImports')\n }\n const allowedVitestImports = arrayField(errors, rules, 'allowedVitestImports', 'provider profile lintGuardrails.rules')\n for (const importName of ['vi', 'beforeEach', 'afterEach', 'beforeAll', 'afterAll']) {\n assertArrayContainsString(errors, allowedVitestImports, importName, 'provider profile lintGuardrails.rules.allowedVitestImports')\n }\n assertEslintConfigContains(errors, eslintText, 'vitest')\n assertEslintConfigContains(errors, eslintText, 'importNames')\n\n const restrictedSyntax = arrayField(errors, rules, 'restrictedSyntax', 'provider profile lintGuardrails.rules')\n for (const syntax of ['Context.Tag', 'Effect.catchAllCause', 'Effect.ignore', 'Effect.serviceOption', '{ disableValidation: true }', 'plain it() in tests']) {\n assertArrayContainsString(errors, restrictedSyntax, syntax, 'provider profile lintGuardrails.rules.restrictedSyntax')\n }\n for (const marker of [\n 'MemberExpression[object.name=\"Context\"][property.name=\"Tag\"]',\n 'catchAllCause|ignore|serviceOption',\n 'disableValidation',\n 'CallExpression[callee.name=\"it\"]',\n ]) {\n assertEslintConfigContains(errors, eslintText, marker)\n }\n}\n\nfunction assertTestPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n): void {\n const testPolicy = recordField(errors, contributions, 'testPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, testPolicy, 'mode', 'provider profile testPolicy contribution'), 'command-policy', 'provider profile testPolicy.mode')\n assertStringValue(errors, stringField(errors, testPolicy, 'stage', 'provider profile testPolicy contribution'), 'tests', 'provider profile testPolicy.stage')\n assertStringValue(errors, stringField(errors, testPolicy, 'command', 'provider profile testPolicy contribution'), expectedTestCommand, 'provider profile testPolicy.command')\n assertStringValue(errors, stringField(errors, testPolicy, 'packageScript', 'provider profile testPolicy contribution'), expectedTestScript, 'provider profile testPolicy.packageScript')\n assertStringValue(errors, stringField(errors, testPolicy, 'framework', 'provider profile testPolicy contribution'), '@effect/vitest', 'provider profile testPolicy.framework')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'expectedEntries', 'provider profile testPolicy contribution'), 'tests/**/*.test.ts', 'provider profile testPolicy.expectedEntries')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.effect', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'it.live', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'effectEntrypoints', 'provider profile testPolicy contribution'), 'layer', 'provider profile testPolicy.effectEntrypoints')\n assertArrayContainsString(errors, arrayField(errors, testPolicy, 'disallowedImports', 'provider profile testPolicy contribution'), 'node:test', 'provider profile testPolicy.disallowedImports')\n const disallowedVitestImports = arrayField(errors, testPolicy, 'disallowedVitestImports', 'provider profile testPolicy contribution')\n for (const importName of ['describe', 'it', 'test']) {\n assertArrayContainsString(errors, disallowedVitestImports, importName, 'provider profile testPolicy.disallowedVitestImports')\n }\n}\n\nfunction stageRecordByTag(\n stages: ReadonlyArray<unknown> | undefined,\n tag: string,\n): Record<string, unknown> | undefined {\n return stages?.find(stage => isRecord(stage) && stage.tag === tag) as Record<string, unknown> | undefined\n}\n\nfunction assertVerificationPolicyContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n): void {\n const verificationPolicy = recordField(errors, contributions, 'verificationPolicy', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'mode', 'provider profile verificationPolicy contribution'), 'pipeline-policy', 'provider profile verificationPolicy.mode')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'completionGate', 'provider profile verificationPolicy contribution'), expectedVerifyCommand, 'provider profile verificationPolicy.completionGate')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'packageScript', 'provider profile verificationPolicy contribution'), expectedVerifyScript, 'provider profile verificationPolicy.packageScript')\n assertStringValue(errors, stringField(errors, verificationPolicy, 'lifecycleOwner', 'provider profile verificationPolicy contribution'), 'prelude', 'provider profile verificationPolicy.lifecycleOwner')\n\n const scripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, scripts, 'verify', 'package.json.scripts'), expectedVerifyScript, 'package.json.scripts.verify')\n\n const localCommands = recordField(errors, verificationPolicy, 'localCommands', 'provider profile verificationPolicy contribution')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'diagnostics', 'provider profile verificationPolicy.localCommands'), 'pnpm typecheck', 'provider profile verificationPolicy.localCommands.diagnostics')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'tests', 'provider profile verificationPolicy.localCommands'), expectedTestCommand, 'provider profile verificationPolicy.localCommands.tests')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'lint', 'provider profile verificationPolicy.localCommands'), expectedLintCommand, 'provider profile verificationPolicy.localCommands.lint')\n assertArrayContainsString(errors, arrayField(errors, localCommands, 'completion', 'provider profile verificationPolicy.localCommands'), expectedVerifyCommand, 'provider profile verificationPolicy.localCommands.completion')\n\n const stages = arrayField(errors, verificationPolicy, 'stages', 'provider profile verificationPolicy contribution')\n for (const spec of verifyStageSpecs) {\n const stage = stageRecordByTag(stages, spec.tag)\n if (stage === undefined) {\n errors.push(`provider profile verificationPolicy.stages must include ${spec.tag}.`)\n continue\n }\n assertStringValue(errors, stringField(errors, stage, 'summary', `provider profile verificationPolicy.stages[${spec.tag}]`), spec.summary, `provider profile verificationPolicy.stages[${spec.tag}].summary`)\n }\n}\n\nfunction assertPackageGroup(\n errors: Array<string>,\n dependencyGroups: Record<string, unknown> | undefined,\n groupName: string,\n expected: ExpectedPackageGroup,\n): void {\n const group = recordField(errors, dependencyGroups, groupName, 'provider profile packageJson.dependencyGroups')\n assertStringValue(errors, stringField(errors, group, 'field', `provider profile packageJson.dependencyGroups.${groupName}`), expected.field, `provider profile packageJson.dependencyGroups.${groupName}.field`)\n const packages = recordField(errors, group, 'packages', `provider profile packageJson.dependencyGroups.${groupName}`)\n if (packages === undefined) {\n return\n }\n\n const expectedNames = new Set<string>(expected.packageNames)\n for (const name of Object.keys(packages)) {\n if (!expectedNames.has(name)) {\n errors.push(`provider profile packageJson.dependencyGroups.${groupName}.packages must not include ${name}.`)\n }\n }\n\n for (const name of expected.packageNames) {\n assertStringValue(\n errors,\n stringField(errors, packages, name, `provider profile packageJson.dependencyGroups.${groupName}.packages`),\n expectedPackageBaseline[name],\n `provider profile packageJson.dependencyGroups.${groupName}.packages.${name}`,\n )\n }\n}\n\nfunction assertWorkspaceCatalogEntry(\n errors: Array<string>,\n workspaceText: string,\n name: PackageName,\n): void {\n const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/gu, String.raw`\\$&`)\n const escapedVersion = expectedPackageBaseline[name].replace(/[.*+?^${}()|[\\]\\\\]/gu, String.raw`\\$&`)\n const pattern = new RegExp(`(?:^|\\\\n)\\\\s*['\"]?${escapedName}['\"]?:\\\\s*${escapedVersion}(?:\\\\n|$)`, 'u')\n if (!pattern.test(workspaceText)) {\n errors.push(`pnpm-workspace.yaml catalog must pin ${name} to ${expectedPackageBaseline[name]}.`)\n }\n}\n\nfunction assertPackageGroupSelfConformance(\n errors: Array<string>,\n dependencyGroups: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n workspaceText: string,\n groupName: keyof typeof expectedPackageGroups,\n selfConformanceSpecifier: string,\n): void {\n const expected = expectedPackageGroups[groupName]\n assertPackageGroup(errors, dependencyGroups, groupName, expected)\n\n const packageSection = recordField(errors, packageManifest, expected.field, 'package.json')\n for (const name of expected.packageNames) {\n assertStringValue(\n errors,\n stringField(errors, packageSection, name, `package.json.${expected.field}`),\n selfConformanceSpecifier,\n `package.json.${expected.field}.${name}`,\n )\n assertWorkspaceCatalogEntry(errors, workspaceText, name)\n }\n}\n\nfunction assertPackageScriptsContribution(\n errors: Array<string>,\n packageContribution: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n): void {\n const contributionScripts = recordField(errors, packageContribution, 'scripts', 'provider profile packageJson contribution')\n const prepare = recordField(errors, contributionScripts, 'prepare', 'provider profile packageJson.scripts')\n const typecheck = recordField(errors, contributionScripts, 'typecheck', 'provider profile packageJson.scripts')\n const test = recordField(errors, contributionScripts, 'test', 'provider profile packageJson.scripts')\n const lint = recordField(errors, contributionScripts, 'lint', 'provider profile packageJson.scripts')\n assertStringValue(errors, stringField(errors, prepare, 'defaultCommand', 'provider profile packageJson.scripts.prepare'), expectedPrepareCommand, 'provider profile packageJson.scripts.prepare.defaultCommand')\n assertStringValue(errors, stringField(errors, typecheck, 'defaultCommand', 'provider profile packageJson.scripts.typecheck'), expectedTypecheckCommand, 'provider profile packageJson.scripts.typecheck.defaultCommand')\n assertStringValue(errors, stringField(errors, test, 'defaultCommand', 'provider profile packageJson.scripts.test'), expectedTestScript, 'provider profile packageJson.scripts.test.defaultCommand')\n assertStringValue(errors, stringField(errors, lint, 'defaultCommand', 'provider profile packageJson.scripts.lint'), expectedLintScript, 'provider profile packageJson.scripts.lint.defaultCommand')\n\n const manifestScripts = recordField(errors, packageManifest, 'scripts', 'package.json')\n assertStringValue(errors, stringField(errors, manifestScripts, 'prepare', 'package.json.scripts'), expectedPrepareCommand, 'package.json.scripts.prepare')\n assertStringValue(errors, stringField(errors, manifestScripts, 'typecheck', 'package.json.scripts'), expectedTypecheckCommand, 'package.json.scripts.typecheck')\n assertStringValue(errors, stringField(errors, manifestScripts, 'lint', 'package.json.scripts'), expectedLintScript, 'package.json.scripts.lint')\n}\n\nfunction assertPackageJsonContribution(\n errors: Array<string>,\n contributions: Record<string, unknown> | undefined,\n packageManifest: Record<string, unknown>,\n workspaceText: string,\n): void {\n const packageJson = recordField(errors, contributions, 'packageJson', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, packageJson, 'mode', 'provider profile packageJson contribution'), 'structured-merge', 'provider profile packageJson.mode')\n assertStringValue(errors, stringField(errors, packageJson, 'targetPath', 'provider profile packageJson contribution'), 'package.json', 'provider profile packageJson.targetPath')\n const selfConformanceSpecifier = stringField(errors, packageJson, 'selfConformanceSpecifier', 'provider profile packageJson contribution')\n assertStringValue(errors, selfConformanceSpecifier, 'catalog:', 'provider profile packageJson.selfConformanceSpecifier')\n assertRecordDoesNotContain(errors, packageJson, 'dependencies', 'provider profile packageJson contribution')\n assertRecordDoesNotContain(errors, packageJson, 'devDependencies', 'provider profile packageJson contribution')\n\n const dependencyGroups = recordField(errors, packageJson, 'dependencyGroups', 'provider profile packageJson contribution')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'runtime', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'testing', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'diagnostics', selfConformanceSpecifier ?? '')\n assertPackageGroupSelfConformance(errors, dependencyGroups, packageManifest, workspaceText, 'nativeBackend', selfConformanceSpecifier ?? '')\n assertPackageScriptsContribution(errors, packageJson, packageManifest)\n}\n\nfunction assertTsconfigContributionMetadata(errors: Array<string>, contributions: Record<string, unknown> | undefined): void {\n const tsconfig = recordField(errors, contributions, 'tsconfig', 'provider profile.profiles.codex-effect-v4.contributions')\n assertStringValue(errors, stringField(errors, tsconfig, 'mode', 'provider profile tsconfig contribution'), 'structured-merge', 'provider profile tsconfig.mode')\n assertStringValue(errors, stringField(errors, tsconfig, 'targetPath', 'provider profile tsconfig contribution'), 'tsconfig.json', 'provider profile tsconfig.targetPath')\n\n const tsgo = recordField(errors, tsconfig, 'tsgo', 'provider profile tsconfig contribution')\n assertStringValue(errors, stringField(errors, tsgo, 'diagnosticCommand', 'provider profile tsconfig.tsgo'), expectedTypecheckCommand, 'provider profile tsconfig.tsgo.diagnosticCommand')\n\n const nativeBackend = recordField(errors, tsgo, 'nativeBackend', 'provider profile tsconfig.tsgo')\n assertStringValue(errors, stringField(errors, nativeBackend, 'package', 'provider profile tsconfig.tsgo.nativeBackend'), '@typescript/native-preview', 'provider profile tsconfig.tsgo.nativeBackend.package')\n assertStringValue(errors, stringField(errors, nativeBackend, 'version', 'provider profile tsconfig.tsgo.nativeBackend'), expectedPackageBaseline['@typescript/native-preview'], 'provider profile tsconfig.tsgo.nativeBackend.version')\n assertStringValue(errors, stringField(errors, nativeBackend, 'setupCommand', 'provider profile tsconfig.tsgo.nativeBackend'), expectedPrepareCommand, 'provider profile tsconfig.tsgo.nativeBackend.setupCommand')\n\n assertJsonValue(errors, recordField(errors, tsgo, 'diagnosticGate', 'provider profile tsconfig.tsgo'), strictDiagnosticGate, 'provider profile tsconfig.tsgo.diagnosticGate')\n\n const ruleMapSource = recordField(errors, tsgo, 'ruleMapSource', 'provider profile tsconfig.tsgo')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'metadata', 'provider profile tsconfig.tsgo.ruleMapSource'), 'repos/tsgo/_packages/tsgo/src/metadata.json', 'provider profile tsconfig.tsgo.ruleMapSource.metadata')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'policy', 'provider profile tsconfig.tsgo.ruleMapSource'), 'harness/tsgo.md', 'provider profile tsconfig.tsgo.ruleMapSource.policy')\n assertStringValue(errors, stringField(errors, ruleMapSource, 'supportedEffect', 'provider profile tsconfig.tsgo.ruleMapSource'), 'v4', 'provider profile tsconfig.tsgo.ruleMapSource.supportedEffect')\n if (ruleMapSource?.ruleCount !== Object.keys(strictDiagnosticSeverity).length) {\n errors.push(`provider profile tsconfig.tsgo.ruleMapSource.ruleCount is ${String(ruleMapSource?.ruleCount ?? 'missing')}; expected ${Object.keys(strictDiagnosticSeverity).length}.`)\n }\n}\n\nfunction assertDeliveryModes(errors: Array<string>, providerProfile: Record<string, unknown>): void {\n const deliveryModes = recordField(errors, providerProfile, 'deliveryModes', 'provider profile')\n const internalHarness = recordField(errors, deliveryModes, 'internalHarness', 'provider profile.deliveryModes')\n const artifactReference = recordField(errors, deliveryModes, 'providerArtifactReference', 'provider profile.deliveryModes')\n const exportedHarness = recordField(errors, deliveryModes, 'exportedHarness', 'provider profile.deliveryModes')\n\n assertStringValue(errors, stringField(errors, internalHarness, 'mode', 'provider profile.deliveryModes.internalHarness'), 'internal-harness', 'provider profile.deliveryModes.internalHarness.mode')\n assertStringValue(errors, stringField(errors, artifactReference, 'mode', 'provider profile.deliveryModes.providerArtifactReference'), 'provider-artifact-reference', 'provider profile.deliveryModes.providerArtifactReference.mode')\n assertStringValue(errors, stringField(errors, exportedHarness, 'mode', 'provider profile.deliveryModes.exportedHarness'), 'exported-harness', 'provider profile.deliveryModes.exportedHarness.mode')\n}\n\nfunction assertSelfConformanceContract(errors: Array<string>, providerProfile: Record<string, unknown>): void {\n const selfConformance = recordField(errors, providerProfile, 'selfConformance', 'provider profile')\n assertStringValue(errors, stringField(errors, selfConformance, 'mode', 'provider profile.selfConformance'), 'provider-repository', 'provider profile.selfConformance.mode')\n assertStringValue(errors, stringField(errors, selfConformance, 'conformsTo', 'provider profile.selfConformance'), 'exported-harness', 'provider profile.selfConformance.conformsTo')\n assertStringValue(errors, stringField(errors, selfConformance, 'completionGate', 'provider profile.selfConformance'), 'pnpm verify', 'provider profile.selfConformance.completionGate')\n assertBooleanValue(errors, booleanField(errors, selfConformance, 'selfMaterialization', 'provider profile.selfConformance'), false, 'provider profile.selfConformance.selfMaterialization')\n assertStringValue(errors, stringField(errors, selfConformance, 'lifecycleOwner', 'provider profile.selfConformance'), 'prelude', 'provider profile.selfConformance.lifecycleOwner')\n\n const forbiddenSurfaces = arrayField(errors, selfConformance, 'forbiddenProviderRepositorySurfaces', 'provider profile.selfConformance')\n for (const surface of expectedSelfMaterializationForbiddenSurfaces) {\n assertArrayContainsString(errors, forbiddenSurfaces, surface, 'provider profile.selfConformance.forbiddenProviderRepositorySurfaces')\n }\n}\n\ninterface ExpectedArtifactReference {\n readonly id: string\n readonly path: string\n readonly sourceEntry: string\n}\n\nfunction assertArtifactReference(\n errors: Array<string>,\n references: Record<string, unknown> | undefined,\n expected: ExpectedArtifactReference,\n): void {\n const reference = recordField(errors, references, expected.id, 'provider profile.artifactReferences.references')\n assertStringValue(errors, stringField(errors, reference, 'sourceEntry', `provider profile.artifactReferences.references.${expected.id}`), expected.sourceEntry, `provider profile.artifactReferences.references.${expected.id}.sourceEntry`)\n assertStringValue(errors, stringField(errors, reference, 'path', `provider profile.artifactReferences.references.${expected.id}`), expected.path, `provider profile.artifactReferences.references.${expected.id}.path`)\n assertStringValue(errors, stringField(errors, reference, 'targetDelivery', `provider profile.artifactReferences.references.${expected.id}`), 'artifact-only', `provider profile.artifactReferences.references.${expected.id}.targetDelivery`)\n}\n\nfunction assertArtifactReferencesContract(\n errors: Array<string>,\n providerProfile: Record<string, unknown>,\n packageManifest: Record<string, unknown>,\n): void {\n const artifactReferences = recordField(errors, providerProfile, 'artifactReferences', 'provider profile')\n assertStringValue(errors, stringField(errors, artifactReferences, 'mode', 'provider profile.artifactReferences'), 'provider-artifact-reference', 'provider profile.artifactReferences.mode')\n assertStringValue(errors, stringField(errors, artifactReferences, 'targetDelivery', 'provider profile.artifactReferences'), 'identity-only', 'provider profile.artifactReferences.targetDelivery')\n\n const packageFiles = arrayField(errors, packageManifest, 'files', 'package.json')\n const packageSurface = arrayField(errors, artifactReferences, 'packageSurface', 'provider profile.artifactReferences')\n for (const path of ['provider', 'harness', 'repos', 'repos/effect.subtree.json', 'repos/tsgo.subtree.json']) {\n assertArrayContainsString(errors, packageFiles, path, 'package.json.files')\n assertArrayContainsString(errors, packageSurface, path, 'provider profile.artifactReferences.packageSurface')\n }\n\n const references = recordField(errors, artifactReferences, 'references', 'provider profile.artifactReferences')\n assertArtifactReference(errors, references, {\n id: 'effect-source-tree',\n path: 'repos/effect',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-source-contract',\n path: 'repos/effect.subtree.json',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-anchor-doc',\n path: 'repos/effect/LLMS.md',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'effect-route-doc',\n path: 'harness/effect-routes.md',\n sourceEntry: 'effect-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-source-tree',\n path: 'repos/tsgo',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-source-contract',\n path: 'repos/tsgo.subtree.json',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-anchor-doc',\n path: 'repos/tsgo/README.md',\n sourceEntry: 'tsgo-official-source',\n })\n assertArtifactReference(errors, references, {\n id: 'tsgo-route-doc',\n path: 'harness/tsgo-routes.md',\n sourceEntry: 'tsgo-official-source',\n })\n}\n\nexport const verifyProviderProfileContract = Effect.fnUntraced(function* (errors: Array<string>, harness: string) {\n const fs = yield* FileSystem.FileSystem\n const providerProfile = yield* readJson(`${harness}/provider/effect-harness.provider.json`, decodeJsonRecord)\n const effectContract = yield* readJson(`${harness}/repos/effect.subtree.json`, decodeJsonRecord)\n const tsgoContract = yield* readJson(`${harness}/repos/tsgo.subtree.json`, decodeJsonRecord)\n const packageManifest = yield* readJson(`${harness}/package.json`, decodeJsonRecord)\n const vscodeSettings = yield* readJson(`${harness}/.vscode/settings.json`, decodeJsonRecord)\n const eslintText = yield* fs.readFileString(`${harness}/eslint.config.mjs`)\n const workspaceText = yield* fs.readFileString(`${harness}/pnpm-workspace.yaml`)\n\n const provider = recordField(errors, providerProfile, 'provider', 'provider profile')\n assertStringValue(errors, stringField(errors, provider, 'id', 'provider profile.provider'), 'effect-harness', 'provider profile.provider.id')\n assertStringValue(errors, stringField(errors, provider, 'defaultProfile', 'provider profile.provider'), 'codex-effect-v4', 'provider profile.provider.defaultProfile')\n assertDeliveryModes(errors, providerProfile)\n assertSelfConformanceContract(errors, providerProfile)\n assertArtifactReferencesContract(errors, providerProfile, packageManifest)\n\n const sourceEntries = recordField(errors, providerProfile, 'sourceEntries', 'provider profile')\n const profiles = recordField(errors, providerProfile, 'profiles', 'provider profile')\n const profile = recordField(errors, profiles, 'codex-effect-v4', 'provider profile.profiles')\n const sourceEntryId = stringField(errors, profile, 'sourceEntry', 'provider profile.profiles.codex-effect-v4')\n assertStringValue(errors, sourceEntryId, 'effect-official-source', 'provider profile.profiles.codex-effect-v4.sourceEntry')\n\n assertProviderSourceEntry(errors, sourceEntries, {\n contractPath: 'repos/effect.subtree.json',\n id: 'effect-official-source',\n updateCommand: 'partita pin update --contract repos/effect.subtree.json --name effect --prefix repos/effect --dry-run',\n verifyCommand: 'partita pin verify --contract repos/effect.subtree.json --name effect --prefix repos/effect',\n })\n assertProviderSourceEntry(errors, sourceEntries, {\n contractPath: 'repos/tsgo.subtree.json',\n id: 'tsgo-official-source',\n updateCommand: 'partita pin update --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo --dry-run',\n verifyCommand: 'partita pin verify --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo',\n })\n assertPartitaSubtreeContract(errors, effectContract, {\n anchor: 'repos/effect/LLMS.md',\n contractPath: 'repos/effect.subtree.json',\n filesExclude: 'enabled',\n name: 'effect',\n prefix: 'repos/effect',\n repository: 'https://github.com/Effect-TS/effect-smol',\n route: 'harness/effect-routes.md',\n updateCommand: 'partita pin update --contract repos/effect.subtree.json --name effect --prefix repos/effect --dry-run',\n verifyCommand: 'partita pin verify --contract repos/effect.subtree.json --name effect --prefix repos/effect',\n })\n assertPartitaSubtreeContract(errors, tsgoContract, {\n anchor: 'repos/tsgo/README.md',\n contractPath: 'repos/tsgo.subtree.json',\n filesExclude: 'disabled',\n name: 'tsgo',\n prefix: 'repos/tsgo',\n repository: 'https://github.com/Effect-TS/tsgo',\n route: 'harness/tsgo-routes.md',\n updateCommand: 'partita pin update --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo --dry-run',\n verifyCommand: 'partita pin verify --contract repos/tsgo.subtree.json --name tsgo --prefix repos/tsgo',\n })\n\n const providerRecord = recordField(errors, providerProfile, 'providerRecord', 'provider profile')\n const sourceDelivery = recordField(errors, providerRecord, 'sourceDelivery', 'provider profile.providerRecord')\n assertStringValue(errors, stringField(errors, sourceDelivery, 'mode', 'provider profile.providerRecord.sourceDelivery'), 'artifact-identity-only', 'provider profile.providerRecord.sourceDelivery.mode')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'artifact.sourceIdentity', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'artifact.sourceIdentities', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'surfaces.documentationBundle', 'provider profile.providerRecord.requiredFields')\n assertArrayContainsString(errors, arrayField(errors, providerRecord, 'requiredFields', 'provider profile.providerRecord'), 'surfaces.snippets', 'provider profile.providerRecord.requiredFields')\n\n const sourceBoundary = recordField(errors, profile, 'sourceBoundary', 'provider profile.profiles.codex-effect-v4')\n assertBooleanValue(errors, booleanField(errors, sourceBoundary, 'providerRepoInternal', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), true, 'provider profile.profiles.codex-effect-v4.sourceBoundary.providerRepoInternal')\n assertStringValue(errors, stringField(errors, sourceBoundary, 'targetDelivery', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'identity-only', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetDelivery')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'repos/effect', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'repos/tsgo', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'harness/effect-routes.md', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n assertArrayContainsString(errors, arrayField(errors, sourceBoundary, 'targetMustNotReceive', 'provider profile.profiles.codex-effect-v4.sourceBoundary'), 'harness/tsgo-routes.md', 'provider profile.profiles.codex-effect-v4.sourceBoundary.targetMustNotReceive')\n\n const options = recordField(errors, profile, 'options', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, options, 'runtime', 'provider profile.profiles.codex-effect-v4.options')\n assertRecordDoesNotContain(errors, options, 'editorPolicy', 'provider profile.profiles.codex-effect-v4.options')\n\n assertPackageBaseline(errors, recordField(errors, profile, 'packageBaseline', 'provider profile.profiles.codex-effect-v4'))\n\n const managedSurfaces = recordField(errors, profile, 'managedSurfaces', 'provider profile.profiles.codex-effect-v4')\n const targetReceives = arrayField(errors, managedSurfaces, 'targetReceives', 'provider profile.profiles.codex-effect-v4.managedSurfaces')\n assertArrayContainsString(errors, targetReceives, 'provider record at .prelude/providers/effect-harness/provider.json', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'provider-managed docs bundle at .prelude/providers/effect-harness/docs', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'provider-managed snippets at .prelude/providers/effect-harness/snippets', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'editor policy structured pointer for target editor settings', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayContainsString(errors, targetReceives, 'lint, test, and verification policy records', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'runtime assets', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'AGENTS.md managed block', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, 'feedback', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n assertArrayDoesNotContainText(errors, targetReceives, '.effect-harness.json', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetReceives')\n const targetDoesNotReceive = arrayField(errors, managedSurfaces, 'targetDoesNotReceive', 'provider profile.profiles.codex-effect-v4.managedSurfaces')\n assertArrayContainsString(errors, targetDoesNotReceive, 'provider repo internal Effect route harness/effect-routes.md', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetDoesNotReceive')\n assertArrayContainsString(errors, targetDoesNotReceive, 'provider repo internal tsgo route harness/tsgo-routes.md', 'provider profile.profiles.codex-effect-v4.managedSurfaces.targetDoesNotReceive')\n\n assertRecordDoesNotContain(errors, profile, 'state', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, profile, 'officialSource', 'provider profile.profiles.codex-effect-v4')\n const contributions = recordField(errors, profile, 'contributions', 'provider profile.profiles.codex-effect-v4')\n assertRecordDoesNotContain(errors, contributions, 'runtimeAssets', 'provider profile.profiles.codex-effect-v4.contributions')\n assertRecordDoesNotContain(errors, contributions, 'agentsBlock', 'provider profile.profiles.codex-effect-v4.contributions')\n assertRecordDoesNotContain(errors, contributions, 'codexAssets', 'provider profile.profiles.codex-effect-v4.contributions')\n assertPackageJsonContribution(errors, contributions, packageManifest, workspaceText)\n assertTsconfigContributionMetadata(errors, contributions)\n assertEditorPolicyContribution(errors, contributions, effectContract, tsgoContract, vscodeSettings)\n assertLintGuardrailsContribution(errors, contributions, packageManifest, eslintText)\n assertTestPolicyContribution(errors, contributions)\n assertVerificationPolicyContribution(errors, contributions, packageManifest)\n\n yield* assertManagedFileBundle(\n errors,\n harness,\n recordField(errors, contributions, 'documentationBundle', 'provider profile.profiles.codex-effect-v4.contributions'),\n '.prelude/providers/effect-harness/docs',\n [\n {\n id: 'effect-code',\n requiredKeywords: ['Effect Code', '@effect/vitest', 'Context.Service', 'effect/unstable/cli'],\n sourcePath: 'provider/docs/effect-code.md',\n targetPath: 'effect-code.md',\n },\n {\n id: 'diagnostics',\n requiredKeywords: ['tsgo --noEmit', '@effect/language-service', 'diagnostic gate', 'drift'],\n sourcePath: 'provider/docs/diagnostics.md',\n targetPath: 'diagnostics.md',\n },\n {\n id: 'editor-policy',\n requiredKeywords: ['auto-import', 'watch exclusion', 'search exclusion', 'file visibility'],\n sourcePath: 'provider/docs/editor-policy.md',\n targetPath: 'editor-policy.md',\n },\n {\n id: 'managed-surfaces',\n requiredKeywords: ['Managed Surfaces', 'target-managed surfaces', 'Artifact-Only', 'Snippets', 'Feedback Loop', 'local drift'],\n sourcePath: 'provider/docs/managed-surfaces.md',\n targetPath: 'managed-surfaces.md',\n },\n {\n id: 'discovery',\n requiredKeywords: ['Provider Discovery', 'provider-discover', 'Prelude', 'target-managed surfaces', 'artifact-only', 'internal harness'],\n sourcePath: 'provider/docs/discovery.md',\n targetPath: 'discovery.md',\n },\n {\n id: 'package-config',\n requiredKeywords: ['Package', 'effect-tsgo patch', 'tsgo --noEmit', 'tsconfig.json'],\n sourcePath: 'provider/docs/package-config.md',\n targetPath: 'package-config.md',\n },\n {\n id: 'quality-policy',\n requiredKeywords: ['lint policy', 'test policy', 'verification policy', 'Prelude'],\n sourcePath: 'provider/docs/quality-policy.md',\n targetPath: 'quality-policy.md',\n },\n {\n id: 'source-identity',\n requiredKeywords: ['Source Identity', 'artifact-only', 'target delivery', 'source pin lifecycle', 'Partita', 'provider record'],\n sourcePath: 'provider/docs/source-identity.md',\n targetPath: 'source-identity.md',\n },\n ],\n 'provider profile.profiles.codex-effect-v4.contributions.documentationBundle',\n )\n yield* assertManagedFileBundle(\n errors,\n harness,\n recordField(errors, contributions, 'snippets', 'provider profile.profiles.codex-effect-v4.contributions'),\n '.prelude/providers/effect-harness/snippets',\n [\n {\n id: 'agents-effect-harness',\n requiredKeywords: ['Effect Harness Snippet', 'provider-managed source content', 'target `AGENTS.md` block'],\n sourcePath: 'provider/snippets/agents.md',\n targetPath: 'agents.md',\n targetUsage: 'manual-copy-or-include-only',\n },\n ],\n 'provider profile.profiles.codex-effect-v4.contributions.snippets',\n )\n})\n\ninterface ExpectedProviderSourceEntry {\n readonly id: string\n readonly contractPath: string\n readonly updateCommand: string\n readonly verifyCommand: string\n}\n\nfunction assertProviderSourceEntry(\n errors: Array<string>,\n sourceEntries: Record<string, unknown> | undefined,\n expected: ExpectedProviderSourceEntry,\n): void {\n const sourceEntry = recordField(errors, sourceEntries, expected.id, 'provider profile.sourceEntries')\n assertStringValue(errors, stringField(errors, sourceEntry, 'kind', `provider profile.sourceEntries.${expected.id}`), 'provider-internal-github-subtree', `provider profile.sourceEntries.${expected.id}.kind`)\n const contract = recordField(errors, sourceEntry, 'contract', `provider profile.sourceEntries.${expected.id}`)\n assertStringValue(errors, stringField(errors, contract, 'path', `provider profile.sourceEntries.${expected.id}.contract`), expected.contractPath, `provider profile.sourceEntries.${expected.id}.contract.path`)\n assertStringValue(errors, stringField(errors, contract, 'owner', `provider profile.sourceEntries.${expected.id}.contract`), 'partita', `provider profile.sourceEntries.${expected.id}.contract.owner`)\n assertStringValue(errors, stringField(errors, contract, 'format', `provider profile.sourceEntries.${expected.id}.contract`), 'github-subtree', `provider profile.sourceEntries.${expected.id}.contract.format`)\n const commands = recordField(errors, sourceEntry, 'commands', `provider profile.sourceEntries.${expected.id}`)\n assertStringValue(errors, stringField(errors, commands, 'update', `provider profile.sourceEntries.${expected.id}.commands`), expected.updateCommand, `provider profile.sourceEntries.${expected.id}.commands.update`)\n assertStringValue(errors, stringField(errors, commands, 'verify', `provider profile.sourceEntries.${expected.id}.commands`), expected.verifyCommand, `provider profile.sourceEntries.${expected.id}.commands.verify`)\n assertRecordDoesNotContain(errors, commands, 'status', `provider profile.sourceEntries.${expected.id}.commands`)\n assertRecordDoesNotContain(errors, sourceEntry, 'repository', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'branch', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'prefix', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'anchor', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'llmDocument', `provider profile.sourceEntries.${expected.id}`)\n assertRecordDoesNotContain(errors, sourceEntry, 'agentRoute', `provider profile.sourceEntries.${expected.id}`)\n}\n\ninterface ExpectedPartitaSubtreeContract {\n readonly anchor: string\n readonly contractPath: string\n readonly filesExclude: string\n readonly name: string\n readonly prefix: string\n readonly repository: string\n readonly route: string\n readonly updateCommand: string\n readonly verifyCommand: string\n}\n\nfunction assertPartitaSubtreeContract(\n errors: Array<string>,\n sourceContract: Record<string, unknown>,\n expected: ExpectedPartitaSubtreeContract,\n): void {\n assertStringValue(errors, stringField(errors, sourceContract, 'name', expected.contractPath), expected.name, `${expected.contractPath}.name`)\n assertStringValue(errors, stringField(errors, sourceContract, 'mechanism', expected.contractPath), 'git-subtree', `${expected.contractPath}.mechanism`)\n\n const github = recordField(errors, sourceContract, 'github', expected.contractPath)\n const local = recordField(errors, sourceContract, 'local', expected.contractPath)\n const subtree = recordField(errors, sourceContract, 'subtree', expected.contractPath)\n const anchor = recordField(errors, sourceContract, 'anchor', expected.contractPath)\n const agent = recordField(errors, sourceContract, 'agent', expected.contractPath)\n const commands = recordField(errors, sourceContract, 'commands', expected.contractPath)\n const editorPolicy = recordField(errors, sourceContract, 'editorPolicy', expected.contractPath)\n const boundaries = recordField(errors, sourceContract, 'boundaries', expected.contractPath)\n const ownership = recordField(errors, sourceContract, 'ownership', expected.contractPath)\n\n const split = stringField(errors, subtree, 'split', `${expected.contractPath}.subtree`)\n assertStringValue(errors, stringField(errors, github, 'repository', `${expected.contractPath}.github`), expected.repository, `${expected.contractPath}.github.repository`)\n assertStringValue(errors, stringField(errors, github, 'branch', `${expected.contractPath}.github`), 'main', `${expected.contractPath}.github.branch`)\n assertStringValue(errors, stringField(errors, github, 'ref', `${expected.contractPath}.github`), split ?? '', `${expected.contractPath}.github.ref`)\n assertStringValue(errors, stringField(errors, local, 'prefix', `${expected.contractPath}.local`), expected.prefix, `${expected.contractPath}.local.prefix`)\n assertStringValue(errors, stringField(errors, subtree, 'trailer', `${expected.contractPath}.subtree`), `git-subtree-split: ${split ?? ''}`, `${expected.contractPath}.subtree.trailer`)\n assertStringValue(errors, stringField(errors, anchor, 'llmDocument', `${expected.contractPath}.anchor`), expected.anchor, `${expected.contractPath}.anchor.llmDocument`)\n assertStringValue(errors, stringField(errors, agent, 'route', `${expected.contractPath}.agent`), expected.route, `${expected.contractPath}.agent.route`)\n assertStringValue(errors, stringField(errors, commands, 'update', `${expected.contractPath}.commands`), expected.updateCommand, `${expected.contractPath}.commands.update`)\n assertStringValue(errors, stringField(errors, commands, 'verify', `${expected.contractPath}.commands`), expected.verifyCommand, `${expected.contractPath}.commands.verify`)\n assertRecordDoesNotContain(errors, commands, 'status', `${expected.contractPath}.commands`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'autoImportExclude', `${expected.contractPath}.editorPolicy`), 'block', `${expected.contractPath}.editorPolicy.autoImportExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'watcherExclude', `${expected.contractPath}.editorPolicy`), 'recommended', `${expected.contractPath}.editorPolicy.watcherExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'searchExclude', `${expected.contractPath}.editorPolicy`), 'recommended', `${expected.contractPath}.editorPolicy.searchExclude`)\n assertStringValue(errors, stringField(errors, editorPolicy, 'filesExclude', `${expected.contractPath}.editorPolicy`), expected.filesExclude, `${expected.contractPath}.editorPolicy.filesExclude`)\n assertStringValue(errors, stringField(errors, ownership, 'mode', `${expected.contractPath}.ownership`), 'provider', `${expected.contractPath}.ownership.mode`)\n assertBooleanValue(errors, booleanField(errors, boundaries, 'readOnly', `${expected.contractPath}.boundaries`), true, `${expected.contractPath}.boundaries.readOnly`)\n assertBooleanValue(errors, booleanField(errors, boundaries, 'importBlock', `${expected.contractPath}.boundaries`), true, `${expected.contractPath}.boundaries.importBlock`)\n}\n"]}
|
|
@@ -6,6 +6,9 @@ export declare const expectedPackageBaseline: {
|
|
|
6
6
|
readonly '@effect/tsgo': "0.15.0";
|
|
7
7
|
readonly '@effect/language-service': "0.86.2";
|
|
8
8
|
readonly '@typescript/native-preview': "7.0.0-dev.20260630.1";
|
|
9
|
+
readonly '@antfu/eslint-config': "^9.0.0";
|
|
10
|
+
readonly eslint: "^10.3.0";
|
|
11
|
+
readonly vitest: "^4.1.8";
|
|
9
12
|
};
|
|
10
13
|
export declare const expectedEffectTsgoVersion = "0.15.0";
|
|
11
14
|
export declare const expectedPrepareCommand = "effect-tsgo patch";
|
|
@@ -5,6 +5,9 @@ export const expectedPackageBaseline = {
|
|
|
5
5
|
'@effect/tsgo': '0.15.0',
|
|
6
6
|
'@effect/language-service': '0.86.2',
|
|
7
7
|
'@typescript/native-preview': '7.0.0-dev.20260630.1',
|
|
8
|
+
'@antfu/eslint-config': '^9.0.0',
|
|
9
|
+
'eslint': '^10.3.0',
|
|
10
|
+
'vitest': '^4.1.8',
|
|
8
11
|
};
|
|
9
12
|
export const expectedEffectTsgoVersion = '0.15.0';
|
|
10
13
|
export const expectedPrepareCommand = 'effect-tsgo patch';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsgoPolicy.js","sourceRoot":"","sources":["../../../../src/harness/verify/TsgoPolicy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,QAAQ,EAAE,eAAe;IACzB,uBAAuB,EAAE,eAAe;IACxC,gBAAgB,EAAE,eAAe;IACjC,cAAc,EAAE,QAAQ;IACxB,0BAA0B,EAAE,QAAQ;IACpC,4BAA4B,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"TsgoPolicy.js","sourceRoot":"","sources":["../../../../src/harness/verify/TsgoPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["export type TsgoDiagnosticSeverity = 'error' | 'message' | 'suggestion' | 'warning'\n\nexport const expectedPackageBaseline = {\n 'effect': '4.0.0-beta.92',\n '@effect/platform-node': '4.0.0-beta.92',\n '@effect/vitest': '4.0.0-beta.92',\n '@effect/tsgo': '0.15.0',\n '@effect/language-service': '0.86.2',\n '@typescript/native-preview': '7.0.0-dev.20260630.1',\n '@antfu/eslint-config': '^9.0.0',\n 'eslint': '^10.3.0',\n 'vitest': '^4.1.8',\n} as const\n\nexport const expectedEffectTsgoVersion = '0.15.0'\nexport const expectedPrepareCommand = 'effect-tsgo patch'\nexport const expectedTypecheckCommand = 'tsgo --noEmit'\n\nexport const strictDiagnosticSeverity = {\n anyUnknownInErrorContext: 'error',\n asyncFunction: 'warning',\n catchAllToMapError: 'suggestion',\n catchToOrElseSucceed: 'suggestion',\n catchUnfailableEffect: 'suggestion',\n classSelfMismatch: 'error',\n cryptoRandomUUID: 'warning',\n cryptoRandomUUIDInEffect: 'warning',\n deterministicKeys: 'warning',\n duplicatePackage: 'warning',\n effectDoNotation: 'warning',\n effectFnIife: 'warning',\n effectFnImplicitAny: 'error',\n effectFnOpportunity: 'suggestion',\n effectGenUsesAdapter: 'warning',\n effectInFailure: 'warning',\n effectInVoidSuccess: 'warning',\n effectMapFlatten: 'suggestion',\n effectMapVoid: 'suggestion',\n effectSucceedWithVoid: 'suggestion',\n extendsNativeError: 'warning',\n floatingEffect: 'error',\n genericEffectServices: 'warning',\n globalConsole: 'warning',\n globalConsoleInEffect: 'warning',\n globalDate: 'warning',\n globalDateInEffect: 'warning',\n globalErrorInEffectCatch: 'warning',\n globalErrorInEffectFailure: 'warning',\n globalFetch: 'warning',\n globalFetchInEffect: 'warning',\n globalRandom: 'warning',\n globalRandomInEffect: 'warning',\n globalTimers: 'warning',\n globalTimersInEffect: 'warning',\n instanceOfSchema: 'warning',\n layerMergeAllWithDependencies: 'warning',\n lazyEffect: 'suggestion',\n lazyPromiseInEffectSync: 'warning',\n leakingRequirements: 'suggestion',\n missedPipeableOpportunity: 'warning',\n missingEffectContext: 'error',\n missingEffectError: 'error',\n missingLayerContext: 'error',\n missingReturnYieldStar: 'error',\n missingStarInYieldEffectGen: 'error',\n multipleCatchTag: 'suggestion',\n multipleEffectProvide: 'warning',\n nestedEffectGenYield: 'warning',\n newPromise: 'warning',\n newSchemaClass: 'warning',\n nodeBuiltinImport: 'warning',\n outdatedApi: 'warning',\n overriddenSchemaConstructor: 'error',\n preferSchemaOverJson: 'warning',\n processEnv: 'warning',\n processEnvInEffect: 'warning',\n redundantMapError: 'suggestion',\n redundantOrDie: 'suggestion',\n redundantSchemaTagIdentifier: 'suggestion',\n returnEffectInGen: 'suggestion',\n runEffectInsideEffect: 'suggestion',\n schemaNumber: 'suggestion',\n schemaStructWithTag: 'suggestion',\n serviceNotAsClass: 'warning',\n strictBooleanExpressions: 'warning',\n strictEffectProvide: 'warning',\n tryCatchInEffectGen: 'suggestion',\n unknownInEffectCatch: 'warning',\n unnecessaryArrowBlock: 'warning',\n unnecessaryEffectGen: 'suggestion',\n unnecessaryFailYieldableError: 'suggestion',\n unnecessaryPipe: 'suggestion',\n unnecessaryPipeChain: 'suggestion',\n unnecessaryTypeofType: 'suggestion',\n unsafeEffectTypeAssertion: 'warning',\n} as const satisfies Readonly<Record<string, TsgoDiagnosticSeverity>>\n\nexport const strictDiagnosticGate = {\n includeSuggestionsInTsc: true,\n ignoreEffectSuggestionsInTscExitCode: false,\n ignoreEffectWarningsInTscExitCode: false,\n ignoreEffectErrorsInTscExitCode: false,\n} as const\n\nexport const strictLanguageServicePlugin = {\n name: '@effect/language-service',\n diagnostics: true,\n ...strictDiagnosticGate,\n diagnosticSeverity: strictDiagnosticSeverity,\n barrelImportPackages: ['effect'],\n topLevelNamedReexports: 'follow',\n effectFn: ['span'],\n keyPatterns: [\n {\n target: 'service',\n pattern: 'default',\n skipLeadingPath: ['src/'],\n },\n {\n target: 'error',\n pattern: 'default',\n skipLeadingPath: ['src/'],\n },\n {\n target: 'custom',\n pattern: 'default',\n skipLeadingPath: ['src/'],\n },\n ],\n extendedKeyDetection: true,\n layerGraphFollowDepth: 1,\n noExternal: true,\n inlays: true,\n allowedDuplicatedPackages: [],\n pipeableMinArgCount: 2,\n} as const\n\nexport const requiredTsgoPolicyKeywords = [\n 'POLICY_NATIVE_BACKEND',\n 'POLICY_DIAGNOSTIC_GATE',\n 'POLICY_RULE_MAP',\n 'POLICY_IMPORT_STYLE',\n 'POLICY_OVERRIDES',\n 'POLICY_SUPPRESSIONS',\n 'POLICY_KEY_PATTERNS',\n 'POLICY_LAYER_GRAPH',\n 'POLICY_UPGRADE_LOOP',\n 'VERIFIER_CONTRACT',\n] as const\n"]}
|
|
@@ -59,7 +59,7 @@ ESLint 是 lint stage 的入口。它只负责不需要 tsgo 类型语义、但
|
|
|
59
59
|
|
|
60
60
|
- import boundary:应用代码和测试代码不能从 `repos/effect` 或 `repos/tsgo` import。
|
|
61
61
|
- package baseline:不使用 `@effect/cli`,CLI 代码使用 `effect/unstable/cli`。
|
|
62
|
-
- test entry:本仓测试使用 `@effect/vitest`,不使用 `node:test`
|
|
62
|
+
- test entry:本仓测试使用 `@effect/vitest`,不使用 `node:test` 或从 `vitest` 导入普通测试入口。
|
|
63
63
|
- harness baseline:当前 service definition baseline 不新增 `Context.Tag` service definition。
|
|
64
64
|
- syntax-level bans:只有当 tsgo 没有对应 rule,且规则是本仓制度时才放进 ESLint。例如
|
|
65
65
|
`{ disableValidation: true }` 禁令属于 lint 层。
|
package/package.json
CHANGED
|
@@ -19,10 +19,14 @@ target 的 runtime dependencies MUST 包含 `effect` 和 `@effect/platform-node`
|
|
|
19
19
|
|
|
20
20
|
target 的 Effect testing dependency MUST 包含 `@effect/vitest`。
|
|
21
21
|
|
|
22
|
+
target 的 test runner dependency MUST 包含 `vitest`。
|
|
23
|
+
|
|
22
24
|
target 的 diagnostics dependencies MUST 包含 `@effect/tsgo` 和 `@effect/language-service`。
|
|
23
25
|
|
|
24
26
|
target 的 native backend dependency MUST 包含 `@typescript/native-preview`。
|
|
25
27
|
|
|
28
|
+
target 的 lint dependencies MUST 包含 `eslint` 和 `@antfu/eslint-config`。
|
|
29
|
+
|
|
26
30
|
版本基线由 provider profile 管理。target 不应该用局部版本覆盖降低 Effect v4 beta、tsgo 或
|
|
27
31
|
language-service baseline。
|
|
28
32
|
|
|
@@ -40,6 +44,18 @@ target 的 primary diagnostics script SHOULD 指向:
|
|
|
40
44
|
tsgo --noEmit
|
|
41
45
|
```
|
|
42
46
|
|
|
47
|
+
target 的 test script SHOULD 指向:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
vitest run
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
target 的 lint script SHOULD 指向:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
eslint
|
|
57
|
+
```
|
|
58
|
+
|
|
43
59
|
这些 script 是 provider-managed 指针。Prelude materialization 和 maintain 应按 provider record
|
|
44
60
|
判断本地 drift。
|
|
45
61
|
|
|
@@ -19,9 +19,15 @@ updated: 2026-07-02
|
|
|
19
19
|
|
|
20
20
|
lint policy 负责 repository boundary 和 syntax-level guardrails。
|
|
21
21
|
|
|
22
|
-
lint
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
target 的 lint entry 由 provider package contribution 暴露为 `pnpm lint`,底层脚本是 `eslint`。
|
|
23
|
+
需要 hard gate 时,verification policy 使用 `pnpm lint --max-warnings 0`。
|
|
24
|
+
|
|
25
|
+
lint policy SHOULD block provider-internal source imports、`@effect/cli` imports、`node:test` imports、
|
|
26
|
+
从 `vitest` 导入测试入口(`describe`、`it`、`test`)、`Context.Tag` service definitions、指定 Effect
|
|
27
|
+
member,以及关闭 Schema validation 的写法。
|
|
28
|
+
|
|
29
|
+
lint policy SHOULD allow Vitest mock/lifecycle API(例如 `vi`、`beforeEach`)直接从 `vitest` 导入,因为
|
|
30
|
+
Vitest 的 mock transformer 依赖直接导入。
|
|
25
31
|
|
|
26
32
|
lint policy MUST NOT 替代 tsgo diagnostics。Effect semantic diagnostics、type requirement diagnostics 和
|
|
27
33
|
strict rule severity map 由 tsgo policy 负责。
|
|
@@ -30,6 +36,9 @@ strict rule severity map 由 tsgo policy 负责。
|
|
|
30
36
|
|
|
31
37
|
test policy 使用 `@effect/vitest`。
|
|
32
38
|
|
|
39
|
+
target 的 test entry 由 provider package contribution 暴露为 `pnpm test`,底层脚本是
|
|
40
|
+
`vitest run`。
|
|
41
|
+
|
|
33
42
|
Effect tests SHOULD 使用 `it.effect`、`it.live` 或 layer 组织。
|
|
34
43
|
|
|
35
44
|
target SHOULD 保留 provider record 中声明的 test entry pattern,并通过 package script 执行测试。
|
|
@@ -41,7 +50,8 @@ target SHOULD 保留 provider record 中声明的 test entry pattern,并通过
|
|
|
41
50
|
verification policy 描述 local diagnostic commands 和 stage semantics,但不实现 Prelude target lifecycle。
|
|
42
51
|
|
|
43
52
|
Prelude 仍负责 target materialization、provider record maintain、drift handling 和 target-level verify
|
|
44
|
-
orchestration。
|
|
53
|
+
orchestration。target 的总 `pnpm verify` MAY include build、knip 或 release gates;effect-harness
|
|
54
|
+
必须至少把 `pnpm typecheck`、`pnpm test` 和 `pnpm lint --max-warnings 0` 组合进 target verify。
|
|
45
55
|
|
|
46
56
|
## Stages
|
|
47
57
|
|
|
@@ -221,7 +221,10 @@
|
|
|
221
221
|
"@effect/vitest": "4.0.0-beta.92",
|
|
222
222
|
"@effect/tsgo": "0.15.0",
|
|
223
223
|
"@effect/language-service": "0.86.2",
|
|
224
|
-
"@typescript/native-preview": "7.0.0-dev.20260630.1"
|
|
224
|
+
"@typescript/native-preview": "7.0.0-dev.20260630.1",
|
|
225
|
+
"@antfu/eslint-config": "^9.0.0",
|
|
226
|
+
"eslint": "^10.3.0",
|
|
227
|
+
"vitest": "^4.1.8"
|
|
225
228
|
},
|
|
226
229
|
"managedSurfaces": {
|
|
227
230
|
"targetReceives": [
|
|
@@ -229,6 +232,8 @@
|
|
|
229
232
|
"package.json dependency and devDependency structured pointers",
|
|
230
233
|
"tsconfig.json @effect/language-service plugin structured pointer",
|
|
231
234
|
"editor policy structured pointer for target editor settings",
|
|
235
|
+
"eslint package baseline and lint script structured pointers",
|
|
236
|
+
"test package baseline and test script structured pointers",
|
|
232
237
|
"lint, test, and verification policy records",
|
|
233
238
|
"provider-managed docs bundle at .prelude/providers/effect-harness/docs",
|
|
234
239
|
"provider-managed snippets at .prelude/providers/effect-harness/snippets"
|
|
@@ -264,7 +269,8 @@
|
|
|
264
269
|
"testing": {
|
|
265
270
|
"field": "devDependencies",
|
|
266
271
|
"packages": {
|
|
267
|
-
"@effect/vitest": "4.0.0-beta.92"
|
|
272
|
+
"@effect/vitest": "4.0.0-beta.92",
|
|
273
|
+
"vitest": "^4.1.8"
|
|
268
274
|
}
|
|
269
275
|
},
|
|
270
276
|
"diagnostics": {
|
|
@@ -279,6 +285,13 @@
|
|
|
279
285
|
"packages": {
|
|
280
286
|
"@typescript/native-preview": "7.0.0-dev.20260630.1"
|
|
281
287
|
}
|
|
288
|
+
},
|
|
289
|
+
"linting": {
|
|
290
|
+
"field": "devDependencies",
|
|
291
|
+
"packages": {
|
|
292
|
+
"@antfu/eslint-config": "^9.0.0",
|
|
293
|
+
"eslint": "^10.3.0"
|
|
294
|
+
}
|
|
282
295
|
}
|
|
283
296
|
},
|
|
284
297
|
"scripts": {
|
|
@@ -289,6 +302,14 @@
|
|
|
289
302
|
"typecheck": {
|
|
290
303
|
"semantic": "primary Effect diagnostics",
|
|
291
304
|
"defaultCommand": "tsgo --noEmit"
|
|
305
|
+
},
|
|
306
|
+
"test": {
|
|
307
|
+
"semantic": "run Effect tests",
|
|
308
|
+
"defaultCommand": "vitest run"
|
|
309
|
+
},
|
|
310
|
+
"lint": {
|
|
311
|
+
"semantic": "run ESLint guardrails",
|
|
312
|
+
"defaultCommand": "eslint"
|
|
292
313
|
}
|
|
293
314
|
}
|
|
294
315
|
},
|
|
@@ -573,12 +594,23 @@
|
|
|
573
594
|
"rules": {
|
|
574
595
|
"restrictedImports": [
|
|
575
596
|
"node:test",
|
|
576
|
-
"vitest",
|
|
577
597
|
"@effect/cli",
|
|
578
598
|
"@effect/cli/*",
|
|
579
599
|
"repos/effect/**",
|
|
580
600
|
"repos/tsgo/**"
|
|
581
601
|
],
|
|
602
|
+
"restrictedVitestImports": [
|
|
603
|
+
"describe",
|
|
604
|
+
"it",
|
|
605
|
+
"test"
|
|
606
|
+
],
|
|
607
|
+
"allowedVitestImports": [
|
|
608
|
+
"vi",
|
|
609
|
+
"beforeEach",
|
|
610
|
+
"afterEach",
|
|
611
|
+
"beforeAll",
|
|
612
|
+
"afterAll"
|
|
613
|
+
],
|
|
582
614
|
"restrictedSyntax": [
|
|
583
615
|
"Context.Tag",
|
|
584
616
|
"Effect.catchAllCause",
|
|
@@ -598,10 +630,10 @@
|
|
|
598
630
|
"mode": "command-policy",
|
|
599
631
|
"stage": "tests",
|
|
600
632
|
"command": "pnpm test",
|
|
601
|
-
"packageScript": "vitest run
|
|
633
|
+
"packageScript": "vitest run",
|
|
602
634
|
"framework": "@effect/vitest",
|
|
603
635
|
"expectedEntries": [
|
|
604
|
-
"tests
|
|
636
|
+
"tests/**/*.test.ts"
|
|
605
637
|
],
|
|
606
638
|
"effectEntrypoints": [
|
|
607
639
|
"it.effect",
|
|
@@ -609,8 +641,12 @@
|
|
|
609
641
|
"layer"
|
|
610
642
|
],
|
|
611
643
|
"disallowedImports": [
|
|
612
|
-
"node:test"
|
|
613
|
-
|
|
644
|
+
"node:test"
|
|
645
|
+
],
|
|
646
|
+
"disallowedVitestImports": [
|
|
647
|
+
"describe",
|
|
648
|
+
"it",
|
|
649
|
+
"test"
|
|
614
650
|
]
|
|
615
651
|
},
|
|
616
652
|
"verificationPolicy": {
|
package/provider/index.md
CHANGED
|
@@ -77,8 +77,11 @@ provider 当前暴露以下能力:
|
|
|
77
77
|
| Effect testing baseline | `contributions.packageJson.dependencyGroups.testing` | `package.json` devDependencies |
|
|
78
78
|
| Effect diagnostics packages | `contributions.packageJson.dependencyGroups.diagnostics` | `package.json` devDependencies |
|
|
79
79
|
| Native tsgo backend package | `contributions.packageJson.dependencyGroups.nativeBackend` | `package.json` devDependencies |
|
|
80
|
+
| ESLint baseline | `contributions.packageJson.dependencyGroups.linting` | `package.json` devDependencies |
|
|
80
81
|
| Effect diagnostics | `contributions.packageJson.scripts.typecheck` | `tsgo --noEmit` |
|
|
81
82
|
| Native tsgo backend setup | `contributions.packageJson.scripts.prepare` | `effect-tsgo patch` |
|
|
83
|
+
| Effect tests | `contributions.packageJson.scripts.test` | `vitest run` |
|
|
84
|
+
| ESLint guardrail entry | `contributions.packageJson.scripts.lint` | `eslint` |
|
|
82
85
|
| Strict language-service policy | `contributions.tsconfig.compilerOptions.plugins[]` | `tsconfig.json` plugin |
|
|
83
86
|
| Strict tsgo execution policy | `contributions.tsconfig.tsgo` | `tsconfig.json` projection and package scripts |
|
|
84
87
|
| Editor policy | `contributions.editorPolicy` | editor settings projection |
|
|
@@ -103,6 +106,7 @@ Target 应该接收:
|
|
|
103
106
|
- `package.json` dependencies and scripts
|
|
104
107
|
- `tsconfig.json` strict language-service plugin
|
|
105
108
|
- editor settings projection
|
|
109
|
+
- ESLint package baseline and guardrail config projection
|
|
106
110
|
- lint/test/verification policy records
|
|
107
111
|
- `.prelude/providers/effect-harness/provider.json` provider record
|
|
108
112
|
- `.prelude/providers/effect-harness/docs/**` docs bundle
|