sourcecode 1.59.0__tar.gz → 1.62.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-1.59.0 → sourcecode-1.62.0}/CHANGELOG.md +81 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/PKG-INFO +3 -3
- {sourcecode-1.59.0 → sourcecode-1.62.0}/README.md +2 -2
- {sourcecode-1.59.0 → sourcecode-1.62.0}/pyproject.toml +1 -1
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/cli.py +25 -17
- sourcecode-1.62.0/src/sourcecode/hibernate_strat.py +599 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/license.py +1 -1
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/registry.py +6 -3
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/server.py +4 -1
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/migrate_check.py +223 -32
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/serializer.py +44 -1
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/__init__.py +3 -3
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/config.py +30 -4
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/consent.py +18 -21
- {sourcecode-1.59.0 → sourcecode-1.62.0}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/.gitignore +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/.ruff.toml +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/CONTRIBUTING.md +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/LICENSE +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/SECURITY.md +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/raw +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/cache.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/explain.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/format_contract.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/integration_detector.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/openapi_surface.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/prepare_context.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/ris.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/security_config.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_findings.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/validation_surface.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/version_check.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/src/sourcecode/workspace.py +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/functions/README.md +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/functions/get-license/index.ts +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/functions/lemonsqueezy-webhook/index.ts +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/functions/telemetry/index.ts +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/sql/license_event_ordering.sql +0 -0
- {sourcecode-1.59.0 → sourcecode-1.62.0}/supabase/sql/telemetry_events.sql +0 -0
|
@@ -1,5 +1,86 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.62.0] — 2026-06-29
|
|
4
|
+
|
|
5
|
+
### Added — Hibernate 5.x → 6.x migration stratification (`migrate-check`)
|
|
6
|
+
|
|
7
|
+
`migrate-check` no longer treats Hibernate as a single dependency-version bump.
|
|
8
|
+
For enterprise monoliths that use dynamic persistence (verified against the
|
|
9
|
+
Broadleaf Commerce CE Open Admin Platform pattern), a Hibernate major upgrade is
|
|
10
|
+
a **persistence-layer rewrite problem in the dynamic-ORM areas, not an upgrade**.
|
|
11
|
+
Output now carries a `hibernate` section (and a Hibernate block in `--format text`)
|
|
12
|
+
built by the new `hibernate_strat` module.
|
|
13
|
+
|
|
14
|
+
- **Four independent migration domains** — each classified on its own risk axis,
|
|
15
|
+
never aggregated into one score:
|
|
16
|
+
1. **JPA Annotation Layer** — LOW, escalates to HIGH on deprecated/reworked
|
|
17
|
+
annotations (`@Type(type=)`, `@TypeDef`, `@GenericGenerator`).
|
|
18
|
+
2. **Criteria API Layer** — HIGH, escalates to **CRITICAL** when Criteria is
|
|
19
|
+
built via reflection or abstraction DAOs (`DynamicEntityDao`, `GenericDao`,
|
|
20
|
+
`BasicPersistenceModule`). Legacy `org.hibernate.Criteria` /
|
|
21
|
+
`Restrictions` / `Projections` flagged (removed in Hibernate 6).
|
|
22
|
+
3. **HQL / String Queries** — MEDIUM, escalates to HIGH on string concatenation
|
|
23
|
+
(SQL shape not statically inferable under H6 parser changes).
|
|
24
|
+
4. **Hibernate SPI / Internal API** — CRITICAL blocker (`UserType`,
|
|
25
|
+
`CompositeUserType`, `Interceptor`, `EventListener`, `org.hibernate.engine.spi`).
|
|
26
|
+
- **Hibernate Migration Impact Matrix** — per-layer risk, reason, and estimated effort.
|
|
27
|
+
- **Module-level Hibernate exposure map** — per Maven/Gradle module: max risk,
|
|
28
|
+
layers present, and `dynamic-criteria` / `custom-SPI` / `reflection` tags.
|
|
29
|
+
- **Critical call-chain detection** — flags dynamic query-generation paths
|
|
30
|
+
(`DynamicEntityDaoImpl`, `BasicPersistenceModule`, reflection-based DAOs).
|
|
31
|
+
- **Stop-condition logic** — any of {dynamic Criteria, custom SPI, reflection-built
|
|
32
|
+
queries, concatenated query strings} forces the verdict
|
|
33
|
+
**"HIBERNATE 6 MIGRATION IS HIGH RISK REWRITE ZONE (NOT UPGRADE ZONE)"**;
|
|
34
|
+
otherwise UPGRADE-WITH-CARE or UPGRADE ZONE.
|
|
35
|
+
- **Risk separation** — observable code risk vs inferred runtime risk reported distinctly.
|
|
36
|
+
|
|
37
|
+
## [1.61.0] — 2026-06-29
|
|
38
|
+
|
|
39
|
+
### Fixed — `migrate-check` false positives on already-migrated Spring Boot 3 repos
|
|
40
|
+
|
|
41
|
+
Three defects made `migrate-check` report a Boot 3 / Jakarta repo as an
|
|
42
|
+
un-migrated Boot 2 project (verified on Broadleaf Commerce CE 7.0.x —
|
|
43
|
+
Boot 3.5.14, Java 17, `jakarta.*` fully adopted). The verdict contradicted the
|
|
44
|
+
code; this corrects all three at the root and adds regression guardrails.
|
|
45
|
+
Report `schema_version` bumped **1.2 → 1.3**.
|
|
46
|
+
|
|
47
|
+
- **`spring_boot_2_detected` no longer defaults to `true`.** The detector now
|
|
48
|
+
resolves Maven `${...}` properties before reading versions and recognises
|
|
49
|
+
Boot in every form: `spring-boot-starter-parent`, a managed
|
|
50
|
+
`spring-boot-dependencies` BOM, a `spring-boot*` dependency versioned by
|
|
51
|
+
property, and the Gradle plugin. The old heuristic used a `DOTALL` regex that
|
|
52
|
+
matched any stray `2.x` library version anywhere in the pom. The field is now
|
|
53
|
+
**tri-state** — `true` (Boot 2 confirmed) / `false` (Boot 3+ confirmed) /
|
|
54
|
+
`null` (undetermined). **Absence of evidence is never reported as `true`.**
|
|
55
|
+
A new `spring_boot_version_detected` exposes the resolved version. Massive
|
|
56
|
+
`jakarta.*` import adoption vetoes any Boot-2 verdict.
|
|
57
|
+
- **`readiness_score` no longer collapses to 0 on JDK-modernization volume.**
|
|
58
|
+
Blockers (critical/high) still floor a genuinely blocked repo, but orthogonal
|
|
59
|
+
JDK debt (`java.util.Date`, reflection) is capped so it can no longer sink a
|
|
60
|
+
jakarta-ready repo. The report now separates dimensions:
|
|
61
|
+
`jakarta_readiness`, `boot3_readiness`, and `jdk_modernization` (each 0–100).
|
|
62
|
+
- **`javax.*` JDK/JSR namespaces are no longer flagged with
|
|
63
|
+
`javax-to-jakarta-migration-risk`.** `javax.cache` (JSR-107), `javax.sql`,
|
|
64
|
+
`javax.xml` (JAXP), `javax.naming`, `javax.management`, `javax.crypto`, etc.
|
|
65
|
+
keep the `javax` prefix forever and are now allowlisted. Only the Jakarta EE 9
|
|
66
|
+
renamed namespaces (`javax.servlet`, `javax.persistence`, `javax.validation`,
|
|
67
|
+
`javax.xml.bind`, …) still carry the flag.
|
|
68
|
+
|
|
69
|
+
## [1.60.0] — 2026-06-29
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
- **Anonymous telemetry is now on by default (opt-out).** Previously telemetry
|
|
73
|
+
was strictly opt-in and disabled until the user accepted a y/N consent prompt.
|
|
74
|
+
It now defaults to **on** so usage metrics flow without an extra step, while
|
|
75
|
+
staying fully anonymous — no source code, paths, file names, secrets, or
|
|
76
|
+
repository content are ever collected. The first interactive run shows a
|
|
77
|
+
one-time **notice** (not a prompt) explaining what is collected and how to
|
|
78
|
+
disable. Disable any time with `sourcecode telemetry disable`,
|
|
79
|
+
`SOURCECODE_TELEMETRY=0`, or the `DO_NOT_TRACK=1` convention. With no explicit
|
|
80
|
+
choice, telemetry still defaults to **off in CI** (no human to see the notice);
|
|
81
|
+
an explicit opt-in is honored everywhere. README, `--help`, and
|
|
82
|
+
`docs/privacy.md` updated accordingly.
|
|
83
|
+
|
|
3
84
|
## [1.59.0] — 2026-06-19
|
|
4
85
|
|
|
5
86
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.62.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
|
|
@@ -742,7 +742,7 @@ All outputs include:
|
|
|
742
742
|
|
|
743
743
|
## Telemetry
|
|
744
744
|
|
|
745
|
-
Anonymous, opt-
|
|
745
|
+
Anonymous, **on by default (opt-out)**. Collects: version, OS, commands, flags, duration, repo size range, errors. No source code, paths, secrets, or output content. A one-time notice is shown on first interactive run.
|
|
746
746
|
|
|
747
747
|
```bash
|
|
748
748
|
sourcecode telemetry status
|
|
@@ -750,7 +750,7 @@ sourcecode telemetry enable
|
|
|
750
750
|
sourcecode telemetry disable
|
|
751
751
|
```
|
|
752
752
|
|
|
753
|
-
|
|
753
|
+
Disable any time: `export SOURCECODE_TELEMETRY=0` (or `DO_NOT_TRACK=1`)
|
|
754
754
|
|
|
755
755
|
---
|
|
756
756
|
|
|
@@ -704,7 +704,7 @@ All outputs include:
|
|
|
704
704
|
|
|
705
705
|
## Telemetry
|
|
706
706
|
|
|
707
|
-
Anonymous, opt-
|
|
707
|
+
Anonymous, **on by default (opt-out)**. Collects: version, OS, commands, flags, duration, repo size range, errors. No source code, paths, secrets, or output content. A one-time notice is shown on first interactive run.
|
|
708
708
|
|
|
709
709
|
```bash
|
|
710
710
|
sourcecode telemetry status
|
|
@@ -712,7 +712,7 @@ sourcecode telemetry enable
|
|
|
712
712
|
sourcecode telemetry disable
|
|
713
713
|
```
|
|
714
714
|
|
|
715
|
-
|
|
715
|
+
Disable any time: `export SOURCECODE_TELEMETRY=0` (or `DO_NOT_TRACK=1`)
|
|
716
716
|
|
|
717
717
|
---
|
|
718
718
|
|
|
@@ -584,7 +584,7 @@ try:
|
|
|
584
584
|
except Exception:
|
|
585
585
|
pass
|
|
586
586
|
|
|
587
|
-
telemetry_app = typer.Typer(help="Manage anonymous telemetry (opt-
|
|
587
|
+
telemetry_app = typer.Typer(help="Manage anonymous telemetry (on by default; opt-out).", rich_markup_mode="rich")
|
|
588
588
|
app.add_typer(telemetry_app, name="telemetry")
|
|
589
589
|
|
|
590
590
|
mcp_app = typer.Typer(help="MCP integration: setup, status, serve, remove.", rich_markup_mode="rich")
|
|
@@ -597,18 +597,18 @@ auth_app = typer.Typer(help="Authentication: status, logout.", rich_markup_mode=
|
|
|
597
597
|
app.add_typer(auth_app, name="auth")
|
|
598
598
|
|
|
599
599
|
|
|
600
|
-
def
|
|
601
|
-
"""Show first-run
|
|
600
|
+
def _maybe_show_telemetry_notice() -> None:
|
|
601
|
+
"""Show first-run telemetry notice once, on interactive TTYs only.
|
|
602
|
+
|
|
603
|
+
Telemetry is on by default (opt-out). We inform rather than ask, then
|
|
604
|
+
mark the notice as shown so it appears only once.
|
|
605
|
+
"""
|
|
602
606
|
try:
|
|
603
|
-
from sourcecode.telemetry.config import has_been_asked,
|
|
604
|
-
from sourcecode.telemetry.consent import
|
|
607
|
+
from sourcecode.telemetry.config import has_been_asked, mark_asked
|
|
608
|
+
from sourcecode.telemetry.consent import show_first_run_notice
|
|
605
609
|
if not has_been_asked():
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
if enabled:
|
|
609
|
-
typer.echo("Telemetry enabled. Thank you. Disable: sourcecode telemetry disable", err=True)
|
|
610
|
-
else:
|
|
611
|
-
typer.echo("Telemetry disabled. Enable anytime: sourcecode telemetry enable", err=True)
|
|
610
|
+
show_first_run_notice()
|
|
611
|
+
mark_asked()
|
|
612
612
|
except Exception:
|
|
613
613
|
pass
|
|
614
614
|
|
|
@@ -1020,9 +1020,9 @@ def main(
|
|
|
1020
1020
|
sourcecode /path/to/repo --compact analyze specific path
|
|
1021
1021
|
sourcecode --agent agent-optimized output (full detail)
|
|
1022
1022
|
"""
|
|
1023
|
-
# First-run
|
|
1023
|
+
# First-run telemetry notice (skip for telemetry/version/config subcommands)
|
|
1024
1024
|
if ctx.invoked_subcommand not in ("telemetry", "version", "config"):
|
|
1025
|
-
|
|
1025
|
+
_maybe_show_telemetry_notice()
|
|
1026
1026
|
_maybe_show_mcp_hint()
|
|
1027
1027
|
|
|
1028
1028
|
# When a subcommand is invoked, skip the main analysis.
|
|
@@ -3342,12 +3342,12 @@ def telemetry_status() -> None:
|
|
|
3342
3342
|
enabled = is_enabled()
|
|
3343
3343
|
asked = has_been_asked()
|
|
3344
3344
|
status = "enabled" if enabled else "disabled"
|
|
3345
|
-
typer.echo(f"Telemetry: {status}")
|
|
3345
|
+
typer.echo(f"Telemetry: {status} (on by default; opt-out)")
|
|
3346
3346
|
if not asked:
|
|
3347
|
-
typer.echo(" (
|
|
3347
|
+
typer.echo(" (first-run notice not yet shown — will show on next run)")
|
|
3348
3348
|
typer.echo(f" Config: {config_file_path()}")
|
|
3349
|
-
typer.echo(" Disable
|
|
3350
|
-
typer.echo(" Or set env var:
|
|
3349
|
+
typer.echo(" Disable: sourcecode telemetry disable")
|
|
3350
|
+
typer.echo(" Or set env var: SOURCECODE_TELEMETRY=0 (or DO_NOT_TRACK=1)")
|
|
3351
3351
|
|
|
3352
3352
|
|
|
3353
3353
|
@telemetry_app.command("enable")
|
|
@@ -3369,6 +3369,7 @@ def telemetry_disable() -> None:
|
|
|
3369
3369
|
from sourcecode.telemetry.config import set_enabled
|
|
3370
3370
|
set_enabled(False)
|
|
3371
3371
|
typer.echo("Telemetry disabled. No data will be collected or sent.")
|
|
3372
|
+
typer.echo("Telemetry is on by default; this opt-out is remembered.")
|
|
3372
3373
|
typer.echo("Re-enable at any time: sourcecode telemetry enable")
|
|
3373
3374
|
|
|
3374
3375
|
|
|
@@ -4837,6 +4838,13 @@ def migrate_check_cmd(
|
|
|
4837
4838
|
MIG-007 javax.inject import (MEDIUM)
|
|
4838
4839
|
MIG-008 javax.ws.rs import (MEDIUM — JAX-RS changed)
|
|
4839
4840
|
|
|
4841
|
+
\b
|
|
4842
|
+
Hibernate 5→6 stratification (in the 'hibernate' output section):
|
|
4843
|
+
4 independent layers (JPA annotations / Criteria / HQL / SPI), a per-layer
|
|
4844
|
+
risk matrix, a module exposure map, critical call-chain detection, and an
|
|
4845
|
+
UPGRADE vs REWRITE verdict (dynamic Criteria, custom SPI, reflection-built
|
|
4846
|
+
queries, or concatenated query strings force the REWRITE classification).
|
|
4847
|
+
|
|
4840
4848
|
\b
|
|
4841
4849
|
Examples:
|
|
4842
4850
|
sourcecode migrate-check .
|