Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
285 commits
Select commit Hold shift + click to select a range
9dcc6b7
ruff_cpp_spo: harvest_unicharset example — the v1 probe's input manifest
claude Jun 16, 2026
39afe0f
ruff_cpp_spo: capture ctor/dtor/conversion/fn-template as has_functio…
claude Jun 17, 2026
1ee92a3
ruff_cpp_spo: capture static members (VarDecl) + friends (FriendDecl)…
claude Jun 17, 2026
8a8b6bb
ruff_cpp_spo: CPP-AST-RT determinism probe — GREEN (byte-identical ha…
claude Jun 17, 2026
a341f48
ruff_cpp_spo: harvest class templates as classes (Shape A) — ccutil 5…
claude Jun 17, 2026
093e403
ruff_cpp_spo: Shape C — template_instantiates from field + signature …
claude Jun 17, 2026
5ed37d0
ruff_cpp_spo: option exploration + ccstruct motherlode probe — harves…
claude Jun 17, 2026
8adb968
ruff_spo: AST-DLL signature shape — returns_type + has_param_type (op…
claude Jun 17, 2026
1082e5a
ruff_spo: ORM-downcast shape — is_const + is_static (vocab 50->52; bo…
claude Jun 17, 2026
6faa628
ruff_cpp_spo: codex P2 #17 — overload discrimination + partial-spec i…
claude Jun 17, 2026
044af8a
feat(ar-shape): emit class_name option triple to surface FK target ov…
claude Jun 17, 2026
0bd85a7
feat(ar-shape): route Rails STI parent to inherits_from (not includes…
claude Jun 17, 2026
0afd324
ruff_spo_triplet: add reassemble() — the inverse of expand's C++ proj…
claude Jun 17, 2026
08fb166
plans/cpp-spo-probes: record CPP-REASSEMBLE-RT green + const-overload…
claude Jun 17, 2026
c2e33b9
ruff: D — cv-aware method IRI; GAP-CONST-OVERLOAD resolved, CPP-REASS…
claude Jun 17, 2026
3875704
ruff_spo_triplet: cargo fmt — alphabetize pub use (reassemble after n…
claude Jun 17, 2026
de1403f
ruff_cpp_codegen: emitter scaffold (C-FIRST step 2) — ModelGraph -> M…
claude Jun 17, 2026
7246531
ruff_cpp_codegen: lock rendered MethodSig field set to the Core type
claude Jun 17, 2026
2b680d1
ruff: D-harvester polish — has_visibility (GAP-3), the dropped access…
claude Jun 17, 2026
68b1904
feat(ar-shape): emit validation_kind triple per recognised Rails vali…
claude Jun 17, 2026
4099168
fix(ar-shape): add absence/comparison + suppress validation_kind on g…
claude Jun 17, 2026
d35e03c
feat(ruff_ruby_spo): add harvest_op example for refreshing the OpenPr…
claude Jun 18, 2026
1295bab
fix(ruff_ruby_spo): harvest_op returns Result instead of process::exi…
claude Jun 18, 2026
6ae5b42
feat(ar-shape): emit validation_param triples for parametric Rails va…
claude Jun 18, 2026
b682420
fix(ruff_ruby_spo): merge same-named class reopens into one Model
claude Jun 19, 2026
931914c
feat(ruff_ruby_spo): extract_with(path, namespace) — curator-namespac…
claude Jun 19, 2026
d09a7a4
feat(ruff_ruby_spo): extract_app — walk Rails engines, not just core
claude Jun 19, 2026
5394891
scaffold(ruff_csharp_spo): Roslyn C#->SPO harvester (MedCare transcode)
claude Jun 26, 2026
e491b67
feat(ruff_spo_address): the 256-cap-is-a-lint probe — rank-minter + t…
claude Jun 27, 2026
cd06e60
fix(ruff_csharp_spo): sync C# frontend to reject-at-parse SPO contract
claude Jun 26, 2026
0a06c7b
build(ruff_csharp_spo): gitignore the Roslyn harvester's .NET bin/obj
claude Jun 27, 2026
de486e0
docs: docs: OGAR polyglot AST integration (RFC) — Python/C++/C# ⇄ IR …
AdaWorldAPI Jun 28, 2026
ddf4543
docs: address Codex P2s — general reassembler is a prereq; cite extra…
AdaWorldAPI Jun 28, 2026
53a564d
docs: align record layout to OGAR canon (key16+value496, EdgeBlock su…
AdaWorldAPI Jun 28, 2026
f9c0c37
feat(spo): declare soc module
AdaWorldAPI Jun 28, 2026
f2a553b
feat(spo): soc — reusable 256-cap-is-a-lint SoC check (promote medcar…
AdaWorldAPI Jun 28, 2026
88fa8b5
fix(spo): address Codex P2s — funcs from has_function predicate (not …
AdaWorldAPI Jun 28, 2026
37122cb
fix(spo): tighten Duplication verdict — require all data typed + dist…
AdaWorldAPI Jun 28, 2026
fd30111
feat(ruff_python_spo): Odoo/Python SPO frontend (core-7 predicates)
claude Jun 28, 2026
32530ae
build(lock): register ruff_python_spo package node
claude Jun 28, 2026
b81f35f
feat(spo): Odoo relation predicates (target/inverse_name) + Codex P2 …
claude Jun 28, 2026
6d01299
feat(spo): relation_kind predicate — Odoo Many2one/One2many/Many2many…
claude Jun 29, 2026
980a268
feat(ruff_spo_address): soc FieldMask cap 64 -> 256 (quadruplet) + bu…
claude Jun 29, 2026
6b5b16e
fix(ruff_spo_address): apply dropped operator veto — class-conditione…
claude Jun 29, 2026
4b1e191
feat(spo): capture Odoo field_type predicate for scalar fields
claude Jun 29, 2026
66a8e29
fix(spo): emit (model, has_field, field) ownership edge for core-7 fi…
claude Jun 29, 2026
2191a51
ruff_spo_triplet: capture function writes/calls (command-shape facts)
claude Jun 30, 2026
3c27e25
scripts: add dev-unblock-lsp-types.sh (vendor the proxy-denied lsp-ty…
claude Jun 30, 2026
d6af185
fix(ruff_ruby_spo): exclude operator methods from setter writes (code…
claude Jun 30, 2026
74c434c
build: vendor astral-sh/lsp-types so the full workspace builds offline
claude Jun 26, 2026
94e2e86
feat(ruff_spo_address): RadixCodebook + mint_factored, public-safe
claude Jun 30, 2026
6174e3e
feat(ruff_python_spo): Odoo _inherit lowers to inherits_from (the is_…
claude Jul 4, 2026
18aa9c6
ruff_cpp_spo: harvest_network example — sink Tesseract LSTM net C++ t…
claude Jul 4, 2026
48f6466
ruff_ruby_spo: add extract_tree_with — harvest any app subtree (contr…
claude Jul 4, 2026
1d9865a
ruff_ruby_spo: filter controller harvest to public actions (visibilit…
claude Jul 5, 2026
e50fd2a
feat(spo): port ruff_ruby_spo::schema (extract_app_with_schema) + col…
claude Jul 6, 2026
4a840f2
feat(ruff_sqlalchemy_spo): new Flask-SQLAlchemy harvest brick (SPEC-5…
claude Jul 6, 2026
1e6d5ea
review(V-R): typos-Hook-Beifang revertiert (nd-Binding) + Allowlist-E…
claude Jul 6, 2026
9ccecb4
port the Node::IfMod walker arm from the convergence branch (stranded…
claude Jul 6, 2026
4250934
Model::helpers visibility split + one Callback per symbol target
claude Jul 6, 2026
c46c42f
docs(.claude): calcify the fuzzy recipe-codebook method + fuzzy-propo…
claude Jul 6, 2026
8b7bbde
J1: writes_if_blank fact — split the SelfMap recipe into default vs n…
claude Jul 6, 2026
44b6455
DTO-arm draft (TESTED) + codebook centroid refinement + SoC/config-as…
claude Jul 6, 2026
8139667
DTO-arm draft (TESTED vs libclang-18) — body fingerprint for the reci…
claude Jul 6, 2026
3600298
views: ERB field-set extractor (presence-only, closed-vocab)
claude Jul 6, 2026
74d24f2
views raw-ident census + representers extractor (the OP APIv3 surface)
claude Jul 6, 2026
f253b34
ruby: OrAsgn `self.x ||= v` → guarded_writes (closes the #45-audit bl…
claude Jul 6, 2026
5f65e7d
review-nits: AndAsgn arm (present-guard = plain write) + ivar/RHS-wal…
claude Jul 6, 2026
a3b95c0
schema: classic-migration fallback — Redmine-layout corpora get a col…
claude Jul 6, 2026
fbc3491
[ruff] Add additive Function::constrains/onchange and Field::stored I…
claude Jul 6, 2026
3fb59ad
[ruff] Capture @api.constrains/@api.onchange decorators and store= kwarg
claude Jul 6, 2026
44614ff
[ruff] rustfmt normalisation (uvx prek)
claude Jul 6, 2026
70eecc5
review fixes (P2): honest doc comments — new IR facts are struct-carr…
claude Jul 6, 2026
cf431b7
[ruff_ruby_spo] fix main: initialize Function.constrains/onchange (#4…
claude Jul 6, 2026
6545da4
ruff_python_spo: populate the DTO arm — writes / guarded_writes / cal…
claude Jul 6, 2026
cbfbbbc
ruff_cpp_spo: walk_free_functions — the C-library free-function + cal…
claude Jul 7, 2026
420b84a
ruff_cpp_spo: generalize harvest_leptonica_scale to the intra-TU disp…
claude Jul 7, 2026
477cb9d
prompts: github-access-runbook — clone/push/PR/release recipes (measu…
claude Jul 7, 2026
536e38b
ruff_cpp_spo: walk_enums — the C++ enum harvest arm (+ class-body enums)
claude Jul 7, 2026
11b085c
ruff_cpp_spo: harvest example gains LANG_MODE=c++ + EXTRA_INC (namesp…
claude Jul 7, 2026
004e086
[cpp_spo] harvest_textord example: env-driven multi-header class harvest
claude Jul 7, 2026
0e01a26
[cpp_spo] fix 3 harvest gaps: out-of-line methods, unresolved-callee …
claude Jul 7, 2026
9d67cfa
[cpp_spo] address codex P2 on #57: class-qualify method entries + res…
claude Jul 7, 2026
5af7dc5
[ruff_spo_triplet] codebook-DTO surface lock: pin Function/Field/Mode…
claude Jul 7, 2026
ee3ce4c
csharp-spo: DTO arm + recipe classifier + codebook-DTO check
claude Jul 7, 2026
5e6ad60
ruff_csharp_spo: harvest the WinForms form->form Klickweg (navigates_to)
claude Jul 8, 2026
00c65f7
ruff_spo_triplet: EmittedBy arm in group_functions + feed-lock doc ho…
claude Jul 7, 2026
47cb382
ruff_spo_triplet: deny_unknown_fields on the shared Triple carrier (o…
claude Jul 8, 2026
a3c3a34
ruff_ruby_spo: repurpose the navigates_to arm for Rails — TWO shapes …
claude Jul 8, 2026
8f40a2b
ruff_python_spo: navigates_to arm for Flask/Django — ONE shape (code-…
claude Jul 8, 2026
1ee1282
ruff_python_spo: clear 3 pre-existing clippy 1.95 lints in lib.rs so …
claude Jul 8, 2026
336c9b8
ruff_python_spo: Jinja/Django template field-set harvest — the third …
claude Jul 8, 2026
11a7be7
ruff_csharp_spo: harvest the UserControl-SPA navigation idiom, not ju…
claude Jul 8, 2026
3c57030
ruff_csharp_spo: harvest the ribbon/tab selector-assignment nav idiom…
claude Jul 8, 2026
e6d5c23
ruff_spo_triplet + ruff_csharp_spo: split selector facts onto selects…
claude Jul 8, 2026
8624830
ruff_python_spo: navigates_to arm for Odoo — TWO shapes (Klickweg), a…
claude Jul 8, 2026
cefd99d
ruff_python_spo: Odoo ir.ui.view field-set harvest — the FOURTH skin'…
claude Jul 8, 2026
73005c3
ruff_spo_triplet: backtick DevExpress in the selects_view doc (clippy…
claude Jul 8, 2026
4729ab6
ruff_csharp_spo: LastSegment-normalize qualified names in the nav arm
claude Jul 8, 2026
070a41f
ruff_python_spo(odoo_views): relation-hop split + full-text tokenizer…
claude Jul 8, 2026
2213b0f
ruff_ruby_spo: invokes_action arm — the ERB mutating-button shape (+ …
claude Jul 8, 2026
1582428
ruff_ruby_spo: renders_as arm — the ERB form-widget shape (+ Predicat…
claude Jul 9, 2026
221c1cf
ruff_ruby_spo: menu-DSL arm — the Rails side-nav navigates_to shape (…
claude Jul 9, 2026
0c350e4
ruff_ruby_spo: post-baseline migration-replay for the squashed-baseli…
claude Jul 10, 2026
ebf2b11
nav plane: Phase 0 labyrinth recon — view/navigation harvest (4 predi…
claude Jul 9, 2026
1c7acf4
concept re-keying + config-as-schema + structured names — the transco…
claude Jul 9, 2026
c00f5a4
address codex P2s on #72: qualified screen bases + template-over-opti…
claude Jul 10, 2026
b8cadcb
ruff_ruby_spo: routes.rb harvest arm — helper stem -> controller#acti…
claude Jul 10, 2026
0c7bc17
ruff_ruby_spo: migration-replay — skip def down bodies + parse parent…
claude Jul 10, 2026
4312688
ruff_spo_triplet: surface plane in the furnace exam — LocalizationSur…
claude Jul 10, 2026
edd14e3
ruff_spo_triplet: protocol plane in the furnace exam — grammar_* conf…
claude Jul 10, 2026
2c76b60
rekey_exam: gate the protocol plane on marker presence (review P1) + …
claude Jul 10, 2026
b437556
ruff_spo_triplet: exam_config module + nav_digest — the Klickwege str…
claude Jul 10, 2026
fce0070
rekey_exam: split unbound residues into concept candidates + weak-tok…
claude Jul 10, 2026
7513621
ruff_csharp_spo: harvest WinForms region-layout facts (docked_at / ta…
claude Jul 10, 2026
05d4f2c
ruff_spo_triplet: region-grammar plane (dock/tab/popup + [regions]/[m…
claude Jul 10, 2026
12808a6
knowledge: consumer-transcode furnace playbook (ore/slag, two oracles…
claude Jul 10, 2026
29165c9
ruff_ruby_spo: fix main — routes test must not re-assert the global p…
claude Jul 11, 2026
8ac403d
routes.rs: cite the hot-plug doctrine for why the arm does not re-ass…
claude Jul 11, 2026
e8afd21
ruff_python_spo: Odoo view-arch region grammar harvester (odoo_regions)
claude Jul 11, 2026
7a60ec5
ruff_ruby_spo: menu-DSL region arm — the six-region layout plane for …
claude Jul 11, 2026
54e73ba
region arm: faithful single-pass Rails TreeNode replay for tab_order
claude Jul 11, 2026
4a41933
knowledge: render manifest is editable config (manual override) — reu…
claude Jul 11, 2026
4c7eb4d
knowledge: align §6 render equation with §6b (no runtime reachability…
claude Jul 11, 2026
2e377ff
ruff_spo_triplet: part_of + purpose predicates (the menu-quad locatio…
claude Jul 11, 2026
e08d150
ruff_csharp_spo: emit part_of + purpose (the Klickwege menu-quad rail…
claude Jul 11, 2026
ca3e58f
nav_digest: [menu-quad] — lower the Klickwege quad into the classid r…
claude Jul 11, 2026
5a74ed9
nav_digest: make the part_of/purpose lowering order-independent (code…
claude Jul 11, 2026
a4335b3
region: collapse the three region arms onto one shared RegionFact + s…
claude Jul 11, 2026
418ee56
quad: reusable menu-quad harvest engine + Rails config (config over r…
claude Jul 11, 2026
e911bce
quad: Odoo menu-quad config + real-corpus round-trip probe
claude Jul 12, 2026
d15bd17
guard: mint guarded_by_permission + harvest menu if:-proc permissions…
claude Jul 12, 2026
ceedf5f
quad: bind menu-quad identity axis (surfaces_concept, tier-carried, n…
claude Jul 12, 2026
f8c7f2e
quad: count dynamic controllers as their own ledger bucket (PR #87 co…
claude Jul 12, 2026
aacd9c6
spo_address: extract mint_from_parents — the predicate-agnostic mint …
claude Jul 12, 2026
bdda3ff
knowledge: furnace playbook §8.1 — odoo region-grammar row is BUILT (…
claude Jul 16, 2026
20e5e93
csharp_spo: add recipe_census example — real-corpus metal/slag measur…
claude Jul 19, 2026
58868ac
cargo fmt under 1.97.1 — reformat what the new rustfmt formats differ…
claude Aug 5, 2026
d07cfc1
Add R2IL behavioral-IR plan + implementation spec; exclude ruff_r2il …
claude Aug 18, 2026
e7abd14
ruff_r2il: facet.rs — the VarnodeFacet drill key (W2, ungated)
claude Aug 18, 2026
9d8521d
ruff_r2il: crate manifest, module map, and the ore carrier (W1, ungated)
claude Aug 18, 2026
16abf8f
ruff_r2il: slag.rs — addressed residual ledger, no catch-all (W6, ung…
claude Aug 18, 2026
f3488bb
ruff_r2il: convention.rs — longest-prefix-wins drill config tree (W3,…
claude Aug 18, 2026
ed06af0
ruff_r2il: vocab.rs — DTO/codebook factoring stage (W7, ungated)
claude Aug 18, 2026
5f1a639
plan: carry forward the ruff/r2sleigh half of the console ruling
claude Aug 18, 2026
376f03c
ruff_r2il: lossless fixtures + corpus profile example (W8, W10, ungated)
claude Aug 18, 2026
3ea98cb
ruff_r2il: ore.rs — deterministic fact enumeration + native-address a…
claude Aug 18, 2026
993e889
ruff_r2il: harvest_r2il.rs — the six-artifact harvest set (W9, ungated)
claude Aug 18, 2026
1dcffb8
ruff_r2il: furnace.rs — the melt to flat addressed rows (W5, ungated)
claude Aug 18, 2026
fb4491e
ruff_r2il: gates green — address every residual, fix two falsifiers, …
claude Aug 18, 2026
a64e3d0
Fix the four pre-existing CI failures; make ruff_r2il lift-feature cl…
claude Aug 18, 2026
167b262
Clippy 1.97 sweep: ruff_csharp_spo + ruff_spo_triplet (35 sites, by h…
claude Aug 18, 2026
4f29f49
Clippy 1.97 sweep: spo_address, ty_*, and ruff core (82 sites, all by…
claude Aug 18, 2026
e32d696
docs: satisfy markdownlint on the R2IL plan files
claude Aug 18, 2026
e33a5a5
Close hyphenated `mis-` compounds so the typos hook stops mangling them
claude Aug 18, 2026
36165cd
docs: close the last hyphenated `mis-` compound in the impl spec
claude Aug 18, 2026
c49af71
harvest: PR-1 pass-1 artifact set — B1/B3 PASS, B2 KILL (recorded, no…
claude Aug 18, 2026
15d0c37
convention: space-class fall-through for every fixed space; B2 KILL -…
claude Aug 18, 2026
55639f2
harvest: gzip the two large artifacts (39.7k -> ~10.6k LOC diff)
claude Aug 18, 2026
8f48de2
harvest: move bulk artifacts to a GitHub Release + S3 scratch (10.6k …
claude Aug 18, 2026
c2f45cd
Stop the fixer hooks from mangling data, and repair the three values …
claude Aug 18, 2026
e1eb63f
prek: mechanical formatter pass over the four docs it had never run on
claude Aug 18, 2026
1306522
Document staged codegen off the R2IL harvest for the sibling session
claude Aug 18, 2026
cbe23c1
Allowlist two more identifiers the spell checker reads as prose
claude Aug 18, 2026
4a9e2b2
Fix the rustdoc errors that the nav_digest failure was masking
claude Aug 18, 2026
8809717
Fix the next rustdoc layer: ruff_ruby_spo, ruff_cpp_spo, ruff_python_spo
claude Aug 18, 2026
5c812f2
Close out the rustdoc sweep: ruff_spo_address, ruff_sqlalchemy_spo, t…
claude Aug 18, 2026
e4b577d
ruff_python_spo: add a plain-Python SPO harvest arm
claude Aug 18, 2026
293ea24
plain.rs: fix typo flagged by the typos pre-commit hook
claude Aug 18, 2026
953648f
plain_census: measure duplicate model names instead of assuming zero
claude Aug 18, 2026
e808e11
plain arm: residual ledger — every silent skip becomes a named, addre…
claude Aug 18, 2026
1e40835
plain arm: callee-name residual detail + the drill's proposer stage
claude Aug 18, 2026
ed8555f
plain arm: the config-consuming extractor and the promotion gate it e…
claude Aug 18, 2026
af7a19c
ci: exclude ruff_cpp_spo from --all-features on windows-latest
claude Aug 18, 2026
dfd3a8c
gitignore: exclude .claude/worktrees/ agent isolation scratch
claude Aug 18, 2026
af931aa
build: drop the dead astral-sh/lsp-types git patch
claude Aug 18, 2026
f2b5832
ruff_ruby_spo: silence a genuine false-positive iter_over_hash_type
claude Aug 18, 2026
d4a9c3e
ci: pass matrix.platform via env, not inline shell interpolation
claude Aug 18, 2026
9728e40
AGENTS.md: normalize emphasis style (_have_ -> *have*)
claude Aug 18, 2026
3fd9a1e
ci: lowercase the ghcr.io image ref (OCI refs are case-sensitive)
claude Aug 18, 2026
8fd4b62
ci: fall back to ubuntu-latest for the PGO job on forks
claude Aug 18, 2026
719048d
r2il: run the §12 corpus profile and record real numbers (resolves O1)
claude Aug 18, 2026
fd4df68
r2il: PR 2 first slice — the RefinedTruthSink trait + offline backend
claude Aug 18, 2026
e975637
r2il: widen sink.rs facts/residuals artifacts to v2, add reader
claude Aug 18, 2026
73951be
r2il: council SPEC v1 for the round-trip reconstruction oracle
claude Aug 18, 2026
2fb6152
r2il: council draft v2 — consolidate the 5 savants' findings
claude Aug 18, 2026
4d18c5c
r2il: ratify council spec v3 — apply the 3 reviewers' five FIX findings
claude Aug 18, 2026
bee5211
r2il: the round-trip reconstruction oracle (PR2 gate deliverable)
claude Aug 18, 2026
da0dfb5
docs(r2il): supersede the "no V4" verdict per the operator ruling
claude Aug 21, 2026
9ee55f3
ruff_r2il: harvest_6502 — the Probe C intake leg, run on real Elite i…
claude Aug 25, 2026
a9439f3
ruff_r2il: slag_partition probe — two negatives, one of them against …
claude Aug 25, 2026
dc9ab0f
fix(prek): rename thr -> threshold; the typos hook rewrote it to 'the'
claude Aug 25, 2026
1699b47
6502 probes: every prior Elite number was measured on CIPHERTEXT
claude Aug 26, 2026
6503e00
ruff_r2il: slag_partition probe — two negatives, one against my own c…
AdaWorldAPI Aug 25, 2026
9e6733c
untrack the 34k-row 6502 ore TSV; it is a build product, not a source
claude Aug 26, 2026
82badf6
ruff_r2il: emit the 6502 partition as an MGRA v3 graph
claude Aug 26, 2026
bc18d66
ruff_r2il: fix the structurally-empty data_refs column
claude Aug 26, 2026
5de9e4d
Bump Rust 1.97.1 -> 1.98.1 in rust-toolchain.toml
claude Sep 5, 2026
68df174
Scale CI timeouts to the runner a fork actually gets
claude Sep 5, 2026
40c3cba
Replace the fork timeout guesses with the measured values
claude Sep 5, 2026
ec651c3
Restore the one file stranded when #92 merged into a branch instead o…
claude Sep 6, 2026
3b26a63
Harvest C++ method bodies into the recipe fingerprint
claude Sep 7, 2026
89a3cec
Correct four stale claims in the ruff_cpp_spo module doc
claude Sep 7, 2026
73fcd35
Pin the two nested-if branches of the J1 guard threading
claude Sep 7, 2026
58a06fc
Record the C++ body arm in the probe plan and the recipe codebook
claude Sep 7, 2026
2f7cd63
Report the body arm and a recipe-centroid census in the ladybug harvest
claude Sep 7, 2026
df36797
Re-date the census claims now that the harvest example reports it
claude Sep 7, 2026
32fef0d
Correct the stale Python row in the recipe-codebook coverage table
claude Sep 7, 2026
60e9b35
Name the frontends that actually fill the shared IR
claude Sep 7, 2026
c384cd4
Make the ref-qualifier part of C++ method identity
claude Sep 7, 2026
8ec1e34
Preserve the C++ body's sequence, duplicates and scope structure
claude Sep 7, 2026
f8ab72b
Carry the overridden base method's IRI, not just a flag
claude Sep 7, 2026
b0b120e
Allowlist libclang's own ParmDecl spelling
claude Sep 7, 2026
a133285
Record the measured size of the sort+dedup defect
claude Sep 7, 2026
efb0c2f
Fix the macOS scope test and four review findings
claude Sep 7, 2026
d9a74a2
Re-measure the sort+dedup defect on the whole corpus
claude Sep 7, 2026
6499175
Fix five harvester defects found in review, each with a disable-verif…
claude Sep 7, 2026
ea25dc7
Give each test fixture its own path, and correct what the lock does
claude Sep 7, 2026
da2a727
Require the member to be the subject of a guard condition, not merely…
claude Sep 8, 2026
c036165
End the arguments array at the first bracket OUTSIDE a string
claude Sep 8, 2026
5758edc
Tag for-header slots (for_init/for_cond/for_inc) from the real `;` to…
claude Sep 8, 2026
c4525e4
ruff_cpp_spo: for-header slots — reject macro-definition separators, …
claude Sep 8, 2026
11bf835
ruff_cpp_spo: materialise the for-header range so a macro body cannot…
claude Sep 8, 2026
08419f6
ruff_ruby_spo: ordered behavioral ore — a Ruby arm and a Rails arm
claude Sep 8, 2026
b085f46
ruff_ruby_spo: unlink private-item intra-doc links in events
claude Sep 9, 2026
13b9e71
ruff_ruby_spo: make the six-set gate literally six sets, and stop los…
claude Sep 9, 2026
0383d64
ruff_ruby_spo: fix six real findings from the CodeRabbit + Codex reviews
claude Sep 9, 2026
9ff5ac4
ruff_ruby_spo: narrow the traversal-receiver suppression to BARE rece…
claude Sep 9, 2026
d27523b
AGENTS.md: document the session traps that cost time in this repo
claude Sep 9, 2026
4d2ac29
Fix the prek failure this file's own traps section caused
claude Sep 9, 2026
7206559
ruff_ruby_spo: document the walker's scope and interning helpers
claude Sep 9, 2026
f268b87
ruff_cpp_spo: capture free-function signatures, and wire the C arm en…
AdaWorldAPI Sep 10, 2026
8b311a6
Reject translation units with error diagnostics in the C-library arm
AdaWorldAPI Sep 11, 2026
c596042
Stop overloading is_static with C internal linkage
AdaWorldAPI Sep 11, 2026
578b779
Key the harvest dedup on the signature, and stop stamping another
AdaWorldAPI Sep 11, 2026
0890042
Assert the calls invariant instead of describing it, and stop asserti…
claude Sep 11, 2026
27e0087
Fix two long lines this change introduced
claude Sep 11, 2026
7a8ba80
Key free-function identity on the qualified name, not the bare one
claude Sep 11, 2026
8d7fdd9
Bump Rust toolchain / MSRV floors to 1.98.1
claude Sep 25, 2026
f3ff621
ruff_python_spo odoo_regions: resolve extension views through inherit_id
claude Oct 10, 2026
acdddfc
odoo_regions: resolve inherit_id by qualified xml id; strict @name pr…
claude Oct 10, 2026
c0e219a
odoo_regions: Odoo spec semantics for the inherit_id join
claude Oct 10, 2026
95c2cbe
ruff_r2il: restore slag_partition.rs to its fork-main content
claude Oct 14, 2026
cc15dc7
ruff_python_dto_check: follow upstream's ExprCompare operand layout
claude Oct 14, 2026
ad8ec40
Follow upstream ExprCompare in ruff_python_spo; satisfy the new cargo…
claude Oct 14, 2026
218f6d0
AGENTS.md: allow Haiku agents for grindwork
claude Oct 14, 2026
b2891bb
Cargo.lock: resolve the fork crates against upstream's lock
claude Oct 14, 2026
12f96f9
Inherit the workspace rust-version in the fork crates
claude Oct 14, 2026
ae25f1c
Target Rust 1.99 as the workspace minimum
claude Oct 14, 2026
a274a09
cargo-deny: allow the build scripts of the fork crates' parsers
claude Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .cargo/deny.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ allow-build-scripts = [
"alloca",
"anyhow",
"camino",
"clang-sys",
"codspeed",
"codspeed-criterion-compat",
"codspeed-divan-compat",
Expand All @@ -29,6 +30,7 @@ allow-build-scripts = [
"iana-time-zone-haiku",
"icu_normalizer_data",
"icu_properties_data",
"lib-ruby-parser",
"libc",
"libm",
"libmimalloc-sys",
Expand Down
193 changes: 193 additions & 0 deletions .claude/OGAR-POLYGLOT-AST-INTEGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
# OGAR Polyglot AST Integration (RFC)

**Status:** RFC / design contract. Not yet implemented or compile-verified —
this document locks the contract so the implementation + tests land as a
typed follow-up.
**Scope:** the `ruff_*_spo` frontends, the `ruff_spo_triplet` IR, the
`ruff_spo_address` mint, and a new `LangBackend` adapter family.
**Goal:** turn ruff's per-language SPO harvesters into a **bidirectional
polyglot AST substrate** — source (Python / C++ / C#) → OGAR IR → re-emitted
source (Python / Rust / C#) — with the IR as a content-addressed interlingua.

---

## 0 · Why this is mostly "fix an asymmetry," not "build a transpiler"

The interlingua already exists and is already bidirectional:

```
SOURCE frontend IR (interlingua) address
────── ──────── ──────────────── ───────
Python ─ ruff_python_dto_check ─▶ (JSON bundles) ─┐
C++ ─ ruff_cpp_spo (libclang) ────────────────▶│
C# ─ Roslyn tool ─ndjson─ ruff_csharp_spo ───▶│ ModelGraph ─expand─▶ Triples ─mint─▶ 16B Facet
Ruby ─ ruff_ruby_spo (lib-ruby-parser) ────────┘ (ruff_spo_ ▲ │ (ruff_spo_address,
triplet::ir) │ ▼ node_of = reverse)
reassemble ◀───────┘ ndjson ─▶ lance_graph SPO store
│
TARGET ◀──── backend / adapter ◀──── ModelGraph ◀────┘
──────
Rust ◀─ ruff_cpp_codegen (THE ONLY BACKEND TODAY: ModelGraph → Rust MethodSig source)
Python ◀─ (none yet)
C# ◀─ (none yet)
```

Three load-bearing facts (verified against `main`):
1. **`ruff_spo_triplet::ir::ModelGraph` is the interlingua.** `expand`
(ModelGraph→triples) is general, but **`reassemble` (triples→ModelGraph)
today recovers only the C++ machine-plane projection** — it does *not*
reconstruct the core-7 `fields`/`functions` or the OpenProject collections
(`ruff_spo_triplet/src/reassemble.rs:16-20`). So a **general reassembler is
the first build item (Phase 0)**, not a given. "A new language is a new
frontend, not a new ontology" (crate doc) — the *intent* is bidirectional;
the *reassembler* is not yet general.
2. **The asymmetry is 4 frontends vs 1 backend.** `ruff_cpp_codegen` already
proves `ModelGraph → Rust source` (it renders `MethodSig` manifests
targeting `lance_graph_contract::codegen_manifest`). The superpower is
*generalizing the back door*.
3. **The frontends do not enter uniformly:** C++/Ruby produce `ModelGraph`
directly; Python produces JSON `ModuleHarvest` bundles; C# runs an
out-of-process Roslyn tool → ndjson → `load() -> Vec<Triple>`.

---

## 1 · The IR record (Phase-0 contract — lock this first)

### 1.1 Dual-mode facet payload (classid-tagged)

`12 bytes = 96 bits` tiles **exactly** two ways. The 4-byte classid is the
discriminant.

```rust
// 16-byte content address; byte-identical to lance_graph_contract::facet::FacetCascade
pub struct Facet { facet_classid: u32, payload: [u8; 12] }

enum FacetMode { // carved from facet_classid (mirrors TailVariant)
Cascade, // payload = [FacetTier; 6] — 6 × (part_of:8, is_a:8)
Triplet, // payload = [SpoTriple; 4] — 4 × (subject:8, predicate:8, object:8)
}
```

- **Cascade** = *position*: 6 tiers deep, predicate implied (`part_of`+`is_a`).
Subsumption / containment as bit-ops. The address/index view.
- **Triplet** = *local edges*: 4 SPO edges, predicate explicit (256-way). The
raw-graph view. **A `ruff_spo_triplet::Triple` IS a triplet-mode facet**
(interned via the same `ruff_spo_address` mint) — this is what unifies the
SPO corpus with the facet primitive (today they are separate substrates).

A cascade tier `(part_of:is_a)` is a degenerate triplet with its predicate
implied; triplet mode is the generalization (spend 2 tiers → buy an explicit
predicate).

### 1.2 The 512-byte record as 32 tenants — canon `key(16) + value(496)`

```
NodeRow 512B = key(16) | value(496) (OGAR canon, CLAUDE.md:51-52)
≡ 32 × 16B slots ≡ 32 tenants × [GUID; N] ("tenant" = one GUID column)
slot 0 = Self GUID (the 16B key; addressable with zero value decode)
slots 1..31 = 31 value tenants → GUID references / facets
```

**No separate `EdgeBlock`** — the `12+4` block is superseded canon
(`NODEGUID-CANON-AUDIT.md` F-5: "relations ARE the addressing"); edges are
GUID-reference tenants. **Tenant typing lives on `Class`, not `ClassView`**
(`CLASSVIEW-MATERIALIZATION-PLAN.md` §3 + anti-pattern #2 — `ClassView` is
label-only). So this is an expansion of the existing `lance_graph_contract::Class`:
`Class::tenant_schema() -> [TenantRole; 31]`, static per classid, roles
`{ Structural, Edge, Do, Think, Adapter }` (+ `nested`). The `Do`/`Think`/
`Adapter` tenants are the behaviour / cognitive / projection planes reached
*through* the classid; nesting = a content-addressed FK column → a columnar
composition DAG with dedup-by-content.

### 1.3 Capacity == the separation-of-concerns lint
Every cap is a structural-quality signal, on both axes:
`>64 fields` (FieldMask) · `>256 per tier` / `>6 deep` (cascade) · `>4 edges`
(triplet) · `>31 value tenants`. Overflow is **the signal**; the fix is always
"reference another class" / "paginate via class hierarchy" (grow a limb) —
already canon (`CLASSVIEW-MATERIALIZATION-PLAN.md` §5, `≤64` enforced by
`field_basis_fits_in_one_u64_mask`), never widen. The law already exists as a
reusable check (`ruff_spo_address::soc`, "the 256-cap-is-a-lint law",
classifying overflow as DUPLICATION and/or CONFLATION) but is **not** wired
as a diagnostic — see Phase 2.

---

## 2 · Phases

### Phase 0 — Lock the IR contract
- Freeze `ModelGraph` + a **versioned closed `Predicate` registry**: a core
agnostic set (`part_of`, `is_a`, `has_field`, `has_function`,
`inherits_from`, `rdf:type` — the six the mint needs) + per-plane extension
predicates, all under one registry with a conformance test. (Current totals:
**18 C++ machine-plane variants**, 57 total in `Predicate::ALL` — see
`triple.rs:595-613,810-821`.)
- **Build a general reassembler** that recovers the core-7 `fields`/`functions`
+ per-plane collections — today `reassemble` is C++-projection-only
(`reassemble.rs:16-20`), which is the prerequisite for the Phase-1 round-trip
gate to hold for Python/Ruby.
- Lock the dual-mode `FacetMode` + the `[Facet; 32]` / tenant layout +
`tenant_schema`.
- Fix the predicate-count doc-drift (comments say 34/53; code/test carry 57).

### Phase 1 — Normalize the three frontends to one `extract() -> ModelGraph`
| Lang | Today | Action |
|---|---|---|
| **C++** | working entry points are `ruff_cpp_spo::extract_dir` / `extract_tree` (libclang, caller-supplied args); the convenience `extract()` is a `todo!()` panic stub (`lib.rs:151-156`) | fill `extract()`; register its **18** C++ predicates (incl. `returns_type`, `has_param_type`, `is_const`, `is_static`, `has_visibility`); widen corpus |
| **Python** | `ruff_python_dto_check` → JSON `ModuleHarvest`, not ModelGraph | add `bundle → ModelGraph` adapter (reuse extractors/matcher); the parse is done, only the IR shape is missing |
| **C#** | Roslyn `.NET` tool → ndjson → `load() -> Vec<Triple>`, `NAMESPACE="medcare"` hardcoded | generalize the harvester past MedCare; wrap `load → reassemble → ModelGraph` as a one-call `extract()`; document the out-of-proc Roslyn seam |
- **Gate:** each frontend round-trips `ModelGraph → expand → ndjson → reassemble`
losslessly (`#[cfg(test)]` per crate). **Prerequisite:** the Phase-0 general
reassembler — today this gate only holds for the C++ projection.

### Phase 2 — Convergence + the SoC lint (guardrails)
- **Cross-language convergence:** the same construct in Python/C++/C# mints the
**same `Facet`** — a CI test (the ruff analogue of
`bridge_codebook_convergence`). This is the proof the IR is agnostic.
- **Promote §[G] → a real `ruff` diagnostic** (`OGAR-SOC`): on
64-field / 256-tier / 6-deep / 4-edge / 30-slot overflow, emit the two-way
verdict (`DUPLICATION → masked ClassView`; `CONFLATION → split data⊥behaviour,
hoist constructor to compute_dag`). ruff is the linter; this is its home.

### Phase 3 — The backend / adapter family (the superpower)
Lift the one existing backend into a trait, mirroring OGAR's adapter pattern
(SurrealQL / ClickHouse / TTL) but targeting *source code*:
```rust
pub trait LangBackend {
fn render(&self, g: &ModelGraph) -> String; // ModelGraph → target source
}
```
- **Rust** ◀ `ruff_cpp_codegen` (exists) — generalize beyond C++ method manifests.
- **Python** ◀ extend the existing `ruff_python_codegen` (the formatter's
generator) to render *from* ModelGraph, not just re-format ASTs — big leverage.
- **C#** ◀ new `ruff_csharp_codegen` (text emit, Roslyn-free).
- **Gate (round-trip conformance — what makes it a compiler substrate):**
`source(L1) → ModelGraph → source(L2)`. `L1==L2` → defined normal form;
`L1≠L2` → structural arm transpiles, behavioural arm is **flagged, not
silently dropped**.

### Phase 4 — Land in the OGAR substrate
ndjson → `lance_graph` SPO store. **Firewall invariant:** the IR triples stay
the canonical artifact (in-memory / compile-time); only a *derived ANN index*
goes to Lance — code is never lowered to Lance rows. Guard with a conformance
test (today this holds partly by omission — the production Lance `SpoStore`
doesn't exist yet).

---

## 3 · The honest scope boundary
**Structure transpiles; behaviour does not.** `OGAR-AS-IR.md`: "the behavioural
arm cannot survive lowering and stays in the IR" — and tellingly the existing
backend renders `MethodSig` *signatures*, not method bodies. So Phase 3 is a
**schema / interface / DTO / ORM-model transpiler** across Python⇄Rust⇄C#
(API contracts, type defs, model shells — already enormous). Full *behaviour*
transpilation (method bodies → executable target logic) is a separate research
arm via `ActionDef` / `KausalSpec`, **not** Phase 3.

## 4 · Critical path
`Phase 0 (incl. general reassembler) → Phase 1 (Python + C# normalization) →
Phase 3 (LangBackend + Python backend)`. C++ is the end-to-end smoke test
(frontend via `extract_dir`/`extract_tree` + backend via `ruff_cpp_codegen`),
because `reassemble` already covers the C++ projection — but the smoke test
must call `extract_dir`/`extract_tree` directly (or fill the `todo!()`
`extract()` first), not the panic stub. This work lives entirely in `ruff` +
`OGAR`/`lance-graph` and does not touch any consumer's parity trunk.
105 changes: 105 additions & 0 deletions .claude/agents/fuzzy-proposer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
---
name: fuzzy-proposer
description: >
Cooks a `(verb, criteria)` recipe codebook from imperative method-body facts
and correlates each body to its nearest declarative recipe — the fuzzy→exact
denoiser for any AR/OO frontend (`ruff_ruby_spo`, `ruff_python_spo`,
`ruff_csharp_spo`, `ruff_cpp_spo`). Use when transcoding lifecycle
hooks/callbacks/`_compute_*`/property-setters, when deciding whether a body
lowers to an OGAR `ActionDef` recipe or must stay a hand-ported imperative
core, or when a frontend needs its body-fact "DTO arm" (writes/reads/
raises/calls + private-helper split) built out. Produces: a recipe histogram,
a recoverable/essential split with a bounded PASS-rate, and a jitter codebook
(the residuals, each naming the next fact to capture). Probe-first — never
asserts a rate it did not measure on a real corpus.
tools: Read, Glob, Grep, Bash, Edit, Write
---

# fuzzy-proposer

You are the **fuzzy proposer**. Imperative method bodies reach you as a noisy
channel; you recover the declarative recipe underneath and record only the
jitter. You do **not** transcribe bodies — that reproduces accidental structure
as if it were essential. You correlate.

**Your one job:** given a corpus of method bodies (hooks / callbacks /
`_compute_*` / setters), emit `(recipe, criteria) + residual` per body, a
bounded recoverable-rate, and the jitter codebook that names the next fact.

## Mandatory read before acting

`.claude/knowledge/fuzzy-recipe-codebook.md` — the full method (fingerprint,
codebook centroids, rolling-bucket algorithm, jitter codebook, the cook
recipe §6, the anti-patterns §7). This card is the operator; that doc is the
contract. Read it fully; do not paraphrase from memory.

## The loop you run

1. **Fingerprint.** Per method, take the `(W, R, X, C)` fact quartet from
`ruff_spo_triplet::Function` (`writes`/`reads`/`raises`/`calls`). If the
frontend doesn't populate them, that is your first deliverable — build the
arm (§2 of the knowledge doc); it is pure AST-walk work, zero IR change.
Confirm the private-helper split exists (hook targets are private).
2. **Correlate** to the nearest recipe centroid (§3) — pure fact-set
predicates, no language tokens, so the same codebook serves every frontend.
3. **Coarse-triage, then ROLL** (§4). Two passes: the honest baseline, then the
refinement. Watch the FAIL residue shrink to only the essential kinds. The
win condition is a test assertion: irreducible core = essential-only.
4. **Read the tail in source.** Never infer the tail's shape — open the files,
confirm each residual is what the fingerprint claims.
5. **Bound, don't point-estimate.** Buckets resting on Inferred facts (`calls`)
get a band: drop them from num+denom for the lower bound.
6. **Emit the jitter codebook** (§5) — each residual names one more fact the
frontend should capture. This is the actionable output.

## Hard rules (non-negotiable)

- **Probe-first.** Every rate is measured on a REAL corpus, env-gated +
self-skipping. A synthetic fixture proves the code runs, never the claim.
If you cannot reach a corpus, say so and stop — do not assert a number.
- **Pre-register thresholds** in the probe's module doc BEFORE the first run
(pass bar, KILL floor, expected tail shapes). Do not borrow another leg's
bar.
- **Pin the histogram as a drift fuse** guarded on the corpus signature.
- **Behaviour-preserving.** A weird body is an RFC finding, not a silent fix.
- **Cook on the reference frontend first** (`ruff_ruby_spo` — fullest arm),
then port the arm to the target language. Recipe centroids never change; only
the fact-population per frontend does.

## What you output

A short structured brief:

```
recipe histogram: <Cascade N · Compute N · SelfMap N · Guard N · Compensate N · WriteRaise N>
arm / recoverable: <arm>: <rec>/<arm> = <upper>% .. <lower>% (Auth-only); essential <e>
won?: <yes: core = essential-only | no: recoverable recipe still in FAIL — refine>
jitter codebook: J1 … / J2 … / J3 … (each names the next fact to capture)
next fact for <lang> frontend: <the highest-value missing DTO-arm fact>
```

Then, if asked, land the probe (two functions — coarse + recipe-codebook) with
the pre-registered doc and pinned fuses, matching
`crates/ruff_openproject/tests/body_triage_probe.rs`.

## Two escalations you also own

- **SoC proposer (bucket overflow).** When a *class* overflows `FIELD_MASK_CAP`
(256 fields) or spans many unrelated recipe clusters → propose a **Concern**
split (`0x06`), never a wider FieldMask. When N *routes* differ only by a
filter over one resource → propose a **Scope** (`0x05`), one ClassView + a
fieldmask, not N actions. Mint-on-emit only (never pre-mint). Knowledge doc
§8b.
- **Config-as-data.** A detected `config.json` / schema / route table /
resolver map is a codebook a human already wrote — **ingest it as data /
priors and correlate against it**, never transcribe it into an if/else
ladder. Same mistake as transcribing a method body. Knowledge doc §8c.

## When NOT to use this agent

- A body with no declarative analog anywhere (a genuine algorithm) — that's the
essential 15%; hand-port it, don't force a recipe.
- Pure structure/schema harvest (columns, associations) — that's the THINK arm,
already declarative; this agent is the DO arm (behaviour).
- Single-method spot checks where you already know the recipe — just read it;
the codebook is for populations, not one-offs.
Loading
Loading