Skip to content

Project

Governance

Short, because the project is small and pretending otherwise would be worse than saying so.

Who decides

TabAgent is maintained by Ido Levy (@dolev31), who has final say on what merges. That describes where the project is, not a permanent structure: when a second person reviews regularly and their judgment is good, they get commit rights, and this file changes.

Deciding what merges is not deciding what is true. Anything that touches a number is settled by evidence.

Decisions about correctness

A number is not settled by seniority. If you can show that a metric, a fold, a leakage guard or a reproduced result is wrong, that ends the argument, whoever wrote the code. The bar is a failing test or a command anyone can run, not an opinion. The CHANGELOG records every result that changed because of one.

Result disputes

When a number in the paper or the docs does not reproduce, open a result dispute with the command, its output and uv pip freeze. Most resolve without a ruling: docs/reproducing.md records each cell's command, its pinned data and the value it gives, and the two runs usually differ in one of them (CatBoost fits on the Mind2Web element row, for one, move by up to about 0.8 points between x86-64 and arm64).

When a genuine defect is found, the release notes and experiments/paper_cells.yaml say which value changed and why. Nothing is quietly rewritten: the paper's value stays beside the corrected one.

Breaking changes

Before 1.0, breaking changes ship when they make the library more correct, with the reason in the CHANGELOG. Four things get a deprecation period of at least one minor release instead of a straight break, because they invalidate other people's work:

  • The saved-head format (head.json, manifest.json, the card): heads people trained and shared must keep loading. A new format version reads the old one.
  • Metric definitions (tabagent.evaluation): a change alters what every reported number means.
  • The serving API of tabagent serve (/decide, /decide_batch, /version, ...), which agents call.
  • The scikit-learn estimators' parameters, which pipelines and grid searches are written against.

Scope

TabAgent replaces an LLM agent's repeated closed-set decisions with a classifier trained on the agent's own successful runs. A proposal is weighed by whether it makes that more accurate, safer, cheaper or easier to adopt. Free-text generation, planning, and hosted onboarding are out of scope.

Conduct

CODE_OF_CONDUCT.md applies everywhere, including code review. Enforcement is the maintainer's responsibility.