Say what a kept Python layer may not share with a new install (closes #133)
check / check (push) Waiting to run

A kept layer holds nothing a new install would refuse, since pip and
pipenv checked every package against its hash. A package built from
source uses build tools pip downloads without a hash check, and system
packages may be newer in a new install, so those two can differ. The
TODO.md entry says the same.

Model: opus-5-5
This commit is contained in:
2026-10-21 16:21:30 +00:00
parent 899beebc1f
commit 14e79875e1
2 changed files with 18 additions and 15 deletions
+8 -7
View File
@@ -30,13 +30,14 @@ fmt-check, and commit.
dependencies by hash, and the packages from the lockfile, and no Python, since dependencies by hash, and the packages from the lockfile, and no Python, since
the tests use the base image's. `--deploy` installs only what the lockfile the tests use the base image's. `--deploy` installs only what the lockfile
names, checks every package against its hashes, and fails when the lockfile is names, checks every package against its hashes, and fails when the lockfile is
out of date with `Pipfile`. A kept layer holds the same hashed packages a new out of date with `Pipfile`. A kept layer holds nothing a new install would
install would, but its system packages may be older. The packages are kept as refuse, except that a package built from source and the system packages may
a layer, not a cache mount, for the reason Go's modules are. The tests still differ from a new install. The packages are kept as a layer, not a cache
run after `ARG CACHEBUST`, and every other stage still installs its Python mount, for the reason Go's modules are. The tests still run after
packages after it. `REPO_POLICIES.md` gains a short Python `test` phase `ARG CACHEBUST`, and every other stage still installs its Python packages
example, and both checklists and the README state the rule the same way. after it. `REPO_POLICIES.md` gains a short Python `test` phase example, and
rfscan picks this up on its next re-vendor. both checklists and the README state the rule the same way. rfscan picks this
up on its next re-vendor.
- 2026-10-21: The canonical `.golangci.yml` now accepts a local `replace` of - 2026-10-21: The canonical `.golangci.yml` now accepts a local `replace` of
`github.com/grafana/sobek` in a repository's root `go.mod` (issue 134), for `github.com/grafana/sobek` in a repository's root `go.mod` (issue 134), for
homoicon, which keeps a local copy of sobek on sneak's decision in homoicon, which keeps a local copy of sobek on sneak's decision in
+10 -8
View File
@@ -389,14 +389,16 @@ style conventions are in separate documents:
the development packages. `--deploy` installs only what `Pipfile.lock` the development packages. `--deploy` installs only what `Pipfile.lock`
names, checks every package against the lockfile's hashes, and fails when names, checks every package against the lockfile's hashes, and fails when
the lockfile is out of date with `Pipfile`. the lockfile is out of date with `Pipfile`.
- A kept layer holds the same pipenv, the same dependencies of pipenv and - A kept layer holds nothing a new install would refuse: pip checked pipenv
the same lockfile packages that a new install would, because each was and its dependencies, and pipenv checked the lockfile's packages, against
checked against its hash. The packages `virtualenv` puts into the their hashes. The packages `virtualenv` puts into the virtualenv that
virtualenv that pipenv creates are the same too: the `virtualenv` package, pipenv creates come from wheels the `virtualenv` package ships, which its
one of pipenv's dependencies, copies them from wheels it ships, and its hash covers. Two things in the layer are not fixed by a hash. A package
hash covers those wheels. Any system packages the step installed are not with no ready-built wheel for the image is built from source, with build
pinned by hash: the layer keeps the versions the package manager gave when tools pip downloads without a hash check, so a kept layer's build of it
the layer was built, and a new install may get newer ones. may differ from a new one. And system packages keep the versions the
package manager gave when the layer was built; a new install may get newer
ones.
- The packages are kept in a layer rather than a cache mount for the reason - The packages are kept in a layer rather than a cache mount for the reason
Go's modules are: a cache mount is shared by every build on the host, and Go's modules are: a cache mount is shared by every build on the host, and
nothing checks its files again. nothing checks its files again.