diff --git a/docs/language_status/README.md b/docs/language_status/README.md index 6d5371891..897dfdfc2 100644 --- a/docs/language_status/README.md +++ b/docs/language_status/README.md @@ -96,7 +96,7 @@ epic #813), not that no cases exist. | solidity | production | standard_block | 40/53 | 42 | 72 | not written | | sqlite | production | multi_style_dash | 47/52 | 63 | 96 | not written | | swift | production | recursive_block | 51/52 | 36 | 91 | not written | -| tcl | production | line_exclusive | 40/48 | 40 | 65 | not written | +| **[tcl](tcl.md)** | production | line_exclusive | 39/47 | 43 | 65 | **written** (§9 via tri-comparison sweep) | | typescript | production | standard_block | 59/62 | 76 | 101 | not written | | **[yacc](yacc.md)** | production | standard_block | 31/47 | 21 | 48 | **written** (§9 via tri-comparison sweep) | | yaml | production | line_exclusive | 31/49 | 45 | 65 | not written | diff --git a/docs/language_status/tcl.md b/docs/language_status/tcl.md new file mode 100644 index 000000000..6bbdb2666 --- /dev/null +++ b/docs/language_status/tcl.md @@ -0,0 +1,311 @@ +# Tcl — Structural Signature Coverage + +Snapshot generated 2026-08-30 against `main`. Source: `LANGUAGE_DEFINITIONS["tcl"]` in +`gitgalaxy/standards/language_standards.py`, `tests/extraction/languages/test_tcl.py` / +`test_tcl_strict.py`, closed GitHub issues, and the tri-comparison ledger. Re-run the +`language-status` skill's data-gathering commands before trusting the §1–8 numbers if this doc +looks old relative to `last_updated` below. + +**Scope note:** §9 was written by the `tri-comparison-ledger-sweep` skill and is the part of this +doc with the most recent, most detailed investigation behind it — a real 3-way +GitGalaxy / tree-sitter-tcl / Universal-Ctags comparison on the `language-crucible` corpus. §§1–8 +are the standard primary-source snapshot. + +## 1. At a glance + +| Field | Value | +|---|---| +| `_meta.status` | `production` | +| `_meta.target_version` | Tcl 8.6 / SQLite Test Suite | +| `_meta.blueprint_version` | (unset) | +| `_meta.last_updated` | 2026-03-11 | +| `lexical_family` | `line_exclusive` (`#`-to-end-of-line only — Tcl has no native block comment; `if 0 { ... }` is a real but unrecognized developer hack, not a comment form this engine models) | +| Structural signature keys wired | 39 / 47 (8 explicit `None`) | +| Function-slicing integration mode | **Mode B (brace slicing)** — no `ScopeParsingRegistry` entry; `proc name {args} {body}`'s trailing `{ }` bounds the body directly, same default path as most brace languages | +| Extraction-gauntlet + strict test files | `test_tcl.py` (43), `test_tcl_strict.py` (65) — 108 passing | + +## 2. Identification surface + +- **Extensions:** `.tcl`, `.itcl`, `.tbc` (compiled bytecode), `.tm` (Tcl Modules). **`.test` was + deliberately removed** (inline comment: `# Removed .test`) — see §5, this has a real, sizable + effect on what the real-world corpus below actually gets scanned. +- **Exact filenames:** `tclIndex`, `pkgIndex.tcl` (package index files). +- **Discriminators:** `.tcl`, `tclIndex`, `.test`, `Makefile` — `.test` is listed here as a + disambiguation *anchor* only (helps confirm a directory is a Tcl project), never as a + scannable extension itself; the two lists serve different purposes and aren't the same + question. +- **Shebangs:** `tclsh`, `wish` (Tk), `bin/expect`, `jimsh` (Jim Tcl). + +## 3. What GitGalaxy detects + +`func_start` anchors `^\s*proc\s+` where `` allows Tcl's real identifier character +set for procs (`a-zA-Z0-9_:\-!?` — colons for namespace qualification, plus the `-`/`!`/`?` +Tcl convention for predicate/mutator-style names like `dict-exists?`), optionally followed by the +full brace-nested parameter list (up to 3 levels of `{ }` nesting, to survive deeply nested +default-value forms) before the lookahead confirms a real declaration head. `args` captures that +same brace-nested parameter list with the identical 3-level-nesting tolerance and reports it via +`_args_tcl_pattern_list_groups` (an opt-in depth-aware parsing mode, not a plain capture group, +needed because Tcl parameter lists routinely nest — `proc foo {{db db} {mode readonly}} {...}`). +`class_start` covers Tcl's three real OOP conventions — `oo::class create ` (Tcl 8.6's +native TclOO), `snit::type ` (Snit), `itcl::class ` (incr Tcl) — and is in +`_CLASS_START_NAMED_EXTRACTION_LANGS`, so a real match reaches the named class list, not just a +signal count (see §5 — the corpus at hand has none of these forms to exercise it against). + +The `test` key is Tcl's own **"SQLite mega-sensor"** — a rule built specifically to recognize +SQLite's Tcl test-harness vocabulary (`do_test`, `do_execsql_test`, `do_catchsql_test`, +`do_eqp_test`, `do_ioerr_test`, `do_faultsim_test`, bare `test `, `tcltest::`, +`finish_test`) alongside standard `tcltest`. `_dependency_capture` anchors +`package require` / `source` / `load` and captures the module/file argument through an optional +`-exact` flag and optional brace/quote wrapping. The remaining wired keys (`branch`, `safety`, +`safety_bypasses`, `io`, `concurrency`, `reflection_metaprogramming`, `globals`, `encapsulation`, +…) read Tcl's own control-flow and command vocabulary directly — e.g. `safety_bypasses` is +`eval`/`uplevel`/`upvar` (Tcl's actual unrestricted-evaluation/context-manipulation primitives, +not a generic cross-language stand-in), and `globals` specifically handles `::env` needing no +leading `\b` (`$::env(HOME)` sits between two non-word characters, where a real word boundary can +never fire). + +## 4. What GitGalaxy explicitly does not track + +Eight keys are wired to `None`: + +- `decorators` — Tcl has no decorator/annotation syntax. +- `generics` — no generic/type-parameter syntax. +- `dependency_injection` — no DI/IoC framework convention in the language itself. +- `ssr_boundaries` — not a web-rendering language construct Tcl has. +- `macros` — no C-style preprocessor. +- `pointers` — no pointer/address-of syntax. +- `memory_alloc` — no manual memory-management primitives. +- `inline_asm` — no inline-assembly construct. + +Everything else in the 47-key schema is wired. + +## 5. Known limitations (accepted / tracked) + +- **`.test` files are entirely outside the scannable extension surface**, by design (§2). The + real-world consequence is large, not theoretical: the `language-crucible` tcl corpus has 156 + real files across 9 upstream repo folders (see §8's `SOURCES.md`), but only **29** carry a + `.tcl`/`.itcl`/`.tbc`/`.tm` extension — the other **114** (73% of the corpus, all of SQLite's + own `*.test` regression suite: `sqlite_core_dml`, `sqlite_query_planner`, `sqlite_cte_window`, + `sqlite_json_triggers`, `sqlite_fts5`, `sqlite_rtree`) never reach prism/detector at all. + Confirmed directly (`find data/tcl -type f | sed 's/.*\./&/' | sort | uniq -c`: 114 `.test` + vs. 32 `.tcl`) and via `tree_sitter_accuracy_audit.py --lang tcl` (`files_scanned: 29`). This + is an intentional scoping choice (`# Removed .test` in `language_standards.py`, no other + language in this repo claims `.test` as a real extension, so it isn't a collision-avoidance + case either) with no further rationale recorded in issue/commit history — worth a deliberate + look, not silently assumed correct or incorrect. **Every number in §9 below is scoped to the + 29 `.tcl` files only** — it says nothing about extraction quality on the other 114. +- **`class_start` has zero real-world corpus coverage.** All three of its wired conventions + (TclOO `oo::class create`, Snit `snit::type`, incr Tcl `itcl::class`) are real, correctly-wired + patterns, but neither `macports_port_api`/`macports_registry` (procedural, namespace-based Tcl, + no OOP framework in use) nor the SQLite test harness declares a single one — confirmed via + `tree_sitter_accuracy_audit.py --lang tcl` (`found_classes: 0`, `real_classes: 0`) and ctags' + own Tcl kind table having no class-shaped kind at all (`CTAGS_CLASS_KINDS["tcl"] = set()`). + Structurally the same "frontier language, no ground truth" situation lua's `class_start` + heuristic is in (see `lua.md` §5/§9) — the difference is Tcl's three forms are explicit + keyword-anchored declarations, not a best-effort heuristic, so there's less inherent precision + risk if a real one ever appears; it just hasn't in this corpus yet. +- No `known_limitation`-named test cases exist in `test_tcl.py`/`test_tcl_strict.py` — the + gauntlet has no currently-accepted, deliberately-not-fixed extraction gap on record. + +## 6. Test depth + +- **Extraction-gauntlet tests:** 43 cases in `tests/extraction/languages/test_tcl.py` + (`func_start` / `args` / `class_start` / `_dependency_capture`, valid / invalid / pathological). +- **Strict-signature tests:** 65 cases in `tests/extraction/languages/test_tcl_strict.py` (ReDoS + immunity, scaling-ratio methodology, boundary correctness). + +## 7. Relevant closed work + +- [#848](https://github.com/squid-protocol/gitgalaxy/issues/848) — extraction hardening: tcl + (epic #813). +- [#614](https://github.com/squid-protocol/gitgalaxy/issues/614) — strict parsing tests for `tcl` + structural signatures (epic #1069). +- [#1512](https://github.com/squid-protocol/gitgalaxy/issues/1512) — `args` regex overcounted a + default-value braced pair (`proc foo {{db db}}` measured `got=2, real=1`); fixed in + [#1539](https://github.com/squid-protocol/gitgalaxy/pull/1539). +- [#1504](https://github.com/squid-protocol/gitgalaxy/issues/1504) — `tree_sitter_accuracy_audit` + itself never found tcl's own parameter list (grammar field is `arguments`, the audit was + reading `parameters`) — a ground-truth-tool bug, not a GitGalaxy defect; fixed in + [#1507](https://github.com/squid-protocol/gitgalaxy/pull/1507). +- [#2218](https://github.com/squid-protocol/gitgalaxy/issues/2218) — "func_start misses procs + with nested braces in args", fixed in [#2224](https://github.com/squid-protocol/gitgalaxy/pull/2224) + — later shown by #2242's own re-investigation to have named the wrong mechanism (the real cause + was a `detector.py` quote-shielding bug, not `func_start` itself), though the fix direction + (crediting ctags/tree-sitter, debiting GitGalaxy) was already correct. +- [#2242](https://github.com/squid-protocol/gitgalaxy/issues/2242) — real confirmed engine + defect: `detector.py`'s generic (non-language-specialized) quote-shielding branch used an + *unbounded* single-quote pairing regex for tcl (which has no single-quote string syntax at + all), so an odd count of literal `'` characters in unrelated SQL text + (`sqlite/tester.tcl:2234`'s `string map {' ''} $contents`) desynced the pairing and blanked out + two real proc headers (`drop_all_tables`, `drop_all_indexes`) as if they were inside a string. + Fixed in [#2266](https://github.com/squid-protocol/gitgalaxy/pull/2266) by gating tcl out of + that shielding branch entirely (same convention already used for perl/powershell, which also + have no single-quote string syntax). +- [#2512](https://github.com/squid-protocol/gitgalaxy/issues/2512) / the ctags-side fix landed + 2026-08-30 (see §9) — not a GitGalaxy issue at all, a fix to this repo's own `ctags_reader.py` + tri-comparison tooling. + +## 8. Real-world evidence + +The tri-comparison corpus is `language-crucible/data/tcl/` — 156 files across 9 upstream repo +folders (see the corpus's own `SOURCES.md`), though only 29 are scannable `.tcl` files (§5): + +- **[macports-base](https://github.com/macports/macports-base)** (`macports_port_api/`, + `macports_registry/`, 30 total files / 27 `.tcl`) — real, non-test-harness application Tcl: the + `Portfile` DSL implementation (`src/port1.0/`, namespace-qualified procs, `option`/`options` + metaprogramming, heavy `eval`/`uplevel`/`upvar`) and the installed-port registry/receipts layer + (`src/registry2.0/`, SQLite-backed state via Tcl bindings). This is the source of the + namespace-qualification convention §9 investigates. `_galaxy_llm.md` on + `gitgalaxy-raw-output/v2.4.7/macports-base`. +- **[sqlite](https://github.com/sqlite/sqlite)** (`sqlite/`, plus the 6 `sqlite_*` `.test`-only + subdirectories excluded from scanning per §5) — the *canonical* stress case for the `test` + key's SQLite mega-sensor: `tester.tcl` (the test harness itself) and `malloc_common.tcl` + (fault-injection helpers) are the two real `.tcl` files that make it into scope; the 114 + `.test` regression files (full-text search, R-Tree, window functions, JSON, the query planner) + document the SQLite project's real Tcl test-suite scale even though they aren't scanned today. + `_galaxy_llm.md` on `gitgalaxy-raw-output/v2.4.7/sqlite`. + +## 9. Tri-comparison: GitGalaxy vs. tree-sitter-tcl vs. Universal Ctags + +**Summary.** Tcl's ledger backlog is fully cleared: **8/8** discrepancy shapes are +`status: "validated"`, **0** currently reproduce as open questions. One real GitGalaxy engine +defect was found and fixed across this doc's history (#2242, three duplicate/stale ledger shapes +all tracing to the same root cause); one real tri-comparison-*tooling* defect (not a GitGalaxy +engine bug) was found and fixed 2026-08-30. Measured via `tree_sitter_accuracy_audit.py --lang +tcl` (scoped to the 29 real `.tcl` files, §5): + +| Metric | Value | +|---|---:| +| `files_scanned` | 29 | +| `real_functions` (tree-sitter ground truth) | 337 | +| `found_functions` | 337 | +| `extra_functions` (GitGalaxy-only, tree-sitter has no record) | 3 | +| `real_classes` / `found_classes` | 0 / 0 (§5 — no corpus coverage, not a defect) | +| `args_exact_match` | 337 / 337 | + +Function recall **100.0%** (337/337), precision **99.1%** (337/340) against tree-sitter alone — +all 3 "extra" occurrences are ledger-validated as GitGalaxy-correct (below), so the real +tri-comparison precision (crediting GitGalaxy where the ledger confirms it) is effectively 100% +too; the raw 99.1% is an artifact of tree-sitter's own narrower reading, not a GitGalaxy gap. +These numbers are **unchanged** by the 2026-08-30 ctags fix below — that fix corrected how this +repo's own tooling *reads* ctags' output, not GitGalaxy's extraction, so it's invisible to a +2-tool (GitGalaxy vs. tree-sitter) audit; it only ever showed up in the 3-way ledger. + +### Confirmed engine defect (1, fixed) + +**Unbounded single-quote pairing swallowed two real proc headers** +(shapes `agree[ctags,tree_sitter]_vs[gitgalaxy]`, `agree[tree_sitter]_vs[ctags,gitgalaxy]`, +`agree[tree_sitter]_vs[gitgalaxy]` — 3 ledger keys, all the *same* 2 real occurrences, drift +between stale/live-rerun snapshots of the same underlying comparison; [#2242](https://github.com/squid-protocol/gitgalaxy/issues/2242)). +Root-caused by driving GitGalaxy's own pipeline directly (`Prism.split_streams` → +`StructuralExtractor._build_brace_safe_stream`) rather than guessing from symptoms: `drop_all_tables` +(`sqlite/tester.tcl:2254`) and `drop_all_indexes` (`:2279`) were completely absent from the +`safe_code` text `func_start` actually matches against, though present in the raw code stream. +`detector.py`'s generic (non-language-specialized) quote-shielding branch — used for tcl since it +had no dedicated branch — included an unbounded single-quote pairing regex (`'(?:\\.|[^'\\])*'`) +with no length cap and no per-language gate, the identical bug class already fixed for +rust/zig/scala/perl. Tcl has **no single-quote string syntax at the language level at all**, so +this shielding was actively harmful, not just imprecise: `sqlite/tester.tcl:2234`'s +`string map {' ''} $contents` (a normal SQL-single-quote-doubling idiom, 3 literal `'` characters +in a 7-char span) desyncs the naive pairing — two of the three get consumed as one `'string,'` +leaving the third to pair with an unrelated `'` inside `drop_all_tables`' own embedded SQL +(`WHERE type IN('`), blanking lines ~2235–2281 as if they were string content, including both +proc headers. Fixed in [#2266](https://github.com/squid-protocol/gitgalaxy/pull/2266) by gating +tcl out of the single-quote pairing entirely, following the same perl/powershell convention. An +earlier fix attempt ([#2218](https://github.com/squid-protocol/gitgalaxy/issues/2218)/[#2224](https://github.com/squid-protocol/gitgalaxy/pull/2224)) +had already corrected the ledger's *direction* (crediting ctags/tree-sitter, debiting GitGalaxy) +but misdiagnosed the mechanism as "func_start misses nested braces in args" — #2242's +investigation corrected the root cause without changing the verdict's outcome. + +### Confirmed tri-comparison-tooling defect (1, fixed, not a GitGalaxy issue) + +**ctags' namespace-qualified proc names were read as bare names** +(shape `agree[ctags]_vs[gitgalaxy,tree_sitter]`, 93 occurrences, all in +`macports_port_api/*.tcl`; fixed 2026-08-30, no separate GitHub issue — found and fixed in the +same tri-comparison-ledger-sweep pass). Every occurrence is a namespace-qualified proc +(`proc portfetch::percent_encode {str} {` in `fetch_common.tcl`). GitGalaxy's `func_start` and +tree-sitter-tcl both read the qualified identifier straight out of the source text +(`portfetch::percent_encode`), matching each other exactly on all 93 — ctags instead splits it +into a bare `name:percent_encode` tag plus a separate `scope:portfetch`/`scopeKind:namespace` +extension field (confirmed directly via `ctags --output-format=json --fields=+znS`), and this +repo's `tests/tools/ctags_reader.py` was dropping that scope field on the floor for tcl +specifically — a pure naming-convention mismatch, not a real disagreement about whether these +procs exist. Fixed by adding `"tcl"` to `ctags_reader.py`'s `_QUALIFY_NAME_WITH_SCOPE`, reusing +the identical scope-joining + verbatim-source-line-guard mechanism already proven for C++'s +`Class::method` out-of-class-definition convention — Tcl's `namespace` scope kind and `::` +separator are both already covered by that generic machinery, so no new parsing logic was +needed, only the language gate. Verified: 0 ctags-only misses remain for tcl functions +corpus-wide (was 93); C++'s own qualification behavior (the only other consumer of this +mechanism) is confirmed byte-for-byte unchanged on all 4 of its own existence discrepancy shapes. + +### Where the other tools have real, documented gaps + +- **Universal Ctags misses namespace-nested / brace-shape edge cases GitGalaxy and tree-sitter + agree on** (shape `agree[gitgalaxy,tree_sitter]_vs[ctags]`, 16 occurrences; "GitGalaxy correctly + extracts proc" — validated by direct sweep 2026-08-24). No credit/debit applied. +- **tree-sitter-tcl misses procs Ctags and GitGalaxy agree on** (shape + `agree[ctags,gitgalaxy]_vs[tree_sitter]`, 13 occurrences; same verdict shape, direct sweep + 2026-08-24). No credit/debit applied. +- **GitGalaxy alone finds real procs neither comparison tool records**, ledger-validated as + GitGalaxy-correct, for at least two different reasons: + - `faultsim_test_result` (`sqlite/malloc_common.tcl:348`) — `proc faultsim_test_result {args} + "uplevel faultsim_test_result_int $args ..."`, where the proc body is a **double-quoted + string**, not a brace-delimited block. Tcl genuinely allows this (the quoted body undergoes + variable substitution differently than a braced one) — both ctags and tree-sitter-tcl's + grammars expect a brace body and miss it entirely. Shapes `agree[gitgalaxy]_vs + [ctags,tree_sitter]` and `agree[gitgalaxy]_vs[tree_sitter]`, credited to GitGalaxy. + - `_check_registry` (`macports_registry/portimage.tcl:259`) — a perfectly ordinary brace-body + proc with a default-value parameter; ctags misses it specifically, tree-sitter finds it fine + (this pairing is why it lands in `agree[gitgalaxy]_vs[ctags,tree_sitter]`, not the larger + ctags-only shape). Investigated further while writing this doc, beyond what the existing + ledger verdict's terse "correctly extracts proc" covered: a raw `ctags -x + --language-force=Tcl` on the same file also misses `deactivate_composite`/`deactivate` + (lines 153/162) — real procs with declaration heads structurally IDENTICAL to the + successfully-tagged `activate_composite`/`activate` pair just above them — while everything + from `_activate_files` (line 331) onward tags correctly again. The three misses form one + contiguous block starting right after `activate`'s own body (lines 79–152) contains + `"Image error: Can't find image file $location"` (line 119, one bare apostrophe inside a + double-quoted string) and ending once a second `'$v'`-shaped pair (two more apostrophes, + line 159, inside `deactivate`'s body) appears — the exact odd/even single-quote-parity + desync shape already confirmed for **GitGalaxy's own** pre-#2242 bug, this time apparently + inside ctags' own Tcl parser. Consistent with, not independently proven against ctags' own + source — noted here and in `ctags_reader.py` (below) rather than filed as an issue against a + third-party tool this repo doesn't maintain. + - `distcheck_main` (`macports_port_api/portdistcheck.tcl`) and `uninstall` + (`macports_registry/portuninstall.tcl`) — confirmed via `tree_sitter_accuracy_audit.py`'s + "extra" sample; real, correctly-declared procs tree-sitter-tcl's own walk doesn't record for + this corpus (not independently re-investigated to a named mechanism beyond that — noted, not + filed, since GitGalaxy's own reading is independently confirmed correct against source). + +### `credit_tools` / `debit_tools` + +- `agree[ctags,tree_sitter]_vs[gitgalaxy]`, `agree[tree_sitter]_vs[ctags,gitgalaxy]`, + `agree[tree_sitter]_vs[gitgalaxy]` — `debit_tools: ["gitgalaxy"]` (the 3 stale/live-rerun + shapes for the same #2242 defect); `credit_tools` set to whichever of `ctags`/`tree_sitter` + each specific shape's `agreeing_tools` names. +- `agree[gitgalaxy]_vs[ctags,tree_sitter]` — `credit_tools: ["gitgalaxy"]` + (`faultsim_test_result`'s double-quoted-body proc). +- All other shapes (including the newly-cleared `agree[ctags]_vs[gitgalaxy,tree_sitter]`) — + neither, per the skill's common case: a confirmed tool-side artifact or an architecture + difference, not a claim that one tool's otherwise-uncorroborated reading was real, or that two + tools shared a mistake. + +### Issues + +- [#848](https://github.com/squid-protocol/gitgalaxy/issues/848) / [#614](https://github.com/squid-protocol/gitgalaxy/issues/614) — epic-level extraction/strict hardening, closed. +- [#1512](https://github.com/squid-protocol/gitgalaxy/issues/1512) — **fixed**: `args` + overcounted a default-value braced pair. +- [#1504](https://github.com/squid-protocol/gitgalaxy/issues/1504) — **fixed**: ground-truth-tool + (not GitGalaxy) bug in `tree_sitter_accuracy_audit.py`'s own tcl param-count reader. +- [#2218](https://github.com/squid-protocol/gitgalaxy/issues/2218) — **fixed**, later + re-diagnosed by #2242 (same outcome, corrected mechanism). +- [#2242](https://github.com/squid-protocol/gitgalaxy/issues/2242) — **fixed**: unbounded + single-quote pairing swallowed real proc headers. +- No open issue for the `.test`-extension scoping question (§5) — flagged as worth a deliberate + look, not filed, since it's a documented intentional choice rather than a confirmed defect. + +### Full record + +`docs/self_scan/tri_comparison_ledger.json` (filter to `tcl/`), each entry's `verdict` field, +`docs/self_scan/tri_comparison_points_of_interest.md`'s `## tcl` section, and +`docs/self_scan/tri_comparison_chart.svg`. diff --git a/docs/self_scan/tri_comparison_ledger.json b/docs/self_scan/tri_comparison_ledger.json index fad8353ef..36112c05c 100644 --- a/docs/self_scan/tri_comparison_ledger.json +++ b/docs/self_scan/tri_comparison_ledger.json @@ -13,7 +13,7 @@ "investigated_at": "2026-08-20T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "agc_assembly", - "last_reconciled_at": "2026-08-31T00:00:32Z", + "last_reconciled_at": "2026-08-31T00:11:52Z", "last_seen_count": 215, "last_seen_examples": [ { @@ -118,7 +118,7 @@ "investigated_at": "2026-08-20T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "agc_assembly", - "last_reconciled_at": "2026-08-31T00:00:32Z", + "last_reconciled_at": "2026-08-31T00:11:52Z", "last_seen_count": 37, "last_seen_examples": [ { @@ -221,7 +221,7 @@ "investigated_at": "2026-08-20T22:17:39Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep (direct investigation, no Gemini dispatch needed -- root cause was immediately clear from source)", "language": "apex", - "last_reconciled_at": "2026-08-31T00:00:33Z", + "last_reconciled_at": "2026-08-31T00:11:52Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -260,7 +260,7 @@ "investigated_at": "2026-08-27T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "assembly", - "last_reconciled_at": "2026-08-31T00:00:36Z", + "last_reconciled_at": "2026-08-31T00:11:54Z", "last_seen_count": 1790, "last_seen_examples": [ { @@ -365,7 +365,7 @@ "investigated_at": "2026-08-27T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "assembly", - "last_reconciled_at": "2026-08-31T00:00:36Z", + "last_reconciled_at": "2026-08-31T00:11:54Z", "last_seen_count": 26, "last_seen_examples": [ { @@ -469,7 +469,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved + fixed directly, no dispatch needed)", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 23, "last_seen_examples": [ { @@ -583,7 +583,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -688,7 +688,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 525, "last_seen_examples": [ { @@ -802,7 +802,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved directly, no dispatch needed) -- corrected after cross-referencing #1837", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -835,7 +835,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved + fixed directly, no dispatch needed)", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -868,7 +868,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 13, "last_seen_examples": [ { @@ -985,7 +985,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved directly, no dispatch needed)", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -1036,7 +1036,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved + fixed directly, no dispatch needed)", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -1123,7 +1123,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -1176,7 +1176,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved directly, no dispatch needed)", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -1235,7 +1235,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 17, "last_seen_examples": [ { @@ -1339,7 +1339,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 74, "last_seen_examples": [ { @@ -1452,7 +1452,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "c", - "last_reconciled_at": "2026-08-31T00:00:41Z", + "last_reconciled_at": "2026-08-31T00:11:57Z", "last_seen_count": 88, "last_seen_examples": [ { @@ -1557,7 +1557,7 @@ "investigated_at": "2026-08-19", "investigated_by": "gemini-3.1-pro-high (agy), dispatched via tri-comparison-ledger-sweep, self-corrected and reviewed by claude-sonnet-5", "language": "cobol", - "last_reconciled_at": "2026-08-31T00:00:58Z", + "last_reconciled_at": "2026-08-31T00:12:04Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -1630,7 +1630,7 @@ "investigated_at": "2026-08-28", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "cobol", - "last_reconciled_at": "2026-08-31T00:00:58Z", + "last_reconciled_at": "2026-08-31T00:12:04Z", "last_seen_count": 164, "last_seen_examples": [ { @@ -1733,7 +1733,7 @@ "investigated_at": "2026-08-28", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "cobol", - "last_reconciled_at": "2026-08-31T00:00:58Z", + "last_reconciled_at": "2026-08-31T00:12:04Z", "last_seen_count": 3040, "last_seen_examples": [ { @@ -1838,7 +1838,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude (Sonnet 5), direct investigation + fix (gitgalaxy#2480 follow-up)", "language": "cobol", - "last_reconciled_at": "2026-08-31T00:00:58Z", + "last_reconciled_at": "2026-08-31T00:12:04Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -1934,7 +1934,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -1976,7 +1976,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -2018,7 +2018,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 84, "last_seen_examples": [ { @@ -2132,7 +2132,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 22, "last_seen_examples": [ { @@ -2246,7 +2246,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -2288,7 +2288,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 61, "last_seen_examples": [ { @@ -2402,7 +2402,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -2434,7 +2434,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -2465,7 +2465,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 76, "last_seen_examples": [ { @@ -2569,7 +2569,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 14, "last_seen_examples": [ { @@ -2683,7 +2683,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -2716,7 +2716,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 30, "last_seen_examples": [ { @@ -2830,7 +2830,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 22, "last_seen_examples": [ { @@ -2944,7 +2944,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 12, "last_seen_examples": [ { @@ -3057,7 +3057,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 64, "last_seen_examples": [ { @@ -3161,7 +3161,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 135, "last_seen_examples": [ { @@ -3274,7 +3274,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "cpp", - "last_reconciled_at": "2026-08-31T00:01:02Z", + "last_reconciled_at": "2026-08-31T00:12:07Z", "last_seen_count": 195, "last_seen_examples": [ { @@ -3378,7 +3378,7 @@ "investigated_at": "2026-08-21T18:13:27Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -3483,7 +3483,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 5, "last_seen_examples": [ { @@ -3552,7 +3552,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -3629,7 +3629,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -3728,7 +3728,7 @@ "investigated_at": "2026-08-21T20:06:45Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -3761,7 +3761,7 @@ "investigated_at": "2026-08-21T20:06:45Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -3851,7 +3851,7 @@ "investigated_at": "2026-08-21T20:06:45Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -3892,7 +3892,7 @@ "investigated_at": "2026-08-21T20:06:45Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -3925,7 +3925,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 26, "last_seen_examples": [ { @@ -4029,7 +4029,7 @@ "investigated_at": "2026-08-21T18:13:27Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 271, "last_seen_examples": [ { @@ -4143,7 +4143,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -4203,7 +4203,7 @@ "investigated_at": "2026-08-21T18:13:27Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -4236,7 +4236,7 @@ "investigated_at": "2026-08-21T18:13:44Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 108, "last_seen_examples": [ { @@ -4352,7 +4352,7 @@ "investigated_at": "2026-08-21T21:45:53Z", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 46, "last_seen_examples": [ { @@ -4465,7 +4465,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 317, "last_seen_examples": [ { @@ -4569,7 +4569,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "csharp", - "last_reconciled_at": "2026-08-31T00:01:07Z", + "last_reconciled_at": "2026-08-31T00:12:10Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -4602,7 +4602,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "css", - "last_reconciled_at": "2026-08-31T00:01:08Z", + "last_reconciled_at": "2026-08-31T00:12:11Z", "last_seen_count": 25, "last_seen_examples": [ { @@ -4716,7 +4716,7 @@ "investigated_at": "2026-08-30T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "css", - "last_reconciled_at": "2026-08-31T00:01:08Z", + "last_reconciled_at": "2026-08-31T00:12:11Z", "last_seen_count": 5, "last_seen_examples": [ { @@ -4785,7 +4785,7 @@ "investigated_at": "2026-08-30T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "css", - "last_reconciled_at": "2026-08-31T00:01:08Z", + "last_reconciled_at": "2026-08-31T00:12:11Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -4843,7 +4843,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "dart", - "last_reconciled_at": "2026-08-31T00:01:12Z", + "last_reconciled_at": "2026-08-31T00:12:12Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -4914,7 +4914,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "dart", - "last_reconciled_at": "2026-08-31T00:01:12Z", + "last_reconciled_at": "2026-08-31T00:12:12Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -5009,7 +5009,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "dart", - "last_reconciled_at": "2026-08-31T00:01:12Z", + "last_reconciled_at": "2026-08-31T00:12:12Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5038,7 +5038,7 @@ "investigated_at": null, "investigated_by": null, "language": "embedded_python", - "last_reconciled_at": "2026-08-31T00:01:13Z", + "last_reconciled_at": "2026-08-31T00:12:14Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5068,7 +5068,7 @@ "investigated_at": null, "investigated_by": null, "language": "embedded_python", - "last_reconciled_at": "2026-08-31T00:01:13Z", + "last_reconciled_at": "2026-08-31T00:12:14Z", "last_seen_count": 69, "last_seen_examples": [ { @@ -5172,7 +5172,7 @@ "investigated_at": "2026-08-21T23:35:49Z", "investigated_by": "Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 8, "last_seen_examples": [ { @@ -5273,7 +5273,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5305,7 +5305,7 @@ "investigated_at": "2026-08-21T00:00:00Z", "investigated_by": "Claude Sonnet 5, direct investigation (surfaced while re-blessing the tri-comparison chart after #1973/#1985)", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5337,7 +5337,7 @@ "investigated_at": "2026-08-21T23:35:49Z", "investigated_by": "Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5368,7 +5368,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5400,7 +5400,7 @@ "investigated_at": "2026-08-21T23:35:49Z", "investigated_by": "Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 15, "last_seen_examples": [ { @@ -5514,7 +5514,7 @@ "investigated_at": "2026-08-21T23:35:49Z", "investigated_by": "Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -5558,7 +5558,7 @@ "investigated_at": "2026-08-21T23:35:49Z", "investigated_by": "Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -5590,7 +5590,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "fortran", - "last_reconciled_at": "2026-08-31T00:01:17Z", + "last_reconciled_at": "2026-08-31T00:12:16Z", "last_seen_count": 16, "last_seen_examples": [ { @@ -5699,7 +5699,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "go", - "last_reconciled_at": "2026-08-31T00:01:19Z", + "last_reconciled_at": "2026-08-31T00:12:18Z", "last_seen_count": 75, "last_seen_examples": [ { @@ -5811,7 +5811,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "go", - "last_reconciled_at": "2026-08-31T00:01:19Z", + "last_reconciled_at": "2026-08-31T00:12:18Z", "last_seen_count": 75, "last_seen_examples": [ { @@ -5913,7 +5913,7 @@ "investigated_at": null, "investigated_by": null, "language": "groovy", - "last_reconciled_at": "2026-08-31T00:01:20Z", + "last_reconciled_at": "2026-08-31T00:12:19Z", "last_seen_count": 721, "last_seen_examples": [ { @@ -6017,7 +6017,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (session investigation)", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 16, "last_seen_examples": [ { @@ -6129,7 +6129,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (session investigation)", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -6234,7 +6234,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -6267,7 +6267,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -6300,7 +6300,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (dispatched agent investigation)", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 102, "last_seen_examples": [ { @@ -6414,7 +6414,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (dispatched agent investigation)", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 69, "last_seen_examples": [ { @@ -6530,7 +6530,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (session investigation)", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -6562,7 +6562,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -6594,7 +6594,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "haskell", - "last_reconciled_at": "2026-08-31T00:01:21Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 91, "last_seen_examples": [ { @@ -6708,7 +6708,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "html", - "last_reconciled_at": "2026-08-31T00:01:23Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 37, "last_seen_examples": [ { @@ -6822,7 +6822,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "html", - "last_reconciled_at": "2026-08-31T00:01:23Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -6855,7 +6855,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "html", - "last_reconciled_at": "2026-08-31T00:01:23Z", + "last_reconciled_at": "2026-08-31T00:12:20Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -6897,7 +6897,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 28, "last_seen_examples": [ { @@ -7011,7 +7011,7 @@ "investigated_at": "2026-08-22T01:15:53Z", "investigated_by": "Sonnet 5, direct investigation via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 12, "last_seen_examples": [ { @@ -7125,7 +7125,7 @@ "investigated_at": "2026-08-22T01:15:53Z", "investigated_by": "Sonnet 5, direct investigation via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 28, "last_seen_examples": [ { @@ -7238,7 +7238,7 @@ "investigated_at": "2026-08-22T01:15:53Z", "investigated_by": "Sonnet 5, direct investigation via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -7271,7 +7271,7 @@ "investigated_at": "2026-08-22T01:15:53Z", "investigated_by": "Sonnet 5, direct investigation via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -7322,7 +7322,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 315, "last_seen_examples": [ { @@ -7436,7 +7436,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "java", - "last_reconciled_at": "2026-08-31T00:01:24Z", + "last_reconciled_at": "2026-08-31T00:12:21Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -7487,7 +7487,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 93, "last_seen_examples": [ { @@ -7601,7 +7601,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -7688,7 +7688,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -7728,7 +7728,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 45, "last_seen_examples": [ { @@ -7832,7 +7832,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 13, "last_seen_examples": [ { @@ -7946,7 +7946,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -8024,7 +8024,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 265, "last_seen_examples": [ { @@ -8140,7 +8140,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 189, "last_seen_examples": [ { @@ -8253,7 +8253,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 194, "last_seen_examples": [ { @@ -8357,7 +8357,7 @@ "investigated_at": "2026-08-21", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "javascript", - "last_reconciled_at": "2026-08-31T00:01:26Z", + "last_reconciled_at": "2026-08-31T00:12:23Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -8390,7 +8390,7 @@ "investigated_at": "2026-08-22T11:40:48Z", "investigated_by": "claude-sonnet-5, dispatched via tri-comparison-ledger-sweep (direct investigation, no Gemini dispatch -- small occurrence counts, answer was directly checkable)", "language": "kotlin", - "last_reconciled_at": "2026-08-31T00:01:27Z", + "last_reconciled_at": "2026-08-31T00:12:24Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -8443,7 +8443,7 @@ "investigated_at": "2026-08-22T11:40:48Z", "investigated_by": "claude-sonnet-5, dispatched via tri-comparison-ledger-sweep (direct investigation, no Gemini dispatch -- small occurrence counts, answer was directly checkable)", "language": "kotlin", - "last_reconciled_at": "2026-08-31T00:01:27Z", + "last_reconciled_at": "2026-08-31T00:12:24Z", "last_seen_count": 15, "last_seen_examples": [ { @@ -8557,7 +8557,7 @@ "investigated_at": "2026-08-22T11:45:48Z", "investigated_by": "claude-sonnet-5, dispatched via tri-comparison-ledger-sweep (direct investigation, no Gemini dispatch)", "language": "kotlin", - "last_reconciled_at": "2026-08-31T00:01:27Z", + "last_reconciled_at": "2026-08-31T00:12:24Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -8590,7 +8590,7 @@ "investigated_at": "2026-08-22T11:40:48Z", "investigated_by": "claude-sonnet-5, dispatched via tri-comparison-ledger-sweep (direct investigation, no Gemini dispatch -- small occurrence counts, answer was directly checkable)", "language": "kotlin", - "last_reconciled_at": "2026-08-31T00:01:27Z", + "last_reconciled_at": "2026-08-31T00:12:24Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -8623,7 +8623,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -8654,7 +8654,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 42, "last_seen_examples": [ { @@ -8768,7 +8768,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -8846,7 +8846,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -8879,7 +8879,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 487, "last_seen_examples": [ { @@ -8993,7 +8993,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 22, "last_seen_examples": [ { @@ -9107,7 +9107,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -9140,7 +9140,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "lua", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:27Z", "last_seen_count": 12, "last_seen_examples": [ { @@ -9255,7 +9255,7 @@ "investigated_at": "2026-08-24T03:52:19Z", "investigated_by": "Antigravity (direct source read)", "language": "m4", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:28Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -9312,7 +9312,7 @@ "investigated_at": "2026-08-24T03:52:19Z", "investigated_by": "Antigravity (direct source read)", "language": "m4", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:28Z", "last_seen_count": 76, "last_seen_examples": [ { @@ -9417,7 +9417,7 @@ "investigated_at": "2026-08-24T03:52:19Z", "investigated_by": "Antigravity (direct source read)", "language": "m4", - "last_reconciled_at": "2026-08-31T00:01:32Z", + "last_reconciled_at": "2026-08-31T00:12:28Z", "last_seen_count": 36, "last_seen_examples": [ { @@ -9521,7 +9521,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "makefile", - "last_reconciled_at": "2026-08-31T00:01:33Z", + "last_reconciled_at": "2026-08-31T00:12:29Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -9556,7 +9556,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "matlab", - "last_reconciled_at": "2026-08-31T00:01:35Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -9588,7 +9588,7 @@ "investigated_at": null, "investigated_by": null, "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -9630,7 +9630,7 @@ "investigated_at": "2026-08-25T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -9674,7 +9674,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 89, "last_seen_examples": [ { @@ -9788,7 +9788,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 104, "last_seen_examples": [ { @@ -9904,7 +9904,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -9936,7 +9936,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -9970,7 +9970,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -10011,7 +10011,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "objective-c", - "last_reconciled_at": "2026-08-31T00:01:36Z", + "last_reconciled_at": "2026-08-31T00:12:30Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -10051,7 +10051,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10084,7 +10084,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10116,7 +10116,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10146,7 +10146,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 12, "last_seen_examples": [ { @@ -10260,7 +10260,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -10347,7 +10347,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -10436,7 +10436,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10470,7 +10470,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10502,7 +10502,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation correcting a prior misdiagnosis", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 122, "last_seen_examples": [ { @@ -10615,7 +10615,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "perl", - "last_reconciled_at": "2026-08-31T00:01:41Z", + "last_reconciled_at": "2026-08-31T00:12:34Z", "last_seen_count": 122, "last_seen_examples": [ { @@ -10719,12 +10719,12 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "php", - "last_reconciled_at": "2026-08-31T00:01:44Z", + "last_reconciled_at": "2026-08-31T00:12:36Z", "last_seen_count": 1, "last_seen_examples": [ { "file_path": "laravel_core/BladeCompiler.php", - "name": "AnonymousClassa08aab890100", + "name": "AnonymousClassda5cee600100", "readings": { "ctags": 342, "gitgalaxy": null, @@ -10752,7 +10752,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "php", - "last_reconciled_at": "2026-08-31T00:01:44Z", + "last_reconciled_at": "2026-08-31T00:12:36Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10785,7 +10785,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "php", - "last_reconciled_at": "2026-08-31T00:01:44Z", + "last_reconciled_at": "2026-08-31T00:12:36Z", "last_seen_count": 68, "last_seen_examples": [ { @@ -10898,7 +10898,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "php", - "last_reconciled_at": "2026-08-31T00:01:44Z", + "last_reconciled_at": "2026-08-31T00:12:36Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -10930,7 +10930,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -11035,7 +11035,7 @@ "investigated_at": "2026-08-29", "investigated_by": "Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -11066,7 +11066,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 5, "last_seen_examples": [ { @@ -11135,7 +11135,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -11168,7 +11168,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 16, "last_seen_examples": [ { @@ -11281,7 +11281,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "powershell", - "last_reconciled_at": "2026-08-31T00:01:47Z", + "last_reconciled_at": "2026-08-31T00:12:38Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -11313,7 +11313,7 @@ "investigated_at": "2026-08-21T03:23:52Z", "investigated_by": "claude sonnet 5, tri-comparison-ledger-sweep (direct investigation, no dispatch needed)", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -11372,7 +11372,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -11428,7 +11428,7 @@ "investigated_at": "2026-08-21T03:23:52Z", "investigated_by": "claude sonnet 5, tri-comparison-ledger-sweep (direct investigation, no dispatch needed)", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -11461,7 +11461,7 @@ "investigated_at": "2026-08-21T12:03:03Z", "investigated_by": "claude sonnet 5, tri-comparison-ledger-sweep (direct investigation, no dispatch needed)", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 100, "last_seen_examples": [ { @@ -11577,7 +11577,7 @@ "investigated_at": "2026-08-21T12:03:03Z", "investigated_by": "claude sonnet 5, tri-comparison-ledger-sweep (direct investigation, no dispatch needed)", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 5, "last_seen_examples": [ { @@ -11646,7 +11646,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 5, "last_seen_examples": [ { @@ -11714,7 +11714,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "python", - "last_reconciled_at": "2026-08-31T00:01:54Z", + "last_reconciled_at": "2026-08-31T00:12:42Z", "last_seen_count": 100, "last_seen_examples": [ { @@ -11820,7 +11820,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "ruby", - "last_reconciled_at": "2026-08-31T00:01:55Z", + "last_reconciled_at": "2026-08-31T00:12:43Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -11862,7 +11862,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "ruby", - "last_reconciled_at": "2026-08-31T00:01:55Z", + "last_reconciled_at": "2026-08-31T00:12:43Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -11940,7 +11940,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "ruby", - "last_reconciled_at": "2026-08-31T00:01:55Z", + "last_reconciled_at": "2026-08-31T00:12:43Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -11991,7 +11991,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "ruby", - "last_reconciled_at": "2026-08-31T00:01:55Z", + "last_reconciled_at": "2026-08-31T00:12:43Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -12069,7 +12069,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "ruby", - "last_reconciled_at": "2026-08-31T00:01:55Z", + "last_reconciled_at": "2026-08-31T00:12:43Z", "last_seen_count": 9, "last_seen_examples": [ { @@ -12165,7 +12165,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 14, "last_seen_examples": [ { @@ -12279,7 +12279,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved directly via live ctags run, no dispatch)", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -12332,7 +12332,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 25, "last_seen_examples": [ { @@ -12445,7 +12445,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 25, "last_seen_examples": [ { @@ -12551,7 +12551,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 3, "last_seen_examples": [ { @@ -12602,7 +12602,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep, 2 rounds with self-correction), confirmed by Claude Sonnet 5", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 21, "last_seen_examples": [ { @@ -12714,7 +12714,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 21, "last_seen_examples": [ { @@ -12828,7 +12828,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 83, "last_seen_examples": [ { @@ -12942,7 +12942,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -12975,7 +12975,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved directly via live ctags run, no dispatch)", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -13010,7 +13010,7 @@ "investigated_at": "2026-08-19T00:00:00Z", "investigated_by": "Claude Sonnet 5 (resolved from existing Claim 6 documentation, no dispatch)", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 152, "last_seen_examples": [ { @@ -13123,7 +13123,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "rust", - "last_reconciled_at": "2026-08-31T00:01:58Z", + "last_reconciled_at": "2026-08-31T00:12:45Z", "last_seen_count": 152, "last_seen_examples": [ { @@ -13229,7 +13229,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "scala", - "last_reconciled_at": "2026-08-31T00:02:00Z", + "last_reconciled_at": "2026-08-31T00:12:46Z", "last_seen_count": 16, "last_seen_examples": [ { @@ -13332,7 +13332,7 @@ "investigated_at": "2026-08-20", "investigated_by": "gemini-3.1-pro-high (agy), dispatched via tri-comparison-ledger-sweep, reviewed and fixed by claude-sonnet-5", "language": "scheme", - "last_reconciled_at": "2026-08-31T00:02:03Z", + "last_reconciled_at": "2026-08-31T00:12:49Z", "last_seen_count": 84, "last_seen_examples": [ { @@ -13439,7 +13439,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "scheme", - "last_reconciled_at": "2026-08-31T00:02:03Z", + "last_reconciled_at": "2026-08-31T00:12:49Z", "last_seen_count": 50, "last_seen_examples": [ { @@ -13541,7 +13541,7 @@ "investigated_at": "2026-08-28T23:59:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "shell", - "last_reconciled_at": "2026-08-31T00:02:05Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 11, "last_seen_examples": [ { @@ -13655,7 +13655,7 @@ "investigated_at": "2026-08-28T23:59:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "shell", - "last_reconciled_at": "2026-08-31T00:02:05Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 14, "last_seen_examples": [ { @@ -13769,7 +13769,7 @@ "investigated_at": "2026-08-28T23:59:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "shell", - "last_reconciled_at": "2026-08-31T00:02:05Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -13802,7 +13802,7 @@ "investigated_at": "2026-08-28T23:59:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "shell", - "last_reconciled_at": "2026-08-31T00:02:05Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 41, "last_seen_examples": [ { @@ -13916,7 +13916,7 @@ "investigated_at": "2026-08-28T23:59:00Z", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "shell", - "last_reconciled_at": "2026-08-31T00:02:05Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -13952,7 +13952,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "solidity", - "last_reconciled_at": "2026-08-31T00:02:06Z", + "last_reconciled_at": "2026-08-31T00:12:51Z", "last_seen_count": 6, "last_seen_examples": [ { @@ -14022,7 +14022,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "sqlite", - "last_reconciled_at": "2026-08-31T00:02:07Z", + "last_reconciled_at": "2026-08-31T00:12:52Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14062,7 +14062,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "sqlite", - "last_reconciled_at": "2026-08-31T00:02:07Z", + "last_reconciled_at": "2026-08-31T00:12:52Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -14142,7 +14142,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "sqlite", - "last_reconciled_at": "2026-08-31T00:02:07Z", + "last_reconciled_at": "2026-08-31T00:12:52Z", "last_seen_count": 734, "last_seen_examples": [ { @@ -14244,7 +14244,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "swift", - "last_reconciled_at": "2026-08-31T00:02:08Z", + "last_reconciled_at": "2026-08-31T00:12:53Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14285,7 +14285,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "swift", - "last_reconciled_at": "2026-08-31T00:02:08Z", + "last_reconciled_at": "2026-08-31T00:12:53Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -14318,7 +14318,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "swift", - "last_reconciled_at": "2026-08-31T00:02:08Z", + "last_reconciled_at": "2026-08-31T00:12:53Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -14350,7 +14350,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 13, "last_seen_examples": [ { @@ -14469,7 +14469,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14511,7 +14511,7 @@ "investigated_at": "2026-08-30", "investigated_by": "Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 93, "last_seen_examples": [ { @@ -14625,7 +14625,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 16, "last_seen_examples": [ { @@ -14738,10 +14738,10 @@ "tree_sitter" ], "first_seen_at": "2026-08-18T22:44:51Z", - "investigated_at": "2026-08-24T04:14:26Z", - "investigated_by": "Antigravity (direct sweep)", + "investigated_at": "2026-08-30", + "investigated_by": "Claude (Sonnet 5), enriched during docs/language_status/tcl.md write-up via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14767,7 +14767,7 @@ "status": "validated", "still_reproduces": true, "symbol_type": "function", - "verdict": "GitGalaxy correctly extracts proc with double-quote body." + "verdict": "Confirmed GitGalaxy correct on both, via two different mechanisms (the prior terse verdict -- 'GitGalaxy correctly extracts proc with double-quote body' -- only actually explained one). (1) faultsim_test_result (sqlite/malloc_common.tcl:348): `proc faultsim_test_result {args} \"uplevel faultsim_test_result_int $args ...\"`, a real, valid Tcl idiom where the proc body is a double-quoted STRING, not a brace-delimited block -- both ctags and tree-sitter-tcl's grammars expect a brace body and miss it entirely. (2) _check_registry (macports_registry/portimage.tcl:259): an ordinary brace-body proc with a default-value parameter, tree-sitter finds it fine, but a raw `ctags -x --language-force=Tcl` on the same file also misses two sibling procs (deactivate_composite:153, deactivate:162 -- structurally identical declaration heads to the successfully-tagged activate_composite/activate pair just above them), all three in one contiguous block. The block starts right after `activate`'s own body (lines 79-152) contains a bare apostrophe inside a double-quoted string (\"Can't find image file $location\", line 119) and ends once a second apostrophe pair appears ('$v', line 159 inside deactivate's body) -- the same odd/even single-quote-parity desync shape already confirmed for GitGalaxy's OWN pre-#2242 bug, this time apparently inside ctags' own Tcl parser. Consistent with, not independently proven against ctags' own source -- documented in ctags_reader.py's tcl CTAGS_FUNC_KINDS comment and docs/language_status/tcl.md \u00a79 rather than filed as an issue (a third-party C parser this repo doesn't maintain)." }, "tcl/function/existence/agree[gitgalaxy]_vs[tree_sitter]": { "agreeing_tools": [ @@ -14782,7 +14782,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14826,7 +14826,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14871,7 +14871,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "tcl", - "last_reconciled_at": "2026-08-31T00:02:09Z", + "last_reconciled_at": "2026-08-31T00:12:54Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14911,7 +14911,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -14953,7 +14953,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 501, "last_seen_examples": [ { @@ -15065,7 +15065,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 4, "last_seen_examples": [ { @@ -15125,7 +15125,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -15158,7 +15158,7 @@ "investigated_at": "2026-08-26T16:02:21Z", "investigated_by": "Claude (Sonnet 5), tri-comparison-ledger-sweep skill", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 7, "last_seen_examples": [ { @@ -15245,7 +15245,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 204, "last_seen_examples": [ { @@ -15359,7 +15359,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 2226, "last_seen_examples": [ { @@ -15475,7 +15475,7 @@ "investigated_at": "2026-08-24T04:14:26Z", "investigated_by": "Antigravity (direct sweep)", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -15516,7 +15516,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -15558,7 +15558,7 @@ "investigated_at": "2026-08-26T16:02:21Z", "investigated_by": "Claude (Sonnet 5), tri-comparison-ledger-sweep skill", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -15601,7 +15601,7 @@ "investigated_at": "2026-08-26T00:00:00Z", "investigated_by": "Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep", "language": "typescript", - "last_reconciled_at": "2026-08-31T00:02:15Z", + "last_reconciled_at": "2026-08-31T00:12:57Z", "last_seen_count": 183, "last_seen_examples": [ { @@ -15704,7 +15704,7 @@ "investigated_at": "2026-08-27", "investigated_by": "claude-sonnet-5, dispatched via tri-comparison-ledger-sweep", "language": "yacc", - "last_reconciled_at": "2026-08-31T00:02:16Z", + "last_reconciled_at": "2026-08-31T00:12:58Z", "last_seen_count": 18, "last_seen_examples": [ { @@ -15811,7 +15811,7 @@ "investigated_at": "2026-08-23T18:02:16Z", "investigated_by": "Antigravity", "language": "zig", - "last_reconciled_at": "2026-08-31T00:02:23Z", + "last_reconciled_at": "2026-08-31T00:13:01Z", "last_seen_count": 1, "last_seen_examples": [ { @@ -15846,7 +15846,7 @@ "investigated_at": "2026-08-23T18:02:16Z", "investigated_by": "Antigravity", "language": "zig", - "last_reconciled_at": "2026-08-31T00:02:23Z", + "last_reconciled_at": "2026-08-31T00:13:01Z", "last_seen_count": 2, "last_seen_examples": [ { @@ -15889,7 +15889,7 @@ "investigated_at": "2026-08-23T18:02:16Z", "investigated_by": "Antigravity", "language": "zig", - "last_reconciled_at": "2026-08-31T00:02:23Z", + "last_reconciled_at": "2026-08-31T00:13:01Z", "last_seen_count": 1, "last_seen_examples": [ { diff --git a/docs/self_scan/tri_comparison_points_of_interest.md b/docs/self_scan/tri_comparison_points_of_interest.md index ad8acd565..854cd591b 100644 --- a/docs/self_scan/tri_comparison_points_of_interest.md +++ b/docs/self_scan/tri_comparison_points_of_interest.md @@ -8,7 +8,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `agc_assembly` function existence: ctags agree, GitGalaxy differ -*2-vs-1 -- 215 occurrences as of 2026-08-31T00:00:32Z* +*2-vs-1 -- 215 occurrences as of 2026-08-31T00:11:52Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-20T00:00:00Z): > Mixed-cause shape, fully accounted for via a corpus-wide cross-reference of ctags' actual output against GitGalaxy's raw func_start regex matches and its real pipeline/DB output (215 + 50 = 265, no unexplained residual). (1) 215/265 (81%): ctags' Asm "l" kind tags EVERY line-start label unconditionally, including pure data/constant-definition labels (e.g. ERASCON1 OCTAL 00061, S10BITS, LSTBNKCH -- AGC_BLOCK_TWO_SELF-CHECK.agc:133 and nearby) that are never followed by an executable instruction. GitGalaxy's func_start regex deliberately requires the label be followed by a real instruction mnemonic from a fixed whitelist, so it does not count these as functions -- a genuine, intentional precision distinction (code label vs. data label), not a GitGalaxy defect; ctags' generic Asm parser has no way to make this distinction at all. (2) 50/265 (19%): a real, confirmed GitGalaxy engine defect in detector.py's _slice_by_labels (Mode A), independently root-caused to two separate bugs: (a) `RELINT` is incorrectly included in `self.assembly_returns`'s early-termination keyword list (detector.py:572-575) -- in real AGC assembly RELINT means "release interrupt inhibit" and commonly opens a long interrupt-handler routine rather than closing one, so it truncates the real body to one line (confirmed: ELOOPFIN, AGC_BLOCK_TWO_SELF-CHECK.agc:303, a 20+-line real routine collapsed to just its own label line); (b) the `len(block.splitlines()) < 2` guard (detector.py:1973) unconditionally discards legitimate single-instruction assembly subroutines when the next func_start match sits on the very next line (confirmed: SOPTION1-SOPTION5+, AGC_BLOCK_TWO_SELF-CHECK.agc:210-214, each a real one-instruction label). Filed as #1949 -- a follow-up read-only Gemini/agy dispatch confirmed both root causes generalize beyond agc_assembly to the shared Mode A mechanism (assembly, cobol, fortran, abap all independently exhibit bug 1; assembly and cobol also exhibit bug 2), plus two further bug-1 variants not visible from agc_assembly alone: the terminator regex also false-matches inside comments (assembly) and inside hyphenated identifier names (cobol), not just legitimate-but-misclassified instructions. See #1949 for the full cross-language evidence and fix scope. No credit/debit -- the 215 portion is an honest scope difference (not two tools independently wrong about the same fact), and the 50 portion is GitGalaxy's own unresolved bug, not something ctags corroborates or contradicts. @@ -28,7 +28,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `agc_assembly` function existence: GitGalaxy agree, ctags differ -*2-vs-1 -- 37 occurrences as of 2026-08-31T00:00:32Z* +*2-vs-1 -- 37 occurrences as of 2026-08-31T00:11:52Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-20T00:00:00Z): > Confirmed: all 35 occurrences are real AGC labels that GitGalaxy correctly extracts and Universal Ctags' generic Asm parser structurally cannot tag, due to AGC assembly's non-standard label-naming conventions. Two sub-patterns, both confirmed corpus-wide (14/35 + 21/35 = 35/35, not just the sample): (1) labels with an embedded hyphen -- AGC's own convention of naming a point relative to an event, e.g. TIG-35/TIG-30/CALLT-35 in BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc:250/292/222 ("35/30 seconds before Time of Ignition"); (2) labels starting with a digit or a leading minus sign, e.g. 1CHK/2EBANK/-1CHK in AGC_BLOCK_TWO_SELF-CHECK.agc:184 (real label text is "-1CHK"). Directly verified via `ctags --language-force=Asm --kinds-Asm=l` against the real corpus files: ctags emits zero tags for any of these names (confirmed by grepping its actual output for the exact names and their surrounding CHK-suffixed siblings, which ARE tagged when they don't start with a hyphen/digit) -- ctags' Asm parser requires a tag name to start with a letter and contain no hyphen, neither of which is a real constraint in AGC assembly's own label syntax. GitGalaxy's func_start regex ([A-Z0-9_-]+ at line start) has no such restriction. This is a confirmed, structural ctags/Asm-parser limitation, not corroboration of anything wrong on GitGalaxy's side -- logged to docs/why_gitgalaxy_beats_ast_here.md. @@ -50,7 +50,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `assembly` function existence: ctags agree, GitGalaxy differ -*2-vs-1 -- 1790 occurrences as of 2026-08-31T00:00:36Z* +*2-vs-1 -- 1790 occurrences as of 2026-08-31T00:11:54Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-27T00:00:00Z): > Re-validated 2026-08-27 (same PR as the mirror shape). All 26 occurrences are ctags' generic Asm parser tagging line-start labels that are not subroutine entries; GitGalaxy correctly excludes every one, confirmed by reading corpus source for each. (1) Data-emission labels: `intro`/`error_message`/`commands`/`int_0x20` in bootos/os.asm (`db`/`dw` string and jump-table data), `A`/`B`/`C` in hellosilicon/matrixmultneon.s (`.short`/`.fill` matrices), `prtstr`/`getcreditcards`/`instr` (`.asciz`/`.ascii` strings). (2) Section / object markers in cosmopolitan/ape.S: `__ro`/`cstr`/`_gdt_end`/`sconf` (`.endobj`), `ape_loader` (`.incbin`), `ape_phdrs`/`ape_macho`/`ape_grub`/`ape_mz`/`apesh` (ELF/Mach-O/Multiboot/shell header data emitted via `.long`/`.ascii`), `_gdtr`/`_gdtrlo` (GDT register values), `ape_idata_idtend`/`ape_idata_iatend` (`.byte` terminators). (3) `.Lenv0`/`.Largv0` -- `.L`-prefixed GCC compiler-local labels `func_start`'s negative lookahead deliberately excludes. The four NASM local-label name-normalization cases from the earlier sample (`load_vec`/`loop`/`empty`/`find`) are gone: the reconciler now pairs them with GitGalaxy's dot-prefixed form. No GitGalaxy recall miss remains in this shape -- the #1949 `_slice_by_labels` cases were fixed and that issue is closed. ctags already pays for these in its own precision denominator (it alone claims them); no credit/debit adjustment applies -- there is no shared-consensus mistake to debit and nothing of GitGalaxy's to credit. @@ -70,7 +70,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `assembly` function existence: GitGalaxy agree, ctags differ -*2-vs-1 -- 26 occurrences as of 2026-08-31T00:00:36Z* +*2-vs-1 -- 26 occurrences as of 2026-08-31T00:11:54Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-27T00:00:00Z): > Re-validated 2026-08-27; down from 7 occurrences to 2 after two coordinated fixes in the same PR. Four of the original seven (`.load_vec`/`.loop`/`.empty`/`.find`, bootos/os.asm) were never a real disagreement: both tools found the identical label at the identical line, ctags' Asm parser just strips the leading `.` from NASM/GAS local labels while GitGalaxy keeps it verbatim -- `tri_comparison_reconcile.py` now normalizes a single leading dot before pairing, so these register as agreements. One (`ape.mbrpad`, cosmopolitan/ape.S:525) was a genuine GitGalaxy false positive -- a `.org`/`.endobj` MBR-padding object, not a subroutine -- now fixed by a `func_start` negative lookahead that rejects a label followed only by a pure data-emission / location-counter directive (the generic-assembly counterpart to agc_assembly's positive 'opcode must follow' lookahead). The remaining 2 (`.1`, `.2` in bootos/counter.asm:52,67) are real NASM numeric local CODE labels -- `.1:` opens a routine (`int 0x22` ...), `.2:` likewise (`mov [di],ax` ...) -- that Universal Ctags' Asm parser structurally cannot tag (a tag name must start with a letter). GitGalaxy is correct here and ctags has a confirmed structural limitation, not an open question -> credit_tools: [gitgalaxy]. @@ -92,7 +92,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: tree-sitter agree, GitGalaxy, ctags differ -*2-vs-1 -- 74 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 74 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5, 2026-08-19T00:00:00Z): > Confirmed, independently verified all 6 sampled names against real source -- GitGalaxy and ctags both correct, tree-sitter over-recalling from two related but distinct preprocessor-driven mechanisms, both already covered by existing infrastructure: (1) keyword/macro misparse -- 'if' (dictobject.c:522-527, an `#if SIZEOF_VOID_P > 4` / `else if` sequence desyncs the parse) and 'DICT___REVERSED___METHODDEF' (dictobject.c:5102, a PyMethodDef array-initializer macro, not a definition) are both ALREADY in tree_sitter_accuracy_audit.py's `_C_KNOWN_MACRO_HALLUCINATIONS` exclusion set (confirmed by reading it directly) -- this tri-comparison tool's raw walk deliberately doesn't apply that list (it's a curated, ground-truth-shaped judgment call, appropriately left to reconciliation per this module's own stated design, not baked into the walk). (2) dead #if 0 code -- '_PyObject_ManagedDictValidityCheck' (dictobject.c:7396) and 'tos_char'/'print_stack'/'print_stacks' (frameobject.c:1264-1313) are genuinely well-formed function definitions sitting entirely inside `#if 0 ... #endif` guards; tree-sitter has no preprocessor model and parses the dead branch as live code. Both mechanisms are already the exact shape docs/why_gitgalaxy_beats_ast_here.md's Claim 8 names generically ('a dead #if 0 block... macro definitions... that merely look structural') -- added these 4 new concrete citations to Claim 8's evidence section rather than treating this as a new finding. No GitHub issue -- both tools already behave as intended; this is expected, already-documented tree-sitter preprocessor-blindness surfacing under the new tri-comparison reconciliation, not a fresh defect. @@ -112,7 +112,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 13 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 13 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Gemini (dispatched via tri-comparison-ledger-sweep), confirmed by Claude Sonnet 5, 2026-08-19T00:00:00Z): > 3 distinct causes, all genuine tree-sitter-c grammar limitations (GitGalaxy and ctags both correct in all 10 sampled cases) -- confirmed via dispatched investigation (which ran tree-sitter's C grammar directly and found ERROR nodes in every case) plus independent source-level spot-checks of all 3 trigger shapes. This is a C-scale instance of Claim 7 (CPP-directive-driven recall loss) -- added to that claim's evidence section. (1) 4 samples: an #if/#else pair splitting a single `if` condition inside a function body (ceval.c:33, _Py_ReachedRecursionLimitWithMargin). (2) 5 samples: bare, un-semicoloned macro invocations the grammar can't cleanly recover from, losing the next real function (object.c:1269-1271's _Py_COMP_DIAG_PUSH/IGNORE_DEPR_DECLS/POP before _PyObject_SetAttributeErrorContext; similar shape for the typeobject.c slot-getattr cluster). (3) 1 sample: #if/#endif wrapping only the `static` storage-class specifier, separated from the rest of the signature (micropython/compile.c:3473-3476, mp_compile_to_raw_code). Unlike Fortran's existing Claim 7 evidence (entire trailing sections lost), C's version is local -- one function lost per trigger, not a cascading region. No GitHub issue -- documented as new Claim 7 evidence, not a fixable tooling bug (this repo doesn't control tree-sitter-c's grammar). @@ -132,7 +132,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: ctags agree, GitGalaxy, tree-sitter differ -*2-vs-1 -- 7 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 7 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Claude Sonnet 5 (resolved + fixed directly, no dispatch needed), 2026-08-19T00:00:00Z): > Confirmed real ctags limitation, not a GitGalaxy or tree-sitter defect -- resolved directly (no dispatch needed), source read confirms all 7 sampled names. RICHCMP_WRAPPER/SLOT0/SLOT1/SLOT1BINFULL are all-caps macro names; every occurrence is a MACRO INVOCATION (a call to a previously-#define'd boilerplate-generating macro), not a function definition -- confirmed at cpython/typeobject.c:10099 (`RICHCMP_WRAPPER(lt, Py_LT)`) and :10544 (`SLOT1(slot_mp_subscript, __getitem__, PyObject *)`), same shape as the multiple SLOT0/SLOT1 hits at different lines (each is a separate invocation of the same macro generating a different wrapper function). ctags' regex-based C parser tags the macro-invocation site itself as a function; GitGalaxy and tree-sitter both correctly don't. Deliberately NOT fixed with a curated name-exclusion list in the gatherer (unlike the sibling __anon* class shape, this would require hand-curating specific macro names -- the same ground-truth-judgment category tri_comparison_gatherer.py's own docstring reasons belongs in reconciliation, not the raw reader) -- documented in ctags_reader.py instead, alongside its existing per-language notes. @@ -149,7 +149,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: GitGalaxy agree, tree-sitter, ctags differ -*2-vs-1 -- 4 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 4 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Claude Sonnet 5 (resolved directly, no dispatch needed), 2026-08-19T00:00:00Z): > Confirmed GitGalaxy correct, real finding -- a new, narrower instance of Claim 3 (parse-error cascade), added to docs/why_gitgalaxy_beats_ast_here.md. All 4 sampled names (slot_mp_ass_subscript:10544, slot_nb_inplace_power:10697, slot_tp_repr:10714, slot_tp_hash:10730, all cpython/typeobject.c) are ordinary, unremarkable function definitions -- nothing unusual individually -- but each sits directly after a bare SLOT0/SLOT1 macro-invocation LINE (`SLOT1(slot_mp_subscript, __getitem__, PyObject *)`, `SLOT0(slot_tp_str, __str__)`, etc.) that isn't valid freestanding C without macro expansion. GitGalaxy's regex has no adjacency sensitivity and finds all 4 correctly; both ctags and tree-sitter locally lose the SINGLE function immediately following each such line (recovers after just one function, not a full cascade to EOF -- confirmed by resolving all 4 as isolated single-function misses, not a growing region). Resolved directly, no dispatch needed -- same pattern verified at all 4 sample points before writing up. @@ -163,7 +163,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: tree-sitter, ctags agree, GitGalaxy differ -*2-vs-1 -- 3 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 3 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Claude Sonnet 5 (resolved directly, no dispatch needed), 2026-08-19T00:00:00Z): > Not a new finding -- both sampled names are ALREADY in tree_sitter_accuracy_audit.py's _C_KNOWN_MACRO_HALLUCINATIONS exclusion set (confirmed by grep: 'EXPORT_FUN' and 'MICROPY_WRAP_MP_EXECUTE_BYTECODE' both present). This shape is the same already-documented macro-hallucination mechanism (Claim 8) as the earlier tree-sitter-alone shape, just with ctags ALSO independently hallucinating the same 2 names the same way (both tools' regex/grammar parsers get fooled by the same macro-definition text). GitGalaxy correctly excludes both. Resolved directly, no dispatch needed. @@ -176,7 +176,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 3 occurrences as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 3 occurrences as of 2026-08-31T00:11:57Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > UPDATED after a real production fix (the same fix documented in cpp's agree[gitgalaxy,tree_sitter]_vs[ctags] entry -- c and cpp share the mechanism, `lang_id in ("c", "cpp")` in detector.py's `_slice_by_braces`). GitGalaxy now scans each file for `#define NAME(...)` function-like macro definitions and excludes any func_start match whose captured name is a known macro -- confirmed to eliminate the already-documented `RICHCMP_WRAPPER`/`SLOT0`/`SLOT1`/`SLOT1BINFULL`/`DICT___REVERSED___METHODDEF` cpython/typeobject.c false positives entirely (a direct `SELECT func_name ... WHERE func_name IN (...)` query against a fresh scan returned zero rows). The small residual (3 occurrences: `slot_nb_power`, `slot_nb_bool`, `wrap_next`, all cpython/typeobject.c) is a DIFFERENT, unrelated finding, not yet individually root-caused -- GitGalaxy and tree-sitter both correctly find these real functions and ctags doesn't; plausibly the same category of ctags miss documented in cpp's sibling entry (an ordinary function ctags' C++ parser fails to tag for reasons unrelated to macros) but not directly confirmed for these three specific names. No credit_tools adjustment applies -- already a naturally-corroborated 2-of-3 agreeing pair. @@ -189,7 +189,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `c` function args: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:00:41Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:11:57Z* **Verdict** (by Claude Sonnet 5 (resolved + fixed directly, no dispatch needed), 2026-08-19T00:00:00Z): > Not a GitGalaxy or ctags defect -- a bug in this tool's OWN _count_ctags_signature_params (tri_comparison_gatherer.py), now fixed. Confirmed directly: ran ctags against cpython/ceval.c, PyEval_GetLocals(void)'s raw signature field is literally the text '(void)'. GitGalaxy and tree-sitter both already special-case C's explicit empty-parameter-list idiom (0 real args, matching detector.py's own _count_top_level_args docstring) -- _count_ctags_signature_params did not, splitting '(void)' into one non-empty segment and counting it as 1 real parameter (the same class of bug its own docstring already describes fixing twice for Python's trailing-comma and bare * / marker cases). Added 'void' to the segment-exclusion set alongside the existing '*'/'/'/'**' -- verified fix: _count_ctags_signature_params('(void)') now returns 0. This corpus (cpython) uses the (void) idiom extremely heavily, plausibly explaining most/all of the 104 occurrences; not independently re-verified beyond the sample, but the mechanism is unconditional (any '(void)' signature was miscounted the same way, corpus-wide) so high confidence it generalizes. No GitHub issue needed -- fixed directly in this same commit, not a repo-code defect. @@ -202,7 +202,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `cobol` function existence: ctags agree, GitGalaxy differ -*2-vs-1 -- 3040 occurrences as of 2026-08-31T00:00:58Z* +*2-vs-1 -- 3040 occurrences as of 2026-08-31T00:12:04Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-28): > Re-verified 2026-08-28 after the corpus grew ~6x for this language (53 -> 308 files, issue-#4 provenance audit / language-crucible v1.1.0): the count grew from 133 to 773 (gather_language name-diff; ledger's own capped-sample count differs slightly, same shape) without a status change, per merge_and_save()'s normal behavior -- re-checked rather than assumed, per how_to_investigate_a_discrepancy.md's 'When a validated shape's count changes a lot'. Confirmed: still the single already-documented mechanism (ctags' Cobol parser tags ANY period-terminated word as a paragraph, kind 'p', regardless of COBOL division or what role the period plays), now generalizing to syntax shapes the smaller corpus never exercised. Full accounting, zero unexplained residual: scope terminators like END-IF./END-PERFORM. (original 2026-08-19 finding); IDENTIFICATION/ENVIRONMENT/DATA DIVISION section/paragraph headers like WORKING-STORAGE SECTION./CONFIGURATION SECTION./LINKAGE SECTION./AUTHOR. (confirmed 2026-08-28, now the single largest contributor -- 564/773 in a corpus-wide name-tally); embedded-SQL qualified-column periods like COMMERCIAL.POLICYNUMBER inside an EXEC SQL...END-EXEC block, where the period is a table/column separator, not a COBOL statement terminator (confirmed 2026-08-28 via direct ctags run on cics-genapp/lgipdb01.cbl -- POLICY/COMMERCIAL/MOTOR tagged as paragraphs from FROM POLICY,COMMERCIAL and MOTOR.POLICYNUMBER clauses). GitGalaxy correctly excludes all three via its reserved-word shield and division/section awareness. Issue #1892's hyphenated-verb fix remains fully effective -- a corpus-wide name tally of every 'missing from GitGalaxy' occurrence found zero real paragraph names, only the three ctags-side false-positive shapes above. Full cross-reference: tests/tools/ctags_reader.py's cobol notes. @@ -222,7 +222,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `cobol` class existence: GitGalaxy agree, ctags differ -*2-vs-1 -- 164 occurrences as of 2026-08-31T00:00:58Z* +*2-vs-1 -- 164 occurrences as of 2026-08-31T00:12:04Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-28): > Confirmed: GitGalaxy correct on all 6, two independent confirmed ctags 'program' (P) kind limitations, zero unexplained residual. (1) 5/6 (aws-mainframe-modernization-carddemo's COACTUPC/COACTVWC/COCRDLIC/COCRDSLC/COCRDUPC): PROGRAM-ID. and the program name are written on two separate lines (a legitimate, common COBOL style) -- `ctags -x --language-force=Cobol --kinds-Cobol=P` emits zero tags at all for this shape, confirmed directly on all 5 real occurrences in the corpus, not a sample. GitGalaxy's class_start matches the name regardless of which line it's on. (2) 1/6 (gnucobol/CBL_OC_DUMP.cob): ctags truncates the program name at its first underscore, tagging bare 'CBL' instead of 'CBL_OC_DUMP' -- confirmed via direct ctags run, compared against a hyphen-named sibling (cics-genapp's LGACDB01) tagged correctly in full in the same run. Same underscore-intolerant identifier convention as Claim 12's second instance (GnuCOBOL's own YACC grammar), manifesting as truncation instead of total rejection here. GitGalaxy's class_start correctly captures underscores as valid identifier characters. Full writeup: docs/why_gitgalaxy_beats_ast_here.md Claim 12's third instance; cross-referenced in tests/tools/ctags_reader.py's cobol notes. @@ -242,7 +242,7 @@ Sorted 2-vs-1 splits before 3-way splits, unvalidated before validated, biggest ### ✅ `cobol` function existence: GitGalaxy agree, ctags differ -*2-vs-1 -- 9 occurrences as of 2026-08-31T00:00:58Z* +*2-vs-1 -- 9 occurrences as of 2026-08-31T00:12:04Z* **Verdict** (by Claude (Sonnet 5), direct investigation + fix (gitgalaxy#2480 follow-up), 2026-08-30): > Mixed-cause shape, two independent confirmed defects, neither in GitGalaxy's core function detection being right or wrong as a whole. (1) MAINLINE/TIMESTAMP and most of the 18 cases: these are real COBOL SECTION headers in the PROCEDURE DIVISION (e.g. cics-genapp/lgacdb01.cbl:128 "MAINLINE SECTION.", cics-banking-sample-application-cbsa/BANKDATA.cbl:1441 "TIMESTAMP SECTION." followed by executable CALL statements) that GitGalaxy correctly captures per its own documented func_start scope ("Paragraphs and Sections") -- and ctags ALSO correctly tags them, as kind 'section' (verified via live ), not as the 'paragraph' kind. The disagreement is manufactured by tests/tools/ctags_reader.py's CTAGS_FUNC_KINDS["cobol"] = {"p"}, which drops section-kind tags before comparison -- a test-harness bug, not a real ctags-vs-GitGalaxy disagreement. Filed as GitHub issue #1891. (2) LOCAL-STORAGE (cics-banking-sample-application-cbsa/XFRFUN.cbl:107 "LOCAL-STORAGE SECTION." immediately followed by 01-level data item declarations, no executable logic): this is a genuine GitGalaxy false positive -- the func_start regex's reserved-word negative lookahead bans WORKING-STORAGE and LINKAGE as Data Division section names but omits LOCAL-STORAGE, so it slips through and gets miscounted as a paragraph. ctags correctly reports nothing here. Filed as GitHub issue #1890. Investigated via gemini-3.1-pro-high (agy), file:line citations independently re-verified by Claude against language_standards.py and a live ctags run before applying. @@ -267,7 +267,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cobol` class existence: ctags agree, GitGalaxy differ -*2-vs-1 -- 6 occurrences as of 2026-08-31T00:00:58Z* +*2-vs-1 -- 6 occurrences as of 2026-08-31T00:12:04Z* **Verdict** (by gemini-3.1-pro-high (agy), dispatched via tri-comparison-ledger-sweep, self-corrected and reviewed by claude-sonnet-5, 2026-08-19): > Confirmed real GitGalaxy pipeline defect, generalizes to all 19 occurrences. ctags correctly tags PROGRAM-ID as a program (kind P). Initial framing (that ctags is over-matching/GitGalaxy is semantically correct to return null, since PROGRAM-ID is not an OOP class) turned out to be wrong once the actual pipeline was traced -- GitGalaxy's own cobol class_start regex ALREADY matches PROGRAM-ID correctly and identically to ctags (verified directly: LANGUAGE_DEFINITIONS["cobol"]["rules"]["class_start"] matches "PROGRAM-ID. BANKDATA." at cics-banking-sample-application-cbsa/BANKDATA.cbl:35, capturing "BANKDATA", exactly matching ctags' own reading). The null is produced further downstream: gitgalaxy/core/detector.py's _CLASS_START_NAMED_EXTRACTION_LANGS allowlist (added by epic #1295, closed 2026-08-12, 11/13 languages) gates which languages' own class_start regex is used for named-entity extraction; cobol was never added (not decided out like css/html, simply never in scope since #1295's verification method requires a tree-sitter grammar cobol lacks). Every language missing from that allowlist falls through to a hardcoded generic fallback regex (class|struct|interface|trait|enum) that cannot structurally match COBOL syntax at all -- so the correct class_start match is computed internally (feeding the numeric risk-signal count) but discarded before named-entity output. Same bug class #1295 already fixed for 11 other languages. This corrects and supersedes issue #1858's original diagnosis (which claimed the regex itself never matches -- it does); posted a correcting comment on #1858 rather than filing a duplicate. Investigated via gemini-3.1-pro-high (agy); the dispatched agent itself caught and corrected Gemini's initial (semantically-plausible but pipeline-unverified) verdict by tracing the real extraction code, then Claude independently re-verified both the regex match and the allowlist gap directly against source before applying. credit_tools=[ctags] applied: ctags' claim (19 real PROGRAM-ID classes) is fully confirmed real, and GitGalaxy's non-corroboration is a confirmed pipeline bug in GitGalaxy, not an open question about ctags -- this is the textbook credit_tools case per tri_comparison_ledger.py's own VERIFIED ADJUSTMENTS docstring. @@ -285,7 +285,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` function existence: tree-sitter agree, GitGalaxy, ctags differ -*2-vs-1 -- 135 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 135 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > UPDATED: count grew (98 -> 194) as a direct, correct consequence of the OPCODE-macro fix documented in the sibling agree[gitgalaxy,tree_sitter]_vs[ctags] entry -- tree-sitter's OWN OPCODE-family misparse (godot/gdscript_vm.cpp's bytecode-dispatch macro) was previously MASKED by GitGalaxy sharing the identical mistake (both wrong == they 'agreed', landing in the other shape instead of this one). Now that GitGalaxy correctly excludes known macro invocations, tree-sitter's own grammar limitation on this exact pattern is cleanly isolated here instead, confirmed via the shape's own examples (repeated `OPCODE` entries at godot/gdscript_vm.cpp, tree_sitter line set, ctags/gitgalaxy both None). The remaining, previously-documented causes (bare control-flow-keyword/`void` hallucination, conversion-operator naming-suffix convention) are unchanged and still contribute the bulk of the original 98. No credit/debit applies -- tree-sitter is the one that's wrong here, alone. 2026-08-29 follow-up (#2455): the tree_sitter_accuracy_audit / tri_comparison_gatherer shared tree-sitter reader now canonicalizes C++ conversion-operator and destructor names to GitGalaxy's own convention -- `Variant::operator String() const` -> `Variant::operator String`, `operator BitField() const` -> `operator BitField`, and the `_FORCE_INLINE_`-macro-mangled `~Variant` / `operator T` forms recovered from the sibling ERROR node -- and treats a small tree-sitter-cpp ERROR node (a function-like macro with no visible definition immediately before a special member) as a blind-spot region, promoting GitGalaxy's correct extraction there to ground truth. cpp function precision 95.0% -> 100.0%, extra_functions 68 -> 0. That resolved the 'conversion-operator naming-suffix convention' cause named above (~55 occurrences moved into GitGalaxy+tree-sitter consensus, count ~194 -> ~136). The residual is the genuine OPCODE-macro and bare-control-flow-keyword / bare-`void` hallucinations, still tree-sitter's alone. @@ -305,7 +305,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` function existence: ctags agree, GitGalaxy, tree-sitter differ -*2-vs-1 -- 30 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 30 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > Confirmed ctags-only limitation: ctags parses INSIDE C++ macro DEFINITION bodies as if they were real, already-expanded code. godot/object.h's GDCLASS/_FORCE_INLINE_-based macros (`#define GDCLASS(m_class, m_inherits) ... _FORCE_INLINE_ bool (Object::*_get_get() const)(...) {...} ...`) never run as written -- they only produce real code once expanded at a `GDCLASS(SomeClass, Base)` call site elsewhere -- but ctags tags `_get_get`/`_get_set`/`_get_bind_methods`/`_get_bind_compatibility_methods`/`_get_notification`/`_get_property_can_revert`/`_get_property_get_revert`/`_get_validate_property`/`_get_get_property_list` (all 9 sampled cases, all from this same macro) as if they were ordinary member functions. Neither GitGalaxy nor tree-sitter are fooled by this. Documented in ctags_reader.py's KIND MAPS section (cpp bullet) rather than fixed -- this is ctags' own parser behavior, nothing in this repo's tooling can distinguish a macro-definition body from real code without reimplementing preprocessing. @@ -325,7 +325,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 22 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 22 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > UPDATED after a real production fix. The OPCODE-family shared mistake documented in this shape's prior verdict (~96 of the original 105 occurrences) is now FIXED: GitGalaxy's func_start (and by the same mechanism, C's) now scans each file for `#define NAME(...)` function-like macro definitions and excludes any match whose captured name is a known macro -- the exact same fact universal-ctags itself already used (confirmed via a direct `ctags -f -` run: ctags tags `OPCODE` only once, at its own #define line, kind `d`, and produces zero tags at any invocation site -- it isn't smarter about the invocation's shape, it just already knows the name is a macro and never re-tags it). This also fixed the already-documented C `RICHCMP_WRAPPER`/`SLOT0`/`SLOT1`/`SLOT1BINFULL`/`DICT___REVERSED___METHODDEF` false positives as a bonus (same mechanism, `lang_id in ("c", "cpp")`). Verified via 3 repeated full-corpus scans producing byte-identical function lists, the full extraction gauntlet, and both golden masters re-blessed. The remaining residual (9 occurrences, previously miscounted as more of the same shared mistake in the earlier verdict's blanket debit -- corrected here) is a DIFFERENT, unrelated finding: GitGalaxy and tree-sitter are CORRECT here, ctags is wrong. Two sub-patterns confirmed: (1) the already-documented macro-as-return-type-prefix pattern (`IFACEMETHODIMP_(void)` immediately before the real `FancyZones::Run() noexcept` -- ctags tags the macro invocation itself and loses the real name, powertoys/FancyZones.cpp, 4 occurrences); (2) a newly-confirmed, NOT yet root-caused ctags miss on an ordinary virtual method with no macro involvement at all (`virtual RID mesh_create_from_surfaces(const Vector &p_surfaces, int p_blend_shape_count = 0) override { ... }`, godot/rendering_server_default.h -- ctags produces zero tags anywhere near this real method, 5 occurrences). No credit_tools adjustment applies: GitGalaxy and tree-sitter are already a 2-of-3 agreeing pair here, which already satisfies reconcile_symbols' own natural precision-credit condition. 2026-08-29 follow-up (#2455): the tree_sitter_accuracy_audit / tri_comparison_gatherer shared tree-sitter reader now canonicalizes C++ conversion-operator and destructor names to GitGalaxy's own convention -- `Variant::operator String() const` -> `Variant::operator String`, `operator BitField() const` -> `operator BitField`, and the `_FORCE_INLINE_`-macro-mangled `~Variant` / `operator T` forms recovered from the sibling ERROR node -- and treats a small tree-sitter-cpp ERROR node (a function-like macro with no visible definition immediately before a special member) as a blind-spot region, promoting GitGalaxy's correct extraction there to ground truth. cpp function precision 95.0% -> 100.0%, extra_functions 68 -> 0. Several conversion operators GitGalaxy and tree-sitter now agree on (ctags names them without the `operator ` prefix or misses the `_FORCE_INLINE_`-macro forms) shifted into this shape, count ~9 -> ~21 -- still GitGalaxy+tree-sitter correct, ctags limited. @@ -345,7 +345,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` function existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 14 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 14 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > Confirmed real tree-sitter-cpp grammar limitation, not a GitGalaxy or ctags defect. Every sampled case (GDScriptFunction::call, Main::setup, Main::setup2, Main::start, Object::Connection::operator Variant) is a large, complex function -- GDScriptFunction::call in particular (godot/gdscript_vm.cpp:499) is a bytecode interpreter's main dispatch loop using GNU 'labels as values' computed-goto syntax (`&&OPCODE_LABEL`) via the same OPCODES_TABLE/OPCODE macro family documented in the sibling agree[gitgalaxy,tree_sitter]_vs[ctags] entry -- a non-standard GNU extension tree-sitter-cpp's grammar does not support, which plausibly causes a parse error cascade that loses the enclosing function_definition node entirely rather than just misreading the body. ctags and GitGalaxy both correctly find and name these functions regardless of body content, since neither one needs to fully parse the function body to recognize its signature. tree-sitter's non-detection is a confirmed limitation in tree-sitter itself -- but no credit_tools adjustment applies: ctags and GitGalaxy are already a 2-of-3 AGREEING PAIR on this shape (agreeing_tools has 2 members), which already satisfies reconcile_symbols' own `len(present) >= 2` precision-credit condition naturally with no ledger adjustment needed. credit_tools exists for a LONE, single-tool claim (agreeing_tools with exactly 1 member) the base algorithm can't otherwise corroborate -- applying it to an already-mutually-corroborating pair would double-count (confirmed: this exact mistake briefly pushed ctags' precision past 100% before being caught and reverted in this same session). 2026-08-29 follow-up (#2455): the tree_sitter_accuracy_audit / tri_comparison_gatherer shared tree-sitter reader now canonicalizes C++ conversion-operator and destructor names to GitGalaxy's own convention -- `Variant::operator String() const` -> `Variant::operator String`, `operator BitField() const` -> `operator BitField`, and the `_FORCE_INLINE_`-macro-mangled `~Variant` / `operator T` forms recovered from the sibling ERROR node -- and treats a small tree-sitter-cpp ERROR node (a function-like macro with no visible definition immediately before a special member) as a blind-spot region, promoting GitGalaxy's correct extraction there to ground truth. cpp function precision 95.0% -> 100.0%, extra_functions 68 -> 0. `Object::Connection::operator Variant` (doubly-qualified conversion operator) is now in consensus. The residual (`GDScriptFunction::call`, `Main::setup*`) is the computed-goto / OPCODES_TABLE parse cascade that loses the whole `function_definition` node -- GitGalaxy and ctags both still correct, count ~66 -> ~14. @@ -365,7 +365,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` class existence: ctags agree, GitGalaxy, tree-sitter differ -*2-vs-1 -- 2 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 2 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > Not a real existence disagreement -- a template-argument name-formatting difference in the comparison tooling. `godot/variant.h`'s `HashMapComparatorDefault` and `is_zero_constructible` are template CLASS specializations; GitGalaxy and tree-sitter both read the name WITH its template argument baked in (matching the instantiation as written in source), while ctags strips the `<...>` template-argument suffix from its own class tag name. All three tools found the exact same class definition at the exact same line -- confirmed via the sibling agree[gitgalaxy,tree_sitter]_vs[ctags] entry, which is the same pair of classes from the opposite direction. Low magnitude (2 occurrences) -- not chased to a code fix in this pass, but a plausible future micro-fix would strip a trailing `<...>` from gg/tree-sitter's class name before matching, mirroring how ctags_reader.py's operator-name normalization already handles a similar formatting mismatch. @@ -377,7 +377,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `cpp` class existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 2 occurrences as of 2026-08-31T00:01:02Z* +*2-vs-1 -- 2 occurrences as of 2026-08-31T00:12:07Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > Same template-argument name-formatting difference as the sibling agree[ctags]_vs[gitgalaxy,tree_sitter] class entry, viewed from the opposite direction -- `HashMapComparatorDefault`/`is_zero_constructible` (ctags' bare names) vs. `HashMapComparatorDefault`/`is_zero_constructible` (GitGalaxy/tree-sitter's names, template argument included). Not a real disagreement about whether these classes exist -- see the sibling entry for the full explanation. @@ -391,7 +391,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` function existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 271 occurrences as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 271 occurrences as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T18:13:27Z): > Confirmed: this shape is entirely tree-sitter-c-sharp's own known parse-error cascade in roslyn/LanguageParser.cs, already root-caused and evidence-backed as Claim 3 in docs/why_gitgalaxy_beats_ast_here.md (issues #1427/#1567). A syntax construct at line ~5198 triggers a parse error whose recovery fails to resynchronize for the rest of the (14,680-line) file -- tree.root_node.type itself becomes ERROR, so tree-sitter's own recall for this file collapses to near-zero past that point. GitGalaxy's regex and ctags' text-based parser are both unaffected and correctly find these functions (all sampled: ParseVariableDeclarator, GetPrecedence, ParsePrimaryExpression, ScanType x3 -- real, ordinary private methods, exact line-number agreement between ctags and gitgalaxy on every one). This is the tri-comparison ledger's own version of a phenomenon already fully diagnosed for the 2-way tree_sitter_accuracy_audit.py tool via its cascade_promotable logic -- that logic was never ported to tri_comparison_gatherer.py/tri_comparison_reconcile.py, which is why this shows as an unvalidated ledger shape despite being a known, closed question. Not a GitGalaxy or ctags defect. CORRECTION (2026-08-21): credit_tools was originally set here, but this is wrong -- these tools already mutually corroborate each other (2-of-3 agreement), so their occurrences were already counted in base precision before any credit was applied. Adding credit on top double-counted them, pushing gitgalaxy's func_precision matched_consensus past its own total_slots (1297/965, >100%, a real, visible chart-rendering bug). credit_tools is only valid for a shape where a tool is completely ALONE and otherwise uncorroborated (e.g. this language's agree[gitgalaxy]_vs[ctags,tree_sitter] shape), never for an already-mutually-agreeing pair. Reset to empty; the validation itself (which tool is factually correct here) is unaffected and remains correct. @@ -411,7 +411,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 108 occurrences as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 108 occurrences as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T18:13:44Z): > Confirmed real ctags parser limitations, not a GitGalaxy or tree-sitter defect, via direct source reading and raw `ctags -x` runs against the flagged files. Two distinct mechanisms: (1) Local/nested functions -- roslyn/CSharpCompilation.cs's `validateSignature` (nested inside a larger method) and `isSupportedType` (a `static bool isSupportedType(...)` local function) are both structurally invisible to ctags, whose csharp kind map is only 'm' (top-level methods; "C# has no free functions" per ctags_reader.py's own comment) with no local-function concept at all -- this generalizes to every local function in the corpus, not just the sampled two. (2) Complex-signature misses and overload collisions on ordinary top-level private methods -- `FindEntryPoint` (nullable return/param types plus a generic `out` parameter) and `GetSourceDeclarationDiagnostics` (5 params, two with default values, one a `Func<...>` generic delegate) get no ctags tag at all, confirmed via `ctags -x` showing tags immediately before/after but not at their own lines -- isolated misses, not a wider blind region (unlike the tree-sitter cascade in the sibling ledger shape). `ReportUnusedImports` has two overloads at different lines; ctags tags only the first, silently dropping the second. Documented in tests/tools/ctags_reader.py's csharp KIND MAPS bullet. Credited on the strength of mechanism (1) generalizing structurally to the whole shape (ctags cannot see ANY local function, by construction) even though only ~5 of 107 occurrences were individually read -- mechanism (2)'s complex-signature misses are a smaller, less certain-to-generalize contributor to the same shape but point the same direction (ctags-side, not GitGalaxy/tree-sitter). CORRECTION (2026-08-21): credit_tools was originally set here, but this is wrong -- these tools already mutually corroborate each other (2-of-3 agreement), so their occurrences were already counted in base precision before any credit was applied. Adding credit on top double-counted them, pushing gitgalaxy's func_precision matched_consensus past its own total_slots (1297/965, >100%, a real, visible chart-rendering bug). credit_tools is only valid for a shape where a tool is completely ALONE and otherwise uncorroborated (e.g. this language's agree[gitgalaxy]_vs[ctags,tree_sitter] shape), never for an already-mutually-agreeing pair. Reset to empty; the validation itself (which tool is factually correct here) is unaffected and remains correct. @@ -431,7 +431,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` function existence: GitGalaxy agree, tree-sitter, ctags differ -*2-vs-1 -- 46 occurrences as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 46 occurrences as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T21:45:53Z): > Mixed shape, confirmed via a full name-diff against gather_language('csharp') rather than the capped sample alone: 44 of 48 are genuine local (nested) functions inside roslyn/LanguageParser.cs's tree-sitter parse-error cascade region (line >= ~5198, same mechanism as the sibling agree[ctags,gitgalaxy]_vs[tree_sitter] shape / Claim 3) -- tree-sitter is fully blind there, and ctags additionally has no concept of a local/nested function at all (only top-level 'm' method tags), so GitGalaxy is the only tool that can see these. The remaining 2 are genuine GitGalaxy false positives with a confirmed, unrelated root cause: roslyn/CSharpCompilation.cs:2282's GetWellKnownType( (a call, no declaration exists anywhere in the file) and roslyn/LanguageParser.cs:2338's this.EatToken( (a call inside a switch-expression arm) are both mis-captured because func_start's return-type-loop character class allows unbalanced parens/commas in a single 'token', letting it swallow a real call-expression fragment as if it were part of a return type and land on the wrong identifier as the 'function name'. Filed as GitHub issue #2035 with root cause and fix direction; fix in progress in an isolated worktree as of this writing. Not crediting/debiting any tool on this shape since it's genuinely mixed (44 real local-function finds, 2 real false positives) -- re-visit once #2035 merges and re-run to confirm the shape drops to 44 (or fewer, if further false positives of the same class surface once #2035's fix generalizes across the full corpus). FOLLOW-UP (2026-08-21, post-#2035/#2036 re-verification): re-checked this shape with a full, uncapped corpus diff rather than the capped example sample. The 2 originally-confirmed false positives (GetWellKnownType, this.EatToken) are gone as expected. However 2 MORE confirmed false positives remain, distinct mechanisms from #2035's fix: CSharpCompilation.cs's `ref mdName, ..., CreateReflectionTypeNotFoundError(` (a real call site mistaken for a declaration because `ref` is a legitimate Branch A modifier keyword when used in a real declaration, but here it's a call-argument prefix) and LanguageParser.cs:2336's `_syntaxFactory.TypeConstraint(this.ParseType())` (a ternary `?` operator consumed by the return-type loop's nullable-type-marker allowance, same general shape as this.EatToken but not covered by #2035's specific fix). Filed as issue #2054. This shape remains genuinely mixed (the overwhelming majority are real cascade-region local functions, but a small residual of false positives keeps surfacing) -- still correctly left uncredited pending #2054. CLOSED (2026-08-21): this shape is now fully clean. Both remaining false-positive mechanisms (issue #2054: bare-comma call-argument absorption, ternary-? consumption, and the nested-generic-return-type regression its own fix introduced and #2061 corrected) are fixed and merged. A full uncapped re-diff confirms all 44 remaining occurrences are genuine local functions inside LanguageParser.cs's tree-sitter parse-error cascade region (Claim 3), zero non-cascade residue. credit_tools is now correctly applicable -- gitgalaxy is alone on this shape (no tool to share the credit-double-counting error this session already found and fixed on the sibling agree[ctags,gitgalaxy]/agree[gitgalaxy,tree_sitter] shapes with), and every one of its 44 claims here is confirmed real with the reason ctags (no local-function concept) and tree-sitter (parse cascade) don't corroborate it being a confirmed limitation in THEM, not an open question about GitGalaxy. @@ -451,7 +451,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` class existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 9 occurrences as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 9 occurrences as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T18:13:27Z): > Same root cause and file as the sibling function-existence shape (roslyn/LanguageParser.cs's tree-sitter parse-error cascade from line ~5198, Claim 3 in why_gitgalaxy_beats_ast_here.md, #1427/#1567) -- with the parse tree corrupted into a single ERROR node, tree-sitter can't resolve any class_declaration structure in the corrupted region either, including the outer LanguageParser class itself (whose body spans the entire cascade) and every enum/nested class declared inside it (VariableFlags, NameOptions, ScanTypeArgumentListKind, ScanTypeFlags, ParseTypeMode, etc.). ctags and GitGalaxy both correctly find these via text-based parsing, unaffected by tree-sitter's own AST failure. Not a GitGalaxy or ctags defect. CORRECTION (2026-08-21): credit_tools was originally set here, but this is wrong -- these tools already mutually corroborate each other (2-of-3 agreement), so their occurrences were already counted in base precision before any credit was applied. Adding credit on top double-counted them, pushing gitgalaxy's func_precision matched_consensus past its own total_slots (1297/965, >100%, a real, visible chart-rendering bug). credit_tools is only valid for a shape where a tool is completely ALONE and otherwise uncorroborated (e.g. this language's agree[gitgalaxy]_vs[ctags,tree_sitter] shape), never for an already-mutually-agreeing pair. Reset to empty; the validation itself (which tool is factually correct here) is unaffected and remains correct. @@ -470,7 +470,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` function args: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 2 occurrences as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 2 occurrences as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T20:06:45Z): > Mixed shape. 1 of 4 is a confirmed genuine ctags defect: GetHashCode's tuple-parameter overload (`GetHashCode((ImmutableArray ContentHash, int Position) obj)`, 1 real param) -- ctags reports 2, mis-splitting the tuple-typed parameter's own internal comma as a second top-level parameter, the same family as the already-documented tuple-related ctags limitations in tests/tools/ctags_reader.py's csharp bullet. The other 3 (GetModifierExcludingScoped and two SetCurrentSolution rows) are NOT real tool disagreements at all -- SetCurrentSolution has 4 real overloads (1/6/4/5 real params respectively) in roslyn/Workspace.cs; every individual reading from every tool across both rows (ctags=6, gitgalaxy=1, tree_sitter=1, ctags=4, gitgalaxy=6, tree_sitter=6) independently matches SOME real overload's true count exactly when checked against the source -- the ledger shape only exists because the reconciler's rank-based pairing compared different tools' readings of DIFFERENT overloads against each other, not because any tool actually miscounted anything. Confirmed via direct line-by-line source reading of all 4 overloads. Credit gitgalaxy+tree_sitter for the 1 real ctags defect only; the shape as a whole is left without a clean credit/debit since 3 of 4 occurrences aren't a real disagreement to adjudicate. @@ -482,7 +482,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `csharp` function existence: ctags agree, GitGalaxy, tree-sitter differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:07Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:10Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T18:13:27Z): > Confirmed genuine ctags false positive, not a GitGalaxy or tree-sitter gap. roslyn/CSharpCompilation.cs:2539's real declaration is `public bool Equals((ImmutableArray ContentHash, int Position) x, (ImmutableArray ContentHash, int Position) y)` -- an Equals overload with tuple-typed parameters. ctags' lightweight C# parser misreads the return-type/tuple-parameter boundary and tags the match under the name `bool` instead of `Equals`. Documented in tests/tools/ctags_reader.py's csharp KIND MAPS bullet alongside this shape's sibling ctags limitations (local-function blindness, complex-signature misses, overload-name collision -- see the agree[gitgalaxy,tree_sitter]_vs[ctags] shape). Not crediting/debiting: a single-tool false positive from an otherwise-unaffected precision baseline, no shared-mistake mechanism applies. @@ -495,7 +495,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `css` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 25 occurrences as of 2026-08-31T00:01:08Z* +*2-vs-1 -- 25 occurrences as of 2026-08-31T00:12:11Z* **Verdict** (by Claude (Sonnet 5), direct investigation via tri-comparison-ledger-sweep, 2026-08-21T00:00:00Z): > Confirmed ctags-side structural limitation, not a GitGalaxy defect. GitGalaxy's own func_start regex (language_standards.py) deliberately matches CSS at-rule keywords (@media/@supports/@container/@layer/@keyframes/@-webkit-keyframes) as the closest function-shaped construct CSS has, since CSS has no true function-definition/call syntax. tree-sitter's CSS grammar independently corroborates this: media_statement/supports_statement/keyframes_statement are real, distinct node types, already mapped 1:1 onto GitGalaxy's own at-rule set per issue #1313 (see tree_sitter_accuracy_audit.py's css NODE_MAPS entry and its media_statement/supports_statement name-extraction branches). Re-ran gather_language('css') directly against the full 4-file corpus (not just the ledger's capped 3-example sample): GitGalaxy and tree-sitter agree exactly on function count in every file (3/3 total, zero diff files) -- the agreement generalizes completely, it is not a partial/mixed sample. ctags' own FUNCTION_KIND_MAP already documents 'css': set() # no function-equivalent (ctags_reader.py) -- confirmed empty (ctags_funcs: []) across all 4 corpus files too. ctags structurally cannot tag CSS at-rules as anything function-like; it isn't wrong about a claim, it has no claim to make here at all. No new doc note needed -- both the GitGalaxy/tree-sitter convention (#1313) and the ctags limitation are already documented in code. GitGalaxy+tree-sitter's agreement is real corroboration, not a shared mistake, so no credit/debit adjustment applies; ctags' lack of a comparable slot here is already handled correctly by the reconciler's own total_slots mechanics. @@ -517,7 +517,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ❓ `embedded_python` function existence: ctags agree, GitGalaxy differ -*2-vs-1 -- 69 occurrences as of 2026-08-31T00:01:13Z* +*2-vs-1 -- 69 occurrences as of 2026-08-31T00:12:14Z* **Not yet investigated.** See `docs/self_scan/how_to_investigate_a_discrepancy.md` for the process -- read the source at a few examples below, then hand-edit this entry (`embedded_python/function/existence/agree[ctags]_vs[gitgalaxy]`) in `tri_comparison_ledger.json`. @@ -536,7 +536,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ❓ `embedded_python` function args: none agree, GitGalaxy, ctags differ -*3-way split -- 1 occurrence as of 2026-08-31T00:01:13Z* +*3-way split -- 1 occurrence as of 2026-08-31T00:12:14Z* **Not yet investigated.** See `docs/self_scan/how_to_investigate_a_discrepancy.md` for the process -- read the source at a few examples below, then hand-edit this entry (`embedded_python/function/args/agree[none]_vs[ctags,gitgalaxy]`) in `tri_comparison_ledger.json`. @@ -548,7 +548,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `fortran` function existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 15 occurrences as of 2026-08-31T00:01:17Z* +*2-vs-1 -- 15 occurrences as of 2026-08-31T00:12:16Z* **Verdict** (by Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T23:35:49Z): > Confirmed already-documented tree-sitter-fortran limitation (#1709/Claim 7 in docs/why_gitgalaxy_beats_ast_here.md), re-verified directly against this exact shape's 14 occurrences (11 in wrf/module_physics_init.F: bl_init, ra_init, landuse_init, mp_init, cu_init, shcu_init, CAM_INIT, z2sigma, fdob_init, fg_init, ALLOCATE_CAM_ARRAYS; 3 in wrf/wrf_timeseries.F: calc_p8w, calc_ts, write_ts). Directly ran tree_sitter_accuracy_audit.py's own _find_blind_spot_ranges() against both files' real parse trees: every one of the 14 occurrences' start lines falls inside a tree-sitter ERROR/preproc_* blind-spot range (e.g. bl_init/mp_init/cu_init/shcu_init all sit inside one continuous (2203,4393) span; all 3 wrf_timeseries.F occurrences fall inside a (1,1200) span). ctags and GitGalaxy are both correct; tree-sitter-fortran's own grammar cascades into ERROR nodes on the CPP #if/#endif guards surrounding these subroutines. Added as new evidence to the existing Claim 7 in docs/why_gitgalaxy_beats_ast_here.md (this ledger shape is independently sourced from the original accuracy-audit finding -- a raw per-file name diff via tri_comparison_gatherer.py, not the audit tool's promotion logic). @@ -568,7 +568,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `fortran` function args: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:17Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:16Z* **Verdict** (by Antigravity (direct sweep), 2026-08-24T04:14:26Z): > GitGalaxy/ctags correctly extract 677 args. Tree-sitter truncates at 39. @@ -579,7 +579,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `fortran` function existence: GitGalaxy agree, tree-sitter, ctags differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:17Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:16Z* **Verdict** (by Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-21T23:35:49Z): > Confirmed GitGalaxy correct on both. 'vint' (module_initialize_real.F:5375, inside #ifdef VERT_UNIT) and 'foo' (module_initialize_real.F:7519, inside #if 0) are both real, syntactically valid `PROGRAM name` declarations. tree-sitter misses both via the already-documented #1709 ERROR/preproc_* blind-spot mechanism (both sit inside #if/#ifdef-guarded regions). ctags misses 'foo' only because CTAGS_FUNC_KINDS['fortran'] was {'f','s'} (functions/subroutines only) -- ctags itself DOES correctly tag `foo` as a 'p' (program) kind (confirmed via `ctags -x --kinds-Fortran=p`), just invisible to this comparison. Fixed in tests/tools/ctags_reader.py: CTAGS_FUNC_KINDS['fortran'] now {'f','s','p','e'} (added program, entry -- matching GitGalaxy's own func_start scope of FUNCTION|SUBROUTINE|PROGRAM|ENTRY). ctags separately, genuinely fails to tag 'vint' at all under any kind in this specific file (confirmed it tags an isolated test file with identical #ifdef-wrapped `program vint` syntax fine, so it's a real, unexplained ctags-fortran-parser corruption specific to this file's content, not a preprocessor-conditional-skip decision) -- a genuine, narrow ctags limitation, not chased further for a single occurrence. @@ -592,7 +592,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `go` function args: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 75 occurrences as of 2026-08-31T00:01:19Z* +*2-vs-1 -- 75 occurrences as of 2026-08-31T00:12:18Z* **Verdict** (by Antigravity (direct sweep), 2026-08-24T04:14:26Z): > GitGalaxy/ctags correctly parse multiple arguments sharing a type. Tree-sitter groups them. @@ -614,7 +614,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ❓ `groovy` function existence: GitGalaxy agree, tree-sitter differ -*2-vs-1 -- 721 occurrences as of 2026-08-31T00:01:20Z* +*2-vs-1 -- 721 occurrences as of 2026-08-31T00:12:19Z* **Not yet investigated.** See `docs/self_scan/how_to_investigate_a_discrepancy.md` for the process -- read the source at a few examples below, then hand-edit this entry (`groovy/function/existence/agree[gitgalaxy]_vs[tree_sitter]`) in `tri_comparison_ledger.json`. @@ -635,7 +635,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function existence: ctags agree, GitGalaxy, tree-sitter differ -*2-vs-1 -- 102 occurrences as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 102 occurrences as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5 (dispatched agent investigation), 2026-08-19T00:00:00Z): > All 10 sampled cases are ctags-side artifacts, not real GitGalaxy/tree-sitter misses -- confirmed via direct `ctags -x` output against the corpus. Three distinct ctags Haskell-parser weaknesses cover the sample: (1) multi-clause double/triple-tagging -- ctags tags every pattern-matched equation line as its own occurrence of the name (writerFn/writeFnBinary/expandFilterPath: confirmed 2-3 raw ctags tags per function, one per clause; a file-wide count found 45 such extra same-name tags across the 7-file corpus, e.g. blockToInlines alone has 14). GitGalaxy/tree-sitter both correctly anchor to the FIRST clause only, leaving ctags' later-clause tags as the ones unpaired. (2) keyword-as-identifier misparsing -- `class`/`where`/`pattern` (from PatternSynonyms) get tagged as function names when ctags fails to parse past the keyword; confirmed at Options.hs:62 (`class HasSyntaxExtensions`), Parsing.hs:184 (module-header `where`), and 3 PatternSynonyms declarations in Options.hs. (3) CAF/value-vs-function kind collapse -- defaultAbbrevs/defaultKaTeXURL/defaultMathJaxURL/defaultWebTeXURL are zero-arg top-level VALUES (non-arrow type signatures), not functions; ctags has no value/variable kind at all (`ctags --list-kinds-full=Haskell` shows only constructor/function/module/type) so it lumps every `name = expr` binding into "function". GitGalaxy (language_standards.py haskell rules, #1312) and tree-sitter's own audit tooling (_find_haskell_signature_for_bind, #1566) both independently make the same value-vs-function distinction correctly -- real cross-tool corroboration, not coincidence. (4) TH-splice call sites misread as definitions -- deriveJSON at Options.hs:454/458 is a Template Haskell splice INVOKING an imported function, not defining one; ctags misparses the call as a definition. No GitGalaxy/tree-sitter defect anywhere in this shape; purely a ctags parser limitation, same category as the already-documented empty CTAGS_CLASS_KINDS['haskell']. @@ -655,7 +655,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 69 occurrences as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 69 occurrences as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5 (dispatched agent investigation), 2026-08-19T00:00:00Z): > Confirmed: all 10 sampled misses (and, by cross-check against additional non-sampled instances in Options.hs/Shared.hs, plausibly all 69) are locally-scoped function definitions -- `instance ... where` methods, `where`-clause helpers, or `let`-bound names inside `do` blocks -- never top-level module definitions. ctags' Haskell parser has no layout-rule/scope awareness and only tags equations anchored at column 1; it correctly handles multi-clause TOP-LEVEL definitions (verified via expandFilterPath, writeFnBinary, writerFn -- all tag fine, clauses and all), so this is a pure scope blind spot, not a clause-counting bug (distinct from the tree-sitter clause-splitting bug fixed earlier in this same effort, which shares 2 of the 10 sample names by coincidence of subject matter, not root cause). GitGalaxy and tree-sitter are both correct; ctags is not wrong so much as structurally incapable of seeing these. Known, expected limitation of ctags' Haskell parser, now documented alongside its existing Haskell notes in tests/tools/ctags_reader.py -- not a GitHub issue, nothing in this repo to fix. @@ -675,7 +675,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` class existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 16 occurrences as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 16 occurrences as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5 (session investigation), 2026-08-19T00:00:00Z): > Not a real discrepancy -- structural tooling gap, already documented in the codebase. tests/tools/ctags_reader.py:39-40,228 sets CTAGS_CLASS_KINDS['haskell'] = set() on purpose: "ctags' Haskell parser has no class-shaped kind at all (constructor/function/module/type only)". Every example in this shape (data/newtype/class declarations -- ReaderOptions, CiteMethod, HasSyntaxExtensions, etc.) is real; ctags structurally cannot report any of them for this language, not a sample-specific miss. No action needed beyond this note. @@ -695,7 +695,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function existence: GitGalaxy, ctags agree, tree-sitter differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-29): > Reconciler rank-pairing artifact from ctags-haskell's per-line tagging. All three tools FIND the function -- pandoc/Shared.hs's `addPandocAttributes`: GitGalaxy at line 299 (the bare name line of a multi-line definition), tree-sitter-haskell at line 301 (the first equation), each exactly once. ctags-haskell emits THREE `f` tags for it, at lines 300, 301 and 302 (the `::` type-signature line plus both `addPandocAttributes ... = ...` equation lines). tri_comparison_reconcile pairs same-named occurrences by rank: GitGalaxy's single occurrence rank-pairs with ctags' rank-1 tag (@300) and tree-sitter's single occurrence rank-pairs with ctags' rank-2 tag (@301), so the GitGalaxy+ctags slot is left with no tree-sitter partner and surfaces as `agree[ctags,gitgalaxy]_vs[tree_sitter]` for 1 occurrence. Not a tree-sitter recall gap and not a GitGalaxy defect -- purely ctags' surplus tags shifting the rank alignment. Documented in tests/tools/ctags_reader.py's haskell CTAGS_FUNC_KINDS comment. No credit/debit: ctags' extra tags are its own per-line behaviour, not a shared mistake with another tool, and neither GitGalaxy nor tree-sitter has a confirmed limitation here. @@ -706,7 +706,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function existence: tree-sitter, ctags agree, GitGalaxy differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:20Z* **Verdict** (by Claude (Sonnet 5), dispatched via tri-comparison-ledger-sweep, 2026-08-26T00:00:00Z): > Stale, superseded by extensive GitGalaxy Haskell hardening between this shape's original capture and today (closed issues #1312, #1435, #1442, #1532, #1564, #1565, #1614, #1615, #1616 all touch this exact case). A fresh gather of every sampled example (writerFn, writeFnBinary in App.hs; expandFilterPath in Filter.hs; tabFilter, compactify, camelCaseStrToHyphenated, blockToInlines in Shared.hs) shows GitGalaxy now correctly anchors to the function's TYPE SIGNATURE line, tree-sitter anchors to the first pattern-match equation, and ctags tags every equation clause separately (up to 14 tags for blockToInlines' many clauses). Rank-paired, slot 0 is now full 3-way agreement; the extra ctags clause-tags fall into the already-validated shape `haskell/function/existence/agree[ctags]_vs[gitgalaxy,tree_sitter]`, which already covers this exact multi-clause-tagging phenomenon. @@ -717,7 +717,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function existence: GitGalaxy agree, tree-sitter, ctags differ -*2-vs-1 -- 1 occurrence as of 2026-08-31T00:01:21Z* +*2-vs-1 -- 1 occurrence as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5 (session investigation), 2026-08-19T00:00:00Z): > Mixed shape as originally investigated (2 occurrences): (1) Options.hs:438 getExtensions -- real function, `instance HasSyntaxExtensions WriterOptions where getExtensions opts = writerExtensions opts`. A sibling instance for ReaderOptions at Options.hs:80 has the identical shape. Tree-sitter's Haskell grammar doesn't expose typeclass-instance-method clause bodies the way it does top-level bindings, and ctags' Haskell parser has no instance-method kind either -- GitGalaxy is correct, both other tools have a real recall gap on typeclass instance methods. (2) Shared.hs:475 extensionEnabled -- was NOT a real function (imported from Text.Pandoc.Extensions, only ever appears as a guard-clause call inside a multi-line `||` condition) -- a genuine GitGalaxy false positive, filed as #2082 and fixed in PR #2083 (2026-08-22): `_slice_by_indentation` now skips an equation-form func_start match whose immediately preceding line ends in `||`/`&&`. Reconciled post-fix: only the getExtensions occurrence remains, so this shape is now a clean, unambiguous GitGalaxy win -- credited accordingly. @@ -728,7 +728,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `haskell` function args: none agree, GitGalaxy, tree-sitter differ -*3-way split -- 9 occurrences as of 2026-08-31T00:01:21Z* +*3-way split -- 9 occurrences as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5 (session investigation), 2026-08-19T00:00:00Z): > One systematic cause, confirmed by reading source for 3 of the 9 (getMetadataFromFiles App.hs:395-397, splitTextByIndices Shared.hs:142-143, tabFilter Shared.hs:256-259) and consistent with the shape of the remaining 6. Every case is a point-free/eta-reduced Haskell equation: the type signature declares N params, but the specific clause GitGalaxy and tree-sitter both align to only explicitly binds N-1 of them, handling the trailing argument via composition (`.`) or `\case`. GitGalaxy counts arity from the full type signature (the true logical arity); tree-sitter's declaration-only reading counts only the clause's explicitly-bound patterns (correct for that one equation, but undercounts true arity). Neither reader is wrong about what it's measuring -- same shape as Claim 1 in docs/why_gitgalaxy_beats_ast_here.md. GitGalaxy's answer is arguably the more useful coupling signal; recommend documenting as a candidate Claim rather than treating as an engine defect to fix toward matching tree-sitter. @@ -749,7 +749,7 @@ The 9 remaining occurrences (`NUMBER1/2/3` in SG3034.2.cbl and SG4014.2.cbl; `SE ### ✅ `html` function existence: GitGalaxy, tree-sitter agree, ctags differ -*2-vs-1 -- 37 occurrences as of 2026-08-31T00:01:23Z* +*2-vs-1 -- 37 occurrences as of 2026-08-31T00:12:20Z* **Verdict** (by Claude Sonnet 5, dispatched via tri-comparison-ledger-sweep, 2026-08-29): > GitGalaxy correct, corroborated by tree-sitter, ctags structurally cannot see it. cpython_jinja/layout.html:40 `@media only screen { ... }` inside a `