chore(kiban): first-time konjo-gates onboarding, fix decorative lint job - #227
chore(kiban): first-time konjo-gates onboarding, fix decorative lint job#227konjoinfinity wants to merge 4 commits into
Conversation
squish's first connection to kiban's konjo-gates orchestrator (Track A2). Pins
.konjo/kiban.ref at v1.9.0, adds .konjo/profile.yml (re-verified field by field
against the real tree), and wires .github/workflows/konjo-gates.yml as a new,
real, blocking CI job.
Fixes the actual decorative-lint-job defect: ci.yml's lint-only job ran
`ruff check ... --exit-zero` and `mypy ... --no-error-summary || true`, both
structurally unable to fail regardless of findings. ruff is now real (0
standing violations); mypy is ratcheted against its measured 215-error
baseline via a new generic ratchet gate (.konjo/scripts/ratchet_check.py,
same shape as lopi's coverage-floor gate). konjo-gate.yml's 10
continue-on-error steps are all triaged: 7 promoted/ratcheted against
measured baselines (ruff-format 363, vulture 108, bandit 67, complexity 146,
DRY 99, docstrings 31.4%), 2 kept soft with a named owner and revisit date,
0 deleted.
Also: gate_polarity full-tree scan (17 standing findings, all triaged, 1
fixed, 1 flagged and deferred); CLAUDE.md converted to the six-section
contract; a stale single-figure PyPI performance claim ("5.4x faster")
corrected to the honest measured range ("1.15-14.7x depending on prompt
repetition"); version bumped to 9.34.15.
KT-A2.1 kill-test: confirmed konjo-gates genuinely runs and can fail (a
deliberate scratch-file violation triggered real ruff/vulture/bandit FAILs,
then was reverted). Also caught, live, a real defect before it shipped: the
profile's initial `mutation: mutmut` value would have made konjo-gates shell
out to an unbounded, un-timed-out `mutmut run` on every future PR -- fixed to
a "none-with-reason" value pointing at konjo-gate.yml's own properly-capped
mutation job.
Full reasoning, dispositions, and two kiban-side false positives found (and
reported upstream rather than worked around) are in LEDGER.md's "Track A2"
entry.
Konjo-Threat-Model: f666caf4bcbd
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NLdTtZgWyLWu2gE9CohWwa
The previous commit's threat_model trailer was generated against a partial 5-file changed-set before every file was staged; the fingerprint changes once the full 25-file diff is considered. Regenerated both trailers for real (konjo-oneway confirm, konjo-threat record) against the actual full changed-file set this PR carries, and recorded why each gate fired (destructive-shell matched test_ratchet_killtest.sh's standard mktemp cleanup trap; authn_authz matched a docstring mentioning the existing, unmodified API-key check). Konjo-Acknowledged-Oneway: b94be0e76761 Konjo-Threat-Model: b94be0e76761 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NLdTtZgWyLWu2gE9CohWwa
repo:mypy/repo:vulture's net-new dispatch reports far more findings on this PR's real diff than any direct single-pass measurement of HEAD ever found. Confirmed with a properly-installed venv (ruling out the earlier environment-degradation explanation) -- this is kiban's own worktree/ import-resolution mechanics, not a squish defect. Disclosed here so the PR description doesn't need to hide that this PR's own first konjo-gates run will show red on these two checks. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NLdTtZgWyLWu2gE9CohWwa
dry_check.py exits 1 on any violation by default, so the G4 DRY step never reached ratchet_check.py's comparison against the seeded 99-violation ceiling. Add --warn-only so the ratchet actually gates on regression instead of the full pre-existing backlog, as designed. tests/test_version.py and tests/test_wave79_startup_inference.py pin a literal version string; this PR's 9.34.14 -> 9.34.15 bump left both at the old value.
|
Status update on CI: commit One item is blocked pending human input: that same commit added 2 files to the diff, which shifted the kiban To clear it, someone needs to run, from a and add the resulting Generated by Claude Code |
Summary
squish's first connection to the org's kiban quality-gate substrate (Track A2). No feature work, no quantization changes, no Homebrew/PyPI packaging mechanics touched. Full reasoning and every disposition is in
LEDGER.md's "Track A2" entry; this description summarizes it.Connection
.konjo/kiban.refpinned atv1.9.0+.konjo/profile.yml— re-verified field by field against the real tree (real module paths, real test/lint commands,lang/python+lang/mlxpacks,verify_cmd,format_cmd,longrun_globs,security_globsall declared explicitly, no placeholders left)..github/workflows/konjo-gates.yml— new job, nothing existing removed.konjo-gatesgenuinely runs and can fail. Caught a real defect live before it shipped: the profile's initialmutation: mutmutvalue madekonjo-gatesshell out to an unbounded, un-timed-outmutmut run(no timeout wrapper, unlike thecargo-mutantspath) — hung for several minutes before being killed. Fixed to a"none-with-reason"value pointing atkonjo-gate.yml's own properly-capped mutation job. Then a deliberate scratch-file violation (except Exception:+ a bare expression) correctly triggered realrepo:ruff/repo:vulture/repo:banditFAILs; reverted immediately after.The decorative lint job
ci.yml'slint-onlyjob ranruff check ... --exit-zeroandmypy ... --no-error-summary || true— both structurally unable to fail regardless of findings, a shape acontinue-on-errorgrep alone would never catch. Fixed:ruff check:--exit-zeroremoved. 0 standing violations (10 whole-repo findings fixed first: 4 auto-fixed, 6 covered by extending the existingtests/**-only BLE001 per-file-ignore tobenchmarks/**,demo/**,scripts/**).mypy: ratcheted against its measured 215-error baseline (.konjo/mypy-ceiling.txt) via a new generic ratchet gate (.konjo/scripts/ratchet_check.py, same shape as lopi'scoverage_floor_check.py) instead of flipped hard on day one.Soft-step triage (konjo-gate.yml)
Real count: 10 literal
continue-on-error: truesteps inkonjo-gate.yml(16 named steps), not the brief's stated 11 — plus 4 more--exit-zero/|| trueshapes inci.ymlnot caught by acontinue-on-errorgrep. 14 total, all triaged:ci.ymllint-only ruff / test / test-linux Lint(ruff)ci.ymllint-only mypy--excludepath-prefix bug silently scanningtests/too)ci.yml's real macOS coverage job)gate_polarityfull-tree scan17 standing findings (first connection). 2 real (1 fixed — a docstring clarification, zero behavior change, on a display-only property; 1 flagged and deferred — a quant-adjacent smoke-test fail-open, out of scope for a CI-connection sprint), 10 false positives in
squish/production code (all traced to their actual callers, none on the daemon's network or model-loading path), 5 intests/**/benchmarks/**(exempted).CLAUDE.md contract
Converted to the six-section contract (
docs/pilots/squish-claude-md.proposed.md). Re-verified clean againstlib.claude_contract.check_contractafter editing, including an update the static proposal couldn't have known about (the Wall 2 description no longer claims "blocks the merge" for gates this PR just converted from decorative to real-but-ratcheted).Performance claim correction
pyproject.toml's PyPI description stated a single stale figure ("5.4× faster end-to-end on 4K-token prompts vs Ollama") traced to a superseded v5.1.1-era benchmark. The current, thermally-controlled benchmark (already in the repo —docs/paper.md,BENCHMARKS.md, the linked blog post) reports 9.8× on exact repetition / 1.15–1.32× on unique prompts / 14.7× in the isolated reuse-percentage ablation for the same claim, andBENCHMARKS.mdalready states its own rule for this ("quote the range, not a single number"), which the PyPI description violated.5.4× faster end-to-end on 4K-token prompts vs Ollama1.15-14.7x faster than Ollama depending on prompt repetitionREADME.mdalready stated the honest range; no change needed there.Known, disclosed limitations of this PR's own first
konjo-gatesrunThree real
konjoai/kiban-side findings, none squish-side defects, all reported here rather than worked around by gaming squish's code — seeLEDGER.mdfor full detail:repo:ruff's net-new dispatch diffs raw tool stdout text, not per-finding identity — this PR's ownpyproject.tomlper-file-ignore addition (a real cleanup) registers as a false "net-new finding."gate_one_way_door's_REMOVED_DEFregex flags any-def/-classdiff line with no semantic understanding of annotation modernization vs. real removal — worked around forscripts/check_release_sync.py(reverted to original spelling, whole-file noqa) rather than fabricating an acknowledgement;test_ratchet_killtest.sh's standardrm -rfcleanup trap (same idiom lopi's own kill-test scripts use) genuinely tripped thedestructive-shellpattern and was acknowledged for real (konjo-oneway confirm).repo:mypy/repo:vulture's net-new dispatch reports far more findings on this PR's real diff (110, 59) than any direct single-pass measurement of HEAD ever found (215, 108 repo-wide) — likely a worktree/import-resolution artifact in kiban's own two-pass mechanism, not root-caused further (out of scope for a "connect squish to kiban" sprint).These three mean this PR's own
konjo-gates.ymlCI run will show red onrepo:ruff/repo:mypy/repo:vulture— expected, disclosed, not squish regressions.Test plan
python -m pytest tests/ -x(with the same MLX/hardware exclusionsci.ymluses) — green, zero regressions (one pre-existing, environment-only disk-space test failure confirmed identical on the unmodified base commit viagit stash)ruff check ./ruff check squish/ tests/— cleanlib.claude_contract.check_contracton the newCLAUDE.md—ok=Truepyproject.toml+squish/__init__.py) — 9.34.15Generated by Claude Code