Conversation
`make lint-keeper` reported `No issues found / Checked 4 entries` and covered none of keeper: the four were the harness's own `keeper.hub.security` entries. A deliberate syntax error in `keeper/src/keeper/agents/tools/delegate.lua` went unreported, and `--ns keeper.agents.tools` matched zero entries. The harness lock carried `replacements: keeper/keeper -> ..` while `keeper/keeper` was absent from `modules:`. GetModuleLoadPaths skips a replacement whose module is not selected (boot/deps/lock/lock.go), so the module never became a load path and every load-path command -- lint among them -- saw nothing. `wippy test` was unaffected because it resolves the `ns.dependency` in test/_index.yaml through the hub dependency handler instead. The module entry was dropped in ccc81cd (fix(packaging): keep Keeper tests out of production, 2026-07-15); lint has been reporting green on nothing since. Restores the module selection, and moves the replacement to `workspace.replacements` in a tracked test/.wippy.yaml, the form the runtime prints a deprecation warning for the lock to use. This matches wippy/dataflow's harness. Root .gitignore ignores `.wippy.yaml` for local overrides, so the one tracked file is exempted. The selected version has to equal keeper/wippy.yaml's, or hub resolution fails with `manifest version mismatch`; a release bump must move both. The failure is loud and names the fix. Verified: - `make lint-keeper`: 384 entries, 4 warnings, 0 errors (was 4 entries) - a syntax error in delegate.lua is now reported, with a warm cache - `keeper.hub:test` 126/126, `keeper.agents.tools:test` 64/64, `keeper.internal.flow:repo_test` 11/11 - the lock-replacement deprecation warning is gone
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was changed
keeper/test/wippy.lockselectskeeper/keeperagain, so the harness turns the local replacement into a module load path.workspace.replacementsin a trackedkeeper/test/.wippy.yaml..gitignoreexempts that one file.Why?
make lint-keeperprinted this, and had been printing it for weeks:The four are the harness's own
keeper.hub.securityentries. None of keeper's ~380 were linted. A deliberate syntax error inkeeper/src/keeper/agents/tools/delegate.luawent unreported;--ns keeper.agents.toolsmatched zero entries.The lock carried a replacement for a module it did not select:
GetModuleLoadPathsskips a replacement whose module is not in the selection (boot/deps/lock/lock.go):So the module never became a load path, and every load-path command —
wippy lintamong them — saw nothing.wippy testwas unaffected: it resolves thens.dependencyintest/_index.yamlthrough the hub dependency handler, a different path. That is why the gap stayed invisible while the suites kept passing.The module entry was dropped in ccc81cd (fix(packaging): keep Keeper tests out of production, 2026-07-15), which rewrote the lock and removed
keeper/keeperalong with stale versions. Lint has been green on nothing since.The replacement also moves to
workspace.replacements, the form the runtime already asks for on every invocation:That config file is
.wippy.yaml, which the root.gitignoreexcludes so developers can keep local overrides.wippy/dataflow's harness tracks its owntest/.wippy.yamlfor exactly this, so this follows that shape and exempts the single path.One constraint worth knowing: the selected version has to equal
keeper/wippy.yaml's, or hub resolution fails withmanifest version mismatch for keeper/keeper: requested 0.0.0, hub returned 0.5.79. A release bump must move both.0.0.0works in dataflow only because its replacement points at a directory with no manifest. The failure here is loud, immediate and names the fix.Checklist
Closes #
Tested
make lint-keeper: 384 entries, 4 warnings, 0 errors — was4 entries. All four warnings are the pre-existinginter-function fixpoint did not convergeanalyzer notice.Coverage probed, not assumed: a syntax error appended to
delegate.luais now reported (Checked 384 entries: 1 errors), with a warm cache, through the exact Makefile invocation. Before this change the same probe reported nothing.keeper.hub:test126/126,keeper.agents.tools:test64/64,keeper.internal.flow:repo_test11/11.The lock-replacement deprecation warning no longer prints.
Remaining gap, not addressed here:
exclude_meta.type: [test]inkeeper/wippy.yamlkeeps test entries out of the registry, so*_test.luais still unlinted.test.shstrips that block for the duration of a run; wiring the same for lint means sharing that surgery between the two, which is its own change.