Some checks failed
CI / lint (push) Successful in 1m27s
CI / notebooks-smoke (push) Successful in 2m5s
Deploy / changes (push) Successful in 23s
CI / test (push) Failing after 4m56s
Infra CI / notebooks (push) Successful in 1m13s
Infra CI / zotero (push) Successful in 27s
Infra CI / docs (push) Successful in 38s
Infra CI / api (push) Successful in 1m43s
Infra CI / bcda (push) Successful in 2m22s
Infra CI / mc (push) Successful in 32s
Infra CI / llm (push) Successful in 1m42s
Deploy / zotero (push) Has been skipped
Deploy / report (push) Has been cancelled
Deploy / api (push) Has been cancelled
Deploy / bcda (push) Has been cancelled
Deploy / llm (push) Has been cancelled
Deploy / mc (push) Has been cancelled
Deploy / notebooks (push) Has been cancelled
Deploy / docs (push) Has been cancelled
Tag state now records the parameters it ran with (top, max_tags, min_confidence). On unchanged content with other parameters, run() re-derives the tags reusing every stored judge verdict: a threshold change costs no model calls, a wider shortlist pays only for its new candidates. Same content and same parameters still skip. The 315k stored states carry their full judged shortlists, so a new threshold applies corpus-wide without the GPU.