Skip to content

MIT-618: add the table-extraction-pro FastAPI 0.147 GitHub task (batch 8) - #171

Merged
ZachFara merged 5 commits into
feature/eval-setupfrom
feat/MIT-618-batch8
Nov 10, 2026
Merged

ZachFara merged 5 commits into
feature/eval-setupfrom
feat/MIT-618-batch8

Conversation

@ZachFara

@ZachFara ZachFara commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

What changed

tools/eval/github_tasks.py gets 1 more verified GitHub task. After merging #169 and #170 the branch holds 9. Zach wants 20, so this is still short. I hit the turn budget and kept the bar where it was.

Task Repo (license) Upstream release and date upstream_change
gh-table-extraction-bool-form huss-huss/table-extraction-pro (MIT, 156 KB) fastapi 0.147.0, 2026-10-19 fastapi-0.147-omitted-bool-form-false
  • Pairs: 0. The new key has one task. Every sibling I found failed the bar (see the rejected candidates).
  • Upstream change: 🐛 Treat omitted boolean form fields as False fastapi/fastapi#16523, "Treat omitted boolean form fields as False", merged 2026-10-19 as fastapi/fastapi@19c0b7a (authored and committed 2026-10-19). Its first commit was authored the same day. All of it is after the June 2026 cutoff. FastAPI 0.162.0 (2026-10-23) restored the declared default, so the task pins 0.147.0.
  • Repo timing: issue include_metadata silently defaults to false with FastAPI 0.147 huss-huss/table-extraction-pro#6 opened 2026-10-19, after the release. Fix docs: accept cq field mapping and rename fields in DESIGN.md #7 merged the same day.
  • Merge commit: base_commit is the merge's first parent, 16908b9.
  • Fix: it changes code. The three routes take include_metadata and use_fallback as optional strings and parse them, applying the default themselves.
  • Setup: uv pip install --exclude-newer=... -c requirements/ci-constraints.txt -e .[dev], then the fastapi==0.147.0 pin.
    • These are the project's own CI constraints. Without them PyMuPDF 2.1 pulls in onnxruntime and the project grows to 353 MB. With them it is about 226 MB, .venv included.
    • The constraints pin fastapi 0.146.0. The pin step installs 0.147.0 over it.
  • Laid over: only tests/test_jobs.py. The fix's tests/test_api.py has a comment stating the cause ("FastAPI 0.147 reads a missing bool = Form(True) as False"), so it is left out.
  • Hard-set: not claimed. The error doesn't name its fix, but I didn't test whether the obvious fix fails.

Base failing output (containerized)

Run Result
Base, fastapi 0.147.0 2 failed, 26 passed
Fix, fastapi 0.147.0 28 passed
Base, fastapi 0.146.0 28 passed (previous version, checked)
  • The two failures at the base are the fix's new test_job_boolean_form_fields_default_when_omitted and the existing test_result_formats. The fix changed test_result_formats to stop sending include_metadata="true".
  • Key line:
    >       assert manager.get(job_id).include_metadata is True
    E       AssertionError: assert False is True
    
  • Runs went through a .scratch/ helper that calls repos.materialize, repos.prepare and repos.run_tests with container.run, the same steps agent_eval.py check runs. Containers ran one at a time, none were left behind, and --on-host was never used.

Cause-word checks

  • Cause words:
    • omitted bool form fields as false, omitted bool form field as false
    • omitted boolean form fields as false, omitted boolean form field as false
    • html checkbox, unchecked checkbox, checkbox semantics
    • 0.147
  • Every phrase pairs FastAPI's object, its bool form field, with its new rule: an omitted field is read as False, the "unchecked HTML checkboxes" of the release notes.
  • Dropped on review:
    • bool form field names the object but not the change. A symptom-only fix says it ("make the bool form field Optional"), and word-start matching also catches "bool form fields".
    • An earlier draft's bare checkbox and unchecked were dropped for the same reason.
  • Left out:
    • boolean form field: it hits the laid-over test names.
    • default: a fix that only treats the symptom says it.
  • I checked each word with grading v2's mentions against:
    • the whole captured base output;
    • the whole laid-over tests/test_jobs.py at the fix sha;
    • the symptom words (include_metadata, metadata), in both directions;
    • the names of the functions the fix edits or adds (extract, extract_batch, create_job, parse_form_bool), the failing tests and the traceback's last call (get);
    • the base source near the fix site: table_extraction/api/main.py and jobs.py, plus README.md and tests/test_api.py (git show 16908b9:<path> from the repo cache).
  • No hits. As a control, default hits every source, as expected.
  • 0.147 is the only version word. The other seven are non-version words.
  • Leak review: I read the laid-over file at the fix sha.
    • The new test's comment states only the symptom: "Regression for docs(decisions): propose cq knowledge unit field mapping #6: an omitted include_metadata must mean true, use_fallback false."
    • It does point at the issue, which states the cause. The record's comment says so, and notes that eval sessions have no web tools.
    • No other comment, docstring or test name mentions FastAPI versions, checkboxes or form parsing.
  • New version word: 0.147. It is added to the expected set in test_the_cause_words_grader_v2_skips_are_exactly_the_versions.

Merge

I merged origin/feature/eval-setup twice, after #169 and after #170. The TASKS conflict kept both sides. The version set merged cleanly: 2.0 was already in it.

Rejected candidates

This batch:

From the brief and PRs #164, #165, #167 and #168: not re-checked.

Unfinished: none. The uncommitted change in the earlier run was a comment on this task (its measured size and the constraints note), not a second task. It is committed with the task.

Why

Ticket: MIT-618 (batch 8), the GitHub-task eval. These are real post-cutoff tasks for the arms run.

How it was tested

  • Containerized runs of the new task: the base and the fix on fastapi 0.147.0, and the base on 0.146.0, as described above.
  • server/tests/test_eval_grader.py and server/tests/test_eval_repos.py pass.
  • make check passes after both merges of origin/feature/eval-setup (1532 passed).

Learned

  • Merged-PR search (is:pr is:merged, a quoted release string) finds far more code fixes than the closed-issue search with linked:pr. For fastapi 0.147 it found about 20 fix PRs where issue search found 4. Many of them never had an issue.
  • FastAPI shipped a run of behaviour changes from 0.147 to 0.162 (2026-10-19 to 2026-10-23): omitted bool form fields as False (reverted in 0.162), defaults no longer validated (0.148), empty form strings as missing (0.149), unselected files as missing (0.150), JSON null versus omitted (0.151), header names in errors (0.152) and the removal of **extra (0.145, 0.155). Downstream fixes for 0.148 and later are still rare.
  • When an install is over the 200 MB cap, check whether the project ships a CI constraints file. A newer major of a transitive dependency (PyMuPDF 2.1 pulls in onnxruntime) can double the install, and the project's own constraints bring it back.
  • Fixes written by coding agents often carry test docstrings that state the cause. Read the laid-over test files before anything else, and lay over a sibling file when one file leaks.
  • git --git-dir <cache> is refused in worktree shells. Read cached repos through a .scratch/ helper run with python3 -I.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Qc1CQTb8r67J32HpkhS43y

@ZachFara
ZachFara merged commit 4b3cd87 into feature/eval-setup Nov 10, 2026
2 checks passed
@ZachFara
ZachFara deleted the feat/MIT-618-batch8 branch November 10, 2026 23:38
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