Filter out UserExceptionInformer category from AbpExceptionHandlingLoggerProvider so logs written by the informer do not re-enter the same provider, which previously caused infinite recursion and a browser stack overflow.
Fixes#25463
Add @codemirror/state and @codemirror/view dependencies, update build config, introduce a minimal/basic setup toggle, and improve focus styling.
- package.json: include @codemirror/state and @codemirror/view required by new imports.
- scripts/build.js: change esbuild legalComments from 'none' to 'eof' to keep trailing license comments.
- scripts/entry.js: import minimalSetup and factory getEditorSetup(options) to use minimalSetup by default and basicSetup only when lineNumbers === true; integrates this into editor state creation.
- src/codemirror.css: fix closing brace and add :focus-within styles to apply a Bootstrap-like focus ring.
These changes reduce default editor surface (no line numbers unless requested), add required runtime deps, and improve accessibility/focus visuals.
Replace 'has not compatible with' with 'is not compatible with' in FeatureManager, SettingManager and PermissionManager (the latter is the original phrasing this PR initially mirrored).
- SettingManager.GetAllAsync / FeatureManager.GetAllWithProviderAsync: drop top-level continue and rely on the provider chain filter so allowed upstream providers can still be read via inheritance (e.g. GetAllForUserAsync now returns a Global-only setting)
- FeatureAppService.GetAsync: switch includedFeatures to HashSet for O(1) parent lookup
- FeatureManager.SetAsync: throw when providerName is not in feature.AllowedProviders
- FeatureManager.GetAllWithProviderAsync / GetOrNullInternalAsync: filter providers chain by feature.AllowedProviders (aligning with FeatureChecker)
- FeatureAppService.GetAsync: filter features by AllowedProviders and add parent chain check to prevent orphan child entries (aligning with PermissionAppService)
- SettingManager.SetAsync: throw when providerName is not in setting.Providers
- SettingManager.GetAllAsync / GetOrNullInternalAsync: filter providers chain by setting.Providers (aligning with SettingProvider)
- Add `.Application -> .Domain` arrow to all 4 diagrams
- Module diagram: remove `.Web` node (module template's `.Web` is the
module's own UI layer per `[DependsOn]` and csproj, not a standalone
host that would reference `.HttpApi`) and add `.MongoDB`
Add a new English community article 'ABP Agent Vibe Architecting' and three supporting images (abp-agent-ai-review.gif, abp-agent-analyze-engine.png, abp-agent-code-generation.gif). The article explains the concept of "vibe architecting", outlines a three-layer governance framework, and describes ABP Studio AI Agent features (Plan mode, Analyze engine, ABP-aware review) that mitigate architecture drift in enterprise .NET.
Clarify Blazor UI entry by listing Blazorise and MudBlazor, mark React UI as supported in the comparison table, and fix the ABP Studio AI Agent cell by adding a proper external link (target="_blank") to resolve a malformed/stray anchor.
- SetLinkConsentAsync uses FindByIdAsync + null no-op, matching the
missing-user behaviour of Get/RemoveLinkConsentAsync.
- Decorate Set/Get/RemoveLinkConsentAsync with [UnitOfWork] so the
underlying IdentityUserStore.GetTokenAsync can EnsureCollectionLoaded
the user.Tokens collection (fixes the CI failure on
GetLinkConsentAsync_Should_Return_Null_When_No_Consent_Written).
- Clarify LinkUserTokenProvider XML doc to note that the single-active
policy is enforced per purpose (matches AbpSingleActiveTokenProvider).
- Rename LinkUserTokenProvider_Should_Be_Register to *_Registered for
consistency with sibling token-provider tests.
- Add tests covering: (a) RemoveLinkUserTokenAsync(purpose) only
invalidates the requested purpose, and (b) same-purpose GenerateLink
TokenAsync invalidates the previously issued token.
- Use UserManager.SetAuthenticationTokenAsync/GetAuthenticationTokenAsync/
RemoveAuthenticationTokenAsync so the Tokens collection is loaded via
IdentityUserStore.EnsureCollectionLoadedAsync instead of relying on the
GetByIdAsync(includeDetails) convention.
- Add a RemoveLinkUserTokenAsync(manager, user, purpose) overload to invalidate
tokens issued for purposes other than LinkUserTokenPurpose.
- Add a cross-UnitOfWork persistence test for SetLink/Get/Remove ConsentAsync.
- Drop the unused IdentityLinkUserRepository field from LinkUserTokenProvider_Tests.
- Make LinkUserTokenProvider derive from AbpSingleActiveTokenProvider
- Add AbpLinkUserTokenProviderOptions with 10 min default lifespan
- Add RemoveLinkUserTokenAsync extension on IdentityUserManager
- Add SetLinkConsentAsync/GetLinkConsentAsync/RemoveLinkConsentAsync on IdentityLinkUserManager backed by user.Tokens slot [AbpLinkUserConsent]/Consent