litmus-cli 1.4.53 → 1.4.54

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.
@@ -1 +1 @@
1
- {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../../src/commands/pause.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C3D"}
1
+ {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../../src/commands/pause.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C3D"}
@@ -1,7 +1,8 @@
1
1
  import ora from "ora";
2
2
  import { fetchInitMetadata, pauseWorkspace, ServerError, hintForError } from "../lib/api.js";
3
3
  import { resolveApiBase, resolveBackendBase } from "../lib/api-base.js";
4
- import { fatal, success, info, warn, setErrorContext } from "../lib/errors.js";
4
+ import { fatal, setErrorContext } from "../lib/errors.js";
5
+ import { cautionLines, doneLines, noteLines } from "../lib/notice.js";
5
6
  /**
6
7
  * `litmus pause <token>` - stop working for now, on purpose (ENG-2061).
7
8
  *
@@ -49,10 +50,11 @@ export async function runPause(token) {
49
50
  try {
50
51
  meta = await fetchInitMetadata(apiBase, token);
51
52
  setErrorContext({ candidateEmail: meta.candidateEmail, assessmentName: meta.assessmentName });
52
- spinner.succeed(`Connected - ${meta.assessmentName}`);
53
+ // ENG-2895: the outcome line is what matters; a "Connected" line above it is noise.
54
+ spinner.stop();
53
55
  }
54
56
  catch (err) {
55
- spinner.fail("Connection failed");
57
+ spinner.stop();
56
58
  const msg = err instanceof Error ? err.message : String(err);
57
59
  const severity = err instanceof ServerError && err.statusCode && err.statusCode < 500
58
60
  ? "warning"
@@ -70,24 +72,25 @@ export async function runPause(token) {
70
72
  }
71
73
  catch (err) {
72
74
  // Stop the spinner BEFORE reporting: `fatal` throws, so anything after the
73
- // report never runs and would leave it spinning under the message.
74
- const status = err instanceof ServerError ? err.statusCode : undefined;
75
- // A 409 is a state, not a fault - the workspace is still there and still
76
- // fine. A red frame above a message that says nothing went wrong reads as a
77
- // contradiction, so it stops amber, the way `litmus push` does for its own
78
- // "nothing to submit yet".
79
- if (status === 409)
80
- s.warn("Nothing to pause");
81
- else
82
- s.fail("Could not pause");
75
+ // report never runs and would leave it spinning under the message. Stopped
76
+ // without a line of its own (ENG-2895): the report below is the one line.
77
+ s.stop();
83
78
  handlePauseError(err);
84
79
  return;
85
80
  }
86
- s.succeed(result.already_paused ? "Already paused" : "Paused");
87
81
  // The server's sentence, verbatim: it is the one place the promise about the
88
82
  // candidate's work is written, and both this command and the portal card
89
- // print it.
90
- success(result.detail);
83
+ // print it. The already-paused one opens by saying so, so it is the ✔ line.
84
+ if (result.already_paused) {
85
+ s.stop();
86
+ for (const line of doneLines(result.detail))
87
+ console.log(line);
88
+ }
89
+ else {
90
+ s.succeed("Paused.");
91
+ for (const line of noteLines(result.detail))
92
+ console.log(line);
93
+ }
91
94
  }
92
95
  /**
93
96
  * Report a pause that did not happen.
@@ -103,16 +106,16 @@ function handlePauseError(err) {
103
106
  const status = err instanceof ServerError ? err.statusCode : undefined;
104
107
  const message = err instanceof Error ? err.message : String(err);
105
108
  if (status === 403 && err instanceof ServerError && err.errorCode === "assessment_locked") {
106
- fatal("This assessment is closed right now - the hiring team has locked it.", "Your work is saved. You will be able to connect again as soon as they reopen it.", { severity: "warning" });
109
+ fatal("The hiring team has locked this assessment.", "Your work is saved. You can connect again when they reopen it.", { severity: "warning" });
107
110
  return;
108
111
  }
109
112
  if (status === 409) {
110
113
  // The server's own sentence names which of the two it is: still starting up,
111
114
  // or nothing running to pause. Both are states, not faults.
112
- warn(message);
113
- info("Nothing changed - your workspace is exactly as you left it.");
115
+ for (const line of cautionLines(`${message} Nothing changed.`))
116
+ console.log(line);
114
117
  return;
115
118
  }
116
- fatal(message, "Your work is safe and nothing was lost. Close your editor and it will pause on its own shortly, or run `litmus pause` again in a moment.", { severity: status && status < 500 ? "warning" : "error" });
119
+ fatal(message, "Your work is safe and nothing was lost. Close your editor and it pauses on its own, or run the same litmus pause command again in a moment.", { severity: status && status < 500 ? "warning" : "error" });
117
120
  }
118
121
  //# sourceMappingURL=pause.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pause.js","sourceRoot":"","sources":["../../src/commands/pause.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pause.js","sourceRoot":"","sources":["../../src/commands/pause.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHlG"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHlG"}
@@ -5,8 +5,9 @@ import ora from "ora";
5
5
  import { fetchInitMetadata, submitWorkspace, ServerError, hintForError } from "../lib/api.js";
6
6
  import { resolveApiBase, resolveBackendBase } from "../lib/api-base.js";
7
7
  import { fatal, success, warn, info, setErrorContext } from "../lib/errors.js";
8
- import { resolveAssessmentToken, isWorkspaceInstall, WORKSPACE_TOKEN_ENV } from "../lib/workspace-token.js";
8
+ import { resolveAssessmentToken, isWorkspaceInstall } from "../lib/workspace-token.js";
9
9
  import { editorEndingLines } from "../lib/session-end.js";
10
+ import { noteLines } from "../lib/notice.js";
10
11
  /**
11
12
  * `litmus push <token>` — submit the v2 codespace workspace for grading, from the
12
13
  * same terminal the candidate connected from. Mirrors the portal Submit button:
@@ -33,7 +34,7 @@ export async function runPush(tokenArg, opts) {
33
34
  // simply a missing argument. Both keep the paste route open, because it works
34
35
  // either way and this must never be a dead end mid-assessment.
35
36
  fatal(isWorkspaceInstall(import.meta.url)
36
- ? `This workspace did not provide an assessment token (${WORKSPACE_TOKEN_ENV} is not set).`
37
+ ? "Litmus couldn't find your token in this workspace."
37
38
  : "No assessment token given.", "Run `litmus push <token>` with the token from your assessment page, or submit from that page directly.", { severity: "warning" });
38
39
  return;
39
40
  }
@@ -46,10 +47,12 @@ export async function runPush(tokenArg, opts) {
46
47
  try {
47
48
  meta = await fetchInitMetadata(apiBase, token);
48
49
  setErrorContext({ candidateEmail: meta.candidateEmail, assessmentName: meta.assessmentName });
49
- spinner.succeed(`Connected — ${meta.assessmentName}`);
50
+ // ENG-2895: the assessment name is in the confirm prompt below, so a ✔ line here
51
+ // would say it twice.
52
+ spinner.stop();
50
53
  }
51
54
  catch (err) {
52
- spinner.fail("Connection failed");
55
+ spinner.stop();
53
56
  const msg = err instanceof Error ? err.message : String(err);
54
57
  const severity = err instanceof ServerError && err.statusCode && err.statusCode < 500 ? "warning" : "error";
55
58
  fatal(msg, hintForError(err), { severity });
@@ -62,13 +65,18 @@ export async function runPush(tokenArg, opts) {
62
65
  const backendUrl = resolveBackendBase(meta.backendUrl, apiBase, import.meta.url);
63
66
  // 2. Confirm — submit is final: it tears the workspace down and starts grading.
64
67
  if (!opts.yes) {
65
- warn(meta.workTrial === true ? TRIAL_COPY.confirm : "Submitting finalizes your assessment: it tears down your workspace and starts grading. You can't keep working after this.");
68
+ if (meta.workTrial === true)
69
+ for (const line of noteLines(TRIAL_COPY.confirm))
70
+ console.log(line);
71
+ const question = meta.workTrial === true
72
+ ? `Submit ${meta.assessmentName} for review? `
73
+ : `Submit ${meta.assessmentName} for grading? You can't keep working after this. `;
66
74
  const rl = readline.createInterface({ input, output });
67
- const answer = await rl.question(chalk.bold(" Submit for grading? ") + chalk.dim("[y/N] "));
75
+ const answer = await rl.question(` ${question}` + chalk.dim("[y/N] "));
68
76
  rl.close();
69
77
  const c = answer.trim().toLowerCase();
70
78
  if (c !== "y" && c !== "yes") {
71
- info("Cancelled — nothing was submitted.");
79
+ info("Cancelled. Nothing was submitted.");
72
80
  return;
73
81
  }
74
82
  }
@@ -81,19 +89,19 @@ export async function runPush(tokenArg, opts) {
81
89
  return;
82
90
  }
83
91
  if (result.already_submitted) {
84
- s.succeed(meta.workTrial === true ? "Trial ended" : "Already submitted");
85
- info(meta.workTrial === true ? TRIAL_COPY.ended : "This assessment was already submitted.");
92
+ s.succeed(meta.workTrial === true ? "Trial ended" : "Already submitted.");
93
+ if (meta.workTrial === true)
94
+ info(TRIAL_COPY.ended);
86
95
  reportSessionEnded();
87
96
  return;
88
97
  }
89
- s.succeed("Submitted");
90
- success("Your workspace was captured and grading has started.");
98
+ s.succeed("Submitted. Grading has started.");
91
99
  // ENG-2154 — before the next-step link, not after it: the link is where the
92
100
  // candidate goes NEXT, so it has to be the last thing on screen. What their
93
101
  // editor window is doing is about the thing they just left.
94
102
  reportSessionEnded();
95
103
  if (result.dashboardUrl) {
96
- console.log(chalk.dim(` Next steps: ${result.dashboardUrl}`));
104
+ console.log(` Next: ${result.dashboardUrl}`);
97
105
  }
98
106
  }
99
107
  catch (err) {
@@ -119,14 +127,16 @@ export async function runPush(tokenArg, opts) {
119
127
  reportTrialRefusal(s, err.message);
120
128
  return;
121
129
  }
122
- s.warn("Nothing to submit yet");
130
+ // The backend's sentence says it once; a ⚠ spinner line above it said it twice.
131
+ s.stop();
123
132
  await handleEmptyWorkspace(backendUrl, token, err.message, opts, meta.workTrial === false);
124
133
  return;
125
134
  }
126
- s.fail("Submit failed");
135
+ // `fatal`'s Error: line is the failure; a ✖ spinner line above it said it twice.
136
+ s.stop();
127
137
  const code = err instanceof ServerError ? err.errorCode : undefined;
128
138
  if (code === "assessment_closed") {
129
- fatal("This assessment is closed — the completion window has passed.", "Contact the company if you need an extension.", { severity: "warning" });
139
+ fatal("This assessment is closed. Its deadline has passed.", "Contact the company if you need an extension.", { severity: "warning" });
130
140
  return;
131
141
  }
132
142
  failSubmit(err);
@@ -177,7 +187,7 @@ function reportTrialRefusal(s, reason) {
177
187
  /** The shared "submit did not go through" exit. `fatal` returns `never`. */
178
188
  function failSubmit(err) {
179
189
  const msg = err instanceof Error ? err.message : String(err);
180
- fatal(msg, "Try `litmus push` again in a moment, or submit from your assessment page.", {
190
+ fatal(msg, "Run the same litmus push command again in a moment, or submit from your assessment page.", {
181
191
  severity: err instanceof ServerError && err.statusCode && err.statusCode < 500 ? "warning" : "error",
182
192
  });
183
193
  }
@@ -204,16 +214,16 @@ knownTakeHome) {
204
214
  if (!knownTakeHome) {
205
215
  // True for both flows: without --yes a take-home is asked to confirm an
206
216
  // empty submission, and a trial is shown the backend's refusal.
207
- fatal("Nothing was submitted.", "Run `litmus push` again without --yes to see your options, or submit from your assessment page.", { severity: "warning" });
217
+ fatal("Nothing was submitted.", "Run litmus push again without --yes to see your options, or submit from your assessment page.", { severity: "warning" });
208
218
  }
209
- fatal("Not submitted: there is nothing in the workspace to grade.", "Move your work into the workspace and run `litmus push` again. If there really is nothing to submit, run it without --yes so you can confirm that.", { severity: "warning" });
219
+ fatal("Nothing was submitted.", "Move your work into the workspace and run litmus push again. If there is nothing to submit, run it without --yes to confirm that.", { severity: "warning" });
210
220
  }
211
221
  const rl = readline.createInterface({ input, output });
212
222
  const answer = await rl.question(chalk.bold(" Submit anyway, graded as no submission? ") + chalk.dim("[y/N] "));
213
223
  rl.close();
214
224
  const c = answer.trim().toLowerCase();
215
225
  if (c !== "y" && c !== "yes") {
216
- info("Cancelled — nothing was submitted. Your workspace is still open.");
226
+ info("Cancelled. Nothing was submitted. Your workspace is still open.");
217
227
  return;
218
228
  }
219
229
  const s = ora("Submitting...").start();
@@ -228,10 +238,10 @@ knownTakeHome) {
228
238
  // (to /vm/submit or the time-limit cron): a REAL submission landed and
229
239
  // nothing was recorded blank, so the empty warning would be a lie.
230
240
  if (result.already_submitted) {
231
- info("Your submission had already landed — nothing was recorded as blank.");
241
+ info("Your submission had already landed. Nothing was recorded as blank.");
232
242
  }
233
243
  else {
234
- warn("Recorded as no submission — no files were captured. Contact the company if that isn't right.");
244
+ warn("Recorded as no submission. Contact the company if that isn't right.");
235
245
  }
236
246
  // Both branches are terminal: the CAS is spent and the workspace is gone
237
247
  // either way, so the window is disconnected either way (ENG-2154).
@@ -245,7 +255,7 @@ knownTakeHome) {
245
255
  reportTrialRefusal(s, err.message);
246
256
  return;
247
257
  }
248
- s.fail("Submit failed");
258
+ s.stop();
249
259
  failSubmit(err);
250
260
  }
251
261
  }
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAiBA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoatE"}
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAkBA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsYtE"}
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litmus-cli",
3
- "version": "1.4.53",
3
+ "version": "1.4.54",
4
4
  "description": "CLI tool for Litmus engineering assessments",
5
5
  "license": "MIT",
6
6
  "author": "elenazhao",