Jorijn: "all lenses off by default and opt in only". Config::Defaults()
gives every lens run: false; a config that turns on none - a missing
`lenses` key included - has the one problem that names the lenses, so
config, freeze and run all stop on it; the template ships every lens off,
init says to turn lenses on, and the "no lens runs" preflight names the
cause. A consumer config without a `lenses` key now needs one, as the CI
smoke test's does.
Proven with the lens commit before it: the suite (26 passed), and the
dry-run comparison recorded there.
- .forgejo/workflows/ci.yaml is Crafter.Build's workflow for this app: the
base installed from the Catcrafts repo, the version stamped into the
crafter-review module, the suite inside the build, then a smoke test of
the app as it ships - the version and home, every library resolved and no
RUNPATH outside /app, the bundled tools, a freeze and a dry run on a
scratch repository. Publishing holds /srv/flatpak/.publish.lock and
writes only this app's flatpakref. Unverified until a crafter-flatpak
runner serves this repository.
- `run flatpak --deps=local` builds against the Crafter.Network and
Crafter.Thread checkouts next to this one, as a native --local build
does, while their commits are not on forgejo: a gitignored manifest copy
with three dir sources side by side and --local.
- LensTools: every program the lens allowlist names, the shell and the MCP
server's node and npx resolve on PATH; strict in the Flatpak build, where
the suite runs in the sandbox that ships, a skip natively when this
machine lacks one.
Built on the stable base (Crafter.Build 3.0.0) with --deps=local: the suite
passes inside flatpak-builder (25 passed, 2 skipped), and the workflow's
smoke test passes against that build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>