Skip to content

Commit ee3b4dd

Browse files
author
jgstern-agent
committed
docs(ir,datamodels): clarify three concept-audit-flagged fields
Pure docstring updates per recent fundamental-concept-audit verdicts. No behavior change. - ir.Symbol.origin: document the analyzer-id-vs-synthesis-mechanism axis mix and the WI-nusum-nukol re-eval trigger (WI-kiriz). - datamodels.DataModelKind: surface the three-axis confusion (language construct / library / architectural role) and the WI-juvag-numud re-eval triggers (WI-sudov). - ir.UsageContext.kind: surface the syntactic-construct-vs-semantic-role axis mix and the WI-gatuh-ruvar re-eval triggers (WI-hofoj). Closes WI-kiriz, WI-sudov, WI-hofoj. Signed-off-by: jgstern-agent <josh-agent@iterabloom.com>
1 parent 989a35b commit ee3b4dd

3 files changed

Lines changed: 212 additions & 10 deletions

File tree

.ci/affected-tests.txt

Lines changed: 175 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,180 @@
11
# Test selection manifest
2-
# Generated by smart-test at 2026-05-02T03:54:20-04:00
2+
# Generated by smart-test at 2026-05-02T04:22:28-04:00
33
# Mode: targeted
4-
# Baseline: f71139302408e0bad0a15d4c00c0718f088b0762
5-
# Changed files: 11
6-
# Changed source files: 0
7-
0
8-
# Selected tests: 1
4+
# Baseline: 989a35bd7dc16209d641af307605bdcfc6907a11
5+
# Changed files: 6
6+
# Changed source files: 2
7+
# Selected tests: 168
98
#
109
# === CHANGED_SOURCE_FILES ===
10+
packages/hypergumbo-core/src/hypergumbo_core/datamodels.py
11+
packages/hypergumbo-core/src/hypergumbo_core/ir.py
1112
# === SELECTED_TESTS ===
12-
tests/test_on_transcript_change.py
13+
packages/hypergumbo-core/tests/BRANCHES_test_compact.py
14+
packages/hypergumbo-core/tests/BRANCHES_test_database_query.py
15+
packages/hypergumbo-core/tests/BRANCHES_test_framework_patterns.py
16+
packages/hypergumbo-core/tests/BRANCHES_test_graphql.py
17+
packages/hypergumbo-core/tests/BRANCHES_test_graphql_resolver.py
18+
packages/hypergumbo-core/tests/BRANCHES_test_http.py
19+
packages/hypergumbo-core/tests/BRANCHES_test_ipc.py
20+
packages/hypergumbo-core/tests/BRANCHES_test_openapi.py
21+
packages/hypergumbo-core/tests/BRANCHES_test_phoenix_ipc.py
22+
packages/hypergumbo-core/tests/BRANCHES_test_route_handler.py
23+
packages/hypergumbo-core/tests/BRANCHES_test_slice.py
24+
packages/hypergumbo-core/tests/BRANCHES_test_subprocess_cli.py
25+
packages/hypergumbo-core/tests/test_airflow_framework_dispatch_linker.py
26+
packages/hypergumbo-core/tests/test_analyzer_registry.py
27+
packages/hypergumbo-core/tests/test_annotation_convention_linker.py
28+
packages/hypergumbo-core/tests/test_backend_cli_flag.py
29+
packages/hypergumbo-core/tests/test_base.py
30+
packages/hypergumbo-core/tests/test_build_grammars.py
31+
packages/hypergumbo-core/tests/test_build_target_linker.py
32+
packages/hypergumbo-core/tests/test_cgo_linker.py
33+
packages/hypergumbo-core/tests/test_cli_basic.py
34+
packages/hypergumbo-core/tests/test_cli_cache.py
35+
packages/hypergumbo-core/tests/test_cli_commands.py
36+
packages/hypergumbo-core/tests/test_cli_config.py
37+
packages/hypergumbo-core/tests/test_cli_dead_code.py
38+
packages/hypergumbo-core/tests/test_cli_explain.py
39+
packages/hypergumbo-core/tests/test_cli_io_boundaries.py
40+
packages/hypergumbo-core/tests/test_cli_relativize_paths.py
41+
packages/hypergumbo-core/tests/test_cli_routes.py
42+
packages/hypergumbo-core/tests/test_cli_run_behavior_map.py
43+
packages/hypergumbo-core/tests/test_cli_search.py
44+
packages/hypergumbo-core/tests/test_cli_symbols.py
45+
packages/hypergumbo-core/tests/test_cli_test_coverage.py
46+
packages/hypergumbo-core/tests/test_cli_verify_claims.py
47+
packages/hypergumbo-core/tests/test_compact.py
48+
packages/hypergumbo-core/tests/test_concept_utils.py
49+
packages/hypergumbo-core/tests/test_containment_linker.py
50+
packages/hypergumbo-core/tests/test_controller_routes_linker.py
51+
packages/hypergumbo-core/tests/test_crypto_flow_linker.py
52+
packages/hypergumbo-core/tests/test_database_query_linker.py
53+
packages/hypergumbo-core/tests/test_dataflow.py
54+
packages/hypergumbo-core/tests/test_datamodels.py
55+
packages/hypergumbo-core/tests/test_decorator_dispatch_linker.py
56+
packages/hypergumbo-core/tests/test_dependency_linker.py
57+
packages/hypergumbo-core/tests/test_django_orm_dispatch_linker.py
58+
packages/hypergumbo-core/tests/test_entrypoints.py
59+
packages/hypergumbo-core/tests/test_event_sourcing_linker.py
60+
packages/hypergumbo-core/tests/test_fastapi_patterns.py
61+
packages/hypergumbo-core/tests/test_file_excludes.py
62+
packages/hypergumbo-core/tests/test_framework_patterns.py
63+
packages/hypergumbo-core/tests/test_frameworks_flag.py
64+
packages/hypergumbo-core/tests/test_gitleaks.py
65+
packages/hypergumbo-core/tests/test_go_cobra_linker.py
66+
packages/hypergumbo-core/tests/test_go_memberlist_linker.py
67+
packages/hypergumbo-core/tests/test_graphql_linker.py
68+
packages/hypergumbo-core/tests/test_graphql_resolver_linker.py
69+
packages/hypergumbo-core/tests/test_grpc_linker.py
70+
packages/hypergumbo-core/tests/test_handler_slices.py
71+
packages/hypergumbo-core/tests/test_http_linker.py
72+
packages/hypergumbo-core/tests/test_inheritance_linker.py
73+
packages/hypergumbo-core/tests/test_ipc_linker.py
74+
packages/hypergumbo-core/tests/test_ir.py
75+
packages/hypergumbo-core/tests/test_jackson_dispatch_linker.py
76+
packages/hypergumbo-core/tests/test_jni_linker.py
77+
packages/hypergumbo-core/tests/test_js_module_linker.py
78+
packages/hypergumbo-core/tests/test_kafka_streams_dispatch_linker.py
79+
packages/hypergumbo-core/tests/test_linker_di_resolution.py
80+
packages/hypergumbo-core/tests/test_linker_docstring_fp_regression.py
81+
packages/hypergumbo-core/tests/test_linker_filtering.py
82+
packages/hypergumbo-core/tests/test_linker_parse_cache.py
83+
packages/hypergumbo-core/tests/test_linker_registry.py
84+
packages/hypergumbo-core/tests/test_locale.py
85+
packages/hypergumbo-core/tests/test_lua_ffi_linker.py
86+
packages/hypergumbo-core/tests/test_max_tier.py
87+
packages/hypergumbo-core/tests/test_message_dispatch_linker.py
88+
packages/hypergumbo-core/tests/test_message_queue_linker.py
89+
packages/hypergumbo-core/tests/test_method_call_recovery_linker.py
90+
packages/hypergumbo-core/tests/test_middleware_chain_linker.py
91+
packages/hypergumbo-core/tests/test_napi_linker.py
92+
packages/hypergumbo-core/tests/test_no_first_party_priority.py
93+
packages/hypergumbo-core/tests/test_openapi_linker.py
94+
packages/hypergumbo-core/tests/test_orm_linker.py
95+
packages/hypergumbo-core/tests/test_otp_linker.py
96+
packages/hypergumbo-core/tests/test_phoenix_ipc_linker.py
97+
packages/hypergumbo-core/tests/test_profile.py
98+
packages/hypergumbo-core/tests/test_pyffi_linker.py
99+
packages/hypergumbo-core/tests/test_ranking.py
100+
packages/hypergumbo-core/tests/test_react_component_linker.py
101+
packages/hypergumbo-core/tests/test_route_handler_linker.py
102+
packages/hypergumbo-core/tests/test_router_routes_linker.py
103+
packages/hypergumbo-core/tests/test_rubyffi_linker.py
104+
packages/hypergumbo-core/tests/test_run_behavior_map.py
105+
packages/hypergumbo-core/tests/test_rust_trait_dispatch_linker.py
106+
packages/hypergumbo-core/tests/test_schema_compliance.py
107+
packages/hypergumbo-core/tests/test_schema.py
108+
packages/hypergumbo-core/tests/test_scip_calls.py
109+
packages/hypergumbo-core/tests/test_scip_edges.py
110+
packages/hypergumbo-core/tests/test_scip_index.py
111+
packages/hypergumbo-core/tests/test_selection_language_proportional.py
112+
packages/hypergumbo-core/tests/test_sketch.py
113+
packages/hypergumbo-core/tests/test_sketch_sanity.py
114+
packages/hypergumbo-core/tests/test_slice.py
115+
packages/hypergumbo-core/tests/test_slice_tier_filter.py
116+
packages/hypergumbo-core/tests/test_solidity_abi_linker.py
117+
packages/hypergumbo-core/tests/test_stable_shape_ids.py
118+
packages/hypergumbo-core/tests/test_subprocess_linker.py
119+
packages/hypergumbo-core/tests/test_supply_chain.py
120+
packages/hypergumbo-core/tests/test_swift_objc_linker.py
121+
packages/hypergumbo-core/tests/test_symbol_resolution.py
122+
packages/hypergumbo-core/tests/test_tauri_ipc_linker.py
123+
packages/hypergumbo-core/tests/test_tree_sitter_analyzer.py
124+
packages/hypergumbo-core/tests/test_type_hierarchy_linker.py
125+
packages/hypergumbo-core/tests/test_view_template_linker.py
126+
packages/hypergumbo-core/tests/test_vue_component_linker.py
127+
packages/hypergumbo-core/tests/test_vue_template_method_linker.py
128+
packages/hypergumbo-core/tests/test_wasm_bindgen_linker.py
129+
packages/hypergumbo-core/tests/test_websocket.py
130+
packages/hypergumbo-core/tests/test_yjs_crdt_linker.py
131+
packages/hypergumbo-lang-common/tests/BRANCHES_test_dart.py
132+
packages/hypergumbo-lang-common/tests/BRANCHES_test_elixir.py
133+
packages/hypergumbo-lang-common/tests/test_handlebars.py
134+
packages/hypergumbo-lang-common/tests/test_just.py
135+
packages/hypergumbo-lang-common/tests/test_qml.py
136+
packages/hypergumbo-lang-extended1/tests/test_agda.py
137+
packages/hypergumbo-lang-extended1/tests/test_blade.py
138+
packages/hypergumbo-lang-extended1/tests/test_circom.py
139+
packages/hypergumbo-lang-extended1/tests/test_gnuplot.py
140+
packages/hypergumbo-lang-extended1/tests/test_mermaid.py
141+
packages/hypergumbo-lang-extended1/tests/test_solidity.py
142+
packages/hypergumbo-lang-extended1/tests/test_zig.py
143+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_cpp.py
144+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_c.py
145+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_csharp.py
146+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_go.py
147+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_html.py
148+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_java.py
149+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_js_ts.py
150+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_kotlin.py
151+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_php.py
152+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_python_ast_analysis.py
153+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_ruby.py
154+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_rust.py
155+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_scala.py
156+
packages/hypergumbo-lang-mainstream/tests/BRANCHES_test_swift.py
157+
packages/hypergumbo-lang-mainstream/tests/test_c.py
158+
packages/hypergumbo-lang-mainstream/tests/test_csharp.py
159+
packages/hypergumbo-lang-mainstream/tests/test_decorator_edges.py
160+
packages/hypergumbo-lang-mainstream/tests/test_go.py
161+
packages/hypergumbo-lang-mainstream/tests/test_groovy.py
162+
packages/hypergumbo-lang-mainstream/tests/test_html_analysis.py
163+
packages/hypergumbo-lang-mainstream/tests/test_java.py
164+
packages/hypergumbo-lang-mainstream/tests/test_js_ts.py
165+
packages/hypergumbo-lang-mainstream/tests/test_jupyter.py
166+
packages/hypergumbo-lang-mainstream/tests/test_kotlin.py
167+
packages/hypergumbo-lang-mainstream/tests/test_manifest_targets.py
168+
packages/hypergumbo-lang-mainstream/tests/test_markdown.py
169+
packages/hypergumbo-lang-mainstream/tests/test_php.py
170+
packages/hypergumbo-lang-mainstream/tests/test_play_routes.py
171+
packages/hypergumbo-lang-mainstream/tests/test_polyglot_call_site_coverage.py
172+
packages/hypergumbo-lang-mainstream/tests/test_py_deps.py
173+
packages/hypergumbo-lang-mainstream/tests/test_python_ast_analysis.py
174+
packages/hypergumbo-lang-mainstream/tests/test_rust_attribute_edges.py
175+
packages/hypergumbo-lang-mainstream/tests/test_rust.py
176+
packages/hypergumbo-lang-mainstream/tests/test_scala.py
177+
packages/hypergumbo-lang-mainstream/tests/test_starlette_routes.py
178+
packages/hypergumbo-lang-rust-analyzer/tests/test_analyzer.py
179+
packages/hypergumbo-lang-rust-analyzer/tests/test_graceful_degrade.py
180+
packages/hypergumbo-lang-rust-analyzer/tests/test_translate.py

packages/hypergumbo-core/src/hypergumbo_core/datamodels.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,24 @@
4848

4949

5050
class DataModelKind(Enum):
51-
"""Types of data models that can be detected."""
51+
"""Types of data models that can be detected.
52+
53+
This enum currently mixes three axes:
54+
(1) language construct: ``DATACLASS`` (Python ``@dataclass`` decorator).
55+
(2) library/framework: ``ORM_MODEL`` (Django/SQLAlchemy/TypeORM/GORM),
56+
``PYDANTIC_MODEL``, ``SCHEMA`` (Marshmallow / GraphQL types).
57+
(3) architectural role: ``DTO``, ``DOMAIN_MODEL``, ``ENTITY`` (DDD-style).
58+
59+
A class may legitimately satisfy values across multiple axes (e.g., a
60+
``@dataclass`` that is also a Pydantic-style validator and is also a DTO).
61+
The current detection table at ``MODEL_BASE_CLASSES`` picks one verdict per
62+
class via regex priority order, losing the cross-axis information.
63+
64+
Re-evaluation triggers (any one is sufficient): (a) a consumer needs to
65+
filter by axis independently; (b) the detection table grows past ~12
66+
values; (c) a class is observed where the picked value visibly hides a
67+
cross-axis signal a consumer needs. See the WI-juvag-numud audit thread.
68+
"""
5269

5370
ORM_MODEL = "orm_model" # Django Model, SQLAlchemy, TypeORM, etc.
5471
PYDANTIC_MODEL = "pydantic_model" # Pydantic BaseModel

packages/hypergumbo-core/src/hypergumbo_core/ir.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,15 @@ class Symbol:
203203
language: Programming language (python, javascript, etc.)
204204
path: File path where the symbol is defined
205205
span: Source location with lines and columns
206-
origin: Which analysis pass created this symbol
206+
origin: Provenance string. For analyzer-emitted symbols, this SHOULD be
207+
a versioned analyzer ID such as ``python-v1``, ``go-v1``, etc. (see
208+
the analyzer registry for the canonical list). A small set of
209+
synthesis-origin values (``inheritance``,
210+
``orchestrator_file_symbol_synthesis``, ``scip``) currently coexist
211+
in this field as a documented exception pending a future split into
212+
a sibling ``synthesis_mechanism`` field — see the WI-nusum-nukol
213+
audit verdict. Do not extend the synthesis-shaped value set without
214+
updating the audit thread.
207215
origin_run_id: Unique execution ID of the analysis run
208216
origin_run_signature: Run signature for grouping by analyzer config
209217
stable_id: Semantic identity hash (survives renames/moves)
@@ -546,7 +554,16 @@ class UsageContext:
546554
547555
Attributes:
548556
id: Unique identifier for this usage context
549-
kind: Type of usage context (call, data_value, export, macro)
557+
kind: How the surrounding source code references this symbol — either
558+
as a syntactic construct (``call``, ``macro``) or as a semantic
559+
role (``data_value``, ``export``). The field currently mixes two
560+
axes; the union is small enough (4 values) to be tractable, but a
561+
fifth value that doesn't fit either axis should trigger a split
562+
into separate fields (e.g., ``usage_construct`` + ``usage_role``).
563+
Re-evaluation triggers: (a) a fifth value that fits neither
564+
construct nor role; (b) a consumer needing per-axis filtering;
565+
(c) a bug where the single picked value hides a cross-axis signal
566+
a consumer needs. See the WI-gatuh-ruvar audit thread.
550567
context_name: Name of the function called, var defined, file exported from, etc.
551568
symbol_ref: ID of the symbol being used (None if inline/anonymous handler)
552569
position: Where in the context the symbol appears (e.g., "args[1]", ":get", "default")

0 commit comments

Comments
 (0)