limn-review 0.1.173 → 0.1.174

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.
@@ -349,13 +349,19 @@ async function startAutoItem(a) {
349
349
  const detect = preflightFor(ctx);
350
350
  const nowMs = Date.now();
351
351
  const wantsPair = (await readAutoReviewProvidersForPr(ctx, accountId, prId)) === 'both';
352
- const providers = automaticRunProviders({
352
+ // ⚠ A PAIR drops a locked half EVEN ON A PRESS while the other half can run: that half would
353
+ // fail at once (2026-11-03: six pressed Codex halves over the limit, nothing reviewed). Only when
354
+ // every provider is locked does a press run anyway (the reader's choice).
355
+ const pick = (lockedOk) => automaticRunProviders({
353
356
  defaultProvider: activeProviderId(),
354
357
  pair: wantsPair,
355
358
  order: PAIR_ORDER,
356
359
  ready: (p) => detect(p, 'review').status === 'ok',
357
- locked: (p) => !a.pressed && isLockedOut(p, nowMs),
360
+ locked: (p) => !lockedOk && isLockedOut(p, nowMs),
358
361
  });
362
+ let providers = pick(a.pressed === true && !wantsPair);
363
+ if (providers.length === 0 && a.pressed)
364
+ providers = pick(true);
359
365
  if (providers.length === 0) {
360
366
  ctx.log.info(`auto claude review pr ${prId}: skipped — no provider outside its usage limit`);
361
367
  return;
@@ -43,13 +43,17 @@ export function releasedLine(login, by) {
43
43
  // A FREE line: a success starting "Cleared by " (a Clear, a release of ours or of a teammate's expired
44
44
  // line), a success "free to claim" or "Released:" (a 2026-10-28 build's wording), or a pending "free to
45
45
  // claim" (older Limn versions).
46
+ // A teammate's review KEPT IN LIMN put nothing on GitHub: the team got nothing from it, so it holds
47
+ // nothing (2026-11-03 — robin-dunn's kept-in-Limn Claude reviews held six PRs, the pair fell back to a
48
+ // Codex over its usage limit, and nobody got a review).
49
+ const KEPT_PHRASE = ' reviewed · kept in Limn';
46
50
  const isFreeLine = (l) => {
47
51
  const d = l.description ?? '';
48
52
  if (l.state === 'pending')
49
53
  return d.includes(FREE_PHRASE);
50
54
  if (l.state !== 'success')
51
55
  return false;
52
- return d.includes(FREE_PHRASE) || d.startsWith(CLEARED_PREFIX) || d.startsWith(RELEASED_PREFIX);
56
+ return d.includes(FREE_PHRASE) || d.startsWith(CLEARED_PREFIX) || d.startsWith(RELEASED_PREFIX) || d.endsWith(KEPT_PHRASE);
53
57
  };
54
58
  const settles = (l) => l.state !== 'pending' || isFreeLine(l);
55
59
  const sameLogin = (a, b) => a != null && b != null && a.toLowerCase() === b.toLowerCase();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "limn-review",
3
- "version": "0.1.173",
3
+ "version": "0.1.174",
4
4
  "description": "Dashboard for tracking your team's GitHub PR activity across repos. Runs on your machine with your gh login.",
5
5
  "type": "module",
6
6
  "author": "Alex Wakeman",