sourcecode 2.2.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.2.0 → sourcecode-2.3.0}/CHANGELOG.md +53 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/PKG-INFO +3 -3
- {sourcecode-2.2.0 → sourcecode-2.3.0}/README.md +2 -2
- {sourcecode-2.2.0 → sourcecode-2.3.0}/pyproject.toml +1 -1
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/__init__.py +1 -1
- sourcecode-2.3.0/src/sourcecode/archetype.py +605 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/architecture_summary.py +41 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/classifier.py +94 -1
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/cli.py +73 -0
- sourcecode-2.3.0/src/sourcecode/graph_evidence.py +352 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/.gitignore +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/.ruff.toml +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/CONTRIBUTING.md +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/LICENSE +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/SECURITY.md +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/raw +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/scripts/compare_integration_engines.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/scripts/customer_smoke_test.sh +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/scripts/generate_jdk_exports.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/call_surface.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/caller_metrics.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/context_graph.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/dynamic_argument_surface.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/endpoint_literals.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/endpoint_metrics.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/evidence_provider.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/explain.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/hibernate_strat.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/jdk_exports.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/license.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/security_posture.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/semantic_impact_engine.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/semantic_integration_engine.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/semantic_services.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/serializer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/type_usage_surface.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/validation_inference.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/functions/README.md +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/sql/licensing_schema.sql +0 -0
- {sourcecode-2.2.0 → sourcecode-2.3.0}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,58 @@
|
|
|
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
|
+
|
|
3
56
|
## [2.2.0] — 2026-07-12
|
|
4
57
|
|
|
5
58
|
**Field-validation hardening — narrative/reporting-layer correctness across the
|
|
@@ -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
|
|
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
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
|
|
@@ -4,7 +4,7 @@
|
|
|
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
|