Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
87a0e3f
fix: preserve semantic graph relationships
DeusData Jul 18, 2026
300225c
wip: capture remaining semantic reference regressions
DeusData Jul 18, 2026
029416f
Merge remote-tracking branch 'origin/main' into qa/call-reference-rebase
DeusData Jul 31, 2026
bccd229
fix(pipeline): delete the old generation only when rebuilding it
DeusData Aug 1, 2026
26c0d4c
fix(extract): restore the TypeScript namespace scope on the def side
DeusData Aug 1, 2026
c577c79
fix(pipeline): quarantine the real destination and report why a publi…
DeusData Aug 1, 2026
2d36c7b
fix(python): see walrus, PEP 695 and parenthesised callable arguments
DeusData Aug 2, 2026
e47d932
chore(lint): compose Windows file times without ULARGE_INTEGER
DeusData Aug 2, 2026
c4c6005
feat(python): a proven callable value on an assignment RHS is a CALL_…
DeusData Aug 2, 2026
f056aa9
fix(build): track internal/cbm/lsp headers in whole-program targets
DeusData Aug 2, 2026
b547fda
fix(tests): portable mtime setter for the incremental repoint test
DeusData Aug 2, 2026
bfab0df
ci(board): discharge the bug-repro board to manual dispatch
DeusData Aug 2, 2026
d393221
fix(tests): write pipeline fixtures in binary mode
DeusData Aug 2, 2026
b020748
fix(pipeline): release db_path on both exits of dump_and_persist_hashes
DeusData Aug 2, 2026
67bcc28
fix(kotlin): resolve callable references in expression bodies, incl. …
DeusData Aug 2, 2026
37d23d3
feat(kotlin): receiver-typed property references decide their occurrence
DeusData Aug 2, 2026
43e861e
fix(pipeline): release db_path/db_dir on the manifest abort paths; fr…
DeusData Aug 2, 2026
004a9a4
perf(extract): O(1) walk-state maintenance; gate parent probes by lan…
DeusData Aug 2, 2026
e2f5b6a
fix(pipeline): module-QN strings must outlive the cross registries th…
DeusData Aug 2, 2026
679871a
fix(c_lsp): remove the whole-function ASan suppression; assert the re…
DeusData Aug 2, 2026
925e662
fix(tests): portable env calls in the parallel-determinism repro
DeusData Aug 2, 2026
80afcd6
fix: close the memory-error paths the clang-analyzer lane surfaced
DeusData Aug 3, 2026
c9886d4
feat(ci): MemorySanitizer lane — instrumented libc++/zlib image, full…
DeusData Aug 3, 2026
7ad0003
fix(msan): stack-size floor for sanitized builds; document the exclud…
DeusData Aug 3, 2026
f96ddf5
chore(msan): keep the lane local and exploratory, not in CI
DeusData Aug 3, 2026
54dd5ad
ci(msan): restore the lane; x86-64 CI is its authoritative venue
DeusData Aug 3, 2026
02f8701
fix(msan): the lane runs the complete code by default
DeusData Aug 3, 2026
c51482a
fix(log): make logging configuration atomic
DeusData Aug 3, 2026
ade9f09
test(daemon-runtime): spawn the blocked executable without forking
DeusData Aug 3, 2026
0fe0f45
build(test): close the gaps in the sanitizer matrix
DeusData Aug 3, 2026
0c223d9
build(lint): pin analyzer suppressions to the code they argue about
DeusData Aug 3, 2026
f5baf1b
fix(ci): route the new lanes through canonical leg entries
DeusData Aug 3, 2026
9a41d83
fix(log): make the atomic sink initializer a compile-time constant
DeusData Aug 3, 2026
64bd272
fix(ci): mark the new lane scripts executable, and let the contract s…
DeusData Aug 3, 2026
6c22338
fix(pipeline): create the publication staging file exclusively
DeusData Aug 3, 2026
7d390c5
fix(ci): unbreak the MSan and diag lanes on x86-64
DeusData Aug 3, 2026
5adcfd2
style: drop the stray blank line before the staging-path declaration
DeusData Aug 3, 2026
6a0adb4
fix(msan): scope the zstd stdint workaround to the zstd object
DeusData Aug 3, 2026
8d3685b
feat(store): persist per-file LSP surfaces for closure-repair increme…
DeusData Aug 3, 2026
94189e6
feat(pipeline): serialize and publish per-file LSP surfaces
DeusData Aug 3, 2026
a4cef7f
fix(msan): pin _GNU_SOURCE for the zstd object alongside the forced s…
DeusData Aug 3, 2026
f07c2e2
feat(pipeline): closure-repair incremental route
DeusData Aug 3, 2026
bc3cc3f
fix(msan): shard the lane one suite per process, origins default 1
DeusData Aug 3, 2026
45c40ed
feat(pipeline): alias-config governance for closure repair
DeusData Aug 3, 2026
1ef7b02
perf(pipeline): skip Tier-2 registry prebuild for floor-sized closures
DeusData Aug 3, 2026
d8fffd0
fix(pipeline): split the closure_plan log line over the itoa ring cap…
DeusData Aug 3, 2026
bd1d2e9
perf(pipeline): parallelize semantic-manifest hashing
DeusData Aug 3, 2026
5722231
feat(pipeline): delta-repair groundwork — CoW staging + shared finalizer
DeusData Aug 3, 2026
bbd1333
feat(pipeline): delta-merge executor for the closure route
DeusData Aug 3, 2026
6ec9e94
perf(pipeline): delta fixes from scale testing — global watermark, fu…
DeusData Aug 3, 2026
87eafef
perf(pipeline): pin dependency-query join order; gate the coverage sh…
DeusData Aug 3, 2026
4e99ddf
chore(store): strip the coverage-timing diagnostic scaffolding
DeusData Aug 3, 2026
a33a82f
perf(pipeline): parallel rehydration; skip the outgoing quick_check o…
DeusData Aug 3, 2026
708603a
fix(pipeline): release the package map the closure probe builds
DeusData Aug 3, 2026
abfac06
perf(pipeline): narrow the delta proxy set; map unproxied symbols at …
DeusData Aug 4, 2026
b33a4de
fix(build): keep alignment checking off vendored tre.o; make SANITIZE…
DeusData Aug 4, 2026
b3fb668
fix(msan): whitelist the deep-recursion suites; correct the lane's di…
DeusData Aug 4, 2026
db91b88
fix(test): stop asserting a scheduling race in the forged-identity test
DeusData Aug 4, 2026
96a25b2
fix(test-harness): run extraction in the quiet tail, not the 18-job wave
DeusData Aug 4, 2026
d6c8d1d
fix(msan): split the known-red block by cause; fix the RSS one properly
DeusData Aug 4, 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
25 changes: 25 additions & 0 deletions .github/workflows/_lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,28 @@ jobs:

- name: Lint (cppcheck + clang-format, no clang-tidy — enforced locally)
run: scripts/lint.sh --ci CLANG_FORMAT=clang-format-20

# Memory-analyzer gate (user decision 2026-08-03: runner cost accepted).
# Path-sensitive clang-analyzer over the memory checks only: leak paths,
# null derefs, uninitialized reads. Its first run produced 9 real fixes;
# the gate is green because every false positive was RESTRUCTURED for
# provability (never suppressed — the NOLINT ban applies here too).
# Vendored-tree diagnostics are path-filtered, mirroring .cppcheck.
lint-mem:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Install build deps
run: sudo apt-get update && sudo apt-get install -y zlib1g-dev

- name: Install LLVM 22 (pinned analyzer toolchain)
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-22 main" | sudo tee /etc/apt/sources.list.d/llvm-22.list
sudo apt-get update
sudo apt-get install -y clang-tidy-22

- name: Memory-analyzer gate
run: scripts/ci/lint-mem.sh clang-tidy-22
123 changes: 123 additions & 0 deletions .github/workflows/_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,129 @@ jobs:
# platform can surface a race the others miss. Windows has no TSan runtime on
# any toolchain (documented irreducible gap); this shared-code coverage is
# its substitute.
# Memory-diagnostics lane (user decision 2026-08-03: runner cost accepted).
# Newest pinned LLVM sanitizer runtime + straighter stacks over the full
# parallel suite — catches what an older compiler-rt can miss. Same
# canonical scripts/test.sh wave as every other leg.
test-diag:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Install deps
run: sudo apt-get update && sudo apt-get install -y zlib1g-dev ccache

- name: Install LLVM 22 (pinned diagnostic toolchain)
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-22 main" | sudo tee /etc/apt/sources.list.d/llvm-22.list
sudo apt-get update
sudo apt-get install -y clang-22

- name: Compiler cache (content-verified, restore)
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ github.workspace }}/.ccache
key: ccache-diag-${{ github.ref }}-${{ github.sha }}
restore-keys: |
ccache-diag-${{ github.ref }}-
ccache-diag-

# Also enables the ASan checks that are off by default in every other
# lane: stack-use-after-return, stack-use-after-scope, and strict string
# checks. Mirrors `make -f Makefile.cbm diag`, including its reasoning
# for leaving detect_invalid_pointer_pairs out.
- name: Test (clang-22, ASan+UBSan + off-by-default ASan checks)
env:
ASAN_OPTIONS: "detect_stack_use_after_return=1:strict_string_checks=1:detect_stack_use_after_scope=1"
run: |
scripts/test.sh CC=clang-22 CXX=clang++-22 \
SANITIZE="-fsanitize=address,undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls"

- name: Compiler cache (save)
if: always()
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ github.workspace }}/.ccache
key: ccache-diag-${{ github.ref }}-${{ github.sha }}

# MemorySanitizer lane (stage 2). Uninitialized READS are the one
# memory-error class no other lane covers dynamically. The image carries
# MSan-instrumented libc++/libc++abi/libunwind + zlib (vendored C deps
# instrument in-tree); scripts/msan.sh drives the build and the suite.
#
# THIS JOB IS THE AUTHORITATIVE VENUE for the lane. It previously ran WITHOUT
# the script's default exclusions to settle whether those were an aarch64
# artifact — the local ladder cannot answer that, having no faithful x86-64
# emulation. It has now answered it, and the answer SPLIT the list:
#
# - the five deep-recursion suites overflow their thread stacks on x86-64
# too, so that limit is NOT architectural;
# - `cli` does not overflow here at all — it fails in the install path for
# an unrelated, still-undiagnosed reason;
# - `incremental` was a shadow-memory RSS artifact, now fixed in the test
# itself rather than skipped, so it stays in the lane.
#
# Per-cause detail lives in scripts/msan.sh, which is the single authoritative
# list both venues now share. Zero use-of-uninitialized-value findings were
# reported across the lane on either architecture.
test-msan:
runs-on: ubuntu-latest
timeout-minutes: 180
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Buildx cache
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: /tmp/.buildx-msan
key: buildx-msan-${{ hashFiles('test-infrastructure/Dockerfile.msan') }}

- name: Build MSan image (cached layers)
run: scripts/ci/msan-lane.sh build

- name: MSan suite (exclusions per scripts/msan.sh)
run: scripts/ci/msan-lane.sh run

# macOS leak coverage. LeakSanitizer runs by default under ASan on Linux, so
# test-unix's ubuntu legs have always had it; on macOS it is off by default
# and Apple's clang refuses to turn it on, which left an entire platform with
# zero leak detection. Upstream (Homebrew) LLVM supports LSan on darwin/arm64,
# so this leg is the ordinary ASan suite built with that toolchain and run
# with detect_leaks=1. Mirrors the local `make -f Makefile.cbm test-lsan`.
test-lsan-macos:
runs-on: macos-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Install LSan-capable toolchain
run: brew install llvm ccache

- name: Compiler cache (content-verified, restore)
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ github.workspace }}/.ccache
key: ccache-lsan-${{ github.ref }}-${{ github.sha }}
restore-keys: |
ccache-lsan-${{ github.ref }}-
ccache-lsan-

- name: Test (Homebrew clang, ASan + LeakSanitizer)
env:
ASAN_OPTIONS: "detect_leaks=1:halt_on_error=1"
run: |
LLVM_PREFIX="$(brew --prefix llvm)"
scripts/test.sh CC="$LLVM_PREFIX/bin/clang" CXX="$LLVM_PREFIX/bin/clang++"

- name: Compiler cache (save)
if: always()
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ github.workspace }}/.ccache
key: ccache-lsan-${{ github.ref }}-${{ github.sha }}

test-tsan:
strategy:
fail-fast: false
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/bug-repro.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ on:
type: choice
options: ['all', 'linux', 'macos', 'windows']
default: 'all'
# Iteration convenience: any push to a qa/** branch runs the board straight
# from that branch's own copy of this file (no main merge needed). Non-gating.
push:
# Exclude the dedicated lane branches so they only run their own workflow
# (fast-repro / soak / smoke), not the full board too.
branches: ['qa/**', '!qa/fast-**', '!qa/soak-**', '!qa/smoke-**']
# DISPATCH-ONLY by decision (2026-08-02): the board's primary venue is the
# LOCAL multi-leg CI (scripts/repro.sh on macOS/Linux/Windows), which can hold
# the real-repo corpus tier that GitHub runners never can -- the old qa/**
# push trigger auto-ran a board that was structurally red from those corpus
# skips, repainting red that blocked nobody. Manual dispatch remains for
# cross-platform spot checks (gh workflow run bug-repro.yml --ref <branch>).

permissions:
contents: read
Expand Down
Loading
Loading