Changelog
All notable changes to this project will be documented in this file.
[Unreleased]
Added
- building-block PDF modern layout (opt-in
PdfConfigs:Policy:AllowModernLayout): real Flexbox layout engine —flex-direction/flex-wrap,justify-content/align-items/align-content,gap/row-gap/column-gap, and itemflex-grow/flex-shrink/flex-basis/order/align-self(Phase 18) — and real CSS Grid layout engine —grid-template-columns/rowswithpx/%/fr/auto/minmax()/repeat()incl.repeat(auto-fill|auto-fit),grid-auto-columns/rows, sparsegrid-auto-flow,grid-template-areas, gaps, and itemgrid-column/grid-row/grid-area/justify-self/align-self(Phase 19). Off by default → existing templates keep byte-identical golden output. - building-block PDF image decoder now accepts 8-bit grayscale (
color_type=0) and grayscale+alpha (color_type=4) PNG in addition to RGB/palette/RGBA; 16-bit and sub-8-bit grayscale rejected with clear codes (PNG-16BIT/PNG-GRAYSCALE-DEPTH). - building-block Governance.Enterprise compliance evidence-pack chain-of-custody signing — RSA via
IMControlPlaneSignerwith fail-closed HMAC fallback — plusVerifyAsyncfor tamper detection (content-hash + signature) on load. - building-block Governance.Enterprise durable retry for failed audit-chain submissions (
IFailedChainSubmissionStore+ChainSubmitter.RetryPendingAsync): transient (5xx/network) failures are persisted and retried; dead-lettered after N attempts; 4xx/license failures are not enqueued. - building-block Pdf.Enterprise HTTP template registry (
HttpPdfTemplateRegistry) + transport-agnostic polling hot-reload (PdfTemplateHotReload) over anyIMPdfTemplateRegistry.
Fixed
- building-block PDF strict policy (
DefaultStrictPolicy) now fails loud on unsupported visual CSS (filter,backdrop-filter,clip-path,mix-blend-mode) by scanning raw<style>/inline CSS — these are dropped from the CSSOM by AngleSharp and would otherwise be silently ignored.
[1.9.7] - 2026-06-13
Added
- building-block
MBB008analyzer: cross-capability type reference inside anAddM*extension method must be guarded byIMEcosystemRegistry.Has(MCapability.X). Anchors:Logging,RuleEngine,MultiTenant,Auth,Governance. - building-block
MBB009analyzer: forbids rawException/ArgumentExceptionthrows insideMuonroi.*namespaces — use theMExceptionhierarchy (test assemblies exempt). - building-block
MBB010analyzer: requires a null guard on every non-nullable reference-type parameter of a public method (MGuard.NotNull,ArgumentNullException.ThrowIfNull,if (x == null),x ?? throw); value types andT?exempt. - building-block
LicenseFingerprintScopeenum +LicenseConfigs.FingerprintScopekey (MachineAndProjectdefault /ProjectOnly).ProjectOnlyomits hardware + OS so one license key validates on any machine (dev / UAT / prod). - building-block
MCapability.Governance = 1 << 4added to theMCapabilityflags enum, registered by the governanceAddM*extension soMBB008can guard calls intoMuonroi.Governance.*. - building-block
CopilotDraftProvenanceRecordentity +DbSetonRuleEngineDbContext(AI-copilot draft hash/snapshot/EditedBeforeApproval/ApprovedAt, tenant-scoped RLS);(Draft, Rejected)copilot-discard transition (Rejectedremains terminal). - ui-engine
@muonroi/ui-engine-rule-components0.1.23 —mu-impact-listLit component (cross-version impact, three-state coverage badges, UAT checklist, virtualized, trace-jump) +MuImpactListReactwrapper +getImpactListclient. Living Docs suite:mu-living-docs,mu-traceability-matrix. New commercial package@muonroi/ui-engine-pdf-designer1.0.0 (Monaco-based PDF template designer, PROFILE-V1 lint,pdf.designergated). - license-server PDF entitlements — per-key grant/revoke endpoint
POST /api/v1/keys/{licenseKey}/features+featuresCLI; capability keyspdf.designer,pdf.registry,pdf.canary(stored inLicenseRecord.AllowedFeaturestext[], no migration). - muonroi-cli 1.4.1 —
ee_feedbackMCP tool + session pending-recall feedback gate;csharp-lsbuilt-in LSP + per-request timeout;lsp.autoInstalldefault on.muonroi-toolsMCP tool names normalized to underscores (ee_query,selfverify_*,usage_forensics,lsp_query). - experience-engine Gemini, Antigravity, and Codex memory adapters (single-file
MEMORY.mdparsing) alongside Claude; curated-memory import wired intoupgrade.sh; runbook re-confirm flagging on supersede.
Fixed
- building-block
OwnedPdfWriteremits deterministic LF line endings in content/CMap streams (cross-platform golden parity). - building-block EF Core migration chain consolidated (
CatchUpRlsProvenanceWriteCheck): RLSWITH CHECKapplied to all six tenant-scoped tables (RuleSets,CanaryRollouts,RuleSetAudits,TenantRuleAssignments,TenantQuotaOverrides,CopilotDraftProvenance).
[1.9.6] - 2026-03-12
Added
- Track 8 messaging and integration runtime coverage:
IMessageRouter<TMessage>andIRoutingDecisionfor redirect / dead-letter decisions- Redis-backed routing table with local cache + pub/sub invalidation
GrpcClientAuthInterceptorfor forwarding bearer token, tenant id, and correlation id fromISystemExecutionContext- mediator-side
[MEmitOnPass]andIRuleNotificationFactory<TContext>for rule-triggered notifications - structured rule execution telemetry with pass/fail result counters and duration histogram tags
Changed
RuleEngineRoutingFilter<T>now supports three routing sources in order:- Redis dynamic routes
- DI-registered
IMessageRouter<T> - legacy
IMessageRoutingRule<T>compatibility adapter
- Messaging documentation now covers Redis FEEL routing, reject semantics, and rule-triggered mediator notifications.
- gRPC documentation now covers per-client
ForwardAuthToken/ForwardTenantIdconfiguration and outbound metadata forwarding behavior.
[1.9.5] - 2026-03-11
Added
- Developer MCP guide for Muonroi local authoring workflows:
muonroi-mcp-devstdio server- mandatory AI workflow for
muonroi://ecosystem/rules, scaffolding, compliance, extract, and register - Claude Code
.claude/mcp.jsonexample for local server registration
- Control-plane MCP decision table version tools:
muonroi_decision_table_get_versionsmuonroi_decision_table_get_versionmuonroi_decision_table_diff_versions
- Rule Studio deep runtime extensions:
GET /api/v1/rule-catalogandGET /api/v1/rule-catalog/{code}for BA palette metadataMRuleCatalogEntrymetadata now flows from authoring manifest into the Control Plane palettemu-rule-flow-designeracceptscatalogApiBaseand renders remote rule palette groups- designer dependency overlay and auto-layout actions for graph readability
- dependency badge click-to-focus navigation inside the inspector
- decision-table inspector schema overview with column and hit-policy hints
- explicit publish confirmation dialog before save/submit/activate begins
Changed
- Rule engine documentation now treats MCP as a first-class developer entry point alongside
muonroi-ruleandMuonroi.DecisionTableGen. - Control-plane MCP decision table coverage now includes version history, version snapshot lookup, and structural diff for tenant-scoped tables.
- Claude Code MCP registration guidance now includes paired
muonroi-cloud+muonroi-devsetup and repo-local.claude/mcp.jsonfiles formuonroi-building-block,muonroi-control-plane, andmuonroi-ui-engine. - Rule Studio host integration now uses split endpoints:
apiBaseUrl=/api/v1/control-planecatalogApiBase=/api/v1/rule-catalog
- Rule Studio remote catalog palette now renders as a dedicated searchable section with loading and empty states in
mu-rule-flow-designer. - Flow-graph runtime now treats
alwaysedges as non-halting branch continuations after upstream failures or exceptions, matchingon-false/on-errorrecovery semantics.
[1.9.4] - 2026-03-07
Added
- Track 4/5 execution continuity plan (
Docs/track4-track5-execution-plan.md) with explicit recovery order after context compaction. - Pre-publish verification matrix for
mr-base-sln,mr-mod-sln, andmr-micro-slnusing LocalNuGet feeds (LocalNuget/LocalNuGetFeed).
Changed
muonroi-control-planeruntime license exposure and bootstrap flow finalized:GET /api/v1/inforeturnsactivationProof.- dashboard bootstrap initializes UI license verifier before rendering.
muonroi-ui-engineOSS boundary hardening:@muonroi/ui-engine-rule-componentsmoved to optional peer dependency in OSS React package.- lockfile + publish workflow adjusted for stable CI.
Fixed
- Template repositories updated for current
MRepositoryconstructor signature by addingIMDateTimeServicein generated repository constructors. - Base template auth wiring updated to current API:
AddValidateBearerToken<BaseTemplateDbContext, Permission>(configuration).
[1.9.3] - 2026-03-07
Added
Messaging Stack — Phase 1 (Core Automation & Tracing)
MuonroiContextPublishFilter<T>andMuonroiContextSendFilter<T>: automatically stamp all context headers (TenantId,UserId,CorrelationId,AccessToken,SourceType,SentAt) on every publish/send viaISystemExecutionContextAccessor. Eliminates the need to callPublishWithAuthContextmanually for standard flows.MaskAccessTokenInHeadersoption: replaces the rawAccessTokenheader with anX-Muonroi-Identity-Sig(SHA-256 ofUserId:TenantId:CorrelationId) to avoid transmitting bearer tokens over the message broker.- ECS logging filters (
EcsConsumeLoggingFilter,EcsPublishLoggingFilter,EcsSendLoggingFilter) now injectISystemExecutionContextAccessor— no more staticTenantContextreads. correlation.idandtenant.idtags added to OTel activities in all three logging filters.KafkaBusConfiguratornow wires SASL (SecurityProtocol,SaslMechanism,SaslUsername,SaslPassword) andClientIdfrom config.RabbitMqBusConfiguratornow wiresHeartbeatSeconds,Port, andUseQuorumQueuesfrom config.
Messaging Stack — Phase 2 (Security & Reliability)
OutboxRelayBackgroundService: pollsIEventOutboxStoreforPendingevents, publishes viaIPublishEndpoint, marksPublishedorFailed. Wired viaservices.AddOutboxRelay().MDbContextOutboxExtensions.SaveWithOutboxAsync<T>: atomic save + outbox row creation in a singleSaveChangesAsynccall.MuonroiConsumerBase<T>: standard base class for MassTransit consumers withIMLog<T>,ILicenseGuard, andISystemExecutionContextAccessorpre-wired.OutboxRelayConfigsadded toMessageBusConfigs:Enabled,PollingIntervalMs,BatchSize.OutboxRelayregistration fixed:AddSingleton<OutboxRelayBackgroundService>ensures the concrete type is resolvable asIOutboxRelayService.
Messaging Stack — Phase 3 (Advanced Integration)
TenantQuotaMessagingFilter<T>: enforcesMessagesPerMinuteandMessagesPerDayquotas per tenant viaITenantQuotaTracker. ThrowsQuotaExceededException(non-retriable) on violation. Activated viaEnableQuotaEnforcement: true.MSagaDbContext: abstractMDbContext-based saga persistence base with automaticTenantIdinjection fromISystemExecutionContextAccessorand timestamp management viaIMDateTimeService.IMuonroiSagainterface: contract for saga state entities withCorrelationId,TenantId,CreationTime,LastModificationTime.RuleEngineRoutingFilter<T>: executesIEnumerable<IMessageRoutingRule<T>>against each incoming message before consumer dispatch. Activated viaEnableRuleEngineRouting: true. OSS-abstraction-only — no dependency onRuleEngine.Core.IMessageRoutingRule<T>: marker interface (extendsIRule<T>) for routing rules inMuonroi.Messaging.Abstractions.IOutboxRelayServiceinterface added toMuonroi.Messaging.Abstractions.QuotaType.MessagesPerMinuteandQuotaType.MessagesPerDayadded toMuonroi.RuleEngine.Abstractions.
Fixed
MuonroiConsumerBase<T>: replacedILoggerFactory/ILoggerwithIMLog<T>(logging standard compliance).OutboxRelayBackgroundService: replacedILogger<T>withIMLog<T>andDateTime.UtcNowwithIMDateTimeService(MBB001 + logging standard compliance).MSagaDbContext: replacedDateTime.UtcNowwithIMDateTimeServicefallback (MBB001) andTenantContext.CurrentTenantIdstatic read withISystemExecutionContextAccessor(coding rule #4).TenantQuotaMessagingFilter: changed thrown exception fromInvalidOperationExceptiontoQuotaExceededExceptionto prevent MassTransit retry loops on quota violations.RuleEngineRoutingFilter: removed undeclaredMuonroi.RuleEngine.Coretransitive dependency; now usesIMessageRoutingRule<T>fromMuonroi.Messaging.Abstractions.
[1.9.2] - 2026-03-06
Added
- Dotnet template options
--tier(oss|enterprise) and--control-plane(true|false) formr-base-sln,mr-mod-sln, andmr-micro-sln. - Enterprise template wiring now conditionally adds
Muonroi.Governance.Enterpriseand callsAddMEnterpriseGovernance(...). - Control plane template wiring now conditionally adds Rule Engine Postgres/Redis integration and appsettings placeholders for
ControlPlaneUrlandConnectionStrings:RuleEngineDb.
[1.9.1] - 2026-02-07
Added
- Tier 2 Security Enhancement: Signed Policy System for Enterprise compliance.
LicensePolicy: RSA-signed data structure defining enforcement rules, feature quotas, and rate limits.PolicyVerifier: Cryptographic verification of policy files using RSA-SHA256.PolicyEnforcer: Runtime enforcement of policy-defined rate limits and feature usage quotas.PolicySignerCLI Tool: Utility for generating and signing license policies for distribution.- Support for
RequireSignedPolicyinLicenseConfigsto mandate valid policies in production.
Changed
- Integrated
PolicyEnforcerintoLicenseGuardto override configuration settings with signed policy rules. - Enhanced
LicenseSaveChangesInterceptorto respect policy-defined database enforcement rules.
[1.9.0] - 2026-02-07
Added
- Tier 1 Security Enhancement: Comprehensive client-side protection.
LicenseExecutionContext: Prevents infinite recursion in database interceptors usingAsyncLocal.AntiTamperDetector: Hardware breakpoint detection (DR0-DR7) and debugger sensing.LicenseEnforcementMode: Explicit control over security strictness (Free, Development, Production).- Integrated
AntiTamperDetectorintoLicenseGuardfor hardened production checks.
Fixed
- Fixed infinite recursion bug in
LicenseSaveChangesInterceptorwhen recording actions during DB saves. - Added missing
SavingChangesAsyncoverride inLicenseSaveChangesInterceptor. - Improved tier-based enforcement: License tier is now the source of truth, reducing reliance on environment variables.
[1.6.6] - 2025-08-17
Added
- Rule Engine with DMN decision tables, complex event processing, feature flags, and governance capabilities.
- Multi-tenancy improvements including isolation, tenant-aware observability, and rate limiting.
- Authentication and authorization enhancements such as OIDC PKCE flow, WebAuthn MFA, DPoP token binding, and rule-driven login.
- OpenTelemetry instrumentation and ECS logging for MassTransit.
Changed
- Refactored project structure and namespaces for clarity and maintainability.
Fixed
- General bug fixes including improved null handling and error messages.
[1.5.8] - 2025-02-11
Added
- Logging enhancements and better token handling across services.
- Task management and file upload functionalities.
Changed
- Updated repository interfaces and middleware behavior.
- Refactored serialization and repository layers.
Fixed
- Resolved various issues in permission and authentication flows.