@mmnto/totem 1.60.0 → 1.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/freeze.d.ts +93 -0
- package/dist/freeze.d.ts.map +1 -1
- package/dist/freeze.js +143 -1
- package/dist/freeze.js.map +1 -1
- package/dist/freeze.test.d.ts +2 -0
- package/dist/freeze.test.d.ts.map +1 -0
- package/dist/freeze.test.js +164 -0
- package/dist/freeze.test.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/sys/bash-resolver.d.ts +52 -0
- package/dist/sys/bash-resolver.d.ts.map +1 -0
- package/dist/sys/bash-resolver.js +151 -0
- package/dist/sys/bash-resolver.js.map +1 -0
- package/dist/sys/bash-resolver.test.d.ts +11 -0
- package/dist/sys/bash-resolver.test.d.ts.map +1 -0
- package/dist/sys/bash-resolver.test.js +177 -0
- package/dist/sys/bash-resolver.test.js.map +1 -0
- package/package.json +1 -1
package/dist/errors.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - A recoveryHint telling the user exactly how to fix it
|
|
7
7
|
* - A code for programmatic handling
|
|
8
8
|
*/
|
|
9
|
-
export type TotemErrorCode = 'CONFIG_MISSING' | 'CONFIG_INVALID' | 'DATABASE_CORRUPT' | 'DATABASE_MISMATCH' | 'EMBEDDING_UNAVAILABLE' | 'ORCHESTRATOR_UNAVAILABLE' | 'COMPILE_FAILED' | 'PARSE_FAILED' | 'SYNC_FAILED' | 'GIT_FAILED' | 'NO_LESSONS' | 'NO_LESSONS_DIR' | 'NO_RULES' | 'SHIELD_FAILED' | 'LINT_LESSONS_FAILED' | 'DRIFT_FAILED' | 'TEST_FAILED' | 'CHECK_FAILED' | 'MCP_ERROR' | 'UPGRADE_HASH_NOT_FOUND' | 'UPGRADE_HASH_AMBIGUOUS' | 'STAGED_READ_FAILED' | 'UPGRADE_CLOUD_UNSUPPORTED' | 'STALE_MANIFEST' | 'FLAG_CONFLICT' | 'HOOKS_LOAD_FAILED' | 'SESSION_ID_WRITE_FAILED' | 'SESSION_ID_READ_FAILED' | 'BADGE_VERIFICATION_FAILED' | 'CLAIM_DISCIPLINE_FAILED' | 'GATE_INVALID' | 'PARITY_DRIFT_DETECTED' | 'MAIL_SEND_FAILED';
|
|
9
|
+
export type TotemErrorCode = 'CONFIG_MISSING' | 'CONFIG_INVALID' | 'DATABASE_CORRUPT' | 'DATABASE_MISMATCH' | 'EMBEDDING_UNAVAILABLE' | 'ORCHESTRATOR_UNAVAILABLE' | 'COMPILE_FAILED' | 'PARSE_FAILED' | 'SYNC_FAILED' | 'GIT_FAILED' | 'NO_LESSONS' | 'NO_LESSONS_DIR' | 'NO_RULES' | 'SHIELD_FAILED' | 'LINT_LESSONS_FAILED' | 'DRIFT_FAILED' | 'TEST_FAILED' | 'CHECK_FAILED' | 'MCP_ERROR' | 'UPGRADE_HASH_NOT_FOUND' | 'UPGRADE_HASH_AMBIGUOUS' | 'STAGED_READ_FAILED' | 'UPGRADE_CLOUD_UNSUPPORTED' | 'STALE_MANIFEST' | 'FLAG_CONFLICT' | 'HOOKS_LOAD_FAILED' | 'SESSION_ID_WRITE_FAILED' | 'SESSION_ID_READ_FAILED' | 'BADGE_VERIFICATION_FAILED' | 'CLAIM_DISCIPLINE_FAILED' | 'GATE_INVALID' | 'PARITY_DRIFT_DETECTED' | 'MAIL_SEND_FAILED' | 'BASH_RESOLUTION_FAILED';
|
|
10
10
|
export declare class TotemError extends Error {
|
|
11
11
|
readonly code: TotemErrorCode;
|
|
12
12
|
readonly recoveryHint: string;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,mBAAmB,GACnB,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,eAAe,GACf,qBAAqB,GACrB,cAAc,GACd,aAAa,GACb,cAAc,GACd,WAAW,GACX,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,2BAA2B,GAC3B,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,yBAAyB,GACzB,wBAAwB,GACxB,2BAA2B,GAC3B,yBAAyB,GACzB,cAAc,GACd,uBAAuB,GACvB,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,mBAAmB,GACnB,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,eAAe,GACf,qBAAqB,GACrB,cAAc,GACd,aAAa,GACb,cAAc,GACd,WAAW,GACX,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,2BAA2B,GAC3B,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,yBAAyB,GACzB,wBAAwB,GACxB,2BAA2B,GAC3B,yBAAyB,GACzB,cAAc,GACd,uBAAuB,GACvB,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAMzF;AAED,qBAAa,gBAAiB,SAAQ,UAAU;gBAE5C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,gBAAgB,GAAG,gBAAmC,EAC5D,KAAK,CAAC,EAAE,OAAO;CAKlB;AAED,qBAAa,kBAAmB,SAAQ,UAAU;gBAE9C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,kBAAkB,GAAG,mBAAwC,EACnE,KAAK,CAAC,EAAE,OAAO;CAKlB;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAInE;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAInE;AAED,qBAAa,sBAAuB,SAAQ,UAAU;gBACxC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAInE;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAInE;AAID,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAGpF"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsCH,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAiB;IACrB,YAAY,CAAS;IAE9B,YAAY,IAAoB,EAAE,OAAe,EAAE,YAAoB,EAAE,KAAe;QACtF,KAAK,CAAC,iBAAiB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YACE,OAAe,EACf,YAAoB,EACpB,OAA4C,gBAAgB,EAC5D,KAAe;QAEf,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YACE,OAAe,EACf,YAAoB,EACpB,OAAiD,kBAAkB,EACnE,KAAe;QAEf,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,OAAe,EAAE,YAAoB,EAAE,KAAe;QAChE,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe,EAAE,YAAoB,EAAE,KAAe;QAChE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,YAAY,OAAe,EAAE,YAAoB,EAAE,KAAe;QAChE,KAAK,CAAC,0BAA0B,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,OAAe,EAAE,YAAoB,EAAE,KAAe;QAChE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,uDAAuD;AAEvD,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,GAAY,EAAE,IAAY;IAC3E,IAAI,GAAG,YAAY,eAAe;QAAE,MAAM,GAAG,CAAC;IAC9C,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,KAAK,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,0EAA0E;AACvJ,CAAC"}
|
package/dist/freeze.d.ts
CHANGED
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const FREEZE_FILE = "freeze.json";
|
|
3
|
+
/**
|
|
4
|
+
* The ONE freeze id the verify-manifest gate consults (#2137, strategy#584
|
|
5
|
+
* sub-task 4). Exported so consumers import the constant instead of
|
|
6
|
+
* duplicating the literal.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RULE_COMPILATION_FREEZE_ID = "rule-compilation";
|
|
9
|
+
/**
|
|
10
|
+
* Distribution class of a freeze entry (strategy#584): `local` = this repo's
|
|
11
|
+
* own parked work (the pre-scope implicit behavior); `cohort` = a freeze on a
|
|
12
|
+
* cohort-orphaned subsystem that applies to every consumer repo and rides the
|
|
13
|
+
* `@mmnto/strategy-doctrine` snapshot channel.
|
|
14
|
+
*/
|
|
15
|
+
export declare const FreezeScopeSchema: z.ZodEnum<["local", "cohort"]>;
|
|
16
|
+
export type FreezeScope = z.infer<typeof FreezeScopeSchema>;
|
|
3
17
|
declare const FreezeEntrySchema: z.ZodObject<{
|
|
4
18
|
subsystem: z.ZodString;
|
|
19
|
+
id: z.ZodOptional<z.ZodString>;
|
|
20
|
+
scope: z.ZodDefault<z.ZodEnum<["local", "cohort"]>>;
|
|
5
21
|
since: z.ZodOptional<z.ZodString>;
|
|
6
22
|
reason: z.ZodOptional<z.ZodString>;
|
|
7
23
|
tracking: z.ZodOptional<z.ZodString>;
|
|
8
24
|
'do-not': z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
25
|
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
scope: "cohort" | "local";
|
|
10
27
|
subsystem: string;
|
|
11
28
|
reason?: string | undefined;
|
|
29
|
+
id?: string | undefined;
|
|
12
30
|
since?: string | undefined;
|
|
13
31
|
tracking?: string | undefined;
|
|
14
32
|
'do-not'?: string[] | undefined;
|
|
15
33
|
}, {
|
|
16
34
|
subsystem: string;
|
|
17
35
|
reason?: string | undefined;
|
|
36
|
+
scope?: "cohort" | "local" | undefined;
|
|
37
|
+
id?: string | undefined;
|
|
18
38
|
since?: string | undefined;
|
|
19
39
|
tracking?: string | undefined;
|
|
20
40
|
'do-not'?: string[] | undefined;
|
|
@@ -23,27 +43,35 @@ declare const FreezeConfigSchema: z.ZodObject<{
|
|
|
23
43
|
_note: z.ZodOptional<z.ZodString>;
|
|
24
44
|
frozen: z.ZodArray<z.ZodObject<{
|
|
25
45
|
subsystem: z.ZodString;
|
|
46
|
+
id: z.ZodOptional<z.ZodString>;
|
|
47
|
+
scope: z.ZodDefault<z.ZodEnum<["local", "cohort"]>>;
|
|
26
48
|
since: z.ZodOptional<z.ZodString>;
|
|
27
49
|
reason: z.ZodOptional<z.ZodString>;
|
|
28
50
|
tracking: z.ZodOptional<z.ZodString>;
|
|
29
51
|
'do-not': z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
30
52
|
}, "strip", z.ZodTypeAny, {
|
|
53
|
+
scope: "cohort" | "local";
|
|
31
54
|
subsystem: string;
|
|
32
55
|
reason?: string | undefined;
|
|
56
|
+
id?: string | undefined;
|
|
33
57
|
since?: string | undefined;
|
|
34
58
|
tracking?: string | undefined;
|
|
35
59
|
'do-not'?: string[] | undefined;
|
|
36
60
|
}, {
|
|
37
61
|
subsystem: string;
|
|
38
62
|
reason?: string | undefined;
|
|
63
|
+
scope?: "cohort" | "local" | undefined;
|
|
64
|
+
id?: string | undefined;
|
|
39
65
|
since?: string | undefined;
|
|
40
66
|
tracking?: string | undefined;
|
|
41
67
|
'do-not'?: string[] | undefined;
|
|
42
68
|
}>, "many">;
|
|
43
69
|
}, "strip", z.ZodTypeAny, {
|
|
44
70
|
frozen: {
|
|
71
|
+
scope: "cohort" | "local";
|
|
45
72
|
subsystem: string;
|
|
46
73
|
reason?: string | undefined;
|
|
74
|
+
id?: string | undefined;
|
|
47
75
|
since?: string | undefined;
|
|
48
76
|
tracking?: string | undefined;
|
|
49
77
|
'do-not'?: string[] | undefined;
|
|
@@ -53,6 +81,8 @@ declare const FreezeConfigSchema: z.ZodObject<{
|
|
|
53
81
|
frozen: {
|
|
54
82
|
subsystem: string;
|
|
55
83
|
reason?: string | undefined;
|
|
84
|
+
scope?: "cohort" | "local" | undefined;
|
|
85
|
+
id?: string | undefined;
|
|
56
86
|
since?: string | undefined;
|
|
57
87
|
tracking?: string | undefined;
|
|
58
88
|
'do-not'?: string[] | undefined;
|
|
@@ -73,5 +103,68 @@ export type FreezeConfig = z.infer<typeof FreezeConfigSchema>;
|
|
|
73
103
|
* a gate's deterministic input failing to parse is a hard error, not a shrug.
|
|
74
104
|
*/
|
|
75
105
|
export declare function readFreezeConfig(totemDir: string): FreezeConfig | null;
|
|
106
|
+
/**
|
|
107
|
+
* Channel status for the distributed read. The two absent states are
|
|
108
|
+
* deliberately distinct (Tenet 14): "channel not adopted" (`absent-package`)
|
|
109
|
+
* is not "channel adopted, snapshot predates freeze distribution"
|
|
110
|
+
* (`absent-file`).
|
|
111
|
+
*/
|
|
112
|
+
export type CohortFreezeStatus = 'ok' | 'absent-package' | 'absent-file' | 'corrupt';
|
|
113
|
+
export interface CohortFreezeResult {
|
|
114
|
+
status: CohortFreezeStatus;
|
|
115
|
+
/** Cohort-scoped entries ONLY — the read-time leak filter. The snapshot is
|
|
116
|
+
* a byte-copy of the publisher's whole freeze file (P292 §10.2 bind), so
|
|
117
|
+
* publisher-local parked work rides along and must never surface here. */
|
|
118
|
+
entries: FreezeEntry[];
|
|
119
|
+
/** Installed snapshot package version, when the package resolved. */
|
|
120
|
+
packageVersion?: string;
|
|
121
|
+
/** Renderable warnings. Core never console-logs channel states; every
|
|
122
|
+
* surface (human, structured, gate) renders these deliberately. */
|
|
123
|
+
warnings: string[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Read cohort-scoped freezes from an installed doctrine-snapshot package
|
|
127
|
+
* (strategy#584 fix (b): cohort freezes ride the established distribution
|
|
128
|
+
* channel, not per-repo manual copies).
|
|
129
|
+
*
|
|
130
|
+
* Failure contract — deliberately diverges from `readFreezeConfig`'s
|
|
131
|
+
* fail-closed: this reader NEVER throws and never touches the network or
|
|
132
|
+
* writes to disk. Corruption/invalidity degrades to `status: 'corrupt'` with
|
|
133
|
+
* zero visible entries — the conservative direction for every consumer (a
|
|
134
|
+
* freeze-consulting gate stays blocking; renderers show the warning). The
|
|
135
|
+
* package name is caller-injected so core stays cohort-agnostic.
|
|
136
|
+
*/
|
|
137
|
+
export declare function readCohortFreezes(cwd: string, packageName: string): CohortFreezeResult;
|
|
138
|
+
export type LocalFreezeStatus = 'ok' | 'absent';
|
|
139
|
+
export interface ActiveFreeze {
|
|
140
|
+
entry: FreezeEntry;
|
|
141
|
+
provenance: 'local' | 'cohort';
|
|
142
|
+
/** Snapshot package version (cohort provenance only). */
|
|
143
|
+
sourceVersion?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface EffectiveFreezeResult {
|
|
146
|
+
entries: ActiveFreeze[];
|
|
147
|
+
localStatus: LocalFreezeStatus;
|
|
148
|
+
cohortStatus: CohortFreezeStatus;
|
|
149
|
+
cohortPackageVersion?: string;
|
|
150
|
+
warnings: string[];
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Union of repo-local + distributed cohort freezes with per-source status
|
|
154
|
+
* that SURVIVES into every consumer — absent-package / absent-file / corrupt /
|
|
155
|
+
* genuinely-none must never flatten into "none" at a rendering surface.
|
|
156
|
+
*
|
|
157
|
+
* No dedup, no demotion: a subsystem frozen both locally and cohort-wide
|
|
158
|
+
* yields two entries with distinct provenance. The LOCAL read keeps its
|
|
159
|
+
* fail-closed contract — a corrupt local freeze file still THROWS.
|
|
160
|
+
*
|
|
161
|
+
* @param cwd - Repo root; anchors the upward `node_modules` walk for the
|
|
162
|
+
* cohort read.
|
|
163
|
+
* @param totemDir - Absolute path to the `.totem` directory (NOT the repo
|
|
164
|
+
* root) — passed straight to `readFreezeConfig`'s path join.
|
|
165
|
+
* @param packageName - Doctrine snapshot package to resolve (caller-injected;
|
|
166
|
+
* core stays cohort-agnostic).
|
|
167
|
+
*/
|
|
168
|
+
export declare function readEffectiveFreezes(cwd: string, totemDir: string, packageName: string): EffectiveFreezeResult;
|
|
76
169
|
export {};
|
|
77
170
|
//# sourceMappingURL=freeze.d.ts.map
|
package/dist/freeze.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAOzC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,gCAA8B,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EAQrB,CAAC;AAEH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAyCtE;AAID;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B;;+EAE2E;IAC3E,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;wEACoE;IACpE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAkEtF;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,qBAAqB,CAoBvB"}
|
package/dist/freeze.js
CHANGED
|
@@ -2,9 +2,29 @@ import * as fs from 'node:fs';
|
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { TotemConfigError } from './errors.js';
|
|
5
|
+
import { readJsonSafe } from './sys/fs.js';
|
|
5
6
|
export const FREEZE_FILE = 'freeze.json';
|
|
7
|
+
// Stable machine key a freeze-consuming actuator binds to. Schema-enforced
|
|
8
|
+
// kebab slug (strategy#584 settle, codex W3): prose `subsystem` stays the
|
|
9
|
+
// human surface; rewording it must never silently unbind a gate consumer.
|
|
10
|
+
const FREEZE_ID_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
11
|
+
/**
|
|
12
|
+
* The ONE freeze id the verify-manifest gate consults (#2137, strategy#584
|
|
13
|
+
* sub-task 4). Exported so consumers import the constant instead of
|
|
14
|
+
* duplicating the literal.
|
|
15
|
+
*/
|
|
16
|
+
export const RULE_COMPILATION_FREEZE_ID = 'rule-compilation';
|
|
17
|
+
/**
|
|
18
|
+
* Distribution class of a freeze entry (strategy#584): `local` = this repo's
|
|
19
|
+
* own parked work (the pre-scope implicit behavior); `cohort` = a freeze on a
|
|
20
|
+
* cohort-orphaned subsystem that applies to every consumer repo and rides the
|
|
21
|
+
* `@mmnto/strategy-doctrine` snapshot channel.
|
|
22
|
+
*/
|
|
23
|
+
export const FreezeScopeSchema = z.enum(['local', 'cohort']);
|
|
6
24
|
const FreezeEntrySchema = z.object({
|
|
7
25
|
subsystem: z.string().min(1, 'subsystem must be a non-empty string'),
|
|
26
|
+
id: z.string().regex(FREEZE_ID_RE, 'id must be a kebab-case slug (machine match key)').optional(),
|
|
27
|
+
scope: FreezeScopeSchema.default('local'),
|
|
8
28
|
since: z.string().optional(),
|
|
9
29
|
reason: z.string().optional(),
|
|
10
30
|
tracking: z.string().optional(),
|
|
@@ -46,8 +66,130 @@ export function readFreezeConfig(totemDir) {
|
|
|
46
66
|
}
|
|
47
67
|
const result = FreezeConfigSchema.safeParse(parsed);
|
|
48
68
|
if (!result.success) {
|
|
49
|
-
throw new TotemConfigError(`Invalid ${FREEZE_FILE}: ${result.error.issues.map((i) => i.message).join('; ')}`, 'freeze.json must be { frozen: [{ subsystem, since?, reason?, tracking?, "do-not"? }] }.', 'CONFIG_INVALID', result.error);
|
|
69
|
+
throw new TotemConfigError(`Invalid ${FREEZE_FILE}: ${result.error.issues.map((i) => i.message).join('; ')}`, 'freeze.json must be { frozen: [{ subsystem, id?, scope?, since?, reason?, tracking?, "do-not"? }] }.', 'CONFIG_INVALID', result.error);
|
|
50
70
|
}
|
|
51
71
|
return result.data;
|
|
52
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Upward `node_modules` walk for an installed package dir — mirrors the
|
|
75
|
+
* parity-detect resolution seam (workspace hoisting puts workspace deps in
|
|
76
|
+
* the ROOT `node_modules`, so a cwd-only read would miss them).
|
|
77
|
+
*/
|
|
78
|
+
function findInstalledPackageDir(startDir, packageName) {
|
|
79
|
+
const segments = packageName.split('/');
|
|
80
|
+
let current = path.resolve(startDir);
|
|
81
|
+
while (true) {
|
|
82
|
+
const candidate = path.join(current, 'node_modules', ...segments);
|
|
83
|
+
if (fs.existsSync(path.join(candidate, 'package.json')))
|
|
84
|
+
return candidate;
|
|
85
|
+
const parent = path.dirname(current);
|
|
86
|
+
if (parent === current)
|
|
87
|
+
return undefined;
|
|
88
|
+
current = parent;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read cohort-scoped freezes from an installed doctrine-snapshot package
|
|
93
|
+
* (strategy#584 fix (b): cohort freezes ride the established distribution
|
|
94
|
+
* channel, not per-repo manual copies).
|
|
95
|
+
*
|
|
96
|
+
* Failure contract — deliberately diverges from `readFreezeConfig`'s
|
|
97
|
+
* fail-closed: this reader NEVER throws and never touches the network or
|
|
98
|
+
* writes to disk. Corruption/invalidity degrades to `status: 'corrupt'` with
|
|
99
|
+
* zero visible entries — the conservative direction for every consumer (a
|
|
100
|
+
* freeze-consulting gate stays blocking; renderers show the warning). The
|
|
101
|
+
* package name is caller-injected so core stays cohort-agnostic.
|
|
102
|
+
*/
|
|
103
|
+
export function readCohortFreezes(cwd, packageName) {
|
|
104
|
+
const warnings = [];
|
|
105
|
+
const pkgDir = findInstalledPackageDir(cwd, packageName);
|
|
106
|
+
if (pkgDir === undefined) {
|
|
107
|
+
return { status: 'absent-package', entries: [], warnings };
|
|
108
|
+
}
|
|
109
|
+
let packageVersion;
|
|
110
|
+
try {
|
|
111
|
+
// `| null` is honest typing: a package.json containing literal `null` is
|
|
112
|
+
// valid JSON, and readJsonSafe returns it as-is (failures THROW
|
|
113
|
+
// TotemParseError — it never returns undefined). The guard keeps that
|
|
114
|
+
// edge on the explicit path instead of riding the catch (GCA mmnto-ai/totem#2168).
|
|
115
|
+
const pkg = readJsonSafe(path.join(pkgDir, 'package.json'));
|
|
116
|
+
if (pkg && typeof pkg.version === 'string')
|
|
117
|
+
packageVersion = pkg.version;
|
|
118
|
+
// totem-context: unreadable/odd snapshot package.json is non-fatal — provenance renders without a version, the freeze read proceeds
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
warnings.push(`${packageName}/package.json unreadable — provenance version unavailable.`);
|
|
122
|
+
}
|
|
123
|
+
const freezePath = path.join(pkgDir, FREEZE_FILE);
|
|
124
|
+
let raw;
|
|
125
|
+
try {
|
|
126
|
+
raw = fs.readFileSync(freezePath, 'utf-8');
|
|
127
|
+
// totem-context: the never-throws channel contract — a non-ENOENT read failure degrades to status 'corrupt', reported via the result's warnings; consumers stay conservative (the gate keeps blocking)
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (err instanceof Error && err.code === 'ENOENT') {
|
|
131
|
+
return { status: 'absent-file', entries: [], packageVersion, warnings };
|
|
132
|
+
}
|
|
133
|
+
warnings.push(`Failed reading ${packageName}/${FREEZE_FILE} — distributed freezes not visible (consumers stay conservative).`);
|
|
134
|
+
return { status: 'corrupt', entries: [], packageVersion, warnings };
|
|
135
|
+
}
|
|
136
|
+
let parsed;
|
|
137
|
+
try {
|
|
138
|
+
parsed = JSON.parse(raw);
|
|
139
|
+
// totem-context: the never-throws channel contract — malformed JSON degrades to status 'corrupt', reported via the result's warnings; consumers stay conservative (the gate keeps blocking)
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
warnings.push(`Malformed JSON in ${packageName}/${FREEZE_FILE} — distributed freezes not visible (consumers stay conservative).`);
|
|
143
|
+
return { status: 'corrupt', entries: [], packageVersion, warnings };
|
|
144
|
+
}
|
|
145
|
+
const result = FreezeConfigSchema.safeParse(parsed);
|
|
146
|
+
if (!result.success) {
|
|
147
|
+
warnings.push(`Invalid ${packageName}/${FREEZE_FILE}: ${result.error.issues
|
|
148
|
+
.map((i) => i.message)
|
|
149
|
+
.join('; ')} — distributed freezes not visible (consumers stay conservative).`);
|
|
150
|
+
return { status: 'corrupt', entries: [], packageVersion, warnings };
|
|
151
|
+
}
|
|
152
|
+
const entries = result.data.frozen.filter((f) => f.scope === 'cohort');
|
|
153
|
+
for (const entry of entries) {
|
|
154
|
+
if (entry.id === undefined) {
|
|
155
|
+
warnings.push(`Cohort freeze entry "${entry.subsystem}" carries no stable id — machine consumers cannot bind to it (it renders, but never gate-matches).`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return { status: 'ok', entries, packageVersion, warnings };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Union of repo-local + distributed cohort freezes with per-source status
|
|
162
|
+
* that SURVIVES into every consumer — absent-package / absent-file / corrupt /
|
|
163
|
+
* genuinely-none must never flatten into "none" at a rendering surface.
|
|
164
|
+
*
|
|
165
|
+
* No dedup, no demotion: a subsystem frozen both locally and cohort-wide
|
|
166
|
+
* yields two entries with distinct provenance. The LOCAL read keeps its
|
|
167
|
+
* fail-closed contract — a corrupt local freeze file still THROWS.
|
|
168
|
+
*
|
|
169
|
+
* @param cwd - Repo root; anchors the upward `node_modules` walk for the
|
|
170
|
+
* cohort read.
|
|
171
|
+
* @param totemDir - Absolute path to the `.totem` directory (NOT the repo
|
|
172
|
+
* root) — passed straight to `readFreezeConfig`'s path join.
|
|
173
|
+
* @param packageName - Doctrine snapshot package to resolve (caller-injected;
|
|
174
|
+
* core stays cohort-agnostic).
|
|
175
|
+
*/
|
|
176
|
+
export function readEffectiveFreezes(cwd, totemDir, packageName) {
|
|
177
|
+
const local = readFreezeConfig(totemDir);
|
|
178
|
+
const cohort = readCohortFreezes(cwd, packageName);
|
|
179
|
+
const entries = [
|
|
180
|
+
...(local?.frozen ?? []).map((entry) => ({ entry, provenance: 'local' })),
|
|
181
|
+
...cohort.entries.map((entry) => ({
|
|
182
|
+
entry,
|
|
183
|
+
provenance: 'cohort',
|
|
184
|
+
sourceVersion: cohort.packageVersion,
|
|
185
|
+
})),
|
|
186
|
+
];
|
|
187
|
+
return {
|
|
188
|
+
entries,
|
|
189
|
+
localStatus: local === null ? 'absent' : 'ok',
|
|
190
|
+
cohortStatus: cohort.status,
|
|
191
|
+
cohortPackageVersion: cohort.packageVersion,
|
|
192
|
+
warnings: cohort.warnings,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
53
195
|
//# sourceMappingURL=freeze.js.map
|
package/dist/freeze.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../src/freeze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.test.d.ts","sourceRoot":"","sources":["../src/freeze.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { TotemConfigError } from './errors.js';
|
|
6
|
+
import { readCohortFreezes, readEffectiveFreezes, readFreezeConfig, RULE_COMPILATION_FREEZE_ID, } from './freeze.js';
|
|
7
|
+
const PKG = '@mmnto/strategy-doctrine';
|
|
8
|
+
let tmpRoot;
|
|
9
|
+
let totemDir;
|
|
10
|
+
/** The live strategy entry shape (scope + id + do-not) — the round-trip fixture. */
|
|
11
|
+
const COHORT_ENTRY = {
|
|
12
|
+
subsystem: 'rule-compilation (legacy lesson-compile path)',
|
|
13
|
+
id: RULE_COMPILATION_FREEZE_ID,
|
|
14
|
+
scope: 'cohort',
|
|
15
|
+
since: '2026-05-17',
|
|
16
|
+
reason: 'Parked pending the Convergent Spine replacement.',
|
|
17
|
+
tracking: 'multi-gate lift status',
|
|
18
|
+
'do-not': ['run `totem lesson compile`'],
|
|
19
|
+
};
|
|
20
|
+
const LOCAL_ENTRY = {
|
|
21
|
+
subsystem: 'embedder-tuning',
|
|
22
|
+
since: '2026-06-01',
|
|
23
|
+
reason: 'parked locally',
|
|
24
|
+
};
|
|
25
|
+
function writeLocalFreeze(content) {
|
|
26
|
+
fs.writeFileSync(path.join(totemDir, 'freeze.json'), typeof content === 'string' ? content : JSON.stringify(content));
|
|
27
|
+
}
|
|
28
|
+
/** Build an installed-package fixture at `<root>/node_modules/<PKG>/`. */
|
|
29
|
+
function installSnapshot(root, opts = {}) {
|
|
30
|
+
const pkgDir = path.join(root, 'node_modules', ...PKG.split('/'));
|
|
31
|
+
fs.mkdirSync(pkgDir, { recursive: true });
|
|
32
|
+
fs.writeFileSync(path.join(pkgDir, 'package.json'), JSON.stringify({ name: PKG, version: opts.version ?? '0.2.0' }));
|
|
33
|
+
if (opts.freeze !== undefined) {
|
|
34
|
+
fs.writeFileSync(path.join(pkgDir, 'freeze.json'), typeof opts.freeze === 'string' ? opts.freeze : JSON.stringify(opts.freeze));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-freeze-'));
|
|
39
|
+
totemDir = path.join(tmpRoot, '.totem');
|
|
40
|
+
fs.mkdirSync(totemDir, { recursive: true });
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
// maxRetries/retryDelay rides out transient Windows ENOTEMPTY/EBUSY without
|
|
44
|
+
// an empty catch swallowing real teardown failures (repo test-cleanup idiom).
|
|
45
|
+
fs.rmSync(tmpRoot, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
|
|
46
|
+
});
|
|
47
|
+
describe('FreezeEntry schema — scope + id (strategy#584 sub-task 3)', () => {
|
|
48
|
+
it('parses legacy entries without scope as scope "local"', () => {
|
|
49
|
+
writeLocalFreeze({ frozen: [LOCAL_ENTRY] });
|
|
50
|
+
const config = readFreezeConfig(totemDir);
|
|
51
|
+
expect(config?.frozen[0]?.scope).toBe('local');
|
|
52
|
+
});
|
|
53
|
+
it('round-trips the live strategy entry shape with scope/id/do-not preserved', () => {
|
|
54
|
+
writeLocalFreeze({ frozen: [COHORT_ENTRY] });
|
|
55
|
+
const entry = readFreezeConfig(totemDir)?.frozen[0];
|
|
56
|
+
expect(entry?.scope).toBe('cohort');
|
|
57
|
+
expect(entry?.id).toBe(RULE_COMPILATION_FREEZE_ID);
|
|
58
|
+
expect(entry?.['do-not']).toEqual(['run `totem lesson compile`']);
|
|
59
|
+
});
|
|
60
|
+
it('rejects a non-kebab id fail-closed in the LOCAL reader', () => {
|
|
61
|
+
writeLocalFreeze({ frozen: [{ subsystem: 'x', id: 'Not A Slug' }] });
|
|
62
|
+
expect(() => readFreezeConfig(totemDir)).toThrow(TotemConfigError);
|
|
63
|
+
});
|
|
64
|
+
it('rejects an unknown scope value fail-closed in the LOCAL reader', () => {
|
|
65
|
+
writeLocalFreeze({ frozen: [{ subsystem: 'x', scope: 'global' }] });
|
|
66
|
+
expect(() => readFreezeConfig(totemDir)).toThrow(TotemConfigError);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('readCohortFreezes — distributed channel states (Tenet 14)', () => {
|
|
70
|
+
it('absent package → status absent-package, zero entries, no throw', () => {
|
|
71
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
72
|
+
expect(r.status).toBe('absent-package');
|
|
73
|
+
expect(r.entries).toEqual([]);
|
|
74
|
+
});
|
|
75
|
+
it('package without freeze.json → status absent-file, version still captured', () => {
|
|
76
|
+
installSnapshot(tmpRoot, { version: '0.1.5' });
|
|
77
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
78
|
+
expect(r.status).toBe('absent-file');
|
|
79
|
+
expect(r.packageVersion).toBe('0.1.5');
|
|
80
|
+
});
|
|
81
|
+
it('malformed JSON → status corrupt + warning, never throws', () => {
|
|
82
|
+
installSnapshot(tmpRoot, { freeze: '{ not json' });
|
|
83
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
84
|
+
expect(r.status).toBe('corrupt');
|
|
85
|
+
expect(r.entries).toEqual([]);
|
|
86
|
+
expect(r.warnings.length).toBeGreaterThan(0);
|
|
87
|
+
});
|
|
88
|
+
it('schema-invalid content (bad id slug) → status corrupt, conservative degrade', () => {
|
|
89
|
+
installSnapshot(tmpRoot, {
|
|
90
|
+
freeze: { frozen: [{ subsystem: 'x', scope: 'cohort', id: 'Not A Slug' }] },
|
|
91
|
+
});
|
|
92
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
93
|
+
expect(r.status).toBe('corrupt');
|
|
94
|
+
expect(r.entries).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
it('filters scope:local entries out of the byte-copy snapshot (leak filter)', () => {
|
|
97
|
+
installSnapshot(tmpRoot, {
|
|
98
|
+
freeze: { frozen: [COHORT_ENTRY, { ...LOCAL_ENTRY, scope: 'local' }, LOCAL_ENTRY] },
|
|
99
|
+
});
|
|
100
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
101
|
+
expect(r.status).toBe('ok');
|
|
102
|
+
expect(r.entries).toHaveLength(1);
|
|
103
|
+
expect(r.entries[0]?.id).toBe(RULE_COMPILATION_FREEZE_ID);
|
|
104
|
+
});
|
|
105
|
+
it('id-less cohort entry stays visible but warns (renders, never gate-matches)', () => {
|
|
106
|
+
installSnapshot(tmpRoot, {
|
|
107
|
+
freeze: { frozen: [{ subsystem: 'orphan-system', scope: 'cohort' }] },
|
|
108
|
+
});
|
|
109
|
+
const r = readCohortFreezes(tmpRoot, PKG);
|
|
110
|
+
expect(r.status).toBe('ok');
|
|
111
|
+
expect(r.entries).toHaveLength(1);
|
|
112
|
+
expect(r.warnings.some((w) => w.includes('orphan-system'))).toBe(true);
|
|
113
|
+
});
|
|
114
|
+
it('resolves through an ancestor node_modules (workspace hoisting)', () => {
|
|
115
|
+
const nested = path.join(tmpRoot, 'packages', 'consumer');
|
|
116
|
+
fs.mkdirSync(nested, { recursive: true });
|
|
117
|
+
installSnapshot(tmpRoot, { freeze: { frozen: [COHORT_ENTRY] } });
|
|
118
|
+
const r = readCohortFreezes(nested, PKG);
|
|
119
|
+
expect(r.status).toBe('ok');
|
|
120
|
+
expect(r.entries).toHaveLength(1);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('readEffectiveFreezes — union + per-source status (codex W1)', () => {
|
|
124
|
+
it('unions local + cohort entries with distinct provenance, no dedup', () => {
|
|
125
|
+
writeLocalFreeze({ frozen: [{ ...COHORT_ENTRY, scope: 'local' }] });
|
|
126
|
+
installSnapshot(tmpRoot, { version: '0.2.0', freeze: { frozen: [COHORT_ENTRY] } });
|
|
127
|
+
const r = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
128
|
+
expect(r.entries).toHaveLength(2);
|
|
129
|
+
expect(r.entries.map((e) => e.provenance).sort()).toEqual(['cohort', 'local']);
|
|
130
|
+
const cohort = r.entries.find((e) => e.provenance === 'cohort');
|
|
131
|
+
expect(cohort?.sourceVersion).toBe('0.2.0');
|
|
132
|
+
expect(r.localStatus).toBe('ok');
|
|
133
|
+
expect(r.cohortStatus).toBe('ok');
|
|
134
|
+
});
|
|
135
|
+
it('reports genuinely-none distinctly from both honest-absent channel states', () => {
|
|
136
|
+
const none = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
137
|
+
expect(none.localStatus).toBe('absent');
|
|
138
|
+
expect(none.cohortStatus).toBe('absent-package');
|
|
139
|
+
expect(none.entries).toEqual([]);
|
|
140
|
+
installSnapshot(tmpRoot, {});
|
|
141
|
+
const preEmit = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
142
|
+
expect(preEmit.cohortStatus).toBe('absent-file');
|
|
143
|
+
installSnapshot(tmpRoot, { freeze: { frozen: [] } });
|
|
144
|
+
const empty = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
145
|
+
expect(empty.cohortStatus).toBe('ok');
|
|
146
|
+
expect(empty.entries).toEqual([]);
|
|
147
|
+
});
|
|
148
|
+
it('corrupt distributed snapshot degrades; corrupt LOCAL freeze still throws fail-closed', () => {
|
|
149
|
+
installSnapshot(tmpRoot, { freeze: '{ nope' });
|
|
150
|
+
const r = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
151
|
+
expect(r.cohortStatus).toBe('corrupt');
|
|
152
|
+
expect(r.warnings.length).toBeGreaterThan(0);
|
|
153
|
+
writeLocalFreeze('{ also nope');
|
|
154
|
+
expect(() => readEffectiveFreezes(tmpRoot, totemDir, PKG)).toThrow(TotemConfigError);
|
|
155
|
+
});
|
|
156
|
+
it('resolver purity: a snapshot installed between two calls is visible to the second', () => {
|
|
157
|
+
expect(readEffectiveFreezes(tmpRoot, totemDir, PKG).cohortStatus).toBe('absent-package');
|
|
158
|
+
installSnapshot(tmpRoot, { freeze: { frozen: [COHORT_ENTRY] } });
|
|
159
|
+
const second = readEffectiveFreezes(tmpRoot, totemDir, PKG);
|
|
160
|
+
expect(second.cohortStatus).toBe('ok');
|
|
161
|
+
expect(second.entries).toHaveLength(1);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=freeze.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.test.js","sourceRoot":"","sources":["../src/freeze.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export { BadgeVerificationResultSchema, DEFAULT_TOOL_INTEGRATIONS, extractBadges
|
|
|
5
5
|
export type { TotemErrorCode } from './errors.js';
|
|
6
6
|
export { getErrorMessage, rethrowAsParseError, TotemCompileError, TotemConfigError, TotemDatabaseError, TotemError, TotemGitError, TotemOrchestratorError, TotemParseError, } from './errors.js';
|
|
7
7
|
export { buildMissingSdkHint } from './missing-sdk.js';
|
|
8
|
-
export type { FreezeConfig, FreezeEntry } from './freeze.js';
|
|
9
|
-
export { FREEZE_FILE, readFreezeConfig } from './freeze.js';
|
|
8
|
+
export type { ActiveFreeze, CohortFreezeResult, CohortFreezeStatus, EffectiveFreezeResult, FreezeConfig, FreezeEntry, FreezeScope, LocalFreezeStatus, } from './freeze.js';
|
|
9
|
+
export { FREEZE_FILE, FreezeScopeSchema, readCohortFreezes, readEffectiveFreezes, readFreezeConfig, RULE_COMPILATION_FREEZE_ID, } from './freeze.js';
|
|
10
10
|
export { evaluateGate, FREEZE_CHECK_EVENT, knownGateEvents } from './gate-engine.js';
|
|
11
11
|
export type { GateDisposition, GateEvaluator, GateProvenance, GateVerdict } from './gate-types.js';
|
|
12
12
|
export type { ChunkStrategy, ConfigTier, ContentType, DocTarget, DoctorConfig, EmbeddingProvider, GarbageCollectionConfig, IngestTarget, Orchestrator, OrientConfig, TotemConfig, } from './config-schema.js';
|
|
@@ -101,6 +101,7 @@ export type { ImmutableOverrideBlock, MergeRulesResult } from './pack-merge.js';
|
|
|
101
101
|
export { mergeRules } from './pack-merge.js';
|
|
102
102
|
export type { SafeExecOptions } from './sys/exec.js';
|
|
103
103
|
export { describeSafeExecError, safeExec } from './sys/exec.js';
|
|
104
|
+
export { _clearBashResolverCacheForTesting, bashSpawnEnv, resolveBash, } from './sys/bash-resolver.js';
|
|
104
105
|
export { extractChangedFiles, filterDiffByPatterns, findRepoRootSync, getDefaultBranch, getGitBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, getGitDiffStat, getGitLogSince, getGitStatus, getLatestTag, getTagDate, inferScopeFromFiles, isFileDirty, resolveGitRoot, } from './sys/git.js';
|
|
105
106
|
export { readJsonSafe } from './sys/fs.js';
|
|
106
107
|
export type { GroundingSourceItem } from './artifacts/grounding.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGtE,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrF,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnG,YAAY,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,gCAAgC,EAChC,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGvE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,YAAY,EACV,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,SAAS,IAAI,sBAAsB,EACnC,eAAe,IAAI,yBAAyB,GAC7C,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,YAAY,EACV,sBAAsB,EACtB,UAAU,EACV,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG/F,YAAY,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,OAAO,EACP,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGlD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,UAAU,EACf,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,GACjB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,cAAc,EACd,KAAK,oBAAoB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGpG,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGrE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGrF,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG1E,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG5D,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,0BAA0B,EAC1B,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAGpC,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGlE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGxF,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAG/E,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,8BAA8B,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,EAChC,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,OAAO,EACP,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,YAAY,EACV,cAAc,EACd,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,sBAAsB,CAAC;AAI9B,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,EAC9B,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,2BAA2B,EAC3B,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAG7F,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { findingToViolation, violationToFinding } from './finding.js';
|
|
|
2
2
|
export { BadgeVerificationResultSchema, DEFAULT_TOOL_INTEGRATIONS, extractBadgesFromDiff, ToolIntegrationConfigSchema, verifySelfReferenceLinks, verifyToolClaims, } from './badge-verifier.js';
|
|
3
3
|
export { getErrorMessage, rethrowAsParseError, TotemCompileError, TotemConfigError, TotemDatabaseError, TotemError, TotemGitError, TotemOrchestratorError, TotemParseError, } from './errors.js';
|
|
4
4
|
export { buildMissingSdkHint } from './missing-sdk.js';
|
|
5
|
-
export { FREEZE_FILE, readFreezeConfig } from './freeze.js';
|
|
5
|
+
export { FREEZE_FILE, FreezeScopeSchema, readCohortFreezes, readEffectiveFreezes, readFreezeConfig, RULE_COMPILATION_FREEZE_ID, } from './freeze.js';
|
|
6
6
|
export { evaluateGate, FREEZE_CHECK_EVENT, knownGateEvents } from './gate-engine.js';
|
|
7
7
|
export { AnthropicOrchestratorSchema, ChunkStrategySchema, CONFIG_FILES, ConfigTierSchema, ContentTypeSchema, DEFAULT_IGNORE_PATTERNS, DEFAULT_REVIEW_SOURCE_EXTENSIONS, DocTargetSchema, DoctorConfigSchema, EmbeddingProviderSchema, GarbageCollectionSchema, GeminiOrchestratorSchema, GeminiProviderSchema, getConfigTier, IngestTargetSchema, OllamaProviderSchema, OpenAIProviderSchema, OrchestratorSchema, OrientConfigSchema, requireEmbedding, ReviewConfigSchema, ReviewSourceExtensionSchema, ShellOrchestratorSchema, TotemConfigSchema, } from './config-schema.js';
|
|
8
8
|
export { buildFrontmatterFromLegacy, extractFrontmatter } from './lesson-frontmatter.js';
|
|
@@ -70,6 +70,8 @@ export { appendLedgerEvent, LedgerEventSchema, readLedgerEvents } from './ledger
|
|
|
70
70
|
export { mintSessionId, readSessionId, writeSessionId } from './session-id.js';
|
|
71
71
|
export { mergeRules } from './pack-merge.js';
|
|
72
72
|
export { describeSafeExecError, safeExec } from './sys/exec.js';
|
|
73
|
+
// Git-Bash resolution (mmnto-ai/totem#2159 — bare `bash` is never spawned by repo tooling on win32)
|
|
74
|
+
export { _clearBashResolverCacheForTesting, bashSpawnEnv, resolveBash, } from './sys/bash-resolver.js';
|
|
73
75
|
// Git utilities (pure helpers — no CLI dependencies)
|
|
74
76
|
export { extractChangedFiles, filterDiffByPatterns, findRepoRootSync, getDefaultBranch, getGitBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, getGitDiffStat, getGitLogSince, getGitStatus, getLatestTag, getTagDate, inferScopeFromFiles, isFileDirty, resolveGitRoot, } from './sys/git.js';
|
|
75
77
|
// Filesystem helpers
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAStE,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git-Bash resolver (mmnto-ai/totem#2159) — the cohort-standard fix for the
|
|
3
|
+
* bare-`bash`-is-WSL trap.
|
|
4
|
+
*
|
|
5
|
+
* On Windows hosts, Git-for-Windows puts only `Git\cmd` on PATH, so a bare
|
|
6
|
+
* `bash` spawn outside an MSYS/git-hook context resolves to
|
|
7
|
+
* `C:\Windows\System32\bash.exe` — WSL's Linux bash, which cannot read
|
|
8
|
+
* `D:\...` Windows paths and fails every script it is handed. The
|
|
9
|
+
* operator-ruled cohort standard (2026-06-12; strategy concur 0240Z) is
|
|
10
|
+
* repo-side mechanization with ONE exported resolver: **bare `bash` is never
|
|
11
|
+
* spawned by repo tooling on win32** — every bash-invoking surface consumes
|
|
12
|
+
* this function instead.
|
|
13
|
+
*
|
|
14
|
+
* Resolution: memo → POSIX fast-path (`'bash'` is genuine there) →
|
|
15
|
+
* `git --exec-path` derivation (walk up to Git's install root, probe
|
|
16
|
+
* `usr/bin/bash.exe` — the real MSYS bash — then `bin/bash.exe`, the
|
|
17
|
+
* wrapper) → conventional install-path probes → HARD `TotemError` naming
|
|
18
|
+
* every probed path. A bare-`'bash'` final fallback is deliberately absent:
|
|
19
|
+
* it would silently re-enter the WSL trap this module exists to kill
|
|
20
|
+
* (Tenet 4 — the failure must be loud and actionable, not a cryptic
|
|
21
|
+
* `No such file or directory` from a Linux bash reading a Windows path).
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the bash executable repo tooling must spawn. Returns `'bash'` on
|
|
25
|
+
* POSIX (no subprocess spent); on win32 returns an absolute Git-Bash path or
|
|
26
|
+
* throws `BASH_RESOLUTION_FAILED` — never the literal `'bash'`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveBash(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Child-process env for spawning the resolved bash: on win32, Git's
|
|
31
|
+
* `usr\bin` and `bin` are PREPENDED to PATH so the script's own children
|
|
32
|
+
* (`grep`, `tr`, `sha256sum`, `cut` — the MSYS coreutils) resolve. This is
|
|
33
|
+
* the trap's second layer: a directly-spawned Git-Bash inherits the parent
|
|
34
|
+
* PATH (which lacks `usr\bin` — that's the whole #2159 class), so the bash
|
|
35
|
+
* binary runs but every coreutil inside the script is `command not found`.
|
|
36
|
+
* Git-hook contexts never see this because git prepends its own tree before
|
|
37
|
+
* running hooks; this function reproduces that contract for plain spawns.
|
|
38
|
+
*
|
|
39
|
+
* POSIX returns `base` unchanged. The existing PATH key's casing is
|
|
40
|
+
* preserved (Windows env keys are case-insensitive; introducing a second
|
|
41
|
+
* `PATH` spelling alongside an inherited `Path` is undefined behavior).
|
|
42
|
+
*/
|
|
43
|
+
export declare function bashSpawnEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
44
|
+
/**
|
|
45
|
+
* Reset the module memo so unit tests can exercise every resolution branch
|
|
46
|
+
* without cross-test bleed. Test-only by convention (underscore prefix);
|
|
47
|
+
* production callers have no reason to clear an immutable host fact.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export declare function _clearBashResolverCacheForTesting(): void;
|
|
52
|
+
//# sourceMappingURL=bash-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-resolver.d.ts","sourceRoot":"","sources":["../../src/sys/bash-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAsGH;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAerF;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAExD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git-Bash resolver (mmnto-ai/totem#2159) — the cohort-standard fix for the
|
|
3
|
+
* bare-`bash`-is-WSL trap.
|
|
4
|
+
*
|
|
5
|
+
* On Windows hosts, Git-for-Windows puts only `Git\cmd` on PATH, so a bare
|
|
6
|
+
* `bash` spawn outside an MSYS/git-hook context resolves to
|
|
7
|
+
* `C:\Windows\System32\bash.exe` — WSL's Linux bash, which cannot read
|
|
8
|
+
* `D:\...` Windows paths and fails every script it is handed. The
|
|
9
|
+
* operator-ruled cohort standard (2026-06-12; strategy concur 0240Z) is
|
|
10
|
+
* repo-side mechanization with ONE exported resolver: **bare `bash` is never
|
|
11
|
+
* spawned by repo tooling on win32** — every bash-invoking surface consumes
|
|
12
|
+
* this function instead.
|
|
13
|
+
*
|
|
14
|
+
* Resolution: memo → POSIX fast-path (`'bash'` is genuine there) →
|
|
15
|
+
* `git --exec-path` derivation (walk up to Git's install root, probe
|
|
16
|
+
* `usr/bin/bash.exe` — the real MSYS bash — then `bin/bash.exe`, the
|
|
17
|
+
* wrapper) → conventional install-path probes → HARD `TotemError` naming
|
|
18
|
+
* every probed path. A bare-`'bash'` final fallback is deliberately absent:
|
|
19
|
+
* it would silently re-enter the WSL trap this module exists to kill
|
|
20
|
+
* (Tenet 4 — the failure must be loud and actionable, not a cryptic
|
|
21
|
+
* `No such file or directory` from a Linux bash reading a Windows path).
|
|
22
|
+
*/
|
|
23
|
+
import * as fs from 'node:fs';
|
|
24
|
+
import * as os from 'node:os';
|
|
25
|
+
import * as path from 'node:path';
|
|
26
|
+
import { TotemError } from '../errors.js';
|
|
27
|
+
import { safeExec } from './exec.js';
|
|
28
|
+
/**
|
|
29
|
+
* Process-lifetime memo of an effectively immutable host fact (Git's install
|
|
30
|
+
* root does not move mid-process). `git --exec-path` shells out, and
|
|
31
|
+
* bash-spawning test helpers call the resolver per spawn — without the memo
|
|
32
|
+
* a test file would pay the subprocess cost on every assertion.
|
|
33
|
+
*/
|
|
34
|
+
let cached = null;
|
|
35
|
+
/** Conventional Git-for-Windows install roots probed when `git` itself is unavailable. */
|
|
36
|
+
const CONVENTIONAL_GIT_ROOTS = ['C:\\Program Files\\Git'];
|
|
37
|
+
/**
|
|
38
|
+
* The two bash locations inside a Git-for-Windows root, preferred first.
|
|
39
|
+
* `path.win32` explicitly: this branch composes WINDOWS paths by definition,
|
|
40
|
+
* and the unit tests mock `os.platform()` from POSIX CI hosts where the
|
|
41
|
+
* ambient `path` flavor would silently build mixed-separator paths (the
|
|
42
|
+
* exact class the ubuntu/macos runners caught on mmnto-ai/totem#2162).
|
|
43
|
+
*/
|
|
44
|
+
function bashCandidatesUnder(gitRoot) {
|
|
45
|
+
return [
|
|
46
|
+
path.win32.join(gitRoot, 'usr', 'bin', 'bash.exe'),
|
|
47
|
+
path.win32.join(gitRoot, 'bin', 'bash.exe'),
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve and memoize. Always returns a non-null `ResolvedBash` or throws —
|
|
52
|
+
* both public surfaces consume this, so neither needs an unreachable
|
|
53
|
+
* null-narrowing branch (CR on mmnto-ai/totem#2162).
|
|
54
|
+
*/
|
|
55
|
+
function resolveCached() {
|
|
56
|
+
if (cached !== null) {
|
|
57
|
+
return cached;
|
|
58
|
+
}
|
|
59
|
+
if (os.platform() !== 'win32') {
|
|
60
|
+
cached = { bash: 'bash', root: null };
|
|
61
|
+
return cached;
|
|
62
|
+
}
|
|
63
|
+
const probed = [];
|
|
64
|
+
// Primary: derive Git's install root from git itself. `--exec-path`
|
|
65
|
+
// returns `<root>/mingw64/libexec/git-core` (mingw32 on 32-bit builds);
|
|
66
|
+
// three levels up is the root regardless of variant. `path.resolve`
|
|
67
|
+
// normalizes the mixed forward/backslash output Git emits on Windows.
|
|
68
|
+
// totem-context: intentional cleanup — a missing/failing `git` here is the routine fall-to-conventional-probes signal, and the probe chain ends in a HARD TotemError below; nothing degrades silently.
|
|
69
|
+
try {
|
|
70
|
+
// `safeExec` auto-trims trailing whitespace by default (the documented
|
|
71
|
+
// exec.ts contract), so the trailing-newline class cannot reach
|
|
72
|
+
// `path.resolve` (CR on mmnto-ai/totem#2162). The guard below covers the
|
|
73
|
+
// residual anomaly class — empty or relative output from an exotic git
|
|
74
|
+
// shim — by routing it to the conventional probes (GCA, same PR):
|
|
75
|
+
// `path.resolve('')` would otherwise derive the root from the CWD.
|
|
76
|
+
const execPath = safeExec('git', ['--exec-path']);
|
|
77
|
+
if (execPath.length > 0 && path.win32.isAbsolute(execPath)) {
|
|
78
|
+
const gitRoot = path.win32.resolve(execPath, '..', '..', '..');
|
|
79
|
+
for (const candidate of bashCandidatesUnder(gitRoot)) {
|
|
80
|
+
probed.push(candidate);
|
|
81
|
+
if (fs.existsSync(candidate)) {
|
|
82
|
+
cached = { bash: candidate, root: gitRoot };
|
|
83
|
+
return cached;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// totem-context: intentional cleanup — see directive above the try; dual placement so the rule fires on either the catch-keyword line or the catch-body line.
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Fall through to the conventional probes.
|
|
91
|
+
}
|
|
92
|
+
for (const root of CONVENTIONAL_GIT_ROOTS) {
|
|
93
|
+
for (const candidate of bashCandidatesUnder(root)) {
|
|
94
|
+
probed.push(candidate);
|
|
95
|
+
if (fs.existsSync(candidate)) {
|
|
96
|
+
cached = { bash: candidate, root };
|
|
97
|
+
return cached;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
throw new TotemError('BASH_RESOLUTION_FAILED', `no Git-Bash found on win32 (probed: ${probed.join(', ')})`, 'install Git for Windows (its usr\\bin\\bash.exe is the required bash) — bare `bash` resolves to WSL on this host and cannot read Windows paths (mmnto-ai/totem#2159).');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Resolve the bash executable repo tooling must spawn. Returns `'bash'` on
|
|
105
|
+
* POSIX (no subprocess spent); on win32 returns an absolute Git-Bash path or
|
|
106
|
+
* throws `BASH_RESOLUTION_FAILED` — never the literal `'bash'`.
|
|
107
|
+
*/
|
|
108
|
+
export function resolveBash() {
|
|
109
|
+
return resolveCached().bash;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Child-process env for spawning the resolved bash: on win32, Git's
|
|
113
|
+
* `usr\bin` and `bin` are PREPENDED to PATH so the script's own children
|
|
114
|
+
* (`grep`, `tr`, `sha256sum`, `cut` — the MSYS coreutils) resolve. This is
|
|
115
|
+
* the trap's second layer: a directly-spawned Git-Bash inherits the parent
|
|
116
|
+
* PATH (which lacks `usr\bin` — that's the whole #2159 class), so the bash
|
|
117
|
+
* binary runs but every coreutil inside the script is `command not found`.
|
|
118
|
+
* Git-hook contexts never see this because git prepends its own tree before
|
|
119
|
+
* running hooks; this function reproduces that contract for plain spawns.
|
|
120
|
+
*
|
|
121
|
+
* POSIX returns `base` unchanged. The existing PATH key's casing is
|
|
122
|
+
* preserved (Windows env keys are case-insensitive; introducing a second
|
|
123
|
+
* `PATH` spelling alongside an inherited `Path` is undefined behavior).
|
|
124
|
+
*/
|
|
125
|
+
export function bashSpawnEnv(base = process.env) {
|
|
126
|
+
const { root } = resolveCached();
|
|
127
|
+
if (root === null) {
|
|
128
|
+
return base;
|
|
129
|
+
}
|
|
130
|
+
// root non-null ⟹ win32 resolution: compose a WINDOWS PATH value
|
|
131
|
+
// (`path.win32` flavor + `;` delimiter) regardless of the host running
|
|
132
|
+
// this code — see bashCandidatesUnder.
|
|
133
|
+
const segments = [path.win32.join(root, 'usr', 'bin'), path.win32.join(root, 'bin')];
|
|
134
|
+
const pathKey = Object.keys(base).find((k) => k.toUpperCase() === 'PATH') ?? 'PATH';
|
|
135
|
+
const current = base[pathKey];
|
|
136
|
+
if (current !== undefined && current.length > 0) {
|
|
137
|
+
segments.push(current);
|
|
138
|
+
}
|
|
139
|
+
return { ...base, [pathKey]: segments.join(path.win32.delimiter) };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Reset the module memo so unit tests can exercise every resolution branch
|
|
143
|
+
* without cross-test bleed. Test-only by convention (underscore prefix);
|
|
144
|
+
* production callers have no reason to clear an immutable host fact.
|
|
145
|
+
*
|
|
146
|
+
* @internal
|
|
147
|
+
*/
|
|
148
|
+
export function _clearBashResolverCacheForTesting() {
|
|
149
|
+
cached = null;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=bash-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-resolver.js","sourceRoot":"","sources":["../../src/sys/bash-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for `resolveBash` (mmnto-ai/totem#2159).
|
|
3
|
+
*
|
|
4
|
+
* Fully mocked at the three seams (`node:os` platform, `node:fs` existsSync,
|
|
5
|
+
* `./exec.js` safeExec) so every resolution branch — POSIX fast-path,
|
|
6
|
+
* exec-path derivation, conventional fallback, hard failure — is exercised
|
|
7
|
+
* deterministically on any host. The module memo is reset per test via the
|
|
8
|
+
* exported testing hook.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=bash-resolver.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-resolver.test.d.ts","sourceRoot":"","sources":["../../src/sys/bash-resolver.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for `resolveBash` (mmnto-ai/totem#2159).
|
|
3
|
+
*
|
|
4
|
+
* Fully mocked at the three seams (`node:os` platform, `node:fs` existsSync,
|
|
5
|
+
* `./exec.js` safeExec) so every resolution branch — POSIX fast-path,
|
|
6
|
+
* exec-path derivation, conventional fallback, hard failure — is exercised
|
|
7
|
+
* deterministically on any host. The module memo is reset per test via the
|
|
8
|
+
* exported testing hook.
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'node:fs';
|
|
11
|
+
import * as os from 'node:os';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
14
|
+
import { TotemError } from '../errors.js';
|
|
15
|
+
import { _clearBashResolverCacheForTesting, bashSpawnEnv, resolveBash } from './bash-resolver.js';
|
|
16
|
+
import { safeExec } from './exec.js';
|
|
17
|
+
vi.mock('node:os', async (importOriginal) => {
|
|
18
|
+
const actual = await importOriginal();
|
|
19
|
+
return { ...actual, platform: vi.fn(actual.platform) };
|
|
20
|
+
});
|
|
21
|
+
vi.mock('node:fs', async (importOriginal) => {
|
|
22
|
+
const actual = await importOriginal();
|
|
23
|
+
return { ...actual, existsSync: vi.fn(actual.existsSync) };
|
|
24
|
+
});
|
|
25
|
+
vi.mock('./exec.js', async (importOriginal) => {
|
|
26
|
+
const actual = await importOriginal();
|
|
27
|
+
return { ...actual, safeExec: vi.fn(actual.safeExec) };
|
|
28
|
+
});
|
|
29
|
+
// path.win32 throughout: these fixtures describe WINDOWS paths while the
|
|
30
|
+
// suite runs on any host (POSIX CI runners' ambient `path` flavor neither
|
|
31
|
+
// recognizes drive-letters as absolute nor joins with backslashes — the
|
|
32
|
+
// class the ubuntu/macos runners caught on mmnto-ai/totem#2162).
|
|
33
|
+
const GIT_ROOT = path.win32.resolve('D:/Git');
|
|
34
|
+
const USR_BASH = path.win32.join(GIT_ROOT, 'usr', 'bin', 'bash.exe');
|
|
35
|
+
const BIN_BASH = path.win32.join(GIT_ROOT, 'bin', 'bash.exe');
|
|
36
|
+
const CONVENTIONAL_USR_BASH = path.win32.join('C:\\Program Files\\Git', 'usr', 'bin', 'bash.exe');
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
_clearBashResolverCacheForTesting();
|
|
39
|
+
vi.mocked(os.platform).mockReset();
|
|
40
|
+
vi.mocked(fs.existsSync).mockReset();
|
|
41
|
+
vi.mocked(safeExec).mockReset();
|
|
42
|
+
});
|
|
43
|
+
describe('resolveBash — POSIX fast-path', () => {
|
|
44
|
+
it("returns 'bash' on non-win32 without spawning any subprocess", () => {
|
|
45
|
+
vi.mocked(os.platform).mockReturnValue('linux');
|
|
46
|
+
expect(resolveBash()).toBe('bash');
|
|
47
|
+
expect(resolveBash()).toBe('bash');
|
|
48
|
+
expect(safeExec).not.toHaveBeenCalled();
|
|
49
|
+
expect(fs.existsSync).not.toHaveBeenCalled();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('resolveBash — exec-path derivation (win32)', () => {
|
|
53
|
+
it('derives Git root from `git --exec-path` and prefers usr/bin/bash.exe over bin/bash.exe', () => {
|
|
54
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
55
|
+
// Forward slashes on purpose — Git on Windows emits mixed separators;
|
|
56
|
+
// path.resolve must normalize before probing.
|
|
57
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
58
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === USR_BASH);
|
|
59
|
+
const resolved = resolveBash();
|
|
60
|
+
expect(resolved).toBe(USR_BASH);
|
|
61
|
+
expect(resolved).not.toBe('bash');
|
|
62
|
+
// usr/bin probed before bin (the real MSYS bash before the wrapper).
|
|
63
|
+
expect(vi.mocked(fs.existsSync).mock.calls[0]?.[0]).toBe(USR_BASH);
|
|
64
|
+
});
|
|
65
|
+
it('falls back to bin/bash.exe when usr/bin is absent under the derived root', () => {
|
|
66
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
67
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
68
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === BIN_BASH);
|
|
69
|
+
expect(resolveBash()).toBe(BIN_BASH);
|
|
70
|
+
});
|
|
71
|
+
it('memoizes: `git --exec-path` is invoked at most once per process', () => {
|
|
72
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
73
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
74
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === USR_BASH);
|
|
75
|
+
expect(resolveBash()).toBe(USR_BASH);
|
|
76
|
+
expect(resolveBash()).toBe(USR_BASH);
|
|
77
|
+
expect(resolveBash()).toBe(USR_BASH);
|
|
78
|
+
expect(safeExec).toHaveBeenCalledTimes(1);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('resolveBash — conventional fallback (win32)', () => {
|
|
82
|
+
it('probes the conventional install root when git itself is unavailable', () => {
|
|
83
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
84
|
+
vi.mocked(safeExec).mockImplementation(() => {
|
|
85
|
+
throw new Error('spawn git ENOENT');
|
|
86
|
+
});
|
|
87
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === CONVENTIONAL_USR_BASH);
|
|
88
|
+
expect(resolveBash()).toBe(CONVENTIONAL_USR_BASH);
|
|
89
|
+
});
|
|
90
|
+
it('probes the conventional root when the derived root holds no bash', () => {
|
|
91
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
92
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
93
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === CONVENTIONAL_USR_BASH);
|
|
94
|
+
expect(resolveBash()).toBe(CONVENTIONAL_USR_BASH);
|
|
95
|
+
});
|
|
96
|
+
it('routes anomalous exec-path output (empty / relative) to the conventional probes (GCA #2162)', () => {
|
|
97
|
+
// Without the guard, path.resolve('') would derive the Git root from the
|
|
98
|
+
// CWD — a wrong-state class. Anomalies must behave like a failing git.
|
|
99
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
100
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === CONVENTIONAL_USR_BASH);
|
|
101
|
+
vi.mocked(safeExec).mockReturnValue('');
|
|
102
|
+
expect(resolveBash()).toBe(CONVENTIONAL_USR_BASH);
|
|
103
|
+
_clearBashResolverCacheForTesting();
|
|
104
|
+
vi.mocked(safeExec).mockReturnValue('relative/libexec/git-core');
|
|
105
|
+
expect(resolveBash()).toBe(CONVENTIONAL_USR_BASH);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('resolveBash — hard failure (win32, the no-bare-bash contract)', () => {
|
|
109
|
+
it('throws BASH_RESOLUTION_FAILED naming every probed path — never the literal bash', () => {
|
|
110
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
111
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
112
|
+
vi.mocked(fs.existsSync).mockReturnValue(false);
|
|
113
|
+
let thrown;
|
|
114
|
+
try {
|
|
115
|
+
resolveBash();
|
|
116
|
+
// totem-context: test asserts the throw below; reaching here is the failure.
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
thrown = err;
|
|
120
|
+
}
|
|
121
|
+
expect(thrown).toBeInstanceOf(TotemError);
|
|
122
|
+
const totemErr = thrown;
|
|
123
|
+
expect(totemErr.code).toBe('BASH_RESOLUTION_FAILED');
|
|
124
|
+
// Every probed path is named: both derived-root candidates and both
|
|
125
|
+
// conventional-root candidates (actionable per Tenet 4).
|
|
126
|
+
expect(totemErr.message).toContain(USR_BASH);
|
|
127
|
+
expect(totemErr.message).toContain(BIN_BASH);
|
|
128
|
+
expect(totemErr.message).toContain(CONVENTIONAL_USR_BASH);
|
|
129
|
+
expect(totemErr.recoveryHint).toContain('Git for Windows');
|
|
130
|
+
});
|
|
131
|
+
it('does not memoize a failure: a later successful probe resolves', () => {
|
|
132
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
133
|
+
vi.mocked(safeExec).mockImplementation(() => {
|
|
134
|
+
throw new Error('spawn git ENOENT');
|
|
135
|
+
});
|
|
136
|
+
vi.mocked(fs.existsSync).mockReturnValue(false);
|
|
137
|
+
expect(() => resolveBash()).toThrowError(TotemError);
|
|
138
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === CONVENTIONAL_USR_BASH);
|
|
139
|
+
expect(resolveBash()).toBe(CONVENTIONAL_USR_BASH);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('bashSpawnEnv — child PATH for the spawned bash (#2159 second layer)', () => {
|
|
143
|
+
it('returns base unchanged on POSIX', () => {
|
|
144
|
+
vi.mocked(os.platform).mockReturnValue('linux');
|
|
145
|
+
const base = { PATH: '/usr/bin:/bin', HOME: '/home/x' };
|
|
146
|
+
expect(bashSpawnEnv(base)).toBe(base);
|
|
147
|
+
});
|
|
148
|
+
it("prepends the resolved root's usr/bin and bin so the script's coreutils resolve", () => {
|
|
149
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
150
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
151
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === USR_BASH);
|
|
152
|
+
const env = bashSpawnEnv({ PATH: 'C:\\Windows\\system32' });
|
|
153
|
+
const expected = [
|
|
154
|
+
path.win32.join(GIT_ROOT, 'usr', 'bin'),
|
|
155
|
+
path.win32.join(GIT_ROOT, 'bin'),
|
|
156
|
+
'C:\\Windows\\system32',
|
|
157
|
+
].join(path.win32.delimiter);
|
|
158
|
+
expect(env['PATH']).toBe(expected);
|
|
159
|
+
});
|
|
160
|
+
it("preserves the inherited PATH key's casing (no second spelling introduced)", () => {
|
|
161
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
162
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
163
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === USR_BASH);
|
|
164
|
+
const env = bashSpawnEnv({ Path: 'C:\\Windows\\system32', FOO: 'bar' });
|
|
165
|
+
expect(env['Path']).toContain(path.win32.join(GIT_ROOT, 'usr', 'bin'));
|
|
166
|
+
expect(Object.keys(env).filter((k) => k.toUpperCase() === 'PATH')).toEqual(['Path']);
|
|
167
|
+
expect(env['FOO']).toBe('bar');
|
|
168
|
+
});
|
|
169
|
+
it('handles an absent PATH in the base env (prefix only, no dangling delimiter)', () => {
|
|
170
|
+
vi.mocked(os.platform).mockReturnValue('win32');
|
|
171
|
+
vi.mocked(safeExec).mockReturnValue('D:/Git/mingw64/libexec/git-core');
|
|
172
|
+
vi.mocked(fs.existsSync).mockImplementation((p) => p === USR_BASH);
|
|
173
|
+
const env = bashSpawnEnv({});
|
|
174
|
+
expect(env['PATH']).toBe([path.win32.join(GIT_ROOT, 'usr', 'bin'), path.win32.join(GIT_ROOT, 'bin')].join(path.win32.delimiter));
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
//# sourceMappingURL=bash-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-resolver.test.js","sourceRoot":"","sources":["../../src/sys/bash-resolver.test.ts"],"names":[],"mappings":"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"}
|