Skip to content
bitzorcas
中EN

Concept

Platform supporting and industry-extension modules

Select, compose, and verify 17 supporting, connector, delivery, and industry-extension modules.

Last updated

Supporting modules fill horizontal experience, compliance, reference-data, and connector needs without taking ownership of a business module’s facts. Each module now has a dedicated handbook; this page explains their division of responsibility and composition.

Three capability groups, one dependency rule

Business modules
Identity / Documents / Tickets / ...

General support
Menu / Guidance / Comments / Numbering / MasterData / DocumentStructure

Governance and intelligence
GDPR / AIManage

External, delivery, and industry extensions
Announcements / Release / Commercial / License / Connectors / Ops

Public Contracts or narrow ports

Supporting modules expose capability through public contracts while business modules retain business policy. Connectors translate protocols and errors; vendor models and SDK types must not leak into Application.

General experience and shared data

ModuleProvidesTypical composition
MenuMenu catalogs, navigation nodes, permission associationAuthorization decides visibility; Menu owns structure
GuidanceGuides, steps, and user progressIdentity identifies the user; a business module decides when to show guidance
CommentsResource threads, replies, and moderationA stable resource key attaches to Documents, Tickets, and other modules
NumberingRule-driven, concurrency-safe business numbersThe business aggregate stores the result; a number is not its primary key
Master DataCountries, languages, rates, holidays, and common codesShares reference values without replacing private module enums
Document StructureFolder templates, nodes, favorites, and tree navigationDocuments owns bodies and versions; this module owns organization

Governance and intelligence

ModuleProvidesMust prove before release
GDPRConsent, data-subject requests, and export/deletion orchestrationEach domain still performs its own discovery, retention, and deletion rules
AI ManageProviders, credentials, workspaces, conversations, and messagesAuthorization, data minimization, secret handling, model degradation, and audit

The ability to call a model is not permission to send arbitrary business data. GDPR orchestration likewise cannot bypass aggregate ownership and directly delete another module’s data.

Operations, tools, and industry extensions

ModuleBoundary
Ops ExtensionIncidents, dead letters, CAP failures, and support records
Tool ConnectorsProtocol, authentication, rate limiting, and conversion for platform tools
Legal ConnectorsAnti-corruption adapters for legal external systems
Legal CalculatorsPure-rule-first, reproducible legal calculations, and workbench suite
Industry ExtensionsIsolation point for industry-specific capabilities

Content publishing and commercial delivery

ModuleOwnsDoes not own
AnnouncementsAnnouncement lifecycle, audience policy, and user read factsAuthoritative organization membership or out-of-band notification delivery
Release ManagementRelease notes, client-version catalog, rollout, and force-update decisionsArtifact builds, app stores, or deployment pipelines
Commercial DistributionPrivate-package download rights and short-lived feed credentialsRuntime authorization, a NuGet server, or a credential provider
License ManagementLicense requests, four-eyes review, asynchronous signing, and revocationRuntime license enforcement, private-key custody, or package download rights

These modules answer different questions. Commercial Distribution decides whether a customer may download a package. License Management controls whether a runtime license can be signed and revoked. Release Management decides whether a client should upgrade. Announcements decides which users can currently see a message. They can be composed, but their state must not be collapsed into one shared flag.

Composition example: a controlled document with comments

Suppose a user enters a document tree, opens a document, and adds a comment:

  1. Identity establishes caller and tenant context; Authorization decides access.
  2. Document Structure returns the visible tree; Documents returns body and version.
  3. Comments attaches a thread through stable resource type and identifier without owning the Document aggregate.
  4. Menu and Guidance improve discovery and onboarding without changing document permission.
  5. For a data-subject request, GDPR orchestrates each module as it exports or deletes its own records.
  6. The path records the minimum audit fields and fails closed whenever tenant or authorization state is uncertain.

Ask four questions before selection

QuestionDecision ruleCommon mistake
Who owns the business fact?keep the aggregate and state machine in the business moduleuse Comments, Menu, or Master Data as a generic business database
Is this a synchronous decision or state propagation?use a narrow query port for immediate decisions and a versioned event for changed stateread another module’s tables or inject its handler
What happens when the default fails?security fails closed; non-critical experience degrades explicitlya Null adapter returns success and creates false delivery
Does it cross a network boundary?use an anti-corruption layer, stable errors, timeout, idempotency, and observable retryleak SDK DTOs, exceptions, or secrets into Application

Failure boundaries

  • Menu, Guidance, and Comments consume authorization decisions; they never redefine resource access.
  • A Numbering failure must not persist an aggregate with a plausible empty number.
  • Callers distinguish “unknown code” from a Master Data service failure.
  • GDPR deletion is cross-domain orchestration, not a cross-database cascade; every owner returns auditable evidence.
  • AI and connector calls retain business idempotency and replay evidence outside the network client.
  • Ops Extension records failure facts but cannot become a second state machine for CAP, jobs, or webhooks.

Source and catalog checks

Terminal window
# Supporting and extension capabilities have directories; shared projects are not domains.
find src/Platform -mindepth 1 -maxdepth 1 -type d | sort
# Run architecture tests in the source repo and source mapping in the handbook repo.
dotnet test tests/BitzOrcas.Architecture.Tests/BitzOrcas.Architecture.Tests.csproj --filter FullyQualifiedName~Module
npm run verify:module-source

Release gates

  1. The host registers the module and production adapter; a Null/Unavailable default cannot create a false success.
  2. Permissions, features, configuration, seeds, and health checks have repeatable evidence.
  3. Persisted data has explicit tenant, soft-delete, audit, concurrency, and retention semantics.
  4. Connectors cover timeout, cancellation, idempotency, bounded retry, rate limiting, secrets, and log redaction.
  5. Business and supporting modules communicate only through Contracts, narrow ports, or versioned events.
  6. Unit, integration, contract, and end-to-end tests cover success and failure paths.

Change-impact review

  • Classify a new shared code as Master Data, a module-private enum, or configuration before creating a global dictionary.
  • A new resource attachment defines resource type, stable identifier, tenant source, owner lookup, and deletion callback together.
  • A connector replacement keeps Application contracts, stable errors, and idempotency semantics unchanged and proves vendor differences with recorded contracts.
  • Menu or guidance visibility is never the only business-feature switch; runtime feature and authorization decisions execute independently.
  • Treat model output as untrusted input; validate, authorize, and obtain required human confirmation before changing a business fact.
  • A retention change covers business rows, attachments, search indexes, cache, audit, exports, and restored backup copies.

The acceptance record also names each default adapter, production owner, configuration and secret source, health check, capacity budget, retention rule, last failure drill, rollback path, and accountable operator. Missing evidence means “code available,” not “commercial GA.”

Return to the 36-module catalog, then use the add-module guide and module dependency diagram when introducing a capability.

100%

Scroll or use controls to zoom · drag when enlarged · double-click for 100% / 200%