Skip to content

2.4.2

Choose a tag to compare

@github-actions github-actions released this 15 Oct 04:09
· 12 commits to main since this release
cf335b0

Fixed

  • The crash that restarted the container is gone, and it was a version. The
    parser core was tree-sitter 0.26 while every grammar wheel here is built against
    0.25, and the mismatch showed up where the grammar's field tables are read: the tree
    walk touched node fields through a stale view of the language and, under memory
    pressure, the process died with SIGSEGV — Error 139 in the container, which no
    Python except can catch and which arrives as a bare restart. Once the heap was
    poisoned on purpose it reproduced every time (PYTHONMALLOC=malloc MALLOC_PERTURB_=165): six crashes in six runs on 0.26.0, none in eight on 0.25.2,
    while plain parsing never crashed on either — which is what placed the fault in the
    walk and not in the grammar. The core is held below 0.26 until the wheels move, and
    run_prod sets PYTHONFAULTHANDLER=1, so a crash of any kind now leaves a Python
    stack in the container log instead of an exit code on its own.
  • A review of a large pull request is no longer cut off at thirty seconds. The AI
    client shares this service's HTTP client, so HTTP_CLIENT_TIMEOUT — thirty seconds,
    which is right for a Git host and wrong for a model reading a whole diff — applied to
    the model as well, and the SDK's own retries spent three attempts of it before failing
    with APITimeoutError on a fifty-eight-file pull request. An AI profile now takes its
    own AI_PROVIDER_TIMEOUT, five minutes by default.
  • A model that fails to answer is asked again, visibly. The SDK's own retries are
    silent and were capped at three attempts; an AI profile now says how many it wants
    (AI_PROVIDER_RETRIES, four retries — five attempts — by default), every attempt is
    logged with its reason, and the waits double with jitter, believing a Retry-After
    when the host sends one. Only failures that carried no verdict are repeated: a model
    that refused the answer is not asked five times for the same refusal. The SDK's own
    retries are switched off, so the configured count is the count that happens — the
    worst case is that count times AI_PROVIDER_TIMEOUT, which is why both are settings.
  • The probes around a changed file are fewer and quieter. deep finds the tests and
    dependencies of a changed file by guessing paths and asking; for an icon, a font or an
    image that guess is a family of names that cannot exist, and one brand-kit pull request
    produced forty 404s for assets nobody reviews. A changed file that is data rather than
    code is skipped now — the diff still carries it — and a 404 on a probe is logged at
    debug level instead of as a warning, because for a probe a miss is an answer.

Changed

  • The prompts are English now, and a third smaller. Tokenizers spend noticeably more
    of them on Russian Cyrillic than on the same content in English, and the instructions
    travel with every review: 22 648 characters became 13 930, with the reviewer's criteria
    stated once instead of twice across the two modes. The answer is still Russian — that
    is what a person reads — and the rule saying so lives in the prompts themselves, with a
    test that fails if a later edit drops it. Rereading them also produced two things worth
    having: a review no longer spells out what the project's own linters and formatters
    already enforce (formatting, import order, line length), because the pipeline reports
    those and a review that repeats them is noise; and both modes now say plainly that a
    change which is fine needs no comment at all. What was worth keeping was kept — the
    diff handed to the model carries a line number on every line and the prompt tells it to
    copy those numbers rather than count, which is what keeps a comment on the line it was
    written about, and the data block stays fenced with an instruction to treat everything
    inside it as material rather than as orders.