Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
fbba9a6
docs: record the Map2Check migration merge commit
hbgit Oct 17, 2026
9292029
docs: add mandatory agent rules for remote actions, scope and vendore…
hbgit Oct 26, 2026
e8de596
docs: restrict the cutover plan to this repository and pin Map2Check …
hbgit Oct 26, 2026
2bacf5c
docs: restart the Map2Check cutover as a drop-in replacement of the C…
hbgit Oct 26, 2026
e491091
chore: fetch Map2Check develop as an unversioned local copy and recor…
hbgit Oct 26, 2026
f0c5c91
docs: inventory the C runtime ABI of Map2Check develop
hbgit Oct 26, 2026
14c2fcb
fix: add canonical signatures and external consumers to the runtime A…
hbgit Oct 26, 2026
3301ced
test: build Map2Check develop from the read-only vendor copy
hbgit Oct 26, 2026
2e06841
test: corpus runner, gate comparator and C baseline for Map2Check dev…
hbgit Oct 26, 2026
28fb0d3
fix: fail the gate on missing expectations and mismatched repetition …
hbgit Oct 26, 2026
7d82919
test: link matrix of the 120 runtime module combinations of Caller::l…
hbgit Oct 26, 2026
e045d30
docs: D7 module layout spike for the drop-in runtime
hbgit Oct 26, 2026
b0cc635
test: defined-symbol parity against the C runtime and weak-only __dso…
hbgit Oct 26, 2026
dbf69ff
docs: D7 spike fix round 1: enum signatures, one target triple, IR-lo…
hbgit Oct 26, 2026
ce17c32
docs: record user approval of D7 (A-fwd layout, SD-22 export policy)
hbgit Oct 26, 2026
2626284
test: guard C runtime ABI signatures and coverage
hbgit Oct 26, 2026
a9e439a
test: check C/Rust enum values and report shared-symbol counts in ABI…
hbgit Oct 26, 2026
642be33
test: make the ABI enum check fail closed
hbgit Oct 26, 2026
5340c4b
chore: untrack Python bytecode caches
hbgit Oct 26, 2026
e45ab6e
feat: export the core functions of the Map2Check C runtime ABI
hbgit Oct 26, 2026
f9d9e55
docs: update SD-02 and the init mapping for the C enum values; scope …
hbgit Oct 26, 2026
ecde714
feat: export the nondet log and the none generator
hbgit Oct 26, 2026
75d2e3f
docs: scope generator-owned klee_log.csv into Task 3.1
hbgit Oct 26, 2026
cdeb1eb
fix: write klee_log.csv from one formatter and add the KLEE log hooks
hbgit Oct 26, 2026
480d10b
build: promote the D7 IR generator to scripts/runtime-ir
hbgit Oct 26, 2026
54b92cc
feat: export the overflow analysis mode
hbgit Oct 26, 2026
9a4951f
docs: scope analysis_init wiring into Task 3.1
hbgit Oct 26, 2026
69ff156
fix: check the core entry points the generated IR calls against the h…
hbgit Oct 26, 2026
691f096
docs: keep mode-only names out of the core bitcode (Task 2.10)
hbgit Oct 26, 2026
8f09005
feat: export the assert and none analysis modes
hbgit Oct 26, 2026
f021bcf
docs: drop the multiple-definition allowance in Task 2.10
hbgit Oct 26, 2026
5643735
feat: export the memtrack analysis mode
hbgit Oct 26, 2026
338acb1
fix: record the memtrack deltas and tighten the memtrack link test
hbgit Oct 27, 2026
f827309
feat: export the memcleanup analysis mode
hbgit Oct 27, 2026
24167ee
fix: exercise the memcleanup leak through map2check_exit
hbgit Oct 27, 2026
040ff8d
feat: call the linked analysis_init and nondet_init from the drop-in …
hbgit Oct 27, 2026
5327968
feat: export the KLEE nondet generator
hbgit Oct 27, 2026
31659a0
fix: keep the drop-in core free of freeze at the source
hbgit Oct 27, 2026
e63670a
fix: define __VERIFIER_error in the drop-in core and stop the coverag…
hbgit Oct 27, 2026
9f63ae1
test: tighten the KLEE generator and init-wiring image tests
hbgit Oct 27, 2026
22d6ede
fix: stub std's panic hook to abort in the drop-in core
hbgit Oct 27, 2026
74241a7
docs: note the expected KLEE path split in Task 4.1
hbgit Oct 27, 2026
299b7e3
feat: export the AFL++ nondet generator
hbgit Oct 27, 2026
304bd53
feat: write the result files atomically under KLEE only
hbgit Oct 27, 2026
cc5267c
docs: carry the AFL++ follow-ups into Tasks 3.1 and 4.1
hbgit Oct 27, 2026
7fb534c
feat: export the wasm runtime stubs
hbgit Oct 27, 2026
3d9cffc
docs: add the wasm trap confirmation file to Task 3.1
hbgit Oct 27, 2026
817199e
fix: guard against calls to IR-defined names in the staticlib
hbgit Oct 27, 2026
ace2c39
docs: map2check_assume* now land in Task 2.10
hbgit Oct 27, 2026
f7df4e9
refactor!: the C ABI is the Map2Check runtime ABI only
hbgit Oct 27, 2026
5ca9e14
chore: rename the D7 spike build script so the C-era artifact check p…
hbgit Oct 27, 2026
c3cbed6
docs: update the plan after the removal of the legacy KLEE route
hbgit Oct 27, 2026
04ba054
test: port the KLEE route checks to the drop-in core
hbgit Oct 27, 2026
ed2abc5
docs: point the D7 post-processing note at the drop-in build script
hbgit Oct 27, 2026
872037c
build: package the runtime as the 21 bitcode modules Map2Check links
hbgit Oct 27, 2026
08e2337
fix: never downgrade map2check_property under KLEE (SD-20)
hbgit Oct 27, 2026
95bd35c
docs: record the drop-in wall-time risk before the gate runs
hbgit Oct 27, 2026
4529358
fix: harden the install overlay and the runtime matrix job
hbgit Oct 27, 2026
c7a4f3c
build: ship the bitcode runtime in the release package
hbgit Oct 27, 2026
66a2006
docs: document the overlay install and pin the validated commit in th…
hbgit Oct 27, 2026
9bc52b0
docs: add Task 3.3 to shrink the drop-in core before the gate
hbgit Oct 27, 2026
ee77c56
perf: shrink the drop-in core the frontend compiles
hbgit Oct 27, 2026
21f0962
docs: record the approved fixed compile allowance in the gate time cr…
hbgit Oct 27, 2026
bcbdab3
test: apply the approved compile allowance to the afl and hybrid wall…
hbgit Oct 27, 2026
af8725d
docs: first differential gate of the drop-in runtime
hbgit Oct 28, 2026
fa279fe
docs: accept the gate's class iii divergences under SD-24 to SD-26 an…
hbgit Oct 28, 2026
fb817a2
docs: second differential gate of the drop-in runtime
hbgit Oct 28, 2026
36abfbf
docs: hand the drop-in runtime over to the Map2Check maintainer
hbgit Oct 28, 2026
6108b5a
docs: tighten the drop-in handoff docs
hbgit Oct 28, 2026
6e1d0a0
fix(ffi): take write_property's property as int and keep non-UTF-8 names
hbgit Oct 28, 2026
564cb41
build(release): package the checked CHANGELOG, lock and remap host paths
hbgit Oct 28, 2026
855437f
docs: hand-linked init calls, gate coverage gap, leftover KLEE temp f…
hbgit Oct 28, 2026
a94e8f4
fix(build): keep the work directory out of the IR modules' source_fil…
hbgit Oct 28, 2026
1540141
fix(docker): give the test stage python3 and gen_ll.py
hbgit Oct 28, 2026
8b9d367
Merge pull request #56 from hbgit/feat/drop-in-runtime
hbgit Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 32 additions & 2 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ condition checkers behind the `VccChecker` trait; a checker returns `Safe` or
a violated property, and the FFI layer records violations in the shared state.
`output` serializes that state as the JSON report written to stdout.

The optional `libfuzzer` feature provides the LibFuzzer callback and
nondeterministic input generators in `nondet/libfuzzer.rs`. Cargo features and
Since 2.0.0 (D6) the C ABI is the Map2Check runtime ABI only
(`scripts/check-export-set.sh`); the generated IR modules of
`scripts/runtime-ir/gen_ll.py` define the other C names (modes, generators,
wasm stubs) and forward to the `__m2c_rt_*` entry points. Cargo features and
the native/bitcode build setup are declared in `Cargo.toml` and `Dockerfile`;
consult those files before changing how analysis modes are linked.

Expand All @@ -62,3 +64,31 @@ consult those files before changing how analysis modes are linked.
- `CLAUDE.md` describes the former C/CMake implementation. For this Rust
checkout, use `README.md`, `Cargo.toml`, `.github/workflows/CI.yml`, and the
current Rust sources for build commands and behavior.

## Regras obrigatórias

1. **GitHub CLI e ações remotas somente sob solicitação explícita.**
Não execute, sem um pedido explícito do usuário na mensagem atual, comandos `gh` que
criem, alterem ou encerrem algo no GitHub: `gh pr create/merge/close/comment/review`,
`gh issue create/close/comment/edit`, `gh release`, `gh repo` e similares. O mesmo vale
para `git push`, criação de tags remotas e alteração de branches remotos. Comandos apenas
de leitura (`gh pr view`, `gh issue list`) são permitidos. Na dúvida, pergunte antes.

2. **Escopo restrito a este repositório.**
Todas as modificações de código, testes, configurações e documentação devem ser feitas
somente neste repositório. Nunca altere, faça commit ou abra PR/issue no repositório do
Map2Check, nem em qualquer outro repositório.

3. **Map2Check para testes de integração: cópia local e sem versionamento.**
- Baixe o Map2Check sempre do branch `develop`, para o diretório `vendor/map2check/` (ou
outro que o usuário indicar), por meio de
`git clone --depth 1 --branch develop <url> vendor/map2check`. Não use tags nem tarballs
de release.
- Logo após o download, remova o versionamento com `rm -rf vendor/map2check/.git`, para
que nenhum comando git atue sobre o repositório original.
- Garanta que `vendor/map2check/` esteja no `.gitignore` deste repositório, para que a
cópia não seja commitada aqui.
- Registre o commit do `develop` baixado (por exemplo, em `vendor/MAP2CHECK_VERSION`) para
tornar os testes reproduzíveis.
- Não edite os fontes baixados. Se um teste exigir mudanças no Map2Check, pare e informe
o usuário.
326 changes: 269 additions & 57 deletions .github/workflows/CI.yml

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,9 @@ map2check.h

# Arquivos de release (scripts/package-release.sh)
dist/

# Cópia local do Map2Check para testes de integração (sem versionamento)
vendor/map2check/

# Cache de bytecode do Python
__pycache__/
189 changes: 189 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,195 @@ the C ABI or the JSON report must update them.

## [Unreleased]

## [2.0.0-rc.1] - 2026-10-28

This release turns the library into the drop-in runtime of Map2Check
`develop`: the C ABI is the C runtime's, the package carries the 21 bitcode
modules that replace the C ones, and two differential gates against the C
runtime passed.

- **Validated against** Map2Check `develop`
`0bca42eb89d116178e6b52f52acaf73f7c305088` (`MAP2CHECK_VERSION` in the
archive); its C runtime modules are byte for byte those of `3e914528ec57`,
the commit of the first gate.
- **Packaging.** The archive has the 21 `lib/*.bc` (`scripts/build-runtime-bc.sh`),
`MAP2CHECK_VERSION` and an inner `SHA256SUMS`, besides the header and the
static libraries (`scripts/package-release.sh`). `scripts/it/overlay-install.sh`
installs the modules over a C install, or copy `lib/*.bc` into
`${MAP2CHECK_PATH}/lib`. See `docs/integration-guide.md` and
`docs/release.md`; `docs/cutover/handoff-map2check.md` suggests what the
Map2Check maintainer would change to adopt the package.
- **Gate 1** (2026-10-27, `docs/cutover/gate-2026-10-27.md`): `gate: PASS`
after the approval of SD-24, SD-25, SD-26 and the extension of SD-20, with
the 2.0 s compile allowance for `afl` and `hybrid` wall time
(`docs/cutover/decisoes.md`; not an SD).
- **Gate 2** (2026-10-28, `docs/cutover/gate-2026-10-28.md`): `gate: PASS` on
the first comparison against the C baseline of `0bca42eb89d1`, with no new
deviation: median wall ratio 0.905 (limit 1.10), median RSS ratio 1.022
(limit 1.36), no timeouts.

### Breaking changes

- **The C ABI is the Map2Check runtime ABI only (D6, Task 2.10).**
`libmap2check.a` exports exactly the names of the C runtime of Map2Check
`develop` that its core modules own (`Map2CheckFunctions`, `TrackBBLog`,
`NonDetLog`, `PropertyGenerator`; `map2check_init`, `map2check_success`,
`map2check_track_bb`, `map2check_target_function`, `map2check_error`,
`map2check_exit`, `map2check_destroy`, `map2check_get_current_step`,
`map2check_next_current_step`, `__VERIFIER_error`, `write_property`,
`nondet_log_init`, `nondet_log_destroy` and the 23 `map2check_nondet_<t>`)
and the `__m2c_rt_*` core entry points the generated IR modules forward to;
`scripts/check-export-set.sh` fails on anything else. The rest of the C
runtime ABI is defined by the IR modules of `scripts/runtime-ir/gen_ll.py`
(D7). Left the C ABI and the header:
- the 1.x core API: `map2check_reset`, `set_false_result`,
`get_current_property`, `get_current_step`, `get_next_step`,
`print_all_containers_as_json`, `vcc_reset_meta_data`,
`map2check_set_memcleanup`, `map2check_set_null_is_valid`,
`map2check_enable_witness` (its C ABI is now `__m2c_rt_witness_enable`),
`map2check_set_mode` (and the `AnalysisMode` enum of the header),
`map2check_reach_target`, `map2check_save_basic_block_log`,
`map2check_is_in_trackbb_container`, `map2check_map_{alloca,
non_static_alloca,funct_address,malloc,calloc,posix_memalign,free,
store_pointer}`, `map2check_check_{load,free,free_resolved_address,
deref,mem_endprog}`, `map2check_is_valid_assert`, the 17
`map2check_save_nondet_log_<t>` (and `non_det_log_t`, `bbtrack_log_t`,
`enum var_type_t` of the header), `map2check_binop_{add,sub,mul,div}_int`,
`map2check_binop_{add,sub,mul,div}_unsigned`, `map2check_binop_neg_int`,
`map2check_binop_{shl,shr}_int`, `map2check_binop_shr_unsigned` and
`map2check_binop_{add,sub,mul,div,rem}_signed`. They stay Rust functions
of `map2check::ffi` that the Rust tests drive;
- the 1.x exports whose C names an IR module now defines with the C
signature: `map2check_check_deref`, `map2check_wasm_{malloc,free,
check_access}` (`AnalysisModeMemtrack.bc`), `wasm_rt_{allocate_memory,
grow_memory,free_memory,allocate_funcref_table,free_funcref_table,
is_initialized,init,free,trap}` and
`w2c_wasi__snapshot__preview1_proc_exit` (`WasmRuntimeStubs.bc`);
- the `libfuzzer` feature (`LLVMFuzzerTestOneInput`,
`__VERIFIER_nondet_<t>`, `__VERIFIER_assume`, `__VERIFIER_assert`,
`map2check_fuzzer_assume`, `lib/libmap2check_libfuzzer.a` of the release
archive) and the `klee` feature of `klee/Cargo.toml` with
`scripts/build-klee-runtime.sh`, `map2check-klee.bc` and
`tests/klee_paths.sh`: the generators are the IR modules
`NonDetGenerator{None,Klee,AFL}.bc` (SD-07, SD-08, SD-11 and SD-18 say
what changed). The self-tests of the bitcode post-processing moved to
`scripts/test-klee-postprocess.sh`.
`map2check_assume`, `map2check_assume_loop` and `map2check_crab_assume` are
delivered by the glue IR of `Map2CheckFunctions.bc`
(`scripts/runtime-ir/test-assume-link.sh`); `docs/runtime-abi/pending.txt`
is empty. `tests/ffi_harness.c` and the programs of `test/` link the
staticlib with the IR modules they need (`scripts/build-c-abi-program.sh`).
The D5 mapping (`docs/cutover/abi-mapping.tsv`, `scripts/symbol-matrix.sh`,
`tests/core_api_coverage.rs`) is gone with D5.
- `map2check_init` takes the C runtime's `int isSvComp` (ignored), and
`ViolatedProperty` has the values of the C runtime's `enum ViolatedProperty`
(`NONE` 0 … `FALSE_DIVBYZERO` 9, `Concurrency` 10), which
`set_false_result` and `get_current_property` now use. `map2check_init` no
longer removes property files of an earlier run, as the C runtime.

### Added

- **The runtime as the 21 bitcode modules Map2Check links (Task 3.1).**
`scripts/build-runtime-bc.sh <out-dir>` (was the test build
`scripts/runtime-ir/build-test-runtime-bc.sh`) writes exactly
`Map2CheckFunctions.bc` ... `WitnessGenerationNone.bc`, the same bytes on
every build; `scripts/it/overlay-install.sh` copies a C install of
Map2Check and replaces only its `lib/*.bc`.

- The memcleanup analysis mode of the Map2Check C runtime ABI (Task 2.6 of
the drop-in plan): core entry points `__m2c_rt_memcleanup_analysis_{init,
destroy,is_program_correct,generate_aux_witness_files}` and
`__m2c_rt_memcleanup_map2check_{load,check_cstring,check_deref,malloc,
calloc,posix,free,free_resolved_address,add_store_pointer,alloca,
non_static_alloca,function}`. They share the memory rules of the memtrack
entry points (`MemMode`); what differs is `AnalysisModeMemcleanup.c`'s: the
leak is FALSE-MEMCLEANUP only while a pointer variable still refers to it,
`map2check_load`, `map2check_check_cstring` and `map2check_check_deref` are
empty, and no free is a FALSE-FREE. A release with no allocation row goes on
where develop crashes (SD-23). The C names are defined only by the generated
IR module `AnalysisModeMemcleanup.ll` (no `map2check_wasm_*`).
- The memtrack analysis mode of the Map2Check C runtime ABI (Task 2.5 of the
drop-in plan): core entry points `__m2c_rt_memtrack_analysis_{init,destroy,
is_program_correct,generate_aux_witness_files}` and
`__m2c_rt_memtrack_map2check_{load,check_cstring,check_deref,malloc,calloc,
posix,free,free_resolved_address,add_store_pointer,alloca,
non_static_alloca,function,wasm_malloc,wasm_free,wasm_check_access}`, with
the C signatures and semantics of `AnalysisModeMemtrack.c`, `AllocationLog.c`,
`ListLog.c` and `HeapLog.c` over develop's heap, allocation and list logs
(`memtrack::c_mode`, one container for the Array and `--btree` builds, D3).
The property files and `heap_log.csv`, `allocation_log.csv` and
`list_log.csv` are the C runtime's byte for byte. The C names are defined
only by the generated IR module `AnalysisModeMemtrack.ll`; the container and
log modules (`ContainerRealloc`, `ContainerBTree`, `BTree`, `AllocationLog`,
`ListLog`, `HeapLog`) are empty IR. The legacy `map2check_check_deref` and
`map2check_wasm_*` exports stay until Task 2.10.
- The assert and none analysis modes of the Map2Check C runtime ABI (Task 2.4
of the drop-in plan): core entry points `__m2c_rt_assert_analysis_{init,
destroy,is_program_correct,generate_aux_witness_files}`,
`__m2c_rt_assert_map2check_assert` and `__m2c_rt_none_analysis_{init,destroy,
is_program_correct,generate_aux_witness_files}`, with the C semantics and
property files of `AnalysisModeAssert.c` and `AnalysisModeNone.c`. The C
names are defined only by the generated IR modules `AnalysisModeAssert.ll`
(where `__VERIFIER_assert` is an empty function, as in C) and
`AnalysisModeNone.ll`, never by `libmap2check.a`; each module's
`analysis_init` selects its mode.
- The overflow analysis mode of the Map2Check C runtime ABI (Task 2.3 of the
drop-in plan): core entry points `__m2c_rt_overflow_analysis_{init,destroy,
is_program_correct,generate_aux_witness_files}`,
`__m2c_rt_overflow_map2check_binop_{add,sub,mul,sdiv,srem}`,
`__m2c_rt_overflow_map2check_binop_{add,sub,mul}_uint` (no-ops, as in C) and
`__m2c_rt_overflow_overflowError`, with the C semantics and property files of
`AnalysisModeOverflow.c`. The C names are defined only by the generated IR
module `AnalysisModeOverflow.ll` (`scripts/runtime-ir/gen_ll.py --module
AnalysisModeOverflow`), never by `libmap2check.a`. The IR generator moved
from the D7 spike to `scripts/runtime-ir/` and now emits the
`signext`/`zeroext` attributes clang-16 gives `char`, `short` and `_Bool`.
- The nondet log of the Map2Check C runtime ABI (Task 2.2 of the drop-in
plan): the 23 `map2check_nondet_<t>` exports of `NonDetLog.h` (`u8`, `u16`,
`u32`, `memory_byte`, `longlong` and `ulonglong` included), `nondet_log_init`,
`nondet_log_destroy` and `__m2c_rt_nondet_log_to_file`, which writes
`klee_log.csv` byte for byte as `NonDetLog.c` does. The log is separate from
the one behind `map2check_save_nondet_log_<t>` and the JSON report, which
are unchanged, but `klee_log.csv` of the witness path is now formatted by the same code (`nondet::c_log`), so a function name longer than 35 bytes is cut there as `NonDetLog.c` does. `__m2c_rt_nondet_log_len`, `_get_i64` and `_set_i64` let the KLEE IR do the row-pinning of `NonDetGeneratorKlee.c`. The `none` generator needs no Rust entry point: it is pure IR.
- The core of the Map2Check C runtime ABI (Task 2.1 of the drop-in plan):
`map2check_track_bb`, `map2check_target_function`, `map2check_error`,
`map2check_exit`, `map2check_destroy`, `map2check_get_current_step`,
`map2check_next_current_step` and `write_property`, with the C signatures,
and the witness entry points `__m2c_rt_witness_generate_aux_files` and
`__m2c_rt_witness_generate_confirmation_file`.

- `__m2c_rt_output_set_atomic(int)` (Task 2.8) selects how the result files
are written: through a temporary file and a rename (SD-20) or in place, as
develop's `fopen("w")`. The drop-in core starts in place and the KLEE
generator turns atomic writes on, so the AFL++ and `none` generators write
as the C runtime (user decision of 2026-10-27). Other builds stay atomic.

### Changed

- **A drop-in core four times smaller (Task 3.3).** The frontend compiles
the program linked with `Map2CheckFunctions.bc` three times with
`afl-clang-fast`, and that time grows with the core's IR. The result files
are now written by `rust/src/cfmt.rs` (the `%u`, `%d`, `%p`, `%lf` and
`%.9g` of glibc, exact, without `core::fmt`) and `rust/src/sys.rs` (the
same libc calls `std::fs`, `std::env` and `std::process` made). The
drop-in build has no serde, serde_json or thiserror (`klee/Cargo.toml` has
no dependencies), no JSON channel, no old-API leak checks, and is built
at `opt-level = "z"`. The core went from 34 582 to 8 865 instruction lines
(762 580 to 327 164 bytes), one `afl-clang-fast -g -O2` of the smoke
program from 1.74 s to 0.60 s; `scripts/build-runtime-bc.sh` now fails
above 9 500 instruction lines or 13 600 IR lines. The file contents, the
stderr diagnostics and the C ABI do not change. `thiserror` left the main
build too.
- **The drop-in core ends a run through the linked witness module (Task
3.1).** In `Map2CheckFunctions.bc`, `map2check_exit` calls the
`generate_aux_files`/`generate_confirmation_file` of `WitnessGeneration.bc`
or `WitnessGenerationNone.bc`, as `Map2CheckFunctions.c:89-102` does, and
`generate_aux_files` calls the `analysis_generate_aux_witness_files` of the
mode module and the `nondet_generate_aux_witness_files` of the generator
module, which alone writes `klee_log.csv` (`WitnessGeneration.c:15-29`).
Before, the drop-in wrote no witness file at all: nothing turned the
witness option on. The staticlib keeps `__m2c_rt_witness_enable`.

## [1.1.0-rc1] - 2026-10-17

Release candidate of the cutover work: the library becomes the runtime of
Expand Down
Loading
Loading