Skip to content

Bump Sentry.AspNetCore from 5.3.0 to 6.7.0 - #53

Closed
dependabot[bot] wants to merge 214 commits into
mainfrom
dependabot/nuget/Sentry.AspNetCore-6.7.0
Closed

dependabot[bot] wants to merge 214 commits into
mainfrom
dependabot/nuget/Sentry.AspNetCore-6.7.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 20, 2026

Copy link
Copy Markdown

Updated Sentry.AspNetCore from 5.3.0 to 6.7.0.

Release notes

Sourced from Sentry.AspNetCore's releases.

6.7.0

Features ✨

  • feat(android): expose tombstone options via SentryOptions.Native by @​jamescrosswell in #​5226
  • Add IgnoreTransactions option to filter out transactions by name, matching substrings or regular expressions against the transaction name (#​5377) by @​Adham-Kiwan in #​5377
  • feat: Add BeforeSendFeedback callback to inspect, modify, or drop user feedback before it's sent by @​vladbrincoveanu in #​5361
  • Add public API for checking unhandled exceptions (SentryEventExtensions.IsFromUnhandledException) and terminal exceptions (SentryEventExtensions.IsFromTerminalException) by @​jamescrosswell in #​5177
  • feat: Add PreferTransactionNameProvider option by @​jamescrosswell in #​5159
  • feat: Add exponential backoff and log deduplication to Spotlight by @​mattico in #​5025

Fixes 🐛

  • fix(otel): only set Scope.Transaction in SentrySpanProcessor when null by @​tsushanth in #​5337
  • fix: LNK4291 on Native AOT WinExe with Control Flow Guard by @​jamescrosswell in #​5298
  • fix: OpenTelemetry transactions for failed requests keep their route name and otel context by @​jamescrosswell in #​5310
  • fix: populate Default attributes on structured logs from current scope by @​jamescrosswell in #​5216
  • fix: [.NET 10] PageNavigationExtensions updated for public Page properties by @​nor0x in #​5278

Dependencies ⬆️

Deps

  • chore(deps): update Java SDK to v8.48.0 by @​github-actions in #​5360
  • chore(deps): update Cocoa SDK to v9.21.0 by @​github-actions in #​5359
  • chore(deps): update Native SDK to v0.15.3 by @​github-actions in #​5353
  • chore(deps): update Cocoa SDK to v9.20.0 by @​github-actions in #​5354
  • chore(deps): update Java SDK to v8.47.0 by @​github-actions in #​5338
  • chore(deps): update Cocoa SDK to v9.19.1 by @​github-actions in #​5336
  • chore(deps): update CLI to v3.6.0 by @​github-actions in #​5329
  • chore(deps): update Cocoa SDK to v9.19.0 by @​github-actions in #​5316
  • chore(deps): update Java SDK to v8.46.0 by @​github-actions in #​5321
  • chore(deps): update Java SDK to v8.45.0 by @​github-actions in #​5315
  • chore(deps): update Native SDK to v0.15.2 by @​github-actions in #​5309
  • chore(deps): update Cocoa SDK to v9.18.0 by @​github-actions in #​5264
  • chore(deps): update Java SDK to v8.44.1 by @​github-actions in #​5263
  • chore(deps): update CLI to v3.5.1 by @​github-actions in #​5279
  • chore(deps): update Native SDK to v0.15.1 by @​github-actions in #​5282

Other

  • Added Sentry.Samples.OpenTelemetry.MongoDB by @​jamescrosswell in #​5335
  • docs: add XML comments for boolean return of Sentry.Extensions.Logging Filters by @​Flash0ver in #​5297
  • LatestWindowsTfm added to Directory.Build.props by @​nor0x in #​5277

6.6.0

Features ✨

  • feat: propagate trace to sentry-android and sentry-cocoa by @​bitsandfoxes in #​5244
  • feat: User.Id can now be overriden (set to null) in Global mode by @​jamescrosswell in #​5039
  • feat: Implement strict trace continuation by @​giortzisg in #​4981

Fixes 🐛

  • fix: return early from AddSentryOtlpExporter when DSN is the disable-SDK sentinel by @​jamescrosswell in #​5247
  • fix: sync default tags to native layer by @​bitsandfoxes in #​5214

Dependencies ⬆️

Deps

  • chore(deps): update Cocoa SDK to v9.14.0 by @​github-actions[bot] in #​5252
  • chore(deps): update Java SDK to v8.42.0 by @​github-actions[bot] in #​5208

Other

  • release: 6.6.0 by @​jamescrosswell in 0140be0a
  • chore: update scripts/update-cli.ps1 to 3.4.3 by @​github-actions[bot] in #​5251
  • ci: update the Update Dependencies workflow by @​Flash0ver in #​5175
  • chore: update modules/sentry-native to 0.14.2 by @​github-actions[bot] in #​5229
  • chore: update modules/sentry-cocoa to 9.13.0 by @​github-actions[bot] in #​5221
  • chore: update scripts/update-cli.ps1 to 3.4.2 by @​github-actions[bot] in #​5220
  • chore: update modules/sentry-cocoa to 9.12.1 by @​github-actions[bot] in #​5207

6.5.0

Features ✨

  • feat: Add support to send OTEL traces via OTLP by @​jamescrosswell in #​4899

Fixes 🐛

  • fix(unity): update SentryEvent to have IsCaptured to allow dropping screenshots of filtered events by @​JoshuaMoelans in #​5162
  • fix: Memory leak when filtered Activities get garbage collected before PruneFilteredSpans runs by @​jamescrosswell in #​5186

Dependencies ⬆️

Deps

  • chore(deps): update Cocoa SDK to v9.12.0 by @​github-actions in #​5179
  • chore(deps): update CLI to v3.4.1 by @​github-actions in #​5171
  • chore(deps): update Native SDK to v0.13.8 by @​github-actions in #​5165
  • chore(deps): update Java SDK to v8.40.0 by @​github-actions in #​5161
  • chore(deps): update Cocoa SDK to v9.11.0 by @​github-actions in #​5160
  • chore(deps): update CLI to v3.4.0 by @​github-actions in #​5145
  • chore(deps): update Java SDK to v8.39.1 by @​github-actions in #​5144

Other

  • perf(logs): avoid string allocation when no parameters are passed by @​Flash0ver in #​4697
  • chore: fix missing skill by @​jamescrosswell in #​5134

6.4.1

Fixes 🐛

  • fix: prevent redundant native exceptions on Android/CoreCLR by @​jpnurmi in #​5127

Dependencies ⬆️

Deps

  • chore(deps): update Java SDK to v8.39.0 by @​github-actions in #​5137
  • chore(deps): update Native SDK to v0.13.7 by @​github-actions in #​5136

6.4.0

Features ✨

  • feat: Add network details for session replay on iOS by @​jamescrosswell in #​4891
  • feat: Add option to exclude certain HTTP statuses from tracing by @​jamescrosswell in #​5034

Fixes 🐛

  • fix: memory leak when profiling is enabled by @​jamescrosswell in #​5133
  • fix: prevent redundant native exceptions on iOS by @​jpnurmi in #​5126
  • fix: prevent redundant native exceptions on Android/Mono by @​jpnurmi in #​4676
    • Note: opt in by setting options.Native.ExperimentalOptions.SignalHandlerStrategy to Sentry.Android.SignalHandlerStrategy.ChainAtStart

Dependencies ⬆️

Deps

  • chore(deps): update Cocoa SDK to v9.10.0 by @​github-actions in #​5132
  • chore(deps): update Cocoa SDK to v9.9.0 by @​github-actions in #​5115
  • chore(deps): update Java SDK to v8.38.0 by @​github-actions in #​5124

6.3.2

Dependencies ⬆️

  • chore(deps): update Native SDK to v0.13.6 by @​github-actions in #​5128

6.3.1

Fixes 🐛

  • fix: Workaround FileNotFoundException on Android when recovering sessions by @​jamescrosswell in #​5084
  • fix: CaptureFeedback now supports multiple attachments correctly by @​bitsandfoxes in #​5077

Dependencies ⬆️

Deps

  • chore(deps): update Native SDK to v0.13.5 by @​github-actions in #​5119
  • chore(deps): update CLI to v3.3.5 by @​github-actions in #​5093
  • chore(deps): update Native SDK to v0.13.4 by @​github-actions in #​5081
  • chore(deps): update Java SDK to v8.37.1 by @​github-actions in #​5071
  • chore(deps): update CLI to v3.3.4 by @​github-actions in #​5068
  • chore(deps): update Java SDK to v8.37.0 by @​github-actions in #​5069
  • chore(deps): update Cocoa SDK to v9.8.0 by @​github-actions in #​5044
  • chore(deps): update Java SDK to v8.36.0 by @​github-actions in #​5036
  • chore(deps): update epitaph to 0.1.1 by @​github-actions in #​5036

Other

  • chore: Update validate-pr workflow by @​stephanie-anderson in #​5108
  • ci: fix workflows that always fail for fork PRs by @​jamescrosswell in #​5065

6.3.0

Features

  • The Metrics APIs are now stable: removed Experimental from SentrySdk, SentryOptions and IHub (#​5023)
  • Report a new Diagnostic (SENTRY1001) when a Metrics-API is invoked with an unsupported numeric type (#​4840)

Fixes

  • Common tags such as Environment and Release and custom event processors are all now correctly applied to CaptureFeedback events (#​4942)
  • Include Data set via ITransactionTracer in SentryTransaction (#​4148)

Dependencies

  • Bump Cocoa SDK from v9.5.0 to v9.7.0 (#​4958, #​5015)
  • Bump CLI from v3.3.0 to v3.3.3 (#​5002)
  • Bump Java SDK from v8.34.1 to v8.35.0 (#​5017)
  • Bump Native SDK from v0.13.2 to v0.13.3 (#​5045)

6.2.0

Features

  • Outbound HTTP requests now show in the Network tab for Android Session Replays (#​4860)

Fixes

  • The SDK now logs a Warning instead of an Error when being ratelimited (#​4927)
  • Symbolication now works correctly with Android workloads 10.0.102 and later (#​4998)
  • libmonosgen and libxamarin frames no longer show as in-app (#​4960)

Dependencies

6.2.0-alpha.0

Features

  • Add navigation breadcrumbs for Blazor WebAssembly (#​4907)

Dependencies

  • Bumped Xamarin.Kotlin.StdLib.Jdk8 to 2.2.20 (#​4876)
  • Bumped CommunityToolkit.Mvvm to 8.4.0 (#​4876)

6.1.0

Features

Fixes

  • User Feedback now contains additional Context and Tags, like Environment and Release (#​4883)
  • Allow Sentry failures from the Sentry CLI when SENTRY_ALLOW_FAILURE is set (#​4852)
  • The SDK now logs a specific error message when envelopes are rejected due to size limits (HTTP 413) (#​4863)
  • Fixed thread-safety issue on Android when multiple events are captured concurrently (#​4814)

Dependencies

6.1.0-alpha.2

BREAKING CHANGES

  • Rename Trace-connected Metrics APIs to avoid implying aggregation (#​4834)
    • from AddCounter to EmitCounter
    • from RecordDistribution to EmitDistribution
    • from RecordGauge to EmitGauge

Features

Fixes

6.1.0-alpha.1

Features

Dependencies

6.0.0

BREAKING CHANGES

  • This release adds support for .NET 10 and drops support for net8.0-android, net8.0-ios, net8.0-maccatalyst and net8.0-windows10.0.19041.0 (#​4461)
  • Backpressure handling is now enabled by default, meaning that the SDK will monitor system health and reduce the sampling rate of events and transactions when the system is under load. When the system is determined to be healthy again, the sampling rates are returned to their original levels. (#​4615)
  • Remove SentryLoggingOptions.ExperimentalLogging.MinimumLogLevel. Structured Logs can now be configured via the "Sentry" logging provider (e.g. in appsettings.json and appsettings.{HostEnvironment}.json) (#​4700)
  • All logging provider types are internal now in order to ensure configuration as intended (#​4700)
  • Rename SentryLog.ParentSpanId to SentryLog.SpanId reflecting the protocol change (#​4778)
  • QOL improvement: Spans and Transactions now implement IDisposable so that they can be used with using statements/declarations that will automatically finish the span with a status of OK when it passes out of scope, if it has not already been finished, to be consistent with Activity classes when using OpenTelemetry (#​4627)
  • SpanTracer and TransactionTracer are still public but these are now sealed (see also #​4627)
  • The Structured Logs APIs are now stable: removed Experimental from SentryOptions (#​4699)
  • Added support for v3 of the Android AssemblyStore format that is used in .NET 10 and dropped support for v1 that was used in .NET 8 (#​4583)
  • CaptureFeedback now returns a SentryId and a CaptureFeedbackResult out parameter that indicate whether feedback was captured successfully and what the reason for failure was otherwise (#​4613)
  • Deprecated Sentry.Azure.Functions.Worker as very few people were using it and the functionality can easily be replaced with OpenTelemetry. We've replaced our integration with a sample showing how to do this using our OpenTelemetry package instead. (#​4693)
  • UWP support has been dropped. Future efforts will likely focus on WinUI 3, in line with Microsoft's recommendations for building Windows UI apps. (#​4686)
  • BreadcrumbLevel.Critical has been renamed to BreadcrumbLevel.Fatal for consistency with the other Sentry SDKs (#​4605)
  • SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device (#​4606)
  • Removed obsolete APIs (#​4619)
    • Removed the unusual constructor from Sentry.Maui.BreadcrumbEvent that had been marked as obsolete. That constructor expected a IEnumerable<(string Key, string Value)>[] argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples: IEnumerable<(string Key, string Value)>.
    • Removed SentrySdk.CaptureUserFeedback and all associated members. Use the newer SentrySdk.CaptureFeedback instead.
  • ScopeExtensions.Populate is now internal (#​4611)

Features

  • Support for .NET 10 (#​4461)
  • Added a new SDK Sentry.Extensions.AI which allows LLM usage instrumentation via Microsoft.Extensions.AI (#​4657)
  • Added experimental support for Session Replay on iOS (#​4664)
  • Add support for Structured Logs in Sentry.Google.Cloud.Functions (#​4700)
  • QOL features for Unity
    • The SDK now provides a IsSessionActive to allow checking the session state (#​4662)
    • The SDK now makes use of the new SessionEndStatus Unhandled when capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration (#​4633, #​4653)
  • Extended the App context by app_memory that can hold the amount of memory used by the application in bytes. (#​4707)
  • Add support for W3C traceparent header for outgoing requests (#​4661)

Fixes

  • Memory leak when finishing an unsampled Transaction that has started unsampled Spans (#​4717)
  • Sentry Tracing middleware crashed ASP.NET Core in .NET 10 in 6.0.0-rc.1 and earlier (#​4747)
  • Captured Http Client Errors on .NET 5+ now include a full stack trace in order to improve Issue grouping (#​4724)
  • Deliver system breadcrumbs in the main thread on Android (#​4671)
  • The Serilog integration captures Structured Logs (when enabled) independently of captured Events and added Breadcrumbs (#​4691)
  • Minimum Log-Level for Structured Logs, Breadcrumbs and Events in all Logging-Integrations (#​4700)
    • for Sentry.Extensions.Logging, Sentry.AspNetCore, Sentry.Maui and Sentry.Google.Cloud.Functions
    • the Logger-Provider for Breadcrumbs and Events ignores Logging-Configuration (e.g. via appsettings.json)
      • use the intended SentryLoggingOptions.MinimumBreadcrumbLevel, SentryLoggingOptions.MinimumEventLevel, or add filter functions via SentryLoggingOptionsExtensions.AddLogEntryFilter
    • the Logger-Provider for Structured Logs respects Logging-Configuration (e.g. via appsettings.json)
      • when enabled by SentryOptions.EnableLogs
  • Avoid appending /NODEFAULTLIB:MSVCRT to NativeAOT linker arguments on Windows when targetting non-Windows platforms (Android, Browser) (#​4760)
  • The SDK avoids redundant scope sync after transaction finish (#​4623)
    ... (truncated)

6.0.0-rc.2

Fixes

  • Captured Http Client Errors on .NET 5+ now include a full stack trace in order to improve Issue grouping (#​4724)
  • Sentry Tracing middleware crashed ASP.NET Core in .NET 10 in 6.0.0-rc.1 and earlier (#​4747)

Dependencies

6.0.0-rc.1

BREAKING CHANGES

  • This release adds support for .NET 10 and drops support for net8.0-android, net8.0-ios, net8.0-maccatalyst and net8.0-windows10.0.19041.0 (#​4461)

  • Backpressure handling is now enabled by default, meaning that the SDK will monitor system health and reduce the sampling rate of events and transactions when the system is under load. When the system is determined to be healthy again, the sampling rates are returned to their original levels. (#​4615)

  • QOL improvement: Spans and Transactions now implement IDisposable so that they can be used with using statements/declarations that will automatically finish the span with a status of OK when it passes out of scope, if it has not already been finished, to be consistent with Activity classes when using OpenTelemetry (#​4627)

  • Add support for W3C traceparent header for outgoing requests (#​4661)
    This feature is disabled by default. Set PropagateTraceparent = true when initializing the SDK if to include the W3C traceparent header on outgoing requests.

  • The Structured Logs APIs are now stable: removed Experimental from SentryOptions (#​4699)

  • Added support for v3 of the Android AssemblyStore format that is used in .NET 10 and dropped support for v1 that was used in .NET 8 (#​4583)

  • CaptureFeedback now returns a SentryId and a CaptureFeedbackResult out parameter that indicate whether feedback was captured successfully and what the reason for failure was otherwise (#​4613)

  • Deprecated Sentry.Azure.Functions.Worker as very few people were using it and the functionality can easily be replaced with OpenTelemetry. We've replaced our integration with a sample showing how to do this using our OpenTelemetry package instead. (#​4693)

  • UWP support has been dropped. Future efforts will likely focus on WinUI 3, in line with Microsoft's recommendations for building Windows UI apps. (#​4686)

  • BreadcrumbLevel.Critical has been renamed to BreadcrumbLevel.Fatal for consistency with the other Sentry SDKs (#​4605)

  • SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device (#​4606)

  • Remove unnecessary files from SentryCocoaFramework before packing (#​4602)

  • Removed obsolete APIs (#​4619)

    • Removed the unusual constructor from Sentry.Maui.BreadcrumbEvent that had been marked as obsolete. That constructor expected a IEnumerable<(string Key, string Value)>[] argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples: IEnumerable<(string Key, string Value)>.
    • Removed SentrySdk.CaptureUserFeedback and all associated members. Use the newer SentrySdk.CaptureFeedback instead.
  • SpanTracer and TransactionTracer are still public but these are now sealed (see also #​4627)

  • ScopeExtensions.Populate is now internal (#​4611)

    See https://develop.sentry.dev/sdk/telemetry/traces/distributed-tracing/#w3c-trace-context-header for more details.

Features

  • Support for .NET 10 (#​4461)
  • Added experimental support for Session Replay on iOS (#​4664)
  • QOL features for Unity
    • The SDK now provides a IsSessionActive to allow checking the session state (#​4662)
    • The SDK now makes use of the new SessionEndStatus Unhandled when capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration (#​4633, #​4653)
  • Implemented instance isolation so that multiple instances of the Sentry SDK can be instantiated inside the same process when using the Caching Transport (#​4498)
  • Extended the App context by app_memory that can hold the amount of memory used by the application in bytes. (#​4707)

Fixes

  • Memory leak when finishing an unsampled Transaction that has started unsampled Spans (#​4717)
  • Deliver system breadcrumbs in the main thread on Android (#​4671)
  • The Serilog integration captures Structured Logs (when enabled) independently of captured Events and added Breadcrumbs (#​4691)
  • The SDK avoids redundant scope sync after transaction finish (#​4623)
  • sentry-native is now automatically disabled for WASM applications (#​4631)

Dependencies

6.0.0-preview.2

BREAKING CHANGES

  • BreadcrumbLevel.Critical has been renamed to BreadcrumbLevel.Fatal for consistency with the other Sentry SDKs (#​4605)

  • SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device (#​4606)

  • Remove unnecessary files from SentryCocoaFramework before packing (#​4602)

  • Removed obsolete APIs (#​4619)

    • Removed the unusual constructor from Sentry.Maui.BreadcrumbEvent that had been marked as obsolete. That constructor expected a IEnumerable<(string Key, string Value)>[] argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples: IEnumerable<(string Key, string Value)>.
    • Removed SentrySdk.CaptureUserFeedback and all associated members. Use the newer SentrySdk.CaptureFeedback instead.
  • Backpressure handling is now enabled by default, meaning that the SDK will monitor system health and reduce the sampling rate of events and transactions when the system is under load. When the system is determined to be healthy again, the sampling rates are returned to their original levels. (#​4615)

  • ScopeExtensions.Populate is now internal (#​4611)

  • Add support for W3C traceparent header for outgoing requests (#​4661)
    This feature is disabled by default. When enabled, outgoing requests will include the W3C traceparent header.

    SentrySdk.Init(options =>
    {
        // ...
        options.PropagateTraceparent = true;
    });

    See https://develop.sentry.dev/sdk/telemetry/traces/distributed-tracing/#w3c-trace-context-header for more details.

Fixes

  • The SDK avoids redundant scope sync after transaction finish (#​4623)
  • sentry-native is now automatically disabled for WASM applications (#​4631)

6.0.0-preview.1

BREAKING CHANGES

  • This release adds support for .NET 10 and drops support for net8.0-android, net8.0-ios, net8.0-maccatalyst and net8.0-windows10.0.19041.0 (#​4461)
  • Added support for v3 of the Android AssemblyStore format that is used in .NET 10 and dropped support for v1 that was used in .NET 8 (#​4583)

5.16.3

Fixes

  • Memory leak when finishing an unsampled Transaction that has started unsampled Spans (#​4717)
  • Deliver system breadcrumbs in the main thread on Android (#​4671)

Dependencies

5.16.2

Fixes

  • Do not allow multiple sentry.proguard-uuid metadata to be set in Android manifest (#​4647)

Dependencies

5.16.1

Fixes

  • Structured Logs now have a sentry.origin attribute to so it's clearer where these come from (#​4566)

Dependencies

5.16.0

Features

  • Added EnableBackpressureHandling option for Automatic backpressure handling. When enabled this automatically reduces the sample rate when the SDK detects events being dropped. (#​4452)
  • Add (experimental) Structured Logs integration for Serilog (#​4462)

Fixes

  • Templates are no longer sent with Structured Logs that have no parameters (#​4544)
  • Parent-Span-IDs are no longer sent with Structured Logs when recorded without an active Span (#​4565)
  • Upload linked PDBs to fix non-IL-stripped symbolication for iOS (#​4527)
  • In MAUI Android apps, generate and inject UUID to APK and upload ProGuard mapping to Sentry with the UUID (#​4532)
  • Fixed WASM0001 warning when building Blazor WebAssembly projects (#​4519)

API Changes

  • Remove ExperimentalAttribute from all Structured Logs APIs, and remove Experimental property from SentrySdk, but keep Experimental property on SentryOptions (#​4567)

Dependencies

5.15.1

Fixes

  • Fail when building Blazor WASM with Profiling. We don't support profiling in Blazor WebAssembly projects. (#​4512)
  • Do not overwrite user IP if it is set manually in ASP.NET sdk (#​4513)
  • Fix SentryOptions.Native.SuppressSignalAborts and SuppressExcBadAccess on iOS (#​4521)

Dependencies

5.15.1-maxpath.1

Fixes

  • Fail when building Blazor WASM with Profiling. We don't support profiling in Blazor WebAssembly projects. (#​4512)
  • Do not overwrite user IP if it is set manually in ASP.NET sdk (#​4513)
  • Fix SentryOptions.Native.SuppressSignalAborts and SuppressExcBadAccess on iOS (#​4521)
  • Partial workaround for MAX_PATH issues when building iOS applications from Windows (#​4533)

Dependencies

5.15.0

Features

  • Experimental Structured Logs:
    • Redesign SDK Logger APIs to allow usage of params (#​4451)
    • Shorten the key names of Microsoft.Extensions.Logging attributes (#​4450)

Fixes

  • Experimental Structured Logs:
    • Remove IDisposable from SentryStructuredLogger. Disposal is intended through the owning IHub instance (#​4424)
    • Ensure all buffered logs are sent to Sentry when the application terminates unexpectedly (#​4425)
    • InvalidOperationException potentially thrown during a race condition, especially in concurrent high-volume logging scenarios (#​4428)
  • Blocking calls are no longer treated as unhandled crashes (#​4458)
  • Only apply Session Replay masks to specific control types when necessary to avoid performance issues in MAUI apps with complex UIs (#​4445)
  • De-duplicate Java.Lang.RuntimeException on Android (#​4509)
  • Upload linked PDB to fix symbolication for Mac Catalyst (#​4503)

Dependencies

5.14.1

Fixes

  • Crontabs now support day names (MON-SUN) and allow step values and ranges to be combined (#​4407)
  • Ensure the correct Sentry Cocoa SDK framework version is used on iOS (#​4411)

Dependencies

5.14.0

Features

Fixes

  • Update sample_rate of Dynamic Sampling Context (DSC) when making sampling decisions (#​4374)

5.14.0-alpha.1

Dependencies

5.14.0-alpha.0

Fixes

  • Update sample_rate of Dynamic Sampling Context (DSC) when making sampling decisions (#​4374)
  • Ensure the correct Sentry Cocoa SDK framework version is used on iOS (#​4411)

5.13.0

Features

  • Sentry now includes an EXPERIMENTAL StringStackTraceFactory. This factory isn't as feature rich as the full SentryStackTraceFactory. However, it may provide better results if you are compiling your application AOT and not getting useful stack traces from the full stack trace factory. (#​4362)

Fixes

  • Source context for class libraries when running on Android in Release mode (#​4294)
  • Native AOT: don't load SentryNative on unsupported platforms (#​4347)
  • Fixed issue introduced in release 5.12.0 that might prevent other middleware or user code from reading request bodies (#​4373)
  • SentryTunnelMiddleware overwrites the X-Forwarded-For header (#​4375)
  • Native AOT support for linux-musl-arm64 (#​4365)

Dependencies

5.12.0

API changes

  • App Hang Tracking for iOS is now disabled by default, until this functionality is more stable. If you want to use it in your applications then you'll need to enable this manually. (#​4320)

Features

  • Added StartSpan and GetTransaction methods to the SentrySdk (#​4303)

Fixes

  • Avoid double reporting sessions on iOS and Android apps (#​4341)
  • Sentry now decompresses Request bodies in ASP.NET Core when RequestDecompression middleware is enabled (#​4315)
  • Custom ISentryEventProcessors are now run for native iOS events (#​4318)
  • Crontab validation when capturing checkins (#​4314)
  • Fixed an issue with the way Sentry detects build settings. This was causing Sentry to produce code that could fail at runtime in AOT compiled applications. (#​4333)
  • Native AOT: link to static lzma on Linux/MUSL (#​4326)
  • AppDomain.CurrentDomain.ProcessExit hook is now removed on shutdown (#​4323)

Dependencies

5.12.0-alpha.0

Features

  • Add experimental support for Sentry Structured Logging via SentrySdk.Experimental.Logger (#​4158)
  • Add experimental integrations of Sentry Structured Logging (#​4193)
    • Sentry.AspNetCore, enabled via SentryAspNetCoreOptions.Experimental.EnableLogs
    • Sentry.Extensions.Logging, enabled via SentryLoggingOptions.Experimental.EnableLogs
    • Sentry.Maui, enabled via SentryMauiOptions.Experimental.EnableLogs

API changes

  • App Hang Tracking for iOS is now disabled by default, until this functionality is more stable. If you want to use it in your applications then you'll need to enable this manually. (#​4320)

Features

Fixes

  • Sentry now decompresses Request bodies in ASP.NET Core when RequestDecompression middleware is enabled (#​4315)
  • Custom ISentryEventProcessors are now run for native iOS events (#​4318)
  • Crontab validation when capturing checkins (#​4314)
  • Native AOT: link to static lzma on Linux/MUSL (#​4326)
  • AppDomain.CurrentDomain.ProcessExit hook is now removed on shutdown (#​4323)

Dependencies

5.11.2

Fixes

  • Unsampled spans no longer propagate empty trace headers (#​4302)

5.11.1

Fixes

  • Fix linking of libsentry-native to avoid DllNotFoundException in Native AOT applications (#​4298)

5.11.0

Features

  • Added non-allocating ConfigureScope and ConfigureScopeAsync overloads (#​4244)
  • Add .NET MAUI AutomationId element information to breadcrumbs (#​4248)
  • The HTTP Response Status Code for spans instrumented using OpenTelemetry is now searchable (#​4283)

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)
  • ExtraData not captured for Breadcrumbs in MauiEventsBinder (#​4254)
    • NOTE: Required breaking changes to the public API of Sentry.Maui.BreadcrumbEvent, while keeping an Obsolete constructor for backward compatibility.
  • InvalidOperationException sending attachments on Android with LLVM enabled (#​4276)
  • When CaptureFeedback methods are called with invalid email addresses, the email address will be removed and, if Debug mode is enabled, a warning will be logged. This is done to avoid losing the Feedback altogether (Sentry would reject Feedback that has an invalid email address) (#​4284)

Dependencies

5.11.0-alpha.3

Features

  • Added non-allocating ConfigureScope and ConfigureScopeAsync overloads (#​4244)
  • Add .NET MAUI AutomationId element information to breadcrumbs (#​4248)

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)
  • InvalidOperationException sending attachments on Android with LLVM enabled (#​4276)

Dependencies

5.11.0-alpha.1

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)

Dependencies

5.10.0

Features

  • Rename MemoryInfo.AllocatedBytes to MemoryInfo.TotalAllocatedBytes (#​4243)
  • Replace libcurl with .NET HttpClient for sentry-native (#​4222)

Fixes

  • InvalidCastException in SentrySpanProcessor when using the Sentry.OpenTelemetry integration (#​4245)
  • Fix InApp Exclude for frames without Module by checking against frame's Package (#​4236)

5.9.0

Features

  • Reduced memory pressure when sampling less than 100% of traces/transactions (#​4212)
  • Add SentrySdk.SetTag (#​4232)

Fixes

  • Fixed symbolication for net9.0-android applications in Release config (#​4221)
  • Support Linux arm64 on Native AOT (#​3700)
  • Revert W3C traceparent support (#​4204)

Dependencies

5.8.2-beta.1

Fixes

  • Fixed symbolication for net9.0-android applications in Release config (#​4221)
  • Support Linux arm64 on Native AOT (#​3700)
  • Revert W3C traceparent support (#​4204)

Dependencies

5.8.1

Fixes

  • Support musl on Linux (#​4188)
  • Support for Windows ARM64 with Native AOT (#​4187)
  • Addressed potential performance issue with Sentry.Maui (#​4219)
  • Respect SentryNative=false at runtime (#​4220)

5.8.0

Features

  • .NET MAUI integration with CommunityToolkit.Mvvm Async Relay Commands can now be auto spanned with the new package Sentry.Maui.CommunityToolkit.Mvvm (#​4125)

Fixes

  • Revert "Bump Cocoa SDK from v8.39.0 to v8.46.0 (#​4103)" (#​4202)
    • IMPORTANT: Fixes multiple issues running versions 5.6.x and 5.7.x of the Sentry SDK for .NET on iOS (initialising the SDK and sending data to Sentry)

Dependencies

5.8.0-alpha.0

Features

  • Add experimental support for Sentry Structured Logging via SentrySdk.Logger (#​4158)
  • Add experimental integrations of Sentry Structured Logging (#​4193)
    • Sentry.AspNetCore, enabled via SentryAspNetCoreOptions.EnableLogs
    • Sentry.Extensions.Logging, enabled via SentryLoggingOptions.EnableLogs
    • Sentry.Maui, enabled via SentryMauiOptions.EnableLogs

5.7.0

Features

  • New source generator allows Sentry to see true build variables like PublishAot and PublishTrimmed to properly adapt checks in the Sentry SDK ([#​4101](https://github.com/getsentry...

_...

Description has been truncated

Note
Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

Soltectos and others added 30 commits May 14, 2026 17:35
## Cambios críticos de seguridad
- Agregado .gitignore completo para .NET
- Creado appsettings.Example.json como plantilla
- Sanitizadas credenciales en appsettings.json
- Corregido manejo de excepciones con logging apropiado
- Cambiado DateTime.Now a DateTime.UtcNow para evitar problemas de zona horaria

## Mejoras de arquitectura
- Reemplazado EnsureCreatedAsync() por MigrateAsync() en Program.cs
- Movida lógica de negocio del método Fallar de controlador a servicio
- Agregado método FallarHabito en IServicioHabitos y ServicioHabitos

## Mejoras de código
- Creada clase ConstantesGamificacion para valores de XP
- Extraída lógica de configuración de cookies a métodos helper
- Reemplazados valores mágicos por constantes en sistema de gamificación
- Eliminados archivos temporales (compare.py, diff.txt, run_output.txt)

## Documentación
- Agregado CAMBIOS_REALIZADOS.md con resumen completo de cambios
- Documentadas instrucciones de configuración post-cambios
- Listadas próximas mejoras recomendadas

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
## Mejoras de Arquitectura
- Eliminado acceso directo a DbContext en HomeController
- Eliminado acceso directo a DbContext en AutenticacionController
- Eliminado acceso directo a DbContext en ApiHabitosController
- Agregado IServicioBienestar.ObtenerFraseMotivacionalAleatoria()
- Agregado IServicioAutenticacion.ObtenerCarrerasActivas()
- Agregados métodos en IServicioHabitos para obtener datos con DTOs

## DTOs Implementados
- Creado HabitoRespuestaDto para respuestas de hábitos
- Creado HabitoHoyRespuestaDto para hábitos activos del día
- Creado RegistroSemanaDto para registros semanales
- Creado CompletarHabitoRespuestaDto para completar hábitos
- Creado FallarHabitoRespuestaDto para fallar hábitos
- Reemplazados tipos anónimos por DTOs en servicios y controladores API

## Mejoras de Código
- Extraído JavaScript inline de _Layout.cshtml a theme-manager.js
- Extraído JavaScript inline de Index.cshtml a dashboard.js
- Agregado evento personalizado 'themeChanged' para componentes reactivos
- Eliminado paquete AutoMapper no utilizado del proyecto
- Eliminados comentarios sobre AutoMapper de Program.cs

## Beneficios
- Mejor separación de concerns (no más acceso directo a BD desde controladores)
- Código JavaScript más mantenible y reutilizable
- APIs más documentables con DTOs tipados
- Reducción de dependencias no utilizadas
- Mejor testing (servicios son testeables independientemente)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…(hash + cryptographic generation), send Gemini API key in header, run seed only in Development, add CI/CD workflow; fix viewmodels and service methods to compile.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…vos deploy

- Registrar IServicioIA en DI (faltaba, causaba crash en chat IA)
- Corregir Gemini API: usar ?key= en lugar de Bearer token
- Corregir bug en verificación de correo (enviaba email de recuperación)
- Implementar ObtenerImagenPersonajeActual (era NotImplementedException)
- Eliminar usuario de prueba del seed data
- Ejecutar seed data en todos los entornos (roles, niveles, categorías)
- Actualizar deploy.yml con nombre de proyecto correcto (EpycusApp.csproj)
- Configurar MariaDB: epicus_db / epicus_user
- Agregar archivos deploy: systemd service, nginx config, setup script
- Actualizar README con instrucciones completas de deploy
- Sanitizar appsettings: eliminar API keys expuestas
…vos deploy

- Registrar IServicioIA en DI (faltaba, causaba crash en chat IA)
- Corregir Gemini API: usar ?key= en lugar de Bearer token
- Corregir bug en verificación de correo (enviaba email de recuperación)
- Implementar ObtenerImagenPersonajeActual (era NotImplementedException)
- Eliminar usuario de prueba del seed data
- Ejecutar seed data en todos los entornos (roles, niveles, categorías)
- Actualizar deploy.yml con nombre de proyecto correcto (EpycusApp.csproj)
- Configurar MariaDB: epicus_db / epicus_user
- Agregar archivos deploy: systemd service, nginx config, setup script
- Actualizar README con instrucciones completas de deploy
- Sanitizar appsettings: eliminar API keys expuestas
…ets expuestos)

- #3: ApiPomodoroController ya no acepta entidad ConfiguracionPomodoro del cliente. Nuevo DTO ActualizarConfiguracionPomodoroDto con solo los 5 campos editables. UsuarioId siempre desde JWT.
- #2: ServicioPerfil implementa ActualizarPerfil, CambiarPersonaje y ObtenerImagenPersonajeActual (antes throw NotImplementedException).
- #5: git rm --cached a deploy/epycus-web.service, setup-vps.sh y package-lock.json. .gitignore actualizado. Creados templates .example sin credenciales reales.
…enticacion envio correo + renombrar slnx + ci-cd
…s, dependabot, índices, logging, race condition
…leaks, health checks, DiasSemana normalizado
…ug en ServicioGamificacion

- Crea EpycusApp.Tests con xUnit + Moq + FluentAssertions + EF InMemory
- 133 tests organizados por capa: Ayudantes (27), Servicios (89), Controladores (17)
- Servicios cubiertos: Gamificacion, Habitos, Misiones, Pomodoro, Bienestar,
  Progreso, Perfil, Admin
- Controladores cubiertos: Autenticacion, Home, Habitos, Progreso
- Helper CalculadorXP con tests de niveles, XP y progreso
- Corrige bug en ServicioGamificacion.CalcularProductividadDiaria: funcion
  local dentro de expresion LINQ no traducible por EF Core
- Agrega <Compile Remove> en EpycusApp.csproj para excluir tests del build
  principal
- Remover deploy/epycus-web.service y setup-vps.sh del tracking (secretos)
- Cookie Secure dinamico con Request.IsHttps (compatible HTTP y HTTPS)
- Nginx config actualizado para app.epycus.es y 147.93.119.193
- CI/CD: corregir VPS_PORT syntax, agregar sudo a chown
- Example files: dominio, BD epicus_db, CORS, DisableHttpsRedirect
- README actualizado con datos reales del VPS Debian 13
- Setup script adaptado a Debian 13 (nftables, MS repos, deploy user)
Soltectos and others added 24 commits July 1, 2026 21:34
…2026-07-02

Backend: IPv6, sintaxis nginx deprecada, linea del .service, paso de
migraciones EF Core en CI/CD (simplificado), AsNoTracking() restante,
N+1 en ServicioGamificacion, gitleaks fetch-depth. Se documenta ademas
el hallazgo del drift sites-enabled/sites-available de nginx, la
exposicion accidental de credenciales durante el diagnostico (con
recomendacion de rotarlas) y el estado de la investigacion sobre
secretos en el historial de git (sin purgar, requiere decision aparte).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…unirseAlGrupo, bugs-pendientes)

Espeja lo documentado en PENDIENTES.md del movil (secciones 0.1/0.2):
guards binding==null completos en MisionesFragment, onNotificacionRecibida
con esCritica, unirseAlGrupo arreglado, y auditoria de bugs-pendientes.md
(4 de 6 ya resueltos por commits previos no marcados). Commits locales
sin subir, pendiente autorizacion del usuario.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…lo + boton Cerrar Sesion inalcanzable en movil

- Views/Pomodoro/Index.cshtml: alCompletarTimer() podia abortar en
  silencio a medio camino (fetch fallido, modal de Bootstrap que no se
  muestra bien en movil, etc.) dejando tiempoRestante congelado en
  negativo sin resetear el modo -> se mostraba "-1:-1" y seguia
  bajando ("-1:-2"...) al reanudar, porque el intervalo volvia a
  restar desde ahi. Se agrega guarda de reentrancia (evita doble
  llamada desde el tick normal + la correccion de visibilitychange) y
  un try/catch/finally que garantiza volver a un modo/tiempo valido
  ante cualquier fallo inesperado. formatearTiempo() tambien clampa a
  0 como ultima red de seguridad para nunca mostrar tiempo negativo.

- wwwroot/css/site.css: el fix anterior "RMOB-17: Sidebar overflow
  fix" agregaba overflow-y:auto al sidebar pero sin max-height no
  tenia nada contra qué activar el scroll (.ep-sidebar solo tenia
  min-height:100vh, sin tope) -> en moviles con poca altura el
  contenido (nav + tema + Cerrar Sesion) crecia mas alto que la
  pantalla y el boton de Cerrar Sesion, al ser el ultimo elemento,
  quedaba fuera del viewport e inalcanzable. Se agrega max-height:100vh
  para que el overflow-y:auto ya existente funcione de verdad.

Verificado: dotnet build -c Release + dotnet test (420/420) en verde,
sintaxis JS del bloque de script validada con node --check.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…le en movil

Reportado por el usuario con capturas de pantalla: temporizador
Pomodoro web quedaba en tiempo negativo tras completar un ciclo, y el
boton de Cerrar Sesion no era alcanzable en el sidebar en viewport
movil (el fix anterior "RMOB-17" le faltaba max-height para que
overflow-y:auto funcionara).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…zaciones

Dos bugs relacionados, reportados por el usuario:

1. wwwroot/sw.js: las navegaciones de pagina completa (HTML) eran
   cache-first -> recargar la pagina no volvia a pedirle nada al
   servidor. Esto ocultaba tanto deploys nuevos (el <script> inline de
   Pomodoro, por ejemplo, es parte del HTML cacheado) como el estado
   real de la sesion (una pagina cacheada podia "verse" logueada
   aunque la sesion ya hubiera expirado en el servidor). Cambiado a
   network-first para navegaciones, con fallback a cache solo si no
   hay red (mantiene el soporte offline).

2. Middleware/ConfiguracionMiddleware.cs: la cookie jwt_token
   (Jwt:ExpiracionMinutos, 60 min por defecto) nunca se renovaba en el
   flujo web pese a que la cookie refresh_token (de vida mas larga) ya
   existia sin usarse -> pasados los 60 min, cualquier pagina que
   tocara el servidor de verdad redirigia a Login sin aviso. Se agrega
   un middleware antes de UseAuthentication que, si el jwt_token falta
   o esta por expirar y hay un refresh_token valido, llama al mismo
   RenovarToken que ya usa el refresh del movil, setea cookies nuevas,
   y redirige a la misma URL -- transparente para el usuario.

Combinados explican el reporte del usuario: "Inicio" parecia normal
tras cerrar y reabrir el navegador (servido de cache, sin tocar el
servidor) pero "Ajustes" mandaba a Login (si tocaba el servidor con
sesion ya expirada) -- y por que un fix recien desplegado no se via
"por mas que recargara".

Verificado: dotnet build -c Release + dotnet test (420/420) en verde.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verificacion end-to-end contra produccion del middleware de renovacion
silenciosa: login -> peticion con solo refresh_token -> redirige a la
misma pagina (no a Login) con cookies nuevas -> 200 final siguiendo el
redirect.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… recargar

establecerModo() pisaba tiempoRestante/tiempoTotal con la duracion completa
justo despues de calcularlos a partir de localStorage.finEn, y estaCorriendo
nunca se reasignaba -> tras una recarga (el SO descarga la pestana en 2do
plano en movil) el timer siempre "reaparecia" a duracion completa en vez de
continuar, y si el ciclo ya habia terminado en background nunca se llamaba a
alCompletarTimer(): el ciclo se perdia sin registrar contra el backend.
Confirmado en produccion: las 4 sesiones de Pomodoro de hoy quedaron con
CiclosCompletados=0 y sin ninguna llamada a /ciclo-completado en los logs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…oble-tap, modal en fullscreen

Auditoria completa del modulo Pomodoro (web, Android, backend, BD) a raiz del reporte del
usuario probando el Pomodoro en vivo. Hallazgos y fixes de mayor confianza (detalle completo
en Pomodoro.md):

- "Resumen de hoy"/racha usaban DateTime.UtcNow.Date (medianoche del SERVIDOR) en vez de la
  zona horaria del usuario, a diferencia del grafico semanal que ya lo hacia bien -> para
  cualquier usuario al oeste de UTC (practicamente todos), sesiones de tarde/noche podian
  contarse en el dia equivocado o romper la racha. ObtenerSesionesHoyAsync y
  ObtenerRachaActualAsync ahora usan la zona horaria del usuario.
- "Minutos enfocados" sumaba la duracion de CUALQUIER sesion con FechaFin, sin importar si
  completo algun ciclo -> una sesion que quedo abierta horas y se cancelo sin avanzar (bug de
  restauracion de timer ya arreglado, doble pestana, cancelacion manual) inflaba "minutos"
  mientras "ciclos completados"/"XP" quedaban en 0 en el mismo resumen -> exactamente el
  sintoma reportado. Corregido en los 4 sitios que calculan minutos (controller + 3 metodos
  de estadisticas del servicio): solo cuentan sesiones con >=1 ciclo completado.
- Web: doble-tap en Iniciar podia arrancar dos setInterval en paralelo (iniciarTimer es async
  y no marcaba estaCorriendo hasta despues de un await) -> guarda de reentrancia agregada.
- Web: modales que pueden aparecer a mitad de sesion (descanso largo sugerido, meta cumplida)
  quedaban invisibles/inalcanzables si el usuario tenia el reloj en pantalla completa (los
  modales de Bootstrap se montan fuera del elemento fullscreen) -> se sale de pantalla
  completa antes de mostrarlos.
- Web: "Meta diaria" tenia dos controles de UI desconectados (el ajuste rapido +/- junto al
  reloj nunca se reflejaba en la tarjeta de progreso ni se persistia) -> unificados a una
  sola fuente de verdad durante la sesion de navegador.
- Android: fallo al arrancar sesion en el backend (POST /iniciar) era 100% silencioso -> toda
  la sesion completaba ciclos localmente (sonido, vibracion, notificaciones) sin registrar
  nada en el servidor. Se agrego aviso visible al usuario.
- Android: guarda contra division por cero en ciclosAntesPausaLarga (defensivo).

6 tests nuevos (426/426 en verde). Documentados ademas 6 problemas NO corregidos en esta
sesion (condicion de carrera de sesiones duplicadas, sync entre pestanas, falta de indice
compuesto en BD, etc.) con el porque y la recomendacion para cada uno - ver Pomodoro.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…meta diaria, multi-pestana)

Sesion de seguimiento de la auditoria de Pomodoro.md: el usuario pidio resolver los puntos
que habian quedado documentados sin corregir.

- Migracion de BD: columna calculada SesionAbiertaMarcador + indice unico -> la BD ahora
  rechaza a nivel de esquema una segunda sesion abierta para el mismo usuario, cerrando la
  condicion de carrera de IniciarSesionSiNoActiva de raiz. Confirmado con datos reales antes
  de migrar: dos usuarios en produccion tenian 16 y 6 sesiones abiertas simultaneas. La
  migracion limpia esos duplicados (conserva la mas reciente, cancela el resto) antes de
  crear el indice, mismo patron que AgregarIndiceUnicoEstadoAnimo. Tambien agrega el indice
  compuesto (UsuarioId, FechaInicio) para las consultas de hoy/historial/estadisticas.
  IniciarSesionSiNoActiva ahora captura la violacion del indice unico y la traduce al mismo
  mensaje amigable de conflicto en vez de dejar pasar un 500.
- ObtenerHistorialAsync ya no incluye sesiones todavia en curso (FechaFin null) - para eso
  existe /sesion-activa. 9 tests actualizados + 1 nuevo.
- Web: "Meta diaria" del control rapido (+/- junto al reloj) ahora persiste de verdad al
  servidor (GET config completa + PUT con solo metaDiariaCiclos cambiado, para no arriesgar
  pisar otros ajustes con valores obsoletos del DOM), con debounce.
- Web: pestanas secundarias con BroadcastChannel ahora entran en "modo espejo" -reloj propio
  sincronizado por timestamp absoluto, boton deshabilitado- en vez de quedar con el boton en
  "Pausar" y el reloj congelado. Se auto-recupera a los 3s si la pestana duena se cierra sin
  avisar.
- Android: agregado campo + indicador de progreso para "Meta diaria" (antes no tenia ninguna
  UI para esto pese a que el backend ya lo soportaba).

427/427 tests backend en verde. Detalle completo de cada fix en Pomodoro.md seccion 7.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…os reales

Bug reportado en vivo por el usuario probando la sesion de seguimiento: cambiar la
configuracion a mitad de una sesion de Pomodoro hacia que "Historial de hoy" pasara de
mostrar minutos reales a "0 min".

Causa real: una sesion sigue sin FechaFin mientras esta en curso (el usuario no le dio
Finalizar ni llego a su meta diaria) - el caso NORMAL en una sesion de varios ciclos
seguidos, no una excepcion. El fix de la sesion anterior (Minutos solo cuenta sesiones con
FechaFin) hacia que esas sesiones en curso mostraran 0 minutos pese a tener ciclos reales
completados. Lo que el usuario habia visto antes ("7 min") nunca vino del servidor - era una
entrada optimista que agregarHistorial() (JS) inserta en el DOM usando la duracion
configurada EN ESE MOMENTO, sin reconciliarse nunca con la realidad hasta el proximo reload
completo (que fue justo cuando el usuario guardo la configuracion).

Fix: cuando una sesion de Enfoque sigue abierta pero ya completo >=1 ciclo real, se estima
ciclos x duracion de ciclo configurada en vez de 0 (mismo patron que ya usaba el codigo para
sub-tareas). Aplicado en los 4 sitios que calculan minutos. La fila del Historial ahora dice
"En curso" en vez de "Completado" para esas sesiones, honesto sobre que no ha terminado.

8 tests nuevos/actualizados (430/430 en verde). Confirmado en vivo contra el servidor local:
Historial paso de "0 min" a "Enfoque 25 min - En curso" tras completar un ciclo sin cerrar
la sesion. Detalle completo en Pomodoro.md seccion 8.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… en vivo

Pomodoro.md tenia varios puntos marcados "no probado visualmente" que si se confirmaron
durante la sesion de pruebas en el navegador (zona horaria/minutos via los numeros de
Resumen+Historial, persistencia de Meta diaria via reload real, mecanica del modo espejo via
invocacion directa). Actualizada la seccion 6 (prioridades) con lo que realmente falta:
Android en dispositivo real, dos pestanas de navegador genuinas para el modo espejo,
fullscreen+modal, y un usuario con zona horaria no-UTC.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…racion

DELETE /api/v1/perfil/cuenta verifica contrasena (si la cuenta la tiene),
invalida el JWT actual y borra al usuario en cascada. Cerraba el unico
bloqueador de codigo real para publicar en Uptodown/Aptoide (auditoria.md
del repo movil). 4 tests nuevos confirman el borrado en cascada, rechazo
de contrasena incorrecta, cuentas Google-only sin contrasena, y usuario
inexistente.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…cha daba 500

- El listado de misiones serializaba DateOnly.MinValue como "0001-01-01"
  cuando la mision se creo sin fecha limite (el movil lo mostraba tal cual
  en la tarjeta). Ahora devuelve cadena vacia.
- Editar una mision sin fecha lanzaba FormatException (500): DateTime.Parse
  sobre cadena vacia, sin la guarda que Crear si tenia. Ahora usa la misma.

Encontrado probando en vivo en el emulador Android (crear mision "Sin fecha").
dotnet build Release + 434/434 tests en verde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…o y personaje equivocado

Encontrado probando en vivo en el emulador Android (Inicio decia "Nivel 0",
Perfil "Nivel 1", el XP de completar un habito nunca se acumulaba, e Inicio
seguia mostrando el personaje anterior tras cambiarlo):

- CalculadorXP asumia niveles 1-based, pero SemillaNiveles arranca en 0
  ("Novato") con umbrales 100/250/450/700... Ahora la formula reproduce
  exactamente el XpRequerido sembrado (25n^2+75n). Antes un usuario nuevo
  "subia" a nivel 1 con cualquier XP < 150. Usuarios existentes pueden ver
  su numero de nivel reajustarse (normalmente igual o +1) en su proxima
  ganancia de XP.
- ServicioGamificacion.SumarXP descartaba el XP en silencio si el usuario
  no tenia fila en ProgresosUsuario (caso de cuentas sembradas como admin).
  Ahora crea la fila con el nivel inicial.
- ServicioProgreso.ObtenerImagenPersonaje tomaba el primer PersonajeUsuario
  del usuario ignorando EstaSeleccionado — por eso Inicio/gamificacion
  mostraban el personaje viejo tras cambiarlo (Perfil si lo resolvia bien).
- ServicioPerfil: fallback de nivel `?? 1` corregido a `?? 0` (coherente
  con el nivel inicial real).

Tests actualizados para reflejar la semilla real (nivel 0 base) + 2 nuevos.
dotnet build Release + 442/442 tests en verde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ersaciones tipados

- MaxMensajesPorDia: 50 -> 5, a pedido del usuario. El conteo ahora excluye
  las respuestas de Edy (Rol=="model"): antes ObtenerMensajesHoyAsync sumaba
  ambos roles, asi que "50" en la practica eran ~25 turnos reales; ahora "5"
  son 5 preguntas reales del usuario, ni una mas.
- El limite ya vivia contra ProgresosUsuario/MensajesIA por UsuarioId+fecha
  en BD (no en sesion/cookie), asi que cerrar sesion y volver a entrar no
  lo resetea - eso ya era el comportamiento correcto, solo bajo el numero.
- GET /api/v1/ia/historial y /conversaciones devolvian "object" sin tipar
  (pendiente documentado en REVISION_APIS_Y_MOVIL.md). Tipados a
  List<MensajeIaDto>/List<ConversacionResumen> - de paso Historial ya no
  serializa la entidad EF MensajeIA completa (incluia la propiedad de
  navegacion Usuario).
- POST /api/v1/ia/chat no manejaba el limite diario ni conversaciones
  ajenas (a diferencia del controller MVC web, que si los captura) - un
  usuario que alcanzara el limite recibia un 500 generico en vez de un
  error claro. Ahora replica el mismo patron: 429 con el mensaje real del
  limite, 403 si la conversacion no es suya.

Tests: 4 nuevos (limite sin contar respuestas de Edy, 429, 403, DTO tipado
sin exponer la entidad). dotnet build Release + dotnet test 446/446 verde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…hora del historial en UTC crudo

Reportado por el usuario en vivo: envio un mensaje, la web mostro "No pude
conectarme. Verifica tu conexion e intenta de nuevo.", pero al recargar la
pagina la respuesta real de Edy SI estaba ahi, completa y coherente -- solo
que con una hora distinta (21:04 al escribir vs 02:04 al recargar).

Dos bugs reales, ambos en Views/Ia/Index.cshtml:

1. **Causa raiz real del "No pude conectarme" (afecta TODO mensaje, no solo
   timeouts):** el JS de enviarMensaje() leia `data.respuesta`/`data.error`/
   `data.mensajeId` en el nivel raiz de la respuesta del fetch, pero
   /api/v1/ia/chat (el endpoint que realmente llama, compartido con el
   movil desde f7b1122) devuelve RespuestaApi<T> -- la respuesta real vive
   en `data.datos.respuesta`. Con `data.respuesta` como `undefined`,
   formatearTexto(undefined) lanzaba una excepcion DENTRO del try, que caia
   en el mismo catch que maneja errores de red real -- de ahi que un
   mensaje que el servidor proceso y guardo perfectamente bien se mostrara
   como si hubiera fallado. Corregido a leer `data.datos.*`/`data.mensaje`.
   De paso se agrego reconciliacion: si el fetch falla de verdad (catch),
   antes de mostrar el error se reconsulta el historial real por si el
   servidor sí completo la operacion mientras la conexion se cortaba.

2. **Bug de zona horaria (mismo patron que Pomodoro.md 1.2, ahora en el
   chat):** el historial recargado usaba `msg.FechaHora.ToLocalTime()` en
   el .cshtml, que convierte de UTC a la zona horaria del SERVIDOR (no la
   del usuario) -- el VPS corre en UTC, asi que no habia conversion real
   y se mostraba la hora UTC cruda. El mensaje "optimista" que agrega el
   JS al escribir SI usa `new Date()` (hora real del navegador), de ahi el
   salto de 21:04 a 02:04 (~5h, coincide con UTC-5) al recargar. Corregido
   pasando la fecha UTC cruda como data-attribute y formateandola en el
   cliente con la misma logica que el mensaje optimista, en vez de fiarse
   de la zona horaria del servidor.

Ademas: ChatAsync ahora devuelve tambien el Id del mensaje de Edy guardado
(antes el controller MVC lo hardcodeaba a 0), asi que el boton de feedback
(👍/👎) funciona en mensajes recien enviados, no solo en el historial
recargado.

Tests: 3 nuevos (camino feliz completo de ChatAsync con transaccion real —
requirio ConfigureWarnings en DbContextFactory para el proveedor InMemory,
que no soporta transacciones; propagacion de MensajeId al DTO; 429 y 403 ya
cubiertos). dotnet build Release + dotnet test 448/448 en verde.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uario tiene

AdminController usaba [Authorize(Roles = "Administrador")] pero el unico rol de
administrador que existe realmente (creado por SemillaAdmin y usado por
ApiAdminController) se llama "Admin". Como resultado el panel web nunca fue
accesible para ninguna cuenta. Se unifica AdminController para exigir "Admin".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---
updated-dependencies:
- dependency-name: Sentry.AspNetCore
  dependency-version: 6.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Jul 20, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: automerge, dependencies. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@dependabot @github

dependabot Bot commented on behalf of github Sep 15, 2026

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/nuget/Sentry.AspNetCore-6.7.0 branch September 15, 2026 04:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant