AsiBackbone 6.0 API Boundary
AsiBackbone Learning teaches architecture with two different kinds of code:
- Learning-owned teaching models are small, framework-neutral types compiled from this repository. They make an architectural boundary easy to observe, but they are not package API signatures.
- AsiBackbone 6.0 API examples preserve the finalized public names and namespaces from the immutable implementation repository tag
v6.0.0.
Keep that distinction visible when copying an example. A local teaching type named for a concept may be intentionally smaller than the similarly named framework type.
Historical API status: This page records the Learning 1.0 / AsiBackbone 6.0 boundary. For current package syntax, use the AsiBackbone 7.0 API Boundary. Follow the pinned implementation source or the 5.x to 6.0 migration guide when maintaining a 6.0 integration.
Executable Sample Package Policy
The projects under samples/ are executable Learning companions, not package-integration samples. They currently contain no PackageReference to an AsiBackbone.* package. Their local records, policies, evaluators, and gateways are teaching models owned by this repository.
That is deliberate:
- the samples remain runnable while the 6.0 package line is prepared;
- architectural invariants can be studied without adopting a framework;
- local types do not claim to reproduce every constructor, member, namespace, persistence seam, or security control in the implementation.
If a future sample adds an AsiBackbone.* package reference, it must pin a released 6.x version through the sample package-management files, update the lock file, compile against that package, and identify itself as a package-integration sample.
Finalized Core Names
The complete review covers 232 public type entries across ten managed packages. The authoritative inventory is the 6.0 public API naming convention.
The names most often used by Learning material are:
| Purpose | AsiBackbone 6.0 public type |
|---|---|
| Evaluation context contract | AsiBackbone.Core.Constraints.IGovernanceEvaluationContext |
| Default context | AsiBackbone.Core.Constraints.GovernanceEvaluationContext |
| Constraint | AsiBackbone.Core.Constraints.IGovernanceConstraint<TContext> |
| Policy evaluator | AsiBackbone.Core.Evaluation.IGovernancePolicyEvaluator<TContext> |
| Default evaluator | AsiBackbone.Core.Evaluation.DefaultGovernancePolicyEvaluator<TContext> |
| Evaluator builder | AsiBackbone.Core.Evaluation.GovernancePolicyEvaluatorBuilder<TContext> |
| Evaluator options | AsiBackbone.Core.Evaluation.GovernancePolicyOptions |
| Decision policy | AsiBackbone.Core.Evaluation.IGovernanceDecisionPolicy<TContext> |
| Decision | AsiBackbone.Core.Decisions.GovernanceDecision |
| Decision receipt | AsiBackbone.Core.Audit.DecisionReceipt |
| Receipt sink | AsiBackbone.Core.Audit.IDecisionReceiptSink |
| Durable audit ledger | AsiBackbone.Core.Audit.IGovernanceAuditLedgerStore |
| Actor context | AsiBackbone.Core.Actors.GovernanceActorContext |
| ASP.NET Core endpoint service | AsiBackbone.AspNetCore.Endpoints.IEndpointGovernanceService |
| ASP.NET Core policy marker attribute | AsiBackbone.AspNetCore.Endpoints.GovernancePolicyAttribute |
| Acknowledgment challenge service | AsiBackbone.AspNetCore.Handshakes.IAcknowledgmentChallengeService |
These are implementation types. A Learning snippet that defines its own decision, receipt, context, or acknowledgment record is a teaching model unless the section explicitly says otherwise.
Construct an Evaluator
The five partial evaluator constructors retained during 5.x do not exist in 6.0. Use the builder or the full-dependency constructor.
AsiBackbone 6.0 API:
using AsiBackbone.Core.Constraints;
using AsiBackbone.Core.Evaluation;
IGovernancePolicyEvaluator<GovernanceEvaluationContext> evaluator =
DefaultGovernancePolicyEvaluator
.CreateBuilder<GovernanceEvaluationContext>()
.AddConstraints(constraints)
.AddThreatModelContributors(threatModelContributors)
.WithDecisionPolicy(decisionPolicy)
.WithOptions(options)
.WithLogger(logger)
.Build();
The supported direct constructor accepts the complete dependency set:
AsiBackbone 6.0 API:
var evaluator = new DefaultGovernancePolicyEvaluator<MyPolicyContext>(
constraints,
threatModelContributors: null,
decisionPolicy: null,
options: null,
logger: null);
For dependency injection, prefer a factory that resolves the host's configured constraints, contributors, decision policy, IOptions<GovernancePolicyOptions>.Value, and logger before calling the builder. Registering only the concrete evaluator type requires the container to resolve all five constructor dependencies.
Inspect the exact implementation in DefaultGovernancePolicyEvaluator, its CreateBuilder factory, and GovernancePolicyEvaluatorBuilder.
Mark Endpoint Policy Metadata
The 5.x RequireGovernancePolicy route-builder methods were removed. Use MarkGovernancePolicy.
AsiBackbone 6.0 API:
using AsiBackbone.AspNetCore.Endpoints;
app.MapPost("/operations", HandleOperation)
.MarkGovernancePolicy<ConsequentialOperationPolicy>();
app.MapPost("/exports", HandleExport)
.MarkGovernancePolicy(typeof(ExportPolicyMarker));
The marker records policy metadata. It does not, by itself, resolve a policy, select constraints, or enforce execution. See the exact EndpointGovernanceRouteBuilderExtensions behavior.
For attribute-based endpoint metadata, the 5.x RequireGovernancePolicyAttribute type was renamed to GovernancePolicyAttribute in 6.0.
Removed Compatibility Surface
The upstream obsolete-member inventory found exactly seven public members whose compatibility window ended at 6.0:
| Removed after 5.x | Supported 6.0 path |
|---|---|
DefaultAsiBackbonePolicyEvaluator<TContext>(constraints, decisionPolicy = null) |
Builder with AddConstraints and WithDecisionPolicy |
DefaultAsiBackbonePolicyEvaluator<TContext>(constraints, decisionPolicy, options) |
Builder plus WithOptions |
DefaultAsiBackbonePolicyEvaluator<TContext>(constraints, decisionPolicy, options, logger) |
Builder plus WithOptions and WithLogger |
DefaultAsiBackbonePolicyEvaluator<TContext>(constraints, threatModelContributors, decisionPolicy = null) |
Builder plus AddThreatModelContributors and WithDecisionPolicy |
DefaultAsiBackbonePolicyEvaluator<TContext>(constraints, threatModelContributors, decisionPolicy, options) |
Builder plus contributors, policy, and options |
RequireGovernancePolicy<TPolicy>(RouteHandlerBuilder) |
MarkGovernancePolicy<TPolicy>(), or MarkGovernancePolicy(typeof(TPolicy)) for a plain marker |
RequireGovernancePolicy<TBuilder>(TBuilder, Type) |
MarkGovernancePolicy(builder, policyType) |
The 5.x RequireGovernancePolicyAttribute type was renamed to GovernancePolicyAttribute in 6.0. That is a public type rename, not one of the seven obsolete-member removals above. Historical 4.x and 5.x migration material may retain old names when it is clearly presented as history; current examples must not present old names or removed members as 6.0 APIs.
Decision Receipt Is Not Execution Proof
DecisionReceipt records the policy decision outcome and reasons. Later acknowledgment, capability, gateway, emission, and execution lifecycle evidence can correlate with it, but the decision receipt does not prove that the host executed the protected operation.
Learning samples may use smaller local receipt or lifecycle records to make that distinction visible. Compare them with the exact 6.0 DecisionReceipt and DecisionReceiptLifecycleEvent source before maintaining a 6.0 package integration.
Review Checklist
Before publishing an API-facing Learning change:
- label teaching code as illustrative or Learning-owned;
- label exact framework syntax as AsiBackbone 6.0 API;
- use finalized 6.0 names and namespaces;
- use
GovernancePolicyAttribute, not the 5.xRequireGovernancePolicyAttribute, for attribute-based endpoint metadata; - do not call removed evaluator constructors or route-builder methods;
- link historical 6.0 implementation source to the immutable
v6.0.0tag, nevermain; - pin any future
AsiBackbone.*sample package reference to a released 6.x version and commit its lock-file update; - preserve old names only in clearly historical migration or release material.
The repository's API-reference validator enforces the machine-checkable parts of this boundary during documentation validation.