๐Ÿชฃ slop-mop

← All case studies

Onboarding OpenHands.

Running sm refit on a production platform of ~322k lines. The result was mostly a baseline rather than a clean-up.

OpenHands is a massive developer assistant platform. Onboarding its primary repository (300k+ lines of Python) to slop-mop required running sm refit to review all quality gates, establish baseline configurations, and execute step-by-step code remediation.

Repository OpenHands/OpenHands
Codebase Size ~322,000 lines
Language Python, TypeScript
Initial State Unvalidated (Onboarding)
Final State scour_clean (Maintenance Mode Active)
Remediation PR PR #14719
Barnacles filed (against ourselves) #263, #264

Onboarding Findings & Remediation

Running sm refit --start analyzed the project across all active checks, identifying findings in 7 different quality gates. The remediation path involved target refactoring alongside precise scoping configuration to lock down the codebase.

What was actually fixed โ€” versus baselined

The findings above use the word “remediation” loosely. The split for a 400+-file PR whose bulk was reformatting: a small amount of fixing, and a large amount of accepting the existing state and guarding against regressions from there.

Genuinely fixed GitHub Actions least-privilege (contents: read); a Docker sandbox test corrected (port-map keys int → str, and a hardcoded /tmp path swapped for tempfile.gettempdir()); and duplicate pagination Query() titles extracted to shared constants across 11 routers (see the second pass below). A small, real set of changes โ€” not a 322k-line clean.
Suppressed 61 # type: ignore / # noqa markers added โ€” the type and lint gates were silenced, not satisfied.
Baselined (Python) Coverage frozen at the existing 49%; strict_typing: false and strict: false downgrade the strict-typing and type-blindness gates.
Scoped out The TypeScript front-end gate suite (formatting, dead-code, type-checking, bogus-tests) and three meta-gates โ€” including gate-dodging and silenced-gates, the gates that flag suppression โ€” are disabled in the committed config. The green board below is the Python core, not the whole repo.

Read the green board that follows with that in mind: it is real, but it is the score for a deliberately scoped, baselined Python surface โ€” not a claim that 322k lines got cleaned.

OpenHands โ€” sm status
$ sm status

๐Ÿชฃ sm status โ€” Project Status Check
๐Ÿ”€ Project: OpenHands
๐Ÿ”ง State: scour_clean

โœจ MAINTENANCE MODE ACTIVE ยท 20/20 checks passed

   โœ… myopia:dependency-risk.py  (passed)
   โœ… myopia:github-actions-hygiene  (passed)
   โœ… myopia:ambiguity-mines.py  (passed)
   โœ… deceptiveness:bogus-tests.py  (passed)
   โœ… laziness:complexity-creep.py  (passed)
   โœ… laziness:dead-code.py  (passed)
   โœ… laziness:debugger-artifacts  (passed)
   โœ… overconfidence:coverage-gaps.py  (passed)
   โœ… overconfidence:missing-annotations.py  (passed)
   โœ… overconfidence:type-blindness.py  (passed)
   โœ… deceptiveness:gate-dodging  (passed)
   โœ… laziness:silenced-gates  (passed)

Executing sm status on OpenHands reports a clean slop-mop board (a dozen of the twenty shown) โ€” slop-mop's own gate suite, now with the gate-dodging and silenced-gates meta-gates re-enabled in the second pass. That is a separate scoreboard from OpenHands' native CI; getting that green took the reconciliation in the ledger below โ€” and as of this writing it is, with the PR passing every check and blocked only on a maintainer's review.

A second pass, looking for missed slop

We went back and looked for slop hiding behind the baseline. Little turned up. That is weak evidence either way: it is consistent with the code being in good shape, and also with our not having looked in the right places.

OpenHands runs its own eslint, tsc, ruff and mypy, all green, so much of what slop-mop downgraded overlapped with checks the host already ran, or was stricter than them. That is the strongest statement the evidence supports; it does not establish that nothing was missed. Raising the 49% coverage floor is left to the OpenHands team.

What went wrong

The board above is slop-mop's own gates. Getting OpenHands' native CI to pass โ€” its ruff lint and its migration checks โ€” took real work, and slop-mop made genuine mistakes getting there. We hold ourselves to the same standard we ask of our users: when the tool creates friction, file a barnacle. Here are the ones this case study produced, against our own repo.