Thread Haskell-backend logging and booster-only-simplify flags#1149
Merged
Conversation
…ooster-only-simplify flags; CLAUDE.md: document Propagate the opt-in Haskell-backend RPC logging from KEVM PR runtimeverification/evm-semantics#2857 into kontrol. Adds `--haskell-log-dir`, `--haskell-log-entries`, and `--booster-only-simplify` to the shared `RpcOptions`, threaded through the direct `CTermSymbolic` construction in `prove.py` and through every `kevm_pyk.utils.legacy_explore` call site (`simplify-node`, `step-node`, `section-edge`, `get-model`, `show --failure-info`). When omitted, the log entry set defaults to pyk's curated `HASKELL_LOGGING_ENTRIES`. CLAUDE.md documents the debugging workflow the flags enable. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…curated set for all RPC commands The curated HASKELL_LOGGING_ENTRIES fallback was applied only at the prove call site, so show/simplify-node/step-node/section-edge/get-model passed an empty entries list and captured nothing when --haskell-log-dir was set without --haskell-log-entries. Resolve the default once in RpcOptions so every consumer gets the curated set, and drop the now-redundant `or HASKELL_LOGGING_ENTRIES` special-case in prove.py. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…, deps, and kup overrides Expand the project conventions doc beyond the Haskell-logging debug section with durable orientation that should not need rediscovery: the src/kontrol module layout and Options pattern, the make-based check/format/test workflow, kdist targets, the kontrol command set and proof loop, the three test suites and their custom pytest options, dependency/release/Nix packaging, and kup --version/--override syntax for pinning the K toolchain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… option into ProveOptions Mirror KEVM's test harness: add a --haskell-log-dir pytest option (and a session fixture that creates the directory) and thread it into the main foundry-prove test's ProveOptions. Defaults to None, so the suite is unchanged unless the flag is passed; when set, the existing CTermSymbolic logging path captures one <request-id>.jsonl bundle per RPC, and --haskell-log-entries defaults to the curated set so logs are non-empty. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
anvacaru
approved these changes
Jun 16, 2026
palinatolmach
approved these changes
Jun 16, 2026
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.
Adds the ability to capture per-request Haskell-backend log bundles from any RPC-based Kontrol command, which answers why a proof step is slow or failing — which lemmas Kore applied, which rules Booster rejected and the reason, and where Booster aborted and fell back to Kore — a question timing profiles cannot. Three new flags are threaded through
proveand thelegacy_explore-based commands (show,simplify-node,step-node,section-edge,get-model), all of which share the same RPC options.Changes:
--haskell-log-dir DIR(the on switch; writes one<request-id>.jsonlbundle per RPC call),--haskell-log-entries E1,E2,...(which backend entry families to request; defaults to pyk's curatedHASKELL_LOGGING_ENTRIESwhen omitted), and--booster-only-simplify(skip the Kore simplification pass after Booster).RpcOptions, so every consumer command captures logs when--haskell-log-diris set without--haskell-log-entries— previously onlyprovedid, and the other five commands silently captured nothing.CLAUDE.md: a debugging guide for the logging workflow (turning it on, isolating a single step, and thejqrecipes for reading the bundles), plus broader project orientation that previously had to be rediscovered — thesrc/kontrolarchitecture and Options pattern, the make-based check/format/test workflow, kdist targets, the command set and proof loop, the test suites and their custom pytest options, dependency/release/Nix packaging, andkup --version/--overridesyntax.Validation:
make checkclean (flake8/mypy/isort/black/autoflake); new unit tests pass.CTermSymbolicandlegacy_exploreaccept all three kwargs (requireskframework>=7.1.333; branch pins 7.1.334).