sourcecode 2.1.0__tar.gz → 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sourcecode-2.1.0 → sourcecode-2.3.0}/CHANGELOG.md +128 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/PKG-INFO +4 -4
- {sourcecode-2.1.0 → sourcecode-2.3.0}/README.md +3 -3
- {sourcecode-2.1.0 → sourcecode-2.3.0}/pyproject.toml +1 -1
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/__init__.py +1 -1
- sourcecode-2.3.0/src/sourcecode/archetype.py +605 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/architecture_summary.py +41 -0
- sourcecode-2.3.0/src/sourcecode/caller_metrics.py +42 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/classifier.py +94 -1
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/cli.py +191 -29
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/java.py +29 -1
- sourcecode-2.3.0/src/sourcecode/endpoint_metrics.py +42 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/explain.py +2 -0
- sourcecode-2.3.0/src/sourcecode/graph_evidence.py +352 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/path_filters.py +2 -1
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/repository_ir.py +50 -14
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/semantic_integration_engine.py +18 -2
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/serializer.py +23 -3
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_semantic.py +18 -5
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_tx_analyzer.py +21 -6
- {sourcecode-2.1.0 → sourcecode-2.3.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/.gitignore +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/.ruff.toml +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/CONTRIBUTING.md +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/LICENSE +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/SECURITY.md +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/raw +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/license.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/functions/README.md +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-2.1.0 → sourcecode-2.3.0}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,133 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.3.0] — 2026-07-12
|
|
4
|
+
|
|
5
|
+
**Module graph promoted to a first-class Evidence Provider for architectural
|
|
6
|
+
characterization (ADR-0003 step 2).** The experimental `archetype` model can now
|
|
7
|
+
derive architectural style from the *directed structure* of the module
|
|
8
|
+
dependency graph rather than from directory names — names become secondary
|
|
9
|
+
evidence. This consolidates a new evidence source; the legacy report wording is
|
|
10
|
+
unchanged (no cutover) pending cross-repo validation.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`graph_evidence.py` — a pure, archetype-agnostic Graph Evidence Provider.**
|
|
15
|
+
Transforms a `ModuleGraph` into reusable topological evidence
|
|
16
|
+
(`ModuleGraph → metrics → GraphEvidence`). It knows graphs, not archetypes: it
|
|
17
|
+
never classifies, emits no prose, and does not import the scorer. Seven
|
|
18
|
+
name-free metrics, each O(V+E)/O(V log V): `scc_mass` (non-trivial
|
|
19
|
+
strongly-connected-component node fraction, iterative Tarjan), `cyclic_density`
|
|
20
|
+
(intra-SCC back-edges), `hub_concentration`, `module_centralization` (Freeman),
|
|
21
|
+
`downward_edge_ratio` and `dependency_inversion_ratio` (both via Martin
|
|
22
|
+
instability `I = out/(in+out)`), and `fan_in_gini`. Graphs below 4 nodes / 3
|
|
23
|
+
edges report `available=False` and degrade cleanly.
|
|
24
|
+
- **`archetype` consumes topological evidence via a declarative `_GRAPH_MAP`.**
|
|
25
|
+
The map (`metric → [(dimension, label, weight, polarity, lo, hi)]`) is the only
|
|
26
|
+
place that couples graphs to archetypes; the scorer reads `Evidence` objects and
|
|
27
|
+
never traverses the graph. Polarity `-1` *refutes* (a dense cyclic core refutes
|
|
28
|
+
`layered`/`microkernel`/`hexagonal`). Architectural style now emerges from
|
|
29
|
+
structure: `layered` from downward flow + acyclicity, `engine` from a woven
|
|
30
|
+
cyclic core, `microkernel` from a stable hub, `hexagonal` from dependency
|
|
31
|
+
inversion into a distributed core.
|
|
32
|
+
- **`ask archetype` builds a bounded `ModuleGraph`** (`GraphAnalyzer`) and feeds it
|
|
33
|
+
to the classifier, best-effort with graceful degradation to the previous
|
|
34
|
+
name-mass-only behaviour on failure or oversized trees. Output gains top-level
|
|
35
|
+
`graph_metrics` and `graph_*` entries in candidate evidence traces.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- **Confidence is now tied to topological support for the winning label.**
|
|
40
|
+
`graph_backed` is true only when the winning candidate carries positive
|
|
41
|
+
`graph_*` evidence — so "high" confidence requires real structure behind *that*
|
|
42
|
+
conclusion, not merely that a graph exists. (The prior gate keyed on
|
|
43
|
+
`module_graph_summary` was effectively dead, since the command never populated
|
|
44
|
+
it.) A new absolute-score floor (`_MIN_CONFIDENT_SCORE`) keeps a near-floor lone
|
|
45
|
+
winner at "low".
|
|
46
|
+
|
|
47
|
+
### Notes
|
|
48
|
+
|
|
49
|
+
- **No report cutover.** Legacy `project_type` / `architecture.pattern` and the
|
|
50
|
+
report's first two lines are unchanged; `archetype` remains parallel and
|
|
51
|
+
experimental while the new evidence is validated across repositories.
|
|
52
|
+
- Tests: `tests/test_graph_evidence.py` adds 12 synthetic-graph tests (no real
|
|
53
|
+
repository) covering metric ranges for layered/engine/microkernel/hexagonal
|
|
54
|
+
topologies and the archetype integration. Full battery: 3220 passed.
|
|
55
|
+
|
|
56
|
+
## [2.2.0] — 2026-07-12
|
|
57
|
+
|
|
58
|
+
**Field-validation hardening — narrative/reporting-layer correctness across the
|
|
59
|
+
audit corpus.** A refute-first pass over ten real repositories fixed a batch of
|
|
60
|
+
mislabeling and miscount bugs where the headline framing contradicted the
|
|
61
|
+
structured output the engine had already produced. No Semantic IR change — every
|
|
62
|
+
fix is in the reporting/narrative layer and reuses facts already extracted.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- **`endpoints` — modeled JAX-RS no longer double-reported as un-modeled surface
|
|
67
|
+
(A2).** `_build_route_surface` fully models JAX-RS, but `extract_java_endpoints`
|
|
68
|
+
also counted every `@Path` file into `non_spring_rest_surface{modeled:false}` and
|
|
69
|
+
warned "count covers Spring-MVC-annotated endpoints only" — contradicting the
|
|
70
|
+
JAX-RS routes just emitted (18 on eureka, 689 on keycloak). Modeled routes now
|
|
71
|
+
carry framework provenance (`jax_rs`/`spring_mvc`); when JAX-RS routes were
|
|
72
|
+
modeled, `jax_rs` is dropped from the un-modeled surface. Genuinely un-modeled
|
|
73
|
+
surfaces (WebScripts/Servlets, or JAX-RS that produced no route) still surface and
|
|
74
|
+
still warn.
|
|
75
|
+
- **`spring-audit` — overloaded `@Transactional` methods counted separately (A1).**
|
|
76
|
+
`TransactionBoundaryIndex.by_symbol` is keyed by signature-less FQN, so overloaded
|
|
77
|
+
methods (`findAll()` / `findAll(Pageable)`) collapsed to one entry and `stats()`
|
|
78
|
+
undercounted. A new `all_declared` list (one entry per site) drives the count
|
|
79
|
+
(petclinic 1→2, matching source); FQN-keyed lookups are unchanged.
|
|
80
|
+
- **`spring-audit` — per-site TX overloads no longer hidden by `by_symbol` collapse
|
|
81
|
+
(A1-RESIDUAL).** TX-001 (proxy-bypass) and TX-005 (exception-swallow) are per-site
|
|
82
|
+
checks but iterated the collapsed FQN map; a non-risky overload could overwrite a
|
|
83
|
+
risky one sharing an FQN, silently dropping the finding. Both now iterate
|
|
84
|
+
`all_declared` with a dedupe guard. Corpus TX counts unchanged (the residual was
|
|
85
|
+
latent).
|
|
86
|
+
- **`compact` — Spring Boot version surfaced from pom property (A3).** `--compact`
|
|
87
|
+
deployment omitted the Boot version when it lived in a `<spring.boot.version>`
|
|
88
|
+
property rather than the starter-parent, while `migrate-check` resolved it. The
|
|
89
|
+
serializer now falls back to the property-resolving detector (single source of
|
|
90
|
+
truth), gated on Boot presence so non-Boot repos gain no phantom version
|
|
91
|
+
(Broadleaf 3.5.14, consistent).
|
|
92
|
+
- **`endpoints` — `Map.put("/", literal)` no longer treated as a router-DSL route
|
|
93
|
+
(B1).** The router-DSL detector matched an HTTP-verb name + `"/"` first arg; a
|
|
94
|
+
plain map write (`swapChars.put("/", "slash")`) was reported as a `PUT /`
|
|
95
|
+
endpoint. A negative lookahead now rejects a literal second argument — a handler
|
|
96
|
+
is never a bare literal (openmrs 3→2, jobrunr 12/12 kept).
|
|
97
|
+
- **`endpoints` — test-suite module controllers excluded from entry points (B2).**
|
|
98
|
+
A scaffolding `@Controller` in openmrs' `test-suite` module (sources under
|
|
99
|
+
`src/main`) surfaced as a production entry point. Entry-point collection now uses
|
|
100
|
+
the broader `is_test_or_fixture_path`, and `test-suite`/`test-suites` are
|
|
101
|
+
recognized test-module segments (openmrs 19→18; petclinic/eureka/keycloak
|
|
102
|
+
unchanged).
|
|
103
|
+
- **`stack` — JAX-RS API surfaced in the headline stack from source annotations
|
|
104
|
+
(C1).** Eureka reported `project_type=library` with an empty stack despite 18
|
|
105
|
+
JAX-RS routes, because the manifest scan has no Jersey/Guice/jsr311 vocabulary and
|
|
106
|
+
(for gradle) reads only the root build file. When the `.java` scan found JAX-RS
|
|
107
|
+
entry points and no Jakarta EE framework was inferred, the stack now surfaces
|
|
108
|
+
`Jakarta EE` from the `@Path`/`@GET` evidence (eureka → `Java rest api using
|
|
109
|
+
Jakarta EE`). Manifest-only jsr311 still infers nothing (honesty preserved).
|
|
110
|
+
|
|
111
|
+
### Changed
|
|
112
|
+
|
|
113
|
+
- **`modernize` — cyclic tangles distinguished from one-way deps in
|
|
114
|
+
`cross_module_tangles` (TANGLE-1).** A directional dependency is normal layering,
|
|
115
|
+
not a tangle. Each entry now carries `coupling_type` (`cyclic` when mutual, else
|
|
116
|
+
`directional`); the note and recommendation state only cyclic entries are real
|
|
117
|
+
tangles. The key is retained (mcp/USER_GUIDE/tests reference it); cyclic entries
|
|
118
|
+
still sort first.
|
|
119
|
+
- **CLI — consistent progress spinner across all long-running commands (UX-1).** The
|
|
120
|
+
TTY-gated progress spinner ran on only 5 code paths; the slowest commands
|
|
121
|
+
(`spring-audit`, `validation`, `migrate-check`, `endpoints`, `export`,
|
|
122
|
+
`impact-chain`, `pr-impact`, `explain`) ran silent. All 9 now show the same
|
|
123
|
+
stderr-only, TTY/CI-gated indicator (never pollutes stdout JSON, zero cost in CI).
|
|
124
|
+
|
|
125
|
+
### Notes
|
|
126
|
+
|
|
127
|
+
- No breaking changes. All fixes are reporting/narrative-layer; the Semantic IR and
|
|
128
|
+
default JSON schemas are unchanged (`cross_module_tangles` gains an additive
|
|
129
|
+
`coupling_type` field). 3193 tests passing.
|
|
130
|
+
|
|
3
131
|
## [2.1.0] — 2026-07-10
|
|
4
132
|
|
|
5
133
|
**Robustness & Security Inference — vendor-agnostic security & validation posture.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.0
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Keywords: agents,ai,codebase,context,developer-tools,llm
|
|
@@ -38,11 +38,11 @@ Description-Content-Type: text/markdown
|
|
|
38
38
|
|
|
39
39
|
# ASK Engine
|
|
40
40
|
|
|
41
|
-
> **Persistent structural intelligence for AI coding agents
|
|
41
|
+
> **ASK — Actionable Software Knowledge.** Persistent structural intelligence for AI coding agents.
|
|
42
42
|
|
|
43
43
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|

|
|
47
47
|
|
|
48
48
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -84,7 +84,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
84
84
|
# pip / pipx
|
|
85
85
|
pipx install sourcecode # or: pip install sourcecode
|
|
86
86
|
|
|
87
|
-
ask version # ask 2.
|
|
87
|
+
ask version # ask 2.3.0
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
> **Package vs. command.** The install package is named `sourcecode` this release
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# ASK Engine
|
|
2
2
|
|
|
3
|
-
> **Persistent structural intelligence for AI coding agents
|
|
3
|
+
> **ASK — Actionable Software Knowledge.** Persistent structural intelligence for AI coding agents.
|
|
4
4
|
|
|
5
5
|
**Context · Impact · Migration · Architecture · Review — everything from one structural model.**
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|

|
|
9
9
|
|
|
10
10
|
> **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
|
|
@@ -46,7 +46,7 @@ brew tap haroundominique/sourcecode && brew install sourcecode
|
|
|
46
46
|
# pip / pipx
|
|
47
47
|
pipx install sourcecode # or: pip install sourcecode
|
|
48
48
|
|
|
49
|
-
ask version # ask 2.
|
|
49
|
+
ask version # ask 2.3.0
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
> **Package vs. command.** The install package is named `sourcecode` this release
|