@mmnto/cli 1.53.8 → 1.53.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/git.d.ts CHANGED
@@ -29,6 +29,27 @@ export interface DiffForReviewOptions {
29
29
  staged?: boolean;
30
30
  /** Explicit ref range (mmnto-ai/totem#1717). When set, bypasses the implicit fallback chain. */
31
31
  diff?: string;
32
+ /**
33
+ * Force the branch-vs-base (push-gate) diff scope regardless of working-tree
34
+ * state (mmnto-ai/totem#2091). Mutually exclusive with `staged` and `diff`.
35
+ */
36
+ branch?: boolean;
37
+ /**
38
+ * Explicit base branch NAME for the forced branch-vs-base scope
39
+ * (mmnto-ai/totem#2091). Resolved through `getGitBranchDiff`'s
40
+ * origin-preference logic (`origin/<base>...HEAD`, else local `<base>` —
41
+ * mmnto-ai/totem#2054); NOT a raw ref range. Setting `base` implies
42
+ * `branch`. Mutually exclusive with `staged` and `diff`.
43
+ */
44
+ base?: string;
45
+ /**
46
+ * Lint-only opt-in for the narrow-scope advisory (mmnto-ai/totem#2090).
47
+ * When the resolved source is `staged`/`uncommitted` and the branch-vs-base
48
+ * scope the pre-push gate checks would cover more files, a one-line warning
49
+ * names the gap. Never set by `review` — staged-slice review is routinely
50
+ * intentional (truncation-cliff workaround), so warning there trains ignore.
51
+ */
52
+ warnNarrowScope?: boolean;
32
53
  }
33
54
  export interface DiffForReviewConfig {
34
55
  ignorePatterns: string[];
@@ -54,9 +75,12 @@ export declare const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50000;
54
75
  * Shared diff-fetching logic used by both `shield` and `lint` commands.
55
76
  *
56
77
  * Resolution order:
57
- * 1. `--diff <range>` (explicit, no fallback)
58
- * 2. `--staged` (staged-only) or working-tree (`all`) diff
59
- * 3. Branch-vs-base diff (`<default>...HEAD`) when 2 yields nothing
78
+ * 1. `--branch` / `--base <ref>` (forced push-gate scope, mmnto-ai/totem#2091
79
+ * jumps straight to the branch-vs-base diff of step 4, ignoring the
80
+ * working tree; mutually exclusive with 2 and 3)
81
+ * 2. `--diff <range>` (explicit, no fallback)
82
+ * 3. `--staged` (staged-only) or working-tree (`all`) diff
83
+ * 4. Branch-vs-base diff (`<default>...HEAD`) when 3 yields nothing
60
84
  *
61
85
  * The chosen resolution path is logged to stderr (mmnto-ai/totem#1717) so the operator's
62
86
  * mental model matches the actual git invocation. Diffs exceeding
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAMtB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAazC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/E;AAID,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kGAAkG;IAClG,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAiErC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,cAAc,CAAC;AAMtB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAU1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAazC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/E;AAID,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEjG,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kGAAkG;IAClG,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAgKrC"}
package/dist/git.js CHANGED
@@ -74,9 +74,12 @@ export const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50_000;
74
74
  * Shared diff-fetching logic used by both `shield` and `lint` commands.
75
75
  *
76
76
  * Resolution order:
77
- * 1. `--diff <range>` (explicit, no fallback)
78
- * 2. `--staged` (staged-only) or working-tree (`all`) diff
79
- * 3. Branch-vs-base diff (`<default>...HEAD`) when 2 yields nothing
77
+ * 1. `--branch` / `--base <ref>` (forced push-gate scope, mmnto-ai/totem#2091
78
+ * jumps straight to the branch-vs-base diff of step 4, ignoring the
79
+ * working tree; mutually exclusive with 2 and 3)
80
+ * 2. `--diff <range>` (explicit, no fallback)
81
+ * 3. `--staged` (staged-only) or working-tree (`all`) diff
82
+ * 4. Branch-vs-base diff (`<default>...HEAD`) when 3 yields nothing
80
83
  *
81
84
  * The chosen resolution path is logged to stderr (mmnto-ai/totem#1717) so the operator's
82
85
  * mental model matches the actual git invocation. Diffs exceeding
@@ -88,11 +91,61 @@ export const REVIEW_DIFF_TRUNCATION_THRESHOLD = 50_000;
88
91
  */
89
92
  export async function getDiffForReview(options, config, cwd, tag) {
90
93
  const { log } = await import('./ui.js');
91
- const { extractChangedFiles, filterDiffByPatterns, getDefaultBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, sanitizeForTerminal, } = await import('@mmnto/totem');
94
+ const { TotemError, TotemGitError, extractChangedFiles, filterDiffByPatterns, getDefaultBranch, getGitBranchDiff, getGitDiff, getGitDiffRange, sanitizeForTerminal, } = await import('@mmnto/totem');
95
+ // ── Eager scope-selector validation (mmnto-ai/totem#2091) ──
96
+ // `--base` implies branch scope. Both are mutually exclusive with the
97
+ // other explicit scope selectors — validated BEFORE any git work so the
98
+ // error names the conflicting flags instead of silently preferring one
99
+ // scope (the implicit-scope dishonesty mmnto-ai/totem#2055 exists to kill).
100
+ const forcedBranchScope = options.branch === true || options.base !== undefined;
101
+ // Names the flag(s) the user actually passed — shared by the conflict error
102
+ // AND the diff-source disclosure line so neither cites a flag that wasn't
103
+ // given (a `--base`-only run must not log `--branch` — Greptile on #2098).
104
+ const forcingFlags = [
105
+ ...(options.branch ? ['--branch'] : []),
106
+ ...(options.base !== undefined ? ['--base'] : []),
107
+ ].join('/');
108
+ if (forcedBranchScope) {
109
+ const conflicting = [
110
+ ...(options.staged ? ['--staged'] : []),
111
+ ...(options.diff !== undefined ? ['--diff'] : []),
112
+ ];
113
+ if (conflicting.length > 0) {
114
+ throw new TotemError('FLAG_CONFLICT', `${forcingFlags} cannot be combined with ${conflicting.join(', ')}: each selects a different diff scope, and silent precedence would hide which scope actually ran.`, 'Re-run with exactly one scope selector: --branch/--base <ref>, --staged, or --diff <range>.');
115
+ }
116
+ if (options.base !== undefined) {
117
+ // Mirrors getGitDiffRange's flag-injection guard (mmnto-ai/totem#1717):
118
+ // reject empty values and leading `-` before the name reaches git.
119
+ const trimmedBase = options.base.trim();
120
+ if (trimmedBase.length === 0) {
121
+ throw new TotemGitError('Empty base branch supplied to --base.', 'Provide a non-empty branch name, e.g. --base main.');
122
+ }
123
+ if (trimmedBase.startsWith('-')) {
124
+ throw new TotemGitError(`Invalid base branch: ${trimmedBase}. Branch names may not start with '-' (git-flag injection guard).`, 'Provide a plain branch name such as "main" without leading dashes.');
125
+ }
126
+ }
127
+ }
92
128
  const allIgnore = [...config.ignorePatterns, ...(config.shieldIgnorePatterns ?? [])];
93
129
  let diff;
94
130
  let source;
95
- if (options.diff !== undefined) {
131
+ if (forcedBranchScope) {
132
+ // Forced push-gate scope (mmnto-ai/totem#2091): bypass the working-tree
133
+ // checks entirely and diff branch-vs-base — exactly what the pre-push
134
+ // gate evaluates. Reuses the auto-fallback's source value so downstream
135
+ // consumers treat forced and auto branch scope identically; the log line
136
+ // discloses the forcing. getGitBranchDiff's TotemGitError (with its
137
+ // "git fetch origin <ref>" hint) bubbles when the base resolves nowhere.
138
+ const base = options.base !== undefined ? options.base.trim() : getDefaultBranch(cwd);
139
+ const safeBase = sanitizeForTerminal(base);
140
+ log.info(tag, `Diff source: branch-vs-base (${forcingFlags}; origin/${safeBase}...HEAD, else local ${safeBase})`);
141
+ diff = filterDiffByPatterns(getGitBranchDiff(cwd, base), allIgnore);
142
+ source = 'branch-vs-base';
143
+ if (!diff.trim()) {
144
+ log.warn(tag, 'No changes detected. Nothing to review.');
145
+ return null;
146
+ }
147
+ }
148
+ else if (options.diff !== undefined) {
96
149
  // Explicit-range path — no fallback. getGitDiffRange rejects flag-injection
97
150
  // (leading `-`) and empty values; ignore patterns still apply per repo policy.
98
151
  log.info(tag, `Diff source: explicit range (${options.diff})`);
@@ -129,6 +182,29 @@ export async function getDiffForReview(options, config, cwd, tag) {
129
182
  }
130
183
  const changedFiles = extractChangedFiles(diff);
131
184
  log.info(tag, `Changed files (${changedFiles.length}): ${changedFiles.join(', ')}`);
185
+ // ── Narrow-scope advisory (mmnto-ai/totem#2090) — lint-only opt-in ──
186
+ // When lint resolved a working-tree scope, compare against the
187
+ // branch-vs-base scope the pre-push gate checks. The branch file set runs
188
+ // through the SAME post-ignore-filter pipeline as the gate would, so N
189
+ // counts only files the gate would actually lint (raw `--name-only`
190
+ // overcounts ignored files). Set difference avoids double-counting files
191
+ // changed both on the branch and in the working tree.
192
+ if (options.warnNarrowScope && (source === 'staged' || source === 'uncommitted')) {
193
+ try {
194
+ const branchDiff = filterDiffByPatterns(getGitBranchDiff(cwd, getDefaultBranch(cwd)), allIgnore);
195
+ const branchFiles = extractChangedFiles(branchDiff);
196
+ const currentScope = new Set(changedFiles);
197
+ const unlinted = branchFiles.filter((file) => !currentScope.has(file));
198
+ if (unlinted.length > 0) {
199
+ const opening = source === 'staged' ? 'Linting staged changes only' : 'Linting uncommitted changes only';
200
+ log.warn(tag, `${opening} — the pre-push gate checks the full branch (${unlinted.length} more file(s)). Lint a clean tree or use \`totem lint --branch\` to match.`);
201
+ }
202
+ // totem-context: Tenet-4-justified silent skip (mmnto-ai/totem#2090) — the warning is a best-effort advisory ABOUT scope, not a verdict input; its failure states (detached HEAD, no base branch, shallow clone) are exactly where branch-vs-base scope is undefined, so there is no honest warning to emit. Lint's verdict, diff, and exit code are untouched.
203
+ }
204
+ catch {
205
+ // Intentionally silent — see the totem-context justification above.
206
+ }
207
+ }
132
208
  return { diff, changedFiles, source };
133
209
  }
134
210
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/git.test.js CHANGED
@@ -40,13 +40,27 @@ vi.mock('@mmnto/totem', async () => {
40
40
  getDefaultBranch: vi.fn(() => 'main'),
41
41
  };
42
42
  });
43
+ // Mock the ui logger so the #2090/#2091 tests can assert on the exact
44
+ // disclosure / warning lines getDiffForReview emits.
45
+ vi.mock('./ui.js', () => ({
46
+ log: {
47
+ info: vi.fn(),
48
+ success: vi.fn(),
49
+ warn: vi.fn(),
50
+ error: vi.fn(),
51
+ dim: vi.fn(),
52
+ },
53
+ }));
43
54
  // Must import after mock setup — vitest hoists vi.mock.
44
55
  // Aliased so the imports don't shadow the top-of-file re-export checks.
45
56
  const totemMod = await import('@mmnto/totem');
57
+ const uiMod = await import('./ui.js');
46
58
  const mockSafeExec = vi.mocked(totemMod.safeExec);
47
59
  const mockGetGitDiff = vi.mocked(totemMod.getGitDiff);
48
60
  const mockGetGitBranchDiff = vi.mocked(totemMod.getGitBranchDiff);
49
61
  const mockGetGitDiffRange = vi.mocked(totemMod.getGitDiffRange);
62
+ const mockGetDefaultBranch = vi.mocked(totemMod.getDefaultBranch);
63
+ const mockLog = vi.mocked(uiMod.log);
50
64
  describe('isAncestor', () => {
51
65
  it('returns true for direct ancestor', () => {
52
66
  mockSafeExec.mockReturnValueOnce('');
@@ -183,4 +197,196 @@ describe('getDiffForReview --diff (#1717)', () => {
183
197
  expect(mockGetGitDiff).toHaveBeenCalledWith('staged', '/tmp');
184
198
  });
185
199
  });
200
+ // ─── getDiffForReview --branch/--base (#2091) ────────────
201
+ /** Build a minimal unified diff touching the given files. */
202
+ function diffFor(...files) {
203
+ const lines = files.flatMap((f) => [
204
+ `diff --git a/${f} b/${f}`,
205
+ `--- a/${f}`,
206
+ `+++ b/${f}`,
207
+ '@@ -1 +1 @@',
208
+ '+x',
209
+ ]);
210
+ return `${lines.join('\n')}\n`;
211
+ }
212
+ describe('getDiffForReview --branch/--base (#2091)', () => {
213
+ const config = { ignorePatterns: [] };
214
+ beforeEach(() => {
215
+ mockGetGitDiffRange.mockReset();
216
+ mockGetGitDiff.mockReset();
217
+ mockGetGitBranchDiff.mockReset();
218
+ mockGetDefaultBranch.mockClear();
219
+ mockLog.info.mockClear();
220
+ mockLog.warn.mockClear();
221
+ });
222
+ it('--base forces branch scope even with a dirty working tree', async () => {
223
+ // Dirty tree: getGitDiff WOULD return uncommitted content — the forced
224
+ // path must never consult it, so none of it can enter the diff.
225
+ mockGetGitDiff.mockReturnValue(diffFor('dirty.ts'));
226
+ mockGetGitBranchDiff.mockReturnValue(diffFor('committed.ts'));
227
+ const result = await getDiffForReview({ base: 'develop' }, config, '/tmp', 'Lint');
228
+ expect(result).not.toBeNull();
229
+ expect(result.source).toBe('branch-vs-base');
230
+ expect(result.changedFiles).toEqual(['committed.ts']);
231
+ expect(mockGetGitDiff).not.toHaveBeenCalled();
232
+ expect(mockGetGitBranchDiff).toHaveBeenCalledWith('/tmp', 'develop');
233
+ });
234
+ it('--branch resolves the default branch and reports source: branch-vs-base', async () => {
235
+ mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
236
+ const result = await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
237
+ expect(result).not.toBeNull();
238
+ expect(result.source).toBe('branch-vs-base');
239
+ expect(mockGetGitBranchDiff).toHaveBeenCalledWith('/tmp', 'main');
240
+ expect(mockGetGitDiff).not.toHaveBeenCalled();
241
+ });
242
+ it('logs the forced diff-source disclosure line marking the forcing flag', async () => {
243
+ mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
244
+ await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
245
+ const disclosure = mockLog.info.mock.calls.find((c) => String(c[1]).startsWith('Diff source:'));
246
+ expect(disclosure).toBeDefined();
247
+ expect(disclosure[1]).toBe('Diff source: branch-vs-base (--branch; origin/main...HEAD, else local main)');
248
+ });
249
+ it('discloses only --base when --branch was not passed (Greptile on #2098)', async () => {
250
+ mockGetGitBranchDiff.mockReturnValue(diffFor('a.ts'));
251
+ await getDiffForReview({ base: 'develop' }, config, '/tmp', 'Lint');
252
+ const disclosure = mockLog.info.mock.calls.find((c) => String(c[1]).startsWith('Diff source:'));
253
+ expect(disclosure).toBeDefined();
254
+ expect(disclosure[1]).toBe('Diff source: branch-vs-base (--base; origin/develop...HEAD, else local develop)');
255
+ });
256
+ it('--branch + --staged throws FLAG_CONFLICT before any git function is invoked', async () => {
257
+ await expect(getDiffForReview({ branch: true, staged: true }, config, '/tmp', 'Lint')).rejects.toMatchObject({ code: 'FLAG_CONFLICT' });
258
+ expect(mockGetGitDiff).not.toHaveBeenCalled();
259
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
260
+ expect(mockGetGitDiffRange).not.toHaveBeenCalled();
261
+ expect(mockGetDefaultBranch).not.toHaveBeenCalled();
262
+ });
263
+ it('--branch + --diff throws a conflict error naming both flags before any git work', async () => {
264
+ await expect(getDiffForReview({ branch: true, diff: 'HEAD^..HEAD' }, config, '/tmp', 'Lint')).rejects.toThrow(/--branch.*--diff/);
265
+ expect(mockGetGitDiff).not.toHaveBeenCalled();
266
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
267
+ expect(mockGetGitDiffRange).not.toHaveBeenCalled();
268
+ expect(mockGetDefaultBranch).not.toHaveBeenCalled();
269
+ });
270
+ it('--base + --staged throws a conflict error (base implies branch scope)', async () => {
271
+ await expect(getDiffForReview({ base: 'main', staged: true }, config, '/tmp', 'Lint')).rejects.toThrow(/--base.*--staged/);
272
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
273
+ });
274
+ it('--base + --diff throws a conflict error before any git work (Greptile on #2098)', async () => {
275
+ await expect(getDiffForReview({ base: 'main', diff: 'HEAD^..HEAD' }, config, '/tmp', 'Lint')).rejects.toThrow(/--base.*--diff/);
276
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
277
+ expect(mockGetGitDiffRange).not.toHaveBeenCalled();
278
+ expect(mockGetDefaultBranch).not.toHaveBeenCalled();
279
+ });
280
+ it('rejects a --base value with a leading dash (flag-injection guard)', async () => {
281
+ await expect(getDiffForReview({ base: '--no-index' }, config, '/tmp', 'Lint')).rejects.toThrow(/git-flag injection/);
282
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
283
+ });
284
+ it('rejects an empty/whitespace --base value', async () => {
285
+ await expect(getDiffForReview({ base: ' ' }, config, '/tmp', 'Lint')).rejects.toThrow(/Empty base branch/);
286
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
287
+ });
288
+ it('returns null with the existing no-changes warn when the forced branch diff is empty', async () => {
289
+ mockGetGitBranchDiff.mockReturnValue('');
290
+ const result = await getDiffForReview({ branch: true }, config, '/tmp', 'Lint');
291
+ expect(result).toBeNull();
292
+ const warned = mockLog.warn.mock.calls.find((c) => String(c[1]).includes('No changes detected'));
293
+ expect(warned).toBeDefined();
294
+ });
295
+ it('lets getGitBranchDiff errors bubble on the forced path', async () => {
296
+ mockGetGitBranchDiff.mockImplementation(() => {
297
+ // totem-context: throw inside a vitest mock to prove the forced path does NOT swallow getGitBranchDiff failures (its TotemGitError carries the actionable fetch hint); sentinel message is test-only
298
+ throw new Error('fatal: bad revision');
299
+ });
300
+ await expect(getDiffForReview({ branch: true }, config, '/tmp', 'Lint')).rejects.toThrow(/bad revision/);
301
+ });
302
+ });
303
+ // ─── getDiffForReview narrow-scope warning (#2090) ───────
304
+ describe('getDiffForReview narrow-scope warning (#2090)', () => {
305
+ const config = { ignorePatterns: [] };
306
+ const NARROW_SCOPE_RE = /pre-push gate checks the full branch/;
307
+ function findNarrowScopeWarning() {
308
+ return mockLog.warn.mock.calls.find((c) => NARROW_SCOPE_RE.test(String(c[1])));
309
+ }
310
+ beforeEach(() => {
311
+ mockGetGitDiffRange.mockReset();
312
+ mockGetGitDiff.mockReset();
313
+ mockGetGitBranchDiff.mockReset();
314
+ mockGetDefaultBranch.mockClear();
315
+ mockLog.info.mockClear();
316
+ mockLog.warn.mockClear();
317
+ });
318
+ it('warns with the set difference — overlap files are not double-counted', async () => {
319
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
320
+ mockGetGitBranchDiff.mockReturnValue(diffFor('B.ts', 'C.ts', 'D.ts'));
321
+ const result = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
322
+ expect(result).not.toBeNull();
323
+ expect(result.source).toBe('uncommitted');
324
+ const warning = findNarrowScopeWarning();
325
+ expect(warning).toBeDefined();
326
+ // B.ts overlaps both scopes — N must be 2 (C.ts, D.ts), not 3.
327
+ expect(warning[1]).toBe('Linting uncommitted changes only — the pre-push gate checks the full branch (2 more file(s)). Lint a clean tree or use `totem lint --branch` to match.');
328
+ });
329
+ it('computes N from the post-ignore-filter branch diff (ignored files excluded)', async () => {
330
+ const cfgWithIgnores = { ignorePatterns: ['package-lock.json'] };
331
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
332
+ mockGetGitBranchDiff.mockReturnValue(diffFor('B.ts', 'package-lock.json'));
333
+ await getDiffForReview({ warnNarrowScope: true }, cfgWithIgnores, '/tmp', 'Lint');
334
+ const warning = findNarrowScopeWarning();
335
+ expect(warning).toBeDefined();
336
+ // Raw --name-only would say 2; the gate-honest post-filter count is 1.
337
+ expect(warning[1]).toContain('(1 more file(s))');
338
+ });
339
+ it('staged-mode warning opens with "Linting staged changes only"', async () => {
340
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
341
+ mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
342
+ const result = await getDiffForReview({ staged: true, warnNarrowScope: true }, config, '/tmp', 'Lint');
343
+ expect(result.source).toBe('staged');
344
+ const warning = findNarrowScopeWarning();
345
+ expect(warning).toBeDefined();
346
+ expect(String(warning[1]).startsWith('Linting staged changes only —')).toBe(true);
347
+ });
348
+ it('does not warn when the set difference is empty', async () => {
349
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts', 'B.ts'));
350
+ mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts'));
351
+ await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
352
+ expect(findNarrowScopeWarning()).toBeUndefined();
353
+ });
354
+ it('does not warn when the source resolves to branch-vs-base (auto-fallback)', async () => {
355
+ mockGetGitDiff.mockReturnValue('');
356
+ mockGetGitBranchDiff.mockReturnValue(diffFor('A.ts'));
357
+ const result = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
358
+ expect(result.source).toBe('branch-vs-base');
359
+ expect(findNarrowScopeWarning()).toBeUndefined();
360
+ // Branch diff was computed once for the scope itself — never a second
361
+ // time for the warning.
362
+ expect(mockGetGitBranchDiff).toHaveBeenCalledTimes(1);
363
+ });
364
+ it('does not warn when the source is explicit-range', async () => {
365
+ mockGetGitDiffRange.mockReturnValue(diffFor('A.ts'));
366
+ const result = await getDiffForReview({ diff: 'HEAD^..HEAD', warnNarrowScope: true }, config, '/tmp', 'Lint');
367
+ expect(result.source).toBe('explicit-range');
368
+ expect(findNarrowScopeWarning()).toBeUndefined();
369
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
370
+ });
371
+ it('does no branch-diff work and never warns when warnNarrowScope is unset (review path)', async () => {
372
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
373
+ await getDiffForReview({}, config, '/tmp', 'Review');
374
+ expect(findNarrowScopeWarning()).toBeUndefined();
375
+ expect(mockGetGitBranchDiff).not.toHaveBeenCalled();
376
+ });
377
+ it('a throw inside the warning computation leaves the result identical to the no-warning case', async () => {
378
+ mockGetGitDiff.mockReturnValue(diffFor('A.ts'));
379
+ mockGetGitBranchDiff.mockImplementation(() => {
380
+ // totem-context: throw inside a vitest mock simulating a git failure (detached HEAD / no base) to prove the advisory is non-fatal per the Tenet-4 silent-skip row; sentinel message is test-only
381
+ throw new Error('fatal: no merge base');
382
+ });
383
+ const withFailure = await getDiffForReview({ warnNarrowScope: true }, config, '/tmp', 'Lint');
384
+ mockGetGitBranchDiff.mockReset();
385
+ mockLog.warn.mockClear();
386
+ const baseline = await getDiffForReview({}, config, '/tmp', 'Lint');
387
+ expect(withFailure).toEqual(baseline);
388
+ expect(withFailure.source).toBe('uncommitted');
389
+ expect(findNarrowScopeWarning()).toBeUndefined();
390
+ });
391
+ });
186
392
  //# sourceMappingURL=git.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.test.js","sourceRoot":"","sources":["../src/git.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.test.js","sourceRoot":"","sources":["../src/git.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,+CAA+C;QAC/C,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uDAAuD;AAEvD,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;IACjC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAgC,cAAc,CAAC,CAAC;IACpF,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;QACzB,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;QACxB,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;KACtC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,sEAAsE;AACtE,qDAAqD;AACrD,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,GAAG,EAAE;QACH,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;KACb;CACF,CAAC,CAAC,CAAC;AAEJ,wDAAwD;AACxD,wEAAwE;AACxE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;AAC9C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACtD,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAClE,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAChE,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAErC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACvC,KAAK,EACL,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,EACjD,EAAE,GAAG,EAAE,MAAM,EAAE,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACrC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACvC,KAAK,EACL,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACnD,EAAE,GAAG,EAAE,MAAM,EAAE,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,YAAY,CAAC,mBAAmB,CAAC,kCAAkC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,YAAY,CAAC,mBAAmB,CAAC,mDAAmD,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,YAAY,CAAC,mBAAmB,CAAC,iCAAiC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,YAAY,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;YACnC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,YAAY,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,YAAY,CAAC,mBAAmB,CAAC,6CAA6C,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC3E,GAAG,EAAE,MAAM;YACX,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,MAAM,MAAM,GAAG,EAAE,cAAc,EAAE,EAAc,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,6DAA6D,CAAC;IAEjF,UAAU,CAAC,GAAG,EAAE;QACd,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3B,oBAAoB,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,mBAAmB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,mBAAmB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,mBAAmB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,YAAY,GAAG;YACnB,oDAAoD;YACpD,yBAAyB;YACzB,yBAAyB;YACzB,aAAa;YACb,UAAU;YACV,UAAU;YACV,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,mBAAmB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,EAAE,IAAI,EAAE,aAAa,EAAE,EACvB,EAAE,cAAc,EAAE,CAAC,mBAAmB,CAAC,EAAE,EACzC,MAAM,EACN,QAAQ,CACT,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACnC,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,4DAA4D;AAE5D,6DAA6D;AAC7D,SAAS,OAAO,CAAC,GAAG,KAAe;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjC,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAC1B,SAAS,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE;QACZ,aAAa;QACb,IAAI;KACL,CAAC,CAAC;IACH,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,MAAM,MAAM,GAAG,EAAE,cAAc,EAAE,EAAc,EAAE,CAAC;IAElD,UAAU,CAAC,GAAG,EAAE;QACd,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3B,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,uEAAuE;QACvE,gEAAgE;QAChE,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACzB,6EAA6E,CAC9E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEpE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAChG,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACzB,iFAAiF,CAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,MAAM,CACV,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CACzE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QAEnD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,MAAM,CACV,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAChF,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEtC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,CACV,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CACzE,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEtC,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,MAAM,CACV,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAChF,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEpC,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC5F,oBAAoB,CACrB,CAAC;QAEF,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACrF,mBAAmB,CACpB,CAAC;QAEF,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAC7C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,oBAAoB,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC3C,qMAAqM;YACrM,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACtF,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,4DAA4D;AAE5D,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,MAAM,MAAM,GAAG,EAAE,cAAc,EAAE,EAAc,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,sCAAsC,CAAC;IAE/D,SAAS,sBAAsB;QAC7B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,UAAU,CAAC,GAAG,EAAE;QACd,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAChC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3B,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEzF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,+DAA+D;QAC/D,MAAM,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACtB,wJAAwJ,CACzJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,cAAc,GAAG,EAAE,cAAc,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACjE,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE3E,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAElF,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,uEAAuE;QACvE,MAAM,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EACvC,MAAM,EACN,MAAM,EACN,MAAM,CACP,CAAC;QAEF,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1E,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACnC,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEzF,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,sEAAsE;QACtE,wBAAwB;QACxB,MAAM,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,EAC9C,MAAM,EACN,MAAM,EACN,MAAM,CACP,CAAC;QAEF,MAAM,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhD,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QACzG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,oBAAoB,CAAC,kBAAkB,CAAC,GAAG,EAAE;YAC3C,iMAAiM;YACjM,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE9F,oBAAoB,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEpE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,WAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -201,6 +201,8 @@ program
201
201
  .option('--out <path>', 'Write output to a file instead of stdout')
202
202
  .option('--format <format>', 'Output format: text (default), sarif, or json')
203
203
  .option('--staged', 'Lint only staged changes (default: all uncommitted)')
204
+ .option('--branch', 'Force the branch-vs-base diff scope the pre-push gate checks, regardless of working-tree state (mutually exclusive with --staged)')
205
+ .option('--base <ref>', 'Base branch for the push-gate scope (implies --branch; resolved as origin/<ref>...HEAD, else local <ref>)')
204
206
  .option('--pr-comment [number]', 'Post a summary comment on a PR (auto-infers number in GitHub Actions)')
205
207
  .option('--timeout-mode <mode>', 'Regex timeout mode: strict (default, fail CI on timeout) or lenient (skip timing-out rules with warning)')
206
208
  .option('--ast-parse-mode <mode>', 'AST parse failure mode: strict (default, fail CI on parse error) or lenient (skip all AST rules with warning). Env: TOTEM_LINT_AST_PARSE_MODE. Operator escape for mmnto-ai/totem#1786 gap.')
@@ -242,6 +244,8 @@ const reviewOptions = (cmd) => cmd
242
244
  .option('--fresh', 'Bypass cache and force a fresh LLM call (ignores cached responses)')
243
245
  .option('--staged', 'Review only staged changes (default: all uncommitted)')
244
246
  .option('--diff <ref-range>', 'Review an explicit git diff range (e.g. "HEAD^..HEAD" or "main...feature"). Bypasses the implicit working-tree → staged → branch-vs-base fallback.')
247
+ .option('--branch', 'Force the branch-vs-base diff scope the pre-push gate checks, regardless of working-tree state (mutually exclusive with --staged and --diff)')
248
+ .option('--base <ref>', 'Base branch for the push-gate scope (implies --branch; resolved as origin/<ref>...HEAD, else local <ref>)')
245
249
  .option('--deterministic', 'REMOVED — use `totem lint` instead', false)
246
250
  .option('--format <format>', 'REMOVED — use `totem lint --format` instead')
247
251
  .option('--mode <mode>', 'Review mode: standard (default, with Totem knowledge) or structural (context-blind paranoia)')
@@ -254,10 +258,12 @@ const reviewOptions = (cmd) => cmd
254
258
  .option('--no-history', 'Pattern-history overlay (effective only with --estimate). On by default; pass --no-history to skip the overlay even when .totem/recurrence-stats.json is present. No effect on the LLM review path.')
255
259
  .addHelpText('after', [
256
260
  '',
257
- 'Diff resolution (when --diff is omitted):',
261
+ 'Diff resolution (when --diff and --branch/--base are omitted):',
258
262
  ' 1. --staged → staged-only diff',
259
263
  ' 2. (default) → working-tree diff (all uncommitted)',
260
264
  ' 3. (fallback) → branch-vs-base diff when 1/2 produce nothing',
265
+ '--branch (or --base <ref>) forces scope 3 — the exact diff the pre-push',
266
+ 'gate checks — regardless of working-tree state (mmnto-ai/totem#2091).',
261
267
  `The chosen path is logged to stderr; large diffs (>${REVIEW_DIFF_TRUNCATION_THRESHOLD} chars)`,
262
268
  'trigger an explicit truncation warning before the LLM call.',
263
269
  '',
@@ -287,6 +293,8 @@ async function runReview(opts) {
287
293
  await lintCommand({
288
294
  format: opts.format ?? 'text',
289
295
  staged: opts.staged,
296
+ branch: opts.branch,
297
+ base: opts.base,
290
298
  out: opts.out,
291
299
  });
292
300
  return;