gerberdiff is the only code member of this org with neither a justfile nor an AGENTS.md.
Measured
$ for r in partspec netspec slicelab orlab prusaslicer-py gerberdiff; do
printf '%-16s justfile=%s AGENTS.md=%s\n' "$r" \
"$([ -f $r/justfile ] && echo y || echo n)" \
"$([ -f $r/AGENTS.md ] && echo y || echo n)"; done
partspec justfile=y AGENTS.md=y
netspec justfile=y AGENTS.md=y
slicelab justfile=y AGENTS.md=y
orlab justfile=y AGENTS.md=y
prusaslicer-py justfile=y AGENTS.md=y
gerberdiff justfile=n AGENTS.md=n
grep -rn 'just ' CONTRIBUTING.md README.md docs/*.md .github/workflows/*.yml returns
one hit, and it is the English word inside a comment in docs.yml.
Why it matters
Org contract section 8 makes just check && just test the pre-commit gate for every
member. Here neither command exists, so the gate cannot be run at all -- not skipped,
not weakened, absent. What a contributor runs instead is the four commands in
CONTRIBUTING.md, typed by hand:
uv run ruff check gerberdiff/ tests/
uv run ruff format gerberdiff/ tests/
uv run mypy gerberdiff/ tests/
uv run pytest tests/ -q
Three gaps between that list and what ci.yml actually enforces:
ruff format (mutating) versus CI's ruff format --check. Running the documented
command makes the working tree pass; it does not tell you whether it would have
failed.
- No coverage gate. CI runs
pytest --cov=gerberdiff --cov-fail-under=90; the
documented command runs pytest tests/ -q. A change that drops coverage below 90
passes locally and fails in CI.
- No ASCII check. CI has a
grep -rP '[^\x00-\x7F]' gerberdiff/ tests/ *.md *.toml
step, and CONTRIBUTING.md documents the rule with a 12-row table of banned
characters and a here-doc Python script to check it. Nothing runs that script; the
only enforcement is the CI step, i.e. after the push.
So "ran the documented checks locally" and "will pass CI" are different claims in this
repo, and the difference is silent in the direction that reads as success.
And there is no AGENTS.md
The exit-code contract this repo settled in 0685cde (A3) -- 0 identical, 1
different, 2 indeterminate, 4 environment fault, 64 usage, with 2 spelled as a
third diff outcome rather than a verdict -- is currently recorded only in a
docstring in gerberdiff/cli.py, in DiffOutcome in gerberdiff/geometry/types.py,
and in docs/schema.md. There is no repo-level file telling an agent that this is
settled and not to relitigate it. Nor that planning/ is gitignored working material
rather than a plan, that docs/DECISIONS.md does not exist here, or that
geomdiff can return 2 and the raster diff cannot.
Done when
Deriving the recipes from ci.yml rather than copying a sibling's justfile is the
point: partspec and netspec typecheck with pyright, this repo uses mypy, and no
sibling has the ASCII step.
gerberdiff is the only code member of this org with neither a
justfilenor anAGENTS.md.Measured
grep -rn 'just ' CONTRIBUTING.md README.md docs/*.md .github/workflows/*.ymlreturnsone hit, and it is the English word inside a comment in
docs.yml.Why it matters
Org contract section 8 makes
just check && just testthe pre-commit gate for everymember. Here neither command exists, so the gate cannot be run at all -- not skipped,
not weakened, absent. What a contributor runs instead is the four commands in
CONTRIBUTING.md, typed by hand:Three gaps between that list and what
ci.ymlactually enforces:ruff format(mutating) versus CI'sruff format --check. Running the documentedcommand makes the working tree pass; it does not tell you whether it would have
failed.
pytest --cov=gerberdiff --cov-fail-under=90; thedocumented command runs
pytest tests/ -q. A change that drops coverage below 90passes locally and fails in CI.
grep -rP '[^\x00-\x7F]' gerberdiff/ tests/ *.md *.tomlstep, and
CONTRIBUTING.mddocuments the rule with a 12-row table of bannedcharacters and a here-doc Python script to check it. Nothing runs that script; the
only enforcement is the CI step, i.e. after the push.
So "ran the documented checks locally" and "will pass CI" are different claims in this
repo, and the difference is silent in the direction that reads as success.
And there is no AGENTS.md
The exit-code contract this repo settled in 0685cde (A3) --
0identical,1different,
2indeterminate,4environment fault,64usage, with2spelled as athird diff outcome rather than a verdict -- is currently recorded only in a
docstring in
gerberdiff/cli.py, inDiffOutcomeingerberdiff/geometry/types.py,and in
docs/schema.md. There is no repo-level file telling an agent that this issettled and not to relitigate it. Nor that
planning/is gitignored working materialrather than a plan, that
docs/DECISIONS.mddoes not exist here, or thatgeomdiffcan return2and the rasterdiffcannot.Done when
justfileexists whosecheckrecipe runs the same four thingsci.ymlruns (lint, format-check, ASCII, typecheck) and whose
testrecipe carries the--cov-fail-under=90gate, sojust check && just testis CI-equivalent ratherthan a shorter list with the same name
AGENTS.mdexists naming the org contract as the floor and carrying what isspecific to gerberdiff
CONTRIBUTING.mdpoints at the recipes instead of listing commands that driftfrom CI
Deriving the recipes from
ci.ymlrather than copying a sibling's justfile is thepoint: partspec and netspec typecheck with pyright, this repo uses mypy, and no
sibling has the ASCII step.