terminalhire 0.42.42 → 0.42.43

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.
@@ -12500,6 +12500,12 @@ function linkTitle(title, url) {
12500
12500
 
12501
12501
  // bin/jpi-bounties.js
12502
12502
  init_api_base();
12503
+
12504
+ // bin/review-mode-copy.js
12505
+ var POSTER_REVIEWED = "poster";
12506
+ var CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
12507
+
12508
+ // bin/jpi-bounties.js
12503
12509
  init_founder_pin();
12504
12510
  var TERMINALHIRE_DIR7 = process.env.TERMINALHIRE_DIR || join13(homedir10(), ".terminalhire");
12505
12511
  var INDEX_CACHE_FILE2 = join13(TERMINALHIRE_DIR7, "index-cache.json");
@@ -12614,6 +12620,9 @@ ${i + 1}. ${linkTitle(job.title, job.url)} [${ref}]`);
12614
12620
  );
12615
12621
  const marker = projectMarkerLine(b);
12616
12622
  if (marker) console.log(` ${marker}`);
12623
+ if (b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED) {
12624
+ console.log(` ${CLAIMANT_NOTICE}`);
12625
+ }
12617
12626
  if (reason) console.log(` ${reason}`);
12618
12627
  if (continuityNote) console.log(` ${continuityNote}`);
12619
12628
  if (b.publicSummary) {
@@ -40197,6 +40197,13 @@ async function syncFounderVerdicts({
40197
40197
 
40198
40198
  // bin/jpi-claim.js
40199
40199
  init_founder_note_sync();
40200
+
40201
+ // bin/review-mode-copy.js
40202
+ var POSTER_REVIEWED = "poster";
40203
+ var CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
40204
+ var HISTORY_LINE = "Submitted for the poster's review.";
40205
+
40206
+ // bin/jpi-claim.js
40200
40207
  var TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join31(homedir14(), ".terminalhire");
40201
40208
  var INDEX_CACHE_FILE2 = join31(TERMINALHIRE_DIR11, "index-cache.json");
40202
40209
  var CLAIM_PUSH_MARKER = join31(TERMINALHIRE_DIR11, "claim-push.json");
@@ -40666,9 +40673,15 @@ function extractClaimableFields(job) {
40666
40673
  // poster saw. Null when the index carries none.
40667
40674
  runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
40668
40675
  // TERM-1308. Present only when the index row carries them; no key otherwise.
40669
- ...b.bountySource === "founder" ? baselineFields(b) : {}
40676
+ ...b.bountySource === "founder" ? baselineFields(b) : {},
40677
+ // TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
40678
+ // other value is dropped rather than carried, the same as a malformed baseline field.
40679
+ ...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
40670
40680
  };
40671
40681
  }
40682
+ function reviewModeLine(b) {
40683
+ return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
40684
+ }
40672
40685
  function parseGitHubUrl(url) {
40673
40686
  const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
40674
40687
  if (!m) return null;
@@ -41285,7 +41298,7 @@ async function resolveBounty(arg) {
41285
41298
  if (freshPool) job = findByShortRefInPool(freshPool, arg);
41286
41299
  }
41287
41300
  if (job) {
41288
- let testBudgetMinutes, baselineStatus, baselineSha;
41301
+ let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
41289
41302
  ({
41290
41303
  bountyId,
41291
41304
  title,
@@ -41299,12 +41312,15 @@ async function resolveBounty(arg) {
41299
41312
  runRequirements,
41300
41313
  testBudgetMinutes,
41301
41314
  baselineStatus,
41302
- baselineSha
41315
+ baselineSha,
41316
+ reviewMode
41303
41317
  } = extractClaimableFields(job));
41304
41318
  baseline = {
41305
41319
  ...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
41306
41320
  ...baselineStatus === void 0 ? {} : { baselineStatus },
41307
- ...baselineSha === void 0 ? {} : { baselineSha }
41321
+ ...baselineSha === void 0 ? {} : { baselineSha },
41322
+ // TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
41323
+ ...reviewMode === void 0 ? {} : { reviewMode }
41308
41324
  };
41309
41325
  indexNativeId = bountyId;
41310
41326
  } else {
@@ -42089,6 +42105,8 @@ async function cmdPreview(arg, { json } = {}) {
42089
42105
  contested: isContested(b),
42090
42106
  // TERM-1308. The posting's test budget and baseline, only when the index carried them.
42091
42107
  ...baselineFields(b),
42108
+ // TERM-1344. Only for a poster-reviewed posting; absent means tests.
42109
+ ...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
42092
42110
  // Absent on a founder posting — see the scan above. A consumer must read
42093
42111
  // "no policy key" as "no policy step exists here", never as "clean".
42094
42112
  ...policy ? {
@@ -42119,8 +42137,8 @@ async function cmdPreview(arg, { json } = {}) {
42119
42137
  console.log(fmtOpenPRsLine(b));
42120
42138
  const previewContested = fmtContestedWarning(b);
42121
42139
  if (previewContested) console.log(previewContested);
42122
- const previewBaseline = baselineLine(b);
42123
- if (previewBaseline) console.log(` tests: ${previewBaseline}`);
42140
+ const previewTests = reviewModeLine(b) ?? baselineLine(b);
42141
+ if (previewTests) console.log(` tests: ${previewTests}`);
42124
42142
  if (policy) printPolicySection(policy);
42125
42143
  if (process.stdout.isTTY) {
42126
42144
  try {
@@ -43393,7 +43411,8 @@ function renderRunView(run2, message2, extra = {}) {
43393
43411
  const rateLimitCap = extra.rateLimitCap ?? run2.rateLimitCap ?? 5;
43394
43412
  const rateLimitCount = extra.rateLimitCount ?? run2.rateLimitCount;
43395
43413
  if (claimState) {
43396
- lines.push(` state: ${terminalSafeInline(claimState)}`);
43414
+ const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
43415
+ lines.push(` state: ${stateText}`);
43397
43416
  }
43398
43417
  if (unverifiedCause) {
43399
43418
  lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
@@ -43452,7 +43471,8 @@ function renderClaimHistory(attempts, timeline) {
43452
43471
  for (const a of runs) {
43453
43472
  const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
43454
43473
  const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
43455
- const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : a.status === "no-ci" ? "no checks ran" : "checks running";
43474
+ const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
43475
+ const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
43456
43476
  lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
43457
43477
  }
43458
43478
  for (const e of told) {
@@ -45944,6 +45964,7 @@ export {
45944
45964
  resolveBounty,
45945
45965
  resolveDeliveryDir,
45946
45966
  resolveSubmitWorktree,
45967
+ reviewModeLine,
45947
45968
  reviseRecoveryCommand,
45948
45969
  revokeFailureAction,
45949
45970
  run,
@@ -15565,6 +15565,17 @@ var init_payout_split = __esm({
15565
15565
  }
15566
15566
  });
15567
15567
 
15568
+ // bin/review-mode-copy.js
15569
+ var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
15570
+ var init_review_mode_copy = __esm({
15571
+ "bin/review-mode-copy.js"() {
15572
+ "use strict";
15573
+ POSTER_REVIEWED = "poster";
15574
+ CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
15575
+ HISTORY_LINE = "Submitted for the poster's review.";
15576
+ }
15577
+ });
15578
+
15568
15579
  // src/repo-experience.ts
15569
15580
  var repo_experience_exports = {};
15570
15581
  __export(repo_experience_exports, {
@@ -16451,6 +16462,9 @@ ${i + 1}. ${linkTitle(job.title, job.url)} [${ref}]`);
16451
16462
  );
16452
16463
  const marker = projectMarkerLine(b);
16453
16464
  if (marker) console.log(` ${marker}`);
16465
+ if (b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED) {
16466
+ console.log(` ${CLAIMANT_NOTICE}`);
16467
+ }
16454
16468
  if (reason) console.log(` ${reason}`);
16455
16469
  if (continuityNote) console.log(` ${continuityNote}`);
16456
16470
  if (b.publicSummary) {
@@ -16706,6 +16720,7 @@ var init_jpi_bounties = __esm({
16706
16720
  init_index_revalidate();
16707
16721
  init_sanitize();
16708
16722
  init_api_base();
16723
+ init_review_mode_copy();
16709
16724
  init_founder_pin();
16710
16725
  TERMINALHIRE_DIR12 = process.env.TERMINALHIRE_DIR || join26(homedir20(), ".terminalhire");
16711
16726
  INDEX_CACHE_FILE3 = join26(TERMINALHIRE_DIR12, "index-cache.json");
@@ -45527,6 +45542,7 @@ __export(jpi_claim_exports, {
45527
45542
  resolveBounty: () => resolveBounty,
45528
45543
  resolveDeliveryDir: () => resolveDeliveryDir,
45529
45544
  resolveSubmitWorktree: () => resolveSubmitWorktree,
45545
+ reviewModeLine: () => reviewModeLine,
45530
45546
  reviseRecoveryCommand: () => reviseRecoveryCommand,
45531
45547
  revokeFailureAction: () => revokeFailureAction,
45532
45548
  run: () => run7,
@@ -45994,9 +46010,15 @@ function extractClaimableFields(job) {
45994
46010
  // poster saw. Null when the index carries none.
45995
46011
  runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
45996
46012
  // TERM-1308. Present only when the index row carries them; no key otherwise.
45997
- ...b.bountySource === "founder" ? baselineFields(b) : {}
46013
+ ...b.bountySource === "founder" ? baselineFields(b) : {},
46014
+ // TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
46015
+ // other value is dropped rather than carried, the same as a malformed baseline field.
46016
+ ...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
45998
46017
  };
45999
46018
  }
46019
+ function reviewModeLine(b) {
46020
+ return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
46021
+ }
46000
46022
  function parseGitHubUrl(url) {
46001
46023
  const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
46002
46024
  if (!m) return null;
@@ -46602,7 +46624,7 @@ async function resolveBounty(arg) {
46602
46624
  if (freshPool) job = findByShortRefInPool(freshPool, arg);
46603
46625
  }
46604
46626
  if (job) {
46605
- let testBudgetMinutes, baselineStatus, baselineSha;
46627
+ let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
46606
46628
  ({
46607
46629
  bountyId,
46608
46630
  title,
@@ -46616,12 +46638,15 @@ async function resolveBounty(arg) {
46616
46638
  runRequirements,
46617
46639
  testBudgetMinutes,
46618
46640
  baselineStatus,
46619
- baselineSha
46641
+ baselineSha,
46642
+ reviewMode
46620
46643
  } = extractClaimableFields(job));
46621
46644
  baseline = {
46622
46645
  ...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
46623
46646
  ...baselineStatus === void 0 ? {} : { baselineStatus },
46624
- ...baselineSha === void 0 ? {} : { baselineSha }
46647
+ ...baselineSha === void 0 ? {} : { baselineSha },
46648
+ // TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
46649
+ ...reviewMode === void 0 ? {} : { reviewMode }
46625
46650
  };
46626
46651
  indexNativeId = bountyId;
46627
46652
  } else {
@@ -47381,6 +47406,8 @@ async function cmdPreview(arg, { json } = {}) {
47381
47406
  contested: isContested(b),
47382
47407
  // TERM-1308. The posting's test budget and baseline, only when the index carried them.
47383
47408
  ...baselineFields(b),
47409
+ // TERM-1344. Only for a poster-reviewed posting; absent means tests.
47410
+ ...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
47384
47411
  // Absent on a founder posting — see the scan above. A consumer must read
47385
47412
  // "no policy key" as "no policy step exists here", never as "clean".
47386
47413
  ...policy ? {
@@ -47411,8 +47438,8 @@ async function cmdPreview(arg, { json } = {}) {
47411
47438
  console.log(fmtOpenPRsLine(b));
47412
47439
  const previewContested = fmtContestedWarning(b);
47413
47440
  if (previewContested) console.log(previewContested);
47414
- const previewBaseline = baselineLine(b);
47415
- if (previewBaseline) console.log(` tests: ${previewBaseline}`);
47441
+ const previewTests = reviewModeLine(b) ?? baselineLine(b);
47442
+ if (previewTests) console.log(` tests: ${previewTests}`);
47416
47443
  if (policy) printPolicySection(policy);
47417
47444
  if (process.stdout.isTTY) {
47418
47445
  try {
@@ -48668,7 +48695,8 @@ function renderRunView(run32, message2, extra = {}) {
48668
48695
  const rateLimitCap = extra.rateLimitCap ?? run32.rateLimitCap ?? 5;
48669
48696
  const rateLimitCount = extra.rateLimitCount ?? run32.rateLimitCount;
48670
48697
  if (claimState) {
48671
- lines.push(` state: ${terminalSafeInline(claimState)}`);
48698
+ const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
48699
+ lines.push(` state: ${stateText}`);
48672
48700
  }
48673
48701
  if (unverifiedCause) {
48674
48702
  lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
@@ -48714,7 +48742,8 @@ function renderClaimHistory(attempts, timeline) {
48714
48742
  for (const a of runs) {
48715
48743
  const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
48716
48744
  const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
48717
- const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : a.status === "no-ci" ? "no checks ran" : "checks running";
48745
+ const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
48746
+ const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
48718
48747
  lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
48719
48748
  }
48720
48749
  for (const e of told) {
@@ -51093,6 +51122,7 @@ var init_jpi_claim = __esm({
51093
51122
  init_claim_push_bg();
51094
51123
  init_founder_verdict_sync();
51095
51124
  init_founder_note_sync();
51125
+ init_review_mode_copy();
51096
51126
  TERMINALHIRE_DIR17 = process.env.TERMINALHIRE_DIR || join46(homedir26(), ".terminalhire");
51097
51127
  INDEX_CACHE_FILE5 = join46(TERMINALHIRE_DIR17, "index-cache.json");
51098
51128
  CLAIM_PUSH_MARKER = join46(TERMINALHIRE_DIR17, "claim-push.json");
@@ -12169,6 +12169,17 @@ var init_founder_note_sync = __esm({
12169
12169
  }
12170
12170
  });
12171
12171
 
12172
+ // bin/review-mode-copy.js
12173
+ var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
12174
+ var init_review_mode_copy = __esm({
12175
+ "bin/review-mode-copy.js"() {
12176
+ "use strict";
12177
+ POSTER_REVIEWED = "poster";
12178
+ CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
12179
+ HISTORY_LINE = "Submitted for the poster's review.";
12180
+ }
12181
+ });
12182
+
12172
12183
  // ../../packages/core/src/policy-audit.ts
12173
12184
  function fence(nonce, body) {
12174
12185
  return `<<<UNTRUSTED-${nonce}
@@ -40293,6 +40304,7 @@ __export(jpi_claim_exports, {
40293
40304
  resolveBounty: () => resolveBounty,
40294
40305
  resolveDeliveryDir: () => resolveDeliveryDir,
40295
40306
  resolveSubmitWorktree: () => resolveSubmitWorktree,
40307
+ reviewModeLine: () => reviewModeLine,
40296
40308
  reviseRecoveryCommand: () => reviseRecoveryCommand,
40297
40309
  revokeFailureAction: () => revokeFailureAction,
40298
40310
  run: () => run,
@@ -40760,9 +40772,15 @@ function extractClaimableFields(job) {
40760
40772
  // poster saw. Null when the index carries none.
40761
40773
  runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
40762
40774
  // TERM-1308. Present only when the index row carries them; no key otherwise.
40763
- ...b.bountySource === "founder" ? baselineFields(b) : {}
40775
+ ...b.bountySource === "founder" ? baselineFields(b) : {},
40776
+ // TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
40777
+ // other value is dropped rather than carried, the same as a malformed baseline field.
40778
+ ...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
40764
40779
  };
40765
40780
  }
40781
+ function reviewModeLine(b) {
40782
+ return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
40783
+ }
40766
40784
  function parseGitHubUrl(url) {
40767
40785
  const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
40768
40786
  if (!m) return null;
@@ -41368,7 +41386,7 @@ async function resolveBounty(arg) {
41368
41386
  if (freshPool) job = findByShortRefInPool(freshPool, arg);
41369
41387
  }
41370
41388
  if (job) {
41371
- let testBudgetMinutes, baselineStatus, baselineSha;
41389
+ let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
41372
41390
  ({
41373
41391
  bountyId,
41374
41392
  title,
@@ -41382,12 +41400,15 @@ async function resolveBounty(arg) {
41382
41400
  runRequirements,
41383
41401
  testBudgetMinutes,
41384
41402
  baselineStatus,
41385
- baselineSha
41403
+ baselineSha,
41404
+ reviewMode
41386
41405
  } = extractClaimableFields(job));
41387
41406
  baseline = {
41388
41407
  ...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
41389
41408
  ...baselineStatus === void 0 ? {} : { baselineStatus },
41390
- ...baselineSha === void 0 ? {} : { baselineSha }
41409
+ ...baselineSha === void 0 ? {} : { baselineSha },
41410
+ // TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
41411
+ ...reviewMode === void 0 ? {} : { reviewMode }
41391
41412
  };
41392
41413
  indexNativeId = bountyId;
41393
41414
  } else {
@@ -42147,6 +42168,8 @@ async function cmdPreview(arg, { json } = {}) {
42147
42168
  contested: isContested(b),
42148
42169
  // TERM-1308. The posting's test budget and baseline, only when the index carried them.
42149
42170
  ...baselineFields(b),
42171
+ // TERM-1344. Only for a poster-reviewed posting; absent means tests.
42172
+ ...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
42150
42173
  // Absent on a founder posting — see the scan above. A consumer must read
42151
42174
  // "no policy key" as "no policy step exists here", never as "clean".
42152
42175
  ...policy ? {
@@ -42177,8 +42200,8 @@ async function cmdPreview(arg, { json } = {}) {
42177
42200
  console.log(fmtOpenPRsLine(b));
42178
42201
  const previewContested = fmtContestedWarning(b);
42179
42202
  if (previewContested) console.log(previewContested);
42180
- const previewBaseline = baselineLine(b);
42181
- if (previewBaseline) console.log(` tests: ${previewBaseline}`);
42203
+ const previewTests = reviewModeLine(b) ?? baselineLine(b);
42204
+ if (previewTests) console.log(` tests: ${previewTests}`);
42182
42205
  if (policy) printPolicySection(policy);
42183
42206
  if (process.stdout.isTTY) {
42184
42207
  try {
@@ -43434,7 +43457,8 @@ function renderRunView(run3, message2, extra = {}) {
43434
43457
  const rateLimitCap = extra.rateLimitCap ?? run3.rateLimitCap ?? 5;
43435
43458
  const rateLimitCount = extra.rateLimitCount ?? run3.rateLimitCount;
43436
43459
  if (claimState) {
43437
- lines.push(` state: ${terminalSafeInline(claimState)}`);
43460
+ const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
43461
+ lines.push(` state: ${stateText}`);
43438
43462
  }
43439
43463
  if (unverifiedCause) {
43440
43464
  lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
@@ -43480,7 +43504,8 @@ function renderClaimHistory(attempts, timeline) {
43480
43504
  for (const a of runs) {
43481
43505
  const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
43482
43506
  const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
43483
- const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : a.status === "no-ci" ? "no checks ran" : "checks running";
43507
+ const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
43508
+ const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
43484
43509
  lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
43485
43510
  }
43486
43511
  for (const e of told) {
@@ -45859,6 +45884,7 @@ var init_jpi_claim = __esm({
45859
45884
  init_claim_push_bg();
45860
45885
  init_founder_verdict_sync();
45861
45886
  init_founder_note_sync();
45887
+ init_review_mode_copy();
45862
45888
  TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join32(homedir15(), ".terminalhire");
45863
45889
  INDEX_CACHE_FILE2 = join32(TERMINALHIRE_DIR11, "index-cache.json");
45864
45890
  CLAIM_PUSH_MARKER = join32(TERMINALHIRE_DIR11, "claim-push.json");
@@ -25353,6 +25353,17 @@ var init_founder_note_sync = __esm({
25353
25353
  }
25354
25354
  });
25355
25355
 
25356
+ // bin/review-mode-copy.js
25357
+ var POSTER_REVIEWED, CLAIMANT_NOTICE, HISTORY_LINE;
25358
+ var init_review_mode_copy = __esm({
25359
+ "bin/review-mode-copy.js"() {
25360
+ "use strict";
25361
+ POSTER_REVIEWED = "poster";
25362
+ CLAIMANT_NOTICE = "The poster reviews this work by hand. We don't run tests on it.";
25363
+ HISTORY_LINE = "Submitted for the poster's review.";
25364
+ }
25365
+ });
25366
+
25356
25367
  // ../../packages/core/src/policy-audit.ts
25357
25368
  function fence(nonce, body) {
25358
25369
  return `<<<UNTRUSTED-${nonce}
@@ -40286,6 +40297,7 @@ __export(jpi_claim_exports, {
40286
40297
  resolveBounty: () => resolveBounty,
40287
40298
  resolveDeliveryDir: () => resolveDeliveryDir,
40288
40299
  resolveSubmitWorktree: () => resolveSubmitWorktree,
40300
+ reviewModeLine: () => reviewModeLine,
40289
40301
  reviseRecoveryCommand: () => reviseRecoveryCommand,
40290
40302
  revokeFailureAction: () => revokeFailureAction,
40291
40303
  run: () => run,
@@ -40753,9 +40765,15 @@ function extractClaimableFields(job) {
40753
40765
  // poster saw. Null when the index carries none.
40754
40766
  runRequirements: b.runRequirements && typeof b.runRequirements === "object" ? b.runRequirements : null,
40755
40767
  // TERM-1308. Present only when the index row carries them; no key otherwise.
40756
- ...b.bountySource === "founder" ? baselineFields(b) : {}
40768
+ ...b.bountySource === "founder" ? baselineFields(b) : {},
40769
+ // TERM-1344. The index carries `reviewMode` only for a poster-reviewed posting; any
40770
+ // other value is dropped rather than carried, the same as a malformed baseline field.
40771
+ ...b.bountySource === "founder" && b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {}
40757
40772
  };
40758
40773
  }
40774
+ function reviewModeLine(b) {
40775
+ return b?.reviewMode === POSTER_REVIEWED ? CLAIMANT_NOTICE : null;
40776
+ }
40759
40777
  function parseGitHubUrl(url) {
40760
40778
  const m = String(url ?? "").match(/github\.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/);
40761
40779
  if (!m) return null;
@@ -41361,7 +41379,7 @@ async function resolveBounty(arg) {
41361
41379
  if (freshPool) job = findByShortRefInPool(freshPool, arg);
41362
41380
  }
41363
41381
  if (job) {
41364
- let testBudgetMinutes, baselineStatus, baselineSha;
41382
+ let testBudgetMinutes, baselineStatus, baselineSha, reviewMode;
41365
41383
  ({
41366
41384
  bountyId,
41367
41385
  title,
@@ -41375,12 +41393,15 @@ async function resolveBounty(arg) {
41375
41393
  runRequirements,
41376
41394
  testBudgetMinutes,
41377
41395
  baselineStatus,
41378
- baselineSha
41396
+ baselineSha,
41397
+ reviewMode
41379
41398
  } = extractClaimableFields(job));
41380
41399
  baseline = {
41381
41400
  ...testBudgetMinutes === void 0 ? {} : { testBudgetMinutes },
41382
41401
  ...baselineStatus === void 0 ? {} : { baselineStatus },
41383
- ...baselineSha === void 0 ? {} : { baselineSha }
41402
+ ...baselineSha === void 0 ? {} : { baselineSha },
41403
+ // TERM-1344. Rides with the baseline fields: index-only, and no key when absent.
41404
+ ...reviewMode === void 0 ? {} : { reviewMode }
41384
41405
  };
41385
41406
  indexNativeId = bountyId;
41386
41407
  } else {
@@ -42140,6 +42161,8 @@ async function cmdPreview(arg, { json } = {}) {
42140
42161
  contested: isContested(b),
42141
42162
  // TERM-1308. The posting's test budget and baseline, only when the index carried them.
42142
42163
  ...baselineFields(b),
42164
+ // TERM-1344. Only for a poster-reviewed posting; absent means tests.
42165
+ ...b.reviewMode === POSTER_REVIEWED ? { reviewMode: POSTER_REVIEWED } : {},
42143
42166
  // Absent on a founder posting — see the scan above. A consumer must read
42144
42167
  // "no policy key" as "no policy step exists here", never as "clean".
42145
42168
  ...policy ? {
@@ -42170,8 +42193,8 @@ async function cmdPreview(arg, { json } = {}) {
42170
42193
  console.log(fmtOpenPRsLine(b));
42171
42194
  const previewContested = fmtContestedWarning(b);
42172
42195
  if (previewContested) console.log(previewContested);
42173
- const previewBaseline = baselineLine(b);
42174
- if (previewBaseline) console.log(` tests: ${previewBaseline}`);
42196
+ const previewTests = reviewModeLine(b) ?? baselineLine(b);
42197
+ if (previewTests) console.log(` tests: ${previewTests}`);
42175
42198
  if (policy) printPolicySection(policy);
42176
42199
  if (process.stdout.isTTY) {
42177
42200
  try {
@@ -43427,7 +43450,8 @@ function renderRunView(run3, message2, extra = {}) {
43427
43450
  const rateLimitCap = extra.rateLimitCap ?? run3.rateLimitCap ?? 5;
43428
43451
  const rateLimitCount = extra.rateLimitCount ?? run3.rateLimitCount;
43429
43452
  if (claimState) {
43430
- lines.push(` state: ${terminalSafeInline(claimState)}`);
43453
+ const stateText = claimState === "poster-review" ? HISTORY_LINE : terminalSafeInline(claimState);
43454
+ lines.push(` state: ${stateText}`);
43431
43455
  }
43432
43456
  if (unverifiedCause) {
43433
43457
  lines.push(` cause: ${terminalSafeInline(unverifiedCause)}`);
@@ -43473,7 +43497,8 @@ function renderClaimHistory(attempts, timeline) {
43473
43497
  for (const a of runs) {
43474
43498
  const sha = a.commitSha ? String(a.commitSha).slice(0, 10) : "";
43475
43499
  const jobs = Array.isArray(a.failingJobs) && a.failingJobs.length > 0 ? ` \u2014 ${a.failingJobs.map(terminalSafeInline).join(", ")}` : "";
43476
- const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : a.status === "no-ci" ? "no checks ran" : "checks running";
43500
+ const note = typeof a.note === "string" ? terminalSafeInline(a.note).trim() : "";
43501
+ const outcome = a.conclusion ? `checks ${terminalSafeInline(a.conclusion)}${jobs}` : note !== "" ? note : a.status === "no-ci" ? "no checks ran" : "checks running";
43477
43502
  lines.push(` attempt ${a.attemptNumber} ${sha} ${outcome} ${shortWhen(a.at)}`);
43478
43503
  }
43479
43504
  for (const e of told) {
@@ -45852,6 +45877,7 @@ var init_jpi_claim = __esm({
45852
45877
  init_claim_push_bg();
45853
45878
  init_founder_verdict_sync();
45854
45879
  init_founder_note_sync();
45880
+ init_review_mode_copy();
45855
45881
  TERMINALHIRE_DIR11 = process.env.TERMINALHIRE_DIR || join33(homedir15(), ".terminalhire");
45856
45882
  INDEX_CACHE_FILE2 = join33(TERMINALHIRE_DIR11, "index-cache.json");
45857
45883
  CLAIM_PUSH_MARKER = join33(TERMINALHIRE_DIR11, "claim-push.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "terminalhire",
3
- "version": "0.42.42",
3
+ "version": "0.42.43",
4
4
  "description": "Developer jobs and paid bounties, matched in the terminal — ambient matches in the Claude Code spinner. Claim a scoped bounty and get paid when the poster accepts it.",
5
5
  "repository": {
6
6
  "type": "git",