Skip to content

Dev - #54

Merged
NicolasKieffer merged 4 commits into
mainfrom
dev
Sep 17, 2026
Merged

Dev#54
NicolasKieffer merged 4 commits into
mainfrom
dev

Conversation

@NicolasKieffer

Copy link
Copy Markdown
Collaborator

No description provided.

NicolasKieffer and others added 4 commits August 31, 2026 14:00
Two cases the walkthrough needed and the seeder could not produce: a
detection step that FAILED, and the software step reporting PARTIAL
because Softcite died while the LM pass carried it.

Both are induced by making the external service unreachable from inside
the container -- an /etc/hosts entry, added for the duration of one step
re-run and removed in a finally. The alternative, writing `failed` onto a
job row, produces a demo that falls apart the moment anyone presses the
button it exists to show: the logs describe a run that never happened,
and Retry re-runs a step that was never broken. Here the failure, the
error message, the blocked dependants and the retry are all genuine, and
the service is restored before anyone sees the page so Retry SUCCEEDS.

Breaking a single step rather than the whole run is what keeps it
legible: the rest of the pipeline keeps its good results and exactly one
module shows the state being demonstrated.

Also fixes three things this run exposed, all of which reported a session
problem as something else entirely:

- The token expires mid-run. One manuscript's conversion took 28 minutes
  to fail, after which the next create returned 401 and the run before it
  had its re-run refused as "Invalid token" -- both printed as ordinary
  refusals. Renewal is now reactive, on an actual 401.
- Renewing on a TIMER instead exhausts the auth limiter (10 attempts per
  15 min per IP), and the 429 read as "is the instance running?".
- Two logins seconds apart race to write the same session row and 409.
  That one is retried.

--attach re-uses a submission an interrupted run already created, so a
half-finished case does not leave a healthy duplicate behind. --only
takes a comma-separated list.

Verified on the local instance: markdown_convert fail with 7 dependants
blocked_by_failure; software_detection partial/softcite_failed;
materials_detection fail with 2 dependants blocked. /etc/hosts clean and
both services reachable afterwards, so every Retry works.
e453ccf changed what a conflict may say -- only values the manuscript
actually prints can contradict the author -- but stored results are not
rewritten, so a submission processed earlier keeps showing the old
conflicts until its grounding step runs again.

Dry run by default, because the price is not obvious: restarting a step
takes its dependants with it, and krt_grounding's only dependant is
suggestion_generation, which calls the LM. So the fix costs one LM
suggestion run per submission, and that number is printed before
anything is spent. pdf_analysis deliberately does not depend on
grounding, so it is not dragged in.

Two things the first version got wrong, both of which read as clean
results rather than as errors:

- The fix date defaulted to midnight, but e453ccf landed at 16:03 UTC.
  Three of the four local submissions were grounded between 16:05 and
  16:47 that same day, so a midnight cutoff would have called every one
  of them stale and re-run the lot for nothing.
- Conflicts were counted by summing result.data.outcomes, which one
  submission's grounding result does not carry at all -- reporting 0
  conflicts for it. It now reads counts.conflicts, the step's own tally.

Local dry run: 4 grounding steps complete, 0 predating the fix. Verified
by content rather than by timestamp -- the stored conflicts cite
materials-gemini with a manuscriptValue the paper really prints, and
carry the post-fix identifierVerdicts/unverifiedIdentifiers fields.
Rewrite the validation-rules reference around the question ASAP asked:
what the app recognizes in the IDENTIFIER column and which of those
kinds each resource type accepts. Adds the identifier decision flow, the
per-kind detection patterns with matching and non-matching examples, the
per-type acceptance tables, a Dataset-vs-Other example, a matrix produced
by running the validator over 39 values x 14 types, and the known gaps
(EMD- form, bare PDB/PMID, RefSeq, catalog-number overlap).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Add ValidationRulesLink, which resolves the deployed repo/branch via
/config/source (as ModuleExplainer does) and opens
docs/krt-validation-rules.md on GitHub. Shown in the editor summary bar,
under identifier-format warnings in the cell modal (anchored to the
per-type acceptance section), and at the end of the recognized-formats
help panel (anchored to the kinds section).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@NicolasKieffer
NicolasKieffer merged commit 96d4537 into main Sep 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant