claude-obsidian: don't count skipped empty sessions as still queued

The first full drain reported "105 written, 0 failed, 9 still queued" when
the 9 were empty sessions already recorded as skipped -- nothing was left.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KF322NzozeaFjpgWvh4F4g
This commit is contained in:
2026-09-17 16:14:45 -04:00
co-authored by Claude Opus 5
parent 376ec03428
commit db3a3e6e82
2 changed files with 8 additions and 8 deletions
+8 -8
View File
@@ -611,8 +611,8 @@ SKIPPED = "(empty, skipped)"
EX_TEMPFAIL = 75 # "try again later" -- systemd logs it, the next timer run retries EX_TEMPFAIL = 75 # "try again later" -- systemd logs it, the next timer run retries
def run_jobs(cfg, work, fn) -> tuple[int, int, str | None]: def run_jobs(cfg, work, fn) -> tuple[int, int, str | None, int]:
ok = failed = 0 ok = failed = skipped = 0
quota = None quota = None
stop = threading.Event() # Future.cancel() cannot stop a job a worker already picked up stop = threading.Event() # Future.cancel() cannot stop a job a worker already picked up
@@ -632,7 +632,7 @@ def run_jobs(cfg, work, fn) -> tuple[int, int, str | None]:
try: try:
result = fut.result() result = fut.result()
if result == SKIPPED: if result == SKIPPED:
print(f"skip {label} (no conversation content)", flush=True) print(f"skip {label} (no conversation content)", flush=True); skipped += 1
else: else:
print(f"ok {label} -> {result}", flush=True); ok += 1 print(f"ok {label} -> {result}", flush=True); ok += 1
except (QuotaExhausted, BudgetExhausted) as e: except (QuotaExhausted, BudgetExhausted) as e:
@@ -644,7 +644,7 @@ def run_jobs(cfg, work, fn) -> tuple[int, int, str | None]:
pass pass
except Exception as e: # keep going; next run retries except Exception as e: # keep going; next run retries
print(f"FAIL {label}: {e}", file=sys.stderr, flush=True); failed += 1 print(f"FAIL {label}: {e}", file=sys.stderr, flush=True); failed += 1
return ok, failed, quota return ok, failed, quota, skipped
def finish(ok: int, failed: int, quota: str | None, dry_run, remaining: int, ledger: "Ledger | None" = None) -> None: def finish(ok: int, failed: int, quota: str | None, dry_run, remaining: int, ledger: "Ledger | None" = None) -> None:
@@ -738,10 +738,10 @@ def cmd_sync(cfg, args) -> None:
src = str(p).replace(str(HOME), "~") src = str(p).replace(str(HOME), "~")
return process(cfg, llm, vault, state, key, meta, "claude-code", "Code", fp, src, mode) return process(cfg, llm, vault, state, key, meta, "claude-code", "Code", fp, src, mode)
ok, failed, quota = run_jobs(cfg, [(w[0].name, *w) for w in work], lambda _l, p, fp, key: one(p, fp, key)) ok, failed, quota, skipped = run_jobs(cfg, [(w[0].name, *w) for w in work], lambda _l, p, fp, key: one(p, fp, key))
if vault and ok: if vault and ok:
write_index(cfg, vault, state) write_index(cfg, vault, state)
finish(ok, failed, quota, mode, total - ok, llm.ledger) finish(ok, failed, quota, mode, total - ok - skipped, llm.ledger)
def cmd_import(cfg, args) -> None: def cmd_import(cfg, args) -> None:
@@ -762,12 +762,12 @@ def cmd_import(cfg, args) -> None:
llm, vault = LLM(cfg), (None if args.dry_run else Vault(cfg)) llm, vault = LLM(cfg), (None if args.dry_run else Vault(cfg))
if vault: if vault:
vault.ping() vault.ping()
ok, failed, quota = run_jobs(cfg, [((m.get("title") or m["session_id"])[:50], m, fp, key) for m, fp, key in work], ok, failed, quota, skipped = run_jobs(cfg, [((m.get("title") or m["session_id"])[:50], m, fp, key) for m, fp, key in work],
lambda _l, m, fp, key: process(cfg, llm, vault, state, key, m, "claude-ai", "Web", lambda _l, m, fp, key: process(cfg, llm, vault, state, key, m, "claude-ai", "Web",
fp, None, args.dry_run)) fp, None, args.dry_run))
if vault and ok: if vault and ok:
write_index(cfg, vault, state) write_index(cfg, vault, state)
finish(ok, failed, quota, args.dry_run, total - ok, llm.ledger) finish(ok, failed, quota, args.dry_run, total - ok - skipped, llm.ledger)
def main() -> None: def main() -> None: