litmus-cli 1.4.53 → 1.4.55

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.
@@ -7,13 +7,14 @@ import * as readline from "readline/promises";
7
7
  import { stdin as input, stdout as output } from "process";
8
8
  import { readConfig, findProjectRoot, findNestedWorkspaces, getEffectiveDeadline } from "../lib/config.js";
9
9
  import { submitZip, ServerError, isRetryableUploadError } from "../lib/api.js";
10
- import { createSubmissionZip, UnreadableTreeError, SKIPPED_MANIFEST_PATH } from "../lib/zip.js";
11
- import { fatal, success, warn, info, setErrorContext, reportSuccess, reportEvent } from "../lib/errors.js";
10
+ import { createSubmissionZip, UnreadableTreeError } from "../lib/zip.js";
11
+ import { fatal, warn, info, setErrorContext, reportSuccess, reportEvent } from "../lib/errors.js";
12
12
  import { formatDeadlinePT } from "../lib/format-time.js";
13
13
  import { releaseAiTrackingForAssessment } from "../lib/ai-tracking.js";
14
14
  import { kernelNameFor, unregisterKernel } from "../lib/python-env.js";
15
15
  import { submitsWorkspace } from "../lib/submit-route.js";
16
16
  import { runPush } from "./push.js";
17
+ import { noteLines, cautionLines } from "../lib/notice.js";
17
18
  export async function runSubmit(opts) {
18
19
  // Step -1: inside a Codespaces v2 workspace this command submits the
19
20
  // workspace — exactly what `litmus push` does (ENG-2523). It must run FIRST:
@@ -42,8 +43,7 @@ export async function runSubmit(opts) {
42
43
  // exactly one initialized workspace. A CLIPPED walk may have missed
43
44
  // one, and a lone visible match could be the stale attempt — packaging
44
45
  // it silently would ship the wrong work, so that case stops below.
45
- console.log();
46
- console.log(chalk.yellow(`This folder is not an initialized workspace, but ./${path.relative(process.cwd(), scan.workspaces[0])} is — submitting that folder.`));
46
+ console.log(` Submitting ./${path.relative(process.cwd(), scan.workspaces[0])}, the assessment folder inside this one.`);
47
47
  process.chdir(scan.workspaces[0]);
48
48
  }
49
49
  else if (scan.workspaces.length > 0) {
@@ -61,26 +61,11 @@ export async function runSubmit(opts) {
61
61
  if (!config) {
62
62
  fatal("No Litmus assessment found in this directory.", "Run this command from inside your assessment folder, or run 'litmus init <token>' first.", { severity: "warning" });
63
63
  }
64
- // Step 2: Check deadline (assessment deadline and/or per-candidate time limit)
65
- const now = new Date();
64
+ // Step 2: The effective deadline (assessment deadline and/or per-candidate
65
+ // time limit). Checked once, after packaging (below): packaging a large folder
66
+ // takes time, and a check before it missed a deadline that passed during it
67
+ // (Greptile on #3161).
66
68
  const effectiveDeadline = getEffectiveDeadline(config);
67
- if (effectiveDeadline !== null) {
68
- // 5-minute grace window: covers auto-submit process spawn overhead and
69
- // gives candidates time to run `litmus submit` manually if auto-submit failed.
70
- if (now.getTime() > effectiveDeadline + 5 * 60000) {
71
- // ENG-1490: the server owns the deadline verdict — this used to be a
72
- // local fatal, which was wrong in BOTH directions. The local config can
73
- // be stale-early (deadline extended server-side and never synced down),
74
- // and even past a real cutoff the server may still accept the zip into
75
- // its recovery window (the auto-submit cron's empty-submission row).
76
- // Refusing here guaranteed the worst outcome: code that never even got
77
- // offered to the server. Warn and proceed; a genuine rejection comes
78
- // back below with the server's own message and dashboard handoff.
79
- warn(`The submission deadline on record here passed at ${formatDeadlinePT(new Date(effectiveDeadline))}.`);
80
- console.log(chalk.dim(" Submitting anyway — the server has the authoritative deadline and decides whether this is accepted."));
81
- console.log();
82
- }
83
- }
84
69
  // Step 3: Find the project root (where .litmus/config.json lives).
85
70
  // Step 0 already moved us inside the workspace when we started above it.
86
71
  const projectRoot = findProjectRoot() ?? process.cwd();
@@ -89,26 +74,53 @@ export async function runSubmit(opts) {
89
74
  let zipResult;
90
75
  try {
91
76
  zipResult = await createSubmissionZip(projectRoot);
92
- zipSpinner.succeed("Submission prepared");
93
77
  }
94
78
  catch (err) {
95
- zipSpinner.fail("Failed to create submission archive");
79
+ // `fatal`'s Error: line is the failure; a ✖ spinner line above it said it twice.
80
+ zipSpinner.stop();
96
81
  // ENG-1884: too much of the tree was unreadable to ship an honest archive.
97
82
  // Distinct from a generic archiver failure — the candidate can usually fix
98
83
  // this themselves, and naming the paths is the whole point.
99
84
  if (err instanceof UnreadableTreeError) {
100
- fatal(err.message, "Close any program holding these files open (editor, antivirus, file sync) and run 'litmus submit' again.", { internalDetail: describeSkipped(err.skipped, err.skipped.length), severity: "error" });
85
+ // ENG-2895: the names used to reach only our report. The candidate is the
86
+ // one who can close what is holding them.
87
+ const shown = err.skipped.slice(0, 5).map((e) => ` ${e.path}`);
88
+ if (err.skipped.length > 5)
89
+ shown.push(` ...and ${err.skipped.length - 5} more`);
90
+ fatal([err.message, ...shown].join("\n"), "Close any program holding these files open (editor, antivirus, file sync) and run 'litmus submit' again.", { internalDetail: describeSkipped(err.skipped, err.skipped.length), severity: "error" });
101
91
  }
102
92
  const msg = err instanceof Error ? err.message : String(err);
103
- fatal(msg, `Contact support@litmushiring.com for additional assistance.`);
93
+ fatal(msg, "Run litmus submit again. If it keeps failing, contact the company.");
104
94
  }
105
95
  const { zipPath, fileCount, uncompressedBytes, zipBytes, topDirs, skipped } = zipResult;
96
+ const zipSizeMb = (zipBytes / (1024 * 1024)).toFixed(1);
97
+ // ENG-2895: one line for what was packaged and how long is left, in place of a
98
+ // five-line summary. The deadline itself is already in `litmus status`. Counted
99
+ // to the EFFECTIVE deadline, the earlier of the assessment deadline and the time
100
+ // limit; the count is shown only for a timed session, where it is minutes
101
+ // rather than days. Read once, here, so the count and the warning agree.
102
+ const remainingMs = effectiveDeadline === null ? null : effectiveDeadline - Date.now();
103
+ const timeLeft = remainingMs !== null && remainingMs > 0 && config.timeLimit && config.startedAt
104
+ ? ` ${Math.floor(remainingMs / (1000 * 60))} min left.`
105
+ : "";
106
+ zipSpinner.succeed(`Packaged ${fileCount} files (${zipSizeMb} MB).${timeLeft}`);
107
+ if (effectiveDeadline !== null && remainingMs !== null && remainingMs <= 0) {
108
+ // Warned from the moment it passes, including the 5-minute grace the server
109
+ // allows after it. ENG-1490: the server owns the deadline verdict — this used
110
+ // to be a local fatal, which was wrong in BOTH directions. The local config
111
+ // can be stale-early (deadline extended server-side and never synced down),
112
+ // and even past a real cutoff the server may still accept the zip into its
113
+ // recovery window (the auto-submit cron's empty-submission row). Refusing
114
+ // here guaranteed the worst outcome: code that never even got offered to the
115
+ // server. Warn and proceed; a genuine rejection comes back below with the
116
+ // server's own message and dashboard handoff.
117
+ warn(`Your deadline (${formatDeadlinePT(new Date(effectiveDeadline))}) has passed. Submitting anyway; Litmus decides whether it counts.`);
118
+ }
106
119
  // ENG-1884: the archive was completed WITHOUT these paths. A silent skip is
107
120
  // its own bug — the candidate needs to know their submission is incomplete
108
121
  // while they can still do something about it, and the grader gets the same
109
122
  // list from SKIPPED_MANIFEST_PATH inside the zip.
110
123
  if (skipped.length > 0) {
111
- console.log();
112
124
  warn(`${skipped.length} item(s) could not be read and are NOT in your submission:`);
113
125
  for (const entry of skipped.slice(0, 10)) {
114
126
  const kind = entry.kind === "directory" ? " (directory — its contents are missing too)" : "";
@@ -117,10 +129,13 @@ export async function runSubmit(opts) {
117
129
  if (skipped.length > 10) {
118
130
  console.log(chalk.dim(` ...and ${skipped.length - 10} more`));
119
131
  }
120
- console.log(chalk.dim(" Usually a file locked by another program (an editor, antivirus, or the OS itself)."));
121
- console.log(chalk.dim(` The full list ships with your submission as ${SKIPPED_MANIFEST_PATH}.`));
122
- console.log(chalk.dim(" Everything else was packaged normally — if none of these are your work, submit as-is."));
123
- console.log(chalk.dim(" Otherwise cancel, close whatever is holding them, and run 'litmus submit' again."));
132
+ // With --yes there is no question to answer n to, and the upload goes ahead
133
+ // (Greptile on #3161), so the only route left is the company.
134
+ const skippedAdvice = opts.yes
135
+ ? "If any of these are your work, contact the company after this submits."
136
+ : "If any of these are your work, answer n, close the program using them, and run litmus submit again.";
137
+ for (const line of noteLines(skippedAdvice))
138
+ console.log(line);
124
139
  // Log-only severity on purpose: the submission SUCCEEDED, so this is not a
125
140
  // platform-health page (that stays for the hard-fail above, which is the
126
141
  // case where a candidate is actually blocked). It stays searchable server-side.
@@ -131,7 +146,6 @@ export async function runSubmit(opts) {
131
146
  if (zipBytes > ZIP_WARN_BYTES) {
132
147
  const zipMb = (zipBytes / (1024 * 1024)).toFixed(1);
133
148
  const uncompMb = (uncompressedBytes / (1024 * 1024)).toFixed(1);
134
- console.log();
135
149
  warn(`Submission is ${zipMb} MB (${fileCount} files, ${uncompMb} MB uncompressed).`);
136
150
  console.log(chalk.dim(" Largest directories:"));
137
151
  for (const { dir, bytes } of topDirs.slice(0, 5)) {
@@ -139,61 +153,25 @@ export async function runSubmit(opts) {
139
153
  }
140
154
  console.log(chalk.dim(" If this looks wrong, cancel and remove large files before submitting."));
141
155
  }
142
- // Step 5: Show what's being submitted
143
- const zipSizeMb = (zipBytes / (1024 * 1024)).toFixed(1);
156
+ // Step 5: Warn about a missing activity log
144
157
  const folderName = path.basename(projectRoot);
145
- const hasActivityLog = existsSync(path.join(projectRoot, ".litmus", "activity.jsonl"));
146
- console.log();
147
- console.log(chalk.bold(` Submitting: ${config.assessmentName}`));
148
- info(` Upload size: ${zipSizeMb} MB (${fileCount} files)`);
149
- if (hasActivityLog) {
150
- info(` Tracking log included`);
151
- }
152
- else {
153
- warn(`No activity tracking log found (.litmus/activity.jsonl missing).`);
154
- console.log(chalk.dim(" The background tracker may not have run. Activity metrics won't be available to reviewers."));
155
- console.log(chalk.dim(" You can still submit — your code and git history will be evaluated."));
156
- console.log();
158
+ if (!existsSync(path.join(projectRoot, ".litmus", "activity.jsonl"))) {
159
+ warn("No activity was recorded in this folder. Run litmus doctor to restart tracking, or submit anyway; your code and git history are still reviewed.");
157
160
  }
158
- // Mirror status.ts: show both the long completion-window deadline and the
159
- // per-session time-limit when both apply. Showing only `config.deadline`
160
- // misled candidates with a short time-limit on a long-window assessment
161
- // (Raymond's case — his email screenshot showed the 6/5 deadline despite
162
- // the binding cutoff being 75 min after start). The CLI's own pre-submit
163
- // guard above uses `effectiveDeadline` (the min), so the candidate is
164
- // still blocked client-side past the time-limit; this just makes the
165
- // displayed bounds match status / init.
166
- if (config.deadline) {
167
- info(` Deadline: ${formatDeadlinePT(new Date(config.deadline))}`);
168
- }
169
- if (config.timeLimit && config.startedAt) {
170
- const timeLimitDeadlineMs = new Date(config.startedAt).getTime() + config.timeLimit * 60 * 1000;
171
- const remainingMs = timeLimitDeadlineMs - Date.now();
172
- if (remainingMs > 0) {
173
- const remMins = Math.floor(remainingMs / (1000 * 60));
174
- info(` Time limit: ${config.timeLimit} min (${remMins} min remaining)`);
175
- }
176
- else {
177
- warn(`Time limit: EXCEEDED (${config.timeLimit} min)`);
178
- }
179
- }
180
- console.log();
181
161
  // Step 6: Confirm (unless --yes flag)
182
162
  if (!opts.yes) {
183
- const promptText = "Confirm submission? ";
163
+ const promptText = `Submit ${config.assessmentName}? `;
184
164
  const rl = readline.createInterface({ input, output });
185
165
  let answer;
186
166
  try {
187
- answer = await rl.question(chalk.bold(` ${promptText}`) + chalk.dim("[Y/n] "));
167
+ answer = await rl.question(` ${promptText}` + chalk.dim("[Y/n] "));
188
168
  }
189
169
  finally {
190
170
  rl.close();
191
171
  }
192
172
  const confirmed = answer.trim().toLowerCase();
193
173
  if (confirmed !== "" && confirmed !== "y" && confirmed !== "yes") {
194
- console.log();
195
- console.log(chalk.dim(" Submission cancelled. Your work is saved."));
196
- console.log();
174
+ info("Submission cancelled. Your work is saved.");
197
175
  try {
198
176
  unlinkSync(zipPath);
199
177
  }
@@ -201,7 +179,6 @@ export async function runSubmit(opts) {
201
179
  process.exit(0);
202
180
  }
203
181
  }
204
- console.log();
205
182
  // Step 7: Upload with progress
206
183
  const uploadSpinner = ora("Uploading submission...").start();
207
184
  // ENG-1904: submitZip retries an upload whose connection failed before the
@@ -211,7 +188,7 @@ export async function runSubmit(opts) {
211
188
  let attemptNote = "";
212
189
  const onRetry = (retry) => {
213
190
  attemptNote = ` (attempt ${retry.failedAttempt + 1} of ${retry.maxAttempts})`;
214
- uploadSpinner.text = `Connection to Litmus failed. Retrying the upload${attemptNote}...`;
191
+ uploadSpinner.text = `Couldn't reach Litmus. Retrying upload (${retry.failedAttempt + 1} of ${retry.maxAttempts})...`;
215
192
  // Reported whatever the retry goes on to do, because a retry that works
216
193
  // otherwise hides the failure from everyone. "warning" is the reporter's
217
194
  // tier for a self-heal: archived server-side, never posted.
@@ -226,9 +203,8 @@ export async function runSubmit(opts) {
226
203
  const totalMb = (total / (1024 * 1024)).toFixed(1);
227
204
  uploadSpinner.text = `Uploading submission... ${uploadedMb}/${totalMb} MB (${pct}%)${attemptNote}`;
228
205
  }, onRetry);
229
- uploadSpinner.succeed("Submission received");
206
+ uploadSpinner.succeed("Submitted");
230
207
  reportSuccess("submit", `Submission ${result.submissionId} received (${zipSizeMb} MB, ${fileCount} files)`);
231
- console.log();
232
208
  if (result.dashboardUrl) {
233
209
  // ENG-719: walkthrough modes (VIDEO / LIVE_AGENT / WRITTEN) aren't done at
234
210
  // submit — the candidate still has to record their walkthrough. The CLI
@@ -239,21 +215,26 @@ export async function runSubmit(opts) {
239
215
  // walkthrough" for VIDEO/LIVE_AGENT, "complete your written reflection"
240
216
  // for WRITTEN. Print it verbatim instead of hardcoding the walkthrough
241
217
  // wording — WRITTEN candidates would otherwise see the wrong action.
242
- success(result.message || "Code submitted — one step left.");
243
- console.log();
244
- console.log(` ${chalk.cyan(result.dashboardUrl)}`);
218
+ for (const line of noteLines(result.message || "One step left: finish on your dashboard."))
219
+ console.log(line);
245
220
  }
246
221
  else {
247
- success("You're done!");
248
- console.log();
249
- console.log(chalk.dim(" The company will review your work and be in touch."));
222
+ for (const line of noteLines("You're done. The company will review your work and be in touch."))
223
+ console.log(line);
250
224
  }
251
- if (result.submissionId) {
252
- console.log(chalk.dim(` Submission ID: ${result.submissionId}`));
225
+ // Step 8: Delete assessment folder after successful submission. Before the
226
+ // dashboard link (ENG-2895): the link is where the candidate goes next, so
227
+ // it is the last line on screen.
228
+ // The upload landed, so a cleanup error must not reach the catch below and
229
+ // print "Submission failed" in place of the dashboard link (Greptile on #3161).
230
+ try {
231
+ await deleteAssessmentFolder(projectRoot, config.token, folderName);
232
+ }
233
+ catch (cleanupErr) {
234
+ reportEvent("warning", "Post-submit cleanup failed", cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr), "submit_cleanup_failed");
253
235
  }
254
- console.log();
255
- // Step 8: Delete assessment folder after successful submission
256
- await deleteAssessmentFolder(projectRoot, config.token, folderName);
236
+ if (result.dashboardUrl)
237
+ console.log(` ${chalk.cyan(result.dashboardUrl)}`);
257
238
  }
258
239
  catch (err) {
259
240
  const rawError = err instanceof Error ? err.message : String(err);
@@ -270,12 +251,11 @@ export async function runSubmit(opts) {
270
251
  // our submit), not an upload failure. Showing "Upload failed" then a
271
252
  // positive handoff message confuses the candidate.
272
253
  if (err instanceof ServerError && err.dashboardUrl) {
273
- uploadSpinner.warn("One step left");
274
- console.log();
275
- console.log(chalk.dim(` ${rawError}`));
276
- console.log();
254
+ // The server's sentence already says "one step left"; it is the ⚠ line.
255
+ uploadSpinner.stop();
256
+ for (const line of cautionLines(rawError))
257
+ console.log(line);
277
258
  console.log(` ${chalk.cyan(err.dashboardUrl)}`);
278
- console.log();
279
259
  // Candidate is moving to the browser to record their walkthrough — the
280
260
  // terminal-side tracker has nothing left to observe. Signal it so it
281
261
  // doesn't keep heartbeating until the candidate manually kills the
@@ -310,10 +290,10 @@ export async function runSubmit(opts) {
310
290
  // tell them congratulations either.
311
291
  if (errorCode === "Already submitted") {
312
292
  uploadSpinner.succeed("Already submitted");
313
- console.log();
314
- console.log(chalk.dim(` ${rawError}`));
315
- console.log();
316
- info(`Your local copy is kept at ${projectRoot} in case anything needs recovering.`);
293
+ for (const line of noteLines(rawError))
294
+ console.log(line);
295
+ for (const line of noteLines(`Your local copy is kept at ${projectRoot} in case anything needs recovering.`))
296
+ console.log(line);
317
297
  stopTracker(projectRoot, config.token);
318
298
  releaseAiTrackingForAssessment(projectRoot);
319
299
  // A health event, so a rejected-then-retired submit is visible
@@ -349,14 +329,18 @@ export async function runSubmit(opts) {
349
329
  ? rawError
350
330
  : connectionFailed
351
331
  ? "Submission failed: the connection to Litmus failed on every attempt."
352
- : "Submission failed. Please try again or submit manually through the candidate portal.";
332
+ : "Submission failed. Run litmus submit again, or submit from your assessment page.";
333
+ const timedOut = !isTerminalCode && rawError.includes("Upload timed out");
353
334
  const candidateHint = connectionFailed
354
- ? "Your work is still on this machine. Check your internet connection and run 'litmus submit' again. A submission is still accepted up to 5 minutes after your time runs out."
355
- : undefined;
335
+ ? "Your work is still on this machine. Check your internet connection and run litmus submit again. A submission is still accepted up to 5 minutes after your time runs out."
336
+ : timedOut
337
+ ? "Your work is still here. Check your connection and run litmus submit again."
338
+ : undefined;
356
339
  // Not a soft handoff and not an already-submitted no-op — this is a real
357
340
  // upload failure (terminal-codes path or unknown error). Finalize the
358
341
  // spinner state now before printing the diagnostics.
359
- uploadSpinner.fail("Upload failed");
342
+ // `fatal`'s Error: line is the failure; a ✖ spinner line above it said it twice.
343
+ uploadSpinner.stop();
360
344
  // For terminal server-side codes (assessment is over), signal the tracker
361
345
  // to stop — it has nothing left to observe and would otherwise heartbeat
362
346
  // until the candidate manually kills the session. Keep the folder so the
@@ -376,7 +360,6 @@ export async function runSubmit(opts) {
376
360
  const zipDiag = `ZIP: ${zipSizeMb} MB (${fileCount} files, ${(uncompressedBytes / (1024 * 1024)).toFixed(1)} MB uncompressed)\nTop dirs: ${topDirs.slice(0, 5).map(d => `${d.dir} (${(d.bytes / (1024 * 1024)).toFixed(1)} MB)`).join(", ")}`;
377
361
  const serverDetail = err instanceof ServerError ? `${err.message}\n${err.detail}` : (isKnownError ? undefined : rawError);
378
362
  const internalDetail = serverDetail ? `${serverDetail}\n\n${zipDiag}` : zipDiag;
379
- console.log();
380
363
  fatal(candidateMessage, candidateHint, { internalDetail, severity: isKnownError ? "warning" : "error" });
381
364
  }
382
365
  finally {
@@ -482,9 +465,8 @@ async function deleteAssessmentFolder(projectRoot, token, folderName) {
482
465
  unregisterKernel(projectRoot, kernelName);
483
466
  try {
484
467
  await rm(projectRoot, { recursive: true, force: true });
485
- console.log(chalk.dim(` Assessment folder deleted: ${folderName}`));
486
- console.log(chalk.dim(` You may need to \`cd\` to another directory.`));
487
- console.log();
468
+ for (const line of noteLines(`Deleted the assessment folder ${folderName}. cd to another folder to keep using this terminal.`))
469
+ console.log(line);
488
470
  }
489
471
  catch {
490
472
  warn(`Could not delete assessment folder. You can manually remove: ${projectRoot}`);
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/lib/session-end.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAS5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD"}
1
+ {"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../src/lib/session-end.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAM5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD"}
@@ -1,4 +1,5 @@
1
1
  import chalk from "chalk";
2
+ import { noteLines } from "./notice.js";
2
3
  /**
3
4
  * What happens to a NATIVE editor window when the session ends — ENG-2154.
4
5
  *
@@ -93,14 +94,9 @@ import chalk from "chalk";
93
94
  * candidate is about to see.
94
95
  */
95
96
  export function editorEndingLines() {
96
- return [
97
- "",
98
- " If VS Code or Cursor is open on this workspace, that window stays open on your",
99
- " machine and will report a lost connection. That is not a failed submission — it is",
100
- " this session ending, and nothing is left to save.",
101
- ` ${chalk.dim("Close the window whenever you are ready; we do not close it for you.")}`,
102
- "",
103
- ];
97
+ // ENG-2895: one notice, wrapped like the rest of the CLI's.
98
+ return noteLines("If VS Code or Cursor is open on this workspace, it will report a lost connection. " +
99
+ "That's expected, not a failed submission. Close it when you're ready.");
104
100
  }
105
101
  /**
106
102
  * The same fact, said before it happens, on the native-editor path of
@@ -1 +1 @@
1
- {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/lib/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,EAAE;QACF,kFAAkF;QAClF,sFAAsF;QACtF,qDAAqD;QACrD,KAAK,KAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,EAAE;QACxF,EAAE;KACH,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAA;AAC3G,CAAC"}
1
+ {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../src/lib/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB;IAC/B,4DAA4D;IAC5D,OAAO,SAAS,CACd,oFAAoF;QAClF,uEAAuE,CAC1E,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAA;AAC3G,CAAC"}
@@ -24,6 +24,25 @@ export interface TrackerDiagnostics {
24
24
  healthy: boolean;
25
25
  }
26
26
  export declare function trackerDiagnostics(projectDir: string, assessmentId?: string): TrackerDiagnostics;
27
+ /**
28
+ * ENG-2950: the end of the watcher's stderr log, for the report about a watcher
29
+ * that did not start.
30
+ *
31
+ * startTracker sends the watcher's stderr to the shadow log (ENG-1453), so a
32
+ * watcher that dies at boot leaves its crash there, and before this the report
33
+ * carried only "timeout" or "died": two Windows no-starts in a row reached us
34
+ * with no cause. The home directory is replaced with `~`: on Windows it carries
35
+ * the account name, and the rest of the path says the same thing without it.
36
+ * Null when there is nothing to send.
37
+ */
38
+ export declare function trackerLogTail(projectDir: string, maxLines?: number, maxChars?: number): string | null;
39
+ /**
40
+ * ENG-2950: the watcher is running AND finished starting: healthy, and it stamped
41
+ * `tracker.ready` with its own pid. `isTrackerHealthy` alone passes a watcher that
42
+ * wedged at boot, because startTracker stamps the nonce at spawn (Greptile on #3174),
43
+ * so it cannot be what tells a candidate their work is being recorded.
44
+ */
45
+ export declare function isTrackerRecording(projectDir: string): boolean;
27
46
  /** How long a freshly spawned watcher gets to stamp `tracker.ready` before its boot counts as failed. */
28
47
  export declare const WATCHER_BOOT_TIMEOUT_MS = 6000;
29
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/lib/tracker.ts"],"names":[],"mappings":"AA+FA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,oFAAoF;IACpF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,kBAAkB,CA4ChG;AAED,yGAAyG;AACzG,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAmB5C,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAW7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxG;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmGrD"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/lib/tracker.ts"],"names":[],"mappings":"AAgGA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,oFAAoF;IACpF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,kBAAkB,CA4ChG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,SAAK,EAAE,QAAQ,SAAO,GAAG,MAAM,GAAG,IAAI,CAoChG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,yGAAyG;AACzG,eAAO,MAAM,uBAAuB,OAAQ,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAAS,CAAA;AAmB5C,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAW7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAYxG;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmGrD"}
@@ -1,5 +1,6 @@
1
1
  import { spawn } from "child_process";
2
- import { existsSync, mkdirSync, openSync, readFileSync, writeFileSync, statSync, unlinkSync, closeSync } from "fs";
2
+ import { existsSync, mkdirSync, openSync, readFileSync, readSync, fstatSync, writeFileSync, statSync, unlinkSync, closeSync } from "fs";
3
+ import os from "os";
3
4
  import path from "path";
4
5
  import { fileURLToPath } from "url";
5
6
  import { refreshInstalledLoggers } from "./ai-tracking.js";
@@ -152,6 +153,74 @@ export function trackerDiagnostics(projectDir, assessmentId) {
152
153
  healthy: pidAlive && nonceAgeMs !== null && nonceAgeMs > -1000 && nonceAgeMs <= NONCE_MAX_AGE_MS,
153
154
  };
154
155
  }
156
+ /**
157
+ * ENG-2950: the end of the watcher's stderr log, for the report about a watcher
158
+ * that did not start.
159
+ *
160
+ * startTracker sends the watcher's stderr to the shadow log (ENG-1453), so a
161
+ * watcher that dies at boot leaves its crash there, and before this the report
162
+ * carried only "timeout" or "died": two Windows no-starts in a row reached us
163
+ * with no cause. The home directory is replaced with `~`: on Windows it carries
164
+ * the account name, and the rest of the path says the same thing without it.
165
+ * Null when there is nothing to send.
166
+ */
167
+ export function trackerLogTail(projectDir, maxLines = 20, maxChars = 2000) {
168
+ const litmusDir = path.join(projectDir, ".litmus");
169
+ let assessmentId = null;
170
+ try {
171
+ assessmentId = JSON.parse(readFileSync(path.join(litmusDir, "config.json"), "utf8")).assessmentId ?? null;
172
+ }
173
+ catch { /* legacy path below */ }
174
+ // The same resolution startTracker writes with.
175
+ const logPath = (assessmentId ? shadowLogPath(assessmentId) : null) ?? path.join(litmusDir, "tracker.log");
176
+ // Only the end of the file: the watcher appends to this log for the life of the
177
+ // assessment, and a report about a failed start must not read all of it (Greptile
178
+ // on #3174). 64 KB holds 20 lines of any stack trace.
179
+ let raw;
180
+ let fd = null;
181
+ try {
182
+ fd = openSync(logPath, "r");
183
+ const size = fstatSync(fd).size;
184
+ const length = Math.min(size, 64 * 1024);
185
+ const buf = Buffer.alloc(length);
186
+ readSync(fd, buf, 0, length, size - length);
187
+ raw = buf.toString("utf8");
188
+ // A read that started mid-line keeps only whole lines.
189
+ if (length < size)
190
+ raw = raw.slice(raw.indexOf("\n") + 1);
191
+ }
192
+ catch {
193
+ return null;
194
+ }
195
+ finally {
196
+ if (fd !== null)
197
+ try {
198
+ closeSync(fd);
199
+ }
200
+ catch { /* nothing to do */ }
201
+ }
202
+ const lines = raw.split(/\r?\n/).filter((l) => l.trim() !== "").slice(-maxLines);
203
+ if (lines.length === 0)
204
+ return null;
205
+ const home = os.homedir();
206
+ let tail = lines.join("\n");
207
+ if (home) {
208
+ // Both separators: Node prints Windows paths either way.
209
+ for (const form of new Set([home, home.replace(/\\/g, "/")]))
210
+ tail = tail.split(form).join("~");
211
+ }
212
+ return tail.length > maxChars ? tail.slice(-maxChars) : tail;
213
+ }
214
+ /**
215
+ * ENG-2950: the watcher is running AND finished starting: healthy, and it stamped
216
+ * `tracker.ready` with its own pid. `isTrackerHealthy` alone passes a watcher that
217
+ * wedged at boot, because startTracker stamps the nonce at spawn (Greptile on #3174),
218
+ * so it cannot be what tells a candidate their work is being recorded.
219
+ */
220
+ export function isTrackerRecording(projectDir) {
221
+ const diag = trackerDiagnostics(projectDir);
222
+ return diag.healthy && diag.pid !== null && readyStampNames(projectDir, diag.pid);
223
+ }
155
224
  /** How long a freshly spawned watcher gets to stamp `tracker.ready` before its boot counts as failed. */
156
225
  export const WATCHER_BOOT_TIMEOUT_MS = 6000;
157
226
  /**