Table of Contents

1.0.0 Quickstart

This quickstart shows the minimum supported setup for the initial stable 1.0.0 release line.

In this software project, ASI means Accountable Systems Infrastructure. AsiBackbone provides governance-oriented software primitives for policy-shaped, auditable, acknowledgment-aware, and capability-bounded decision flow. It is not an intelligence engine and does not host, train, run, or orchestrate AI models.

Stable 1.0.0 scope

The initial stable path focuses on public package consumption for the implemented package family:

AsiBackbone.Core
AsiBackbone.Storage.InMemory
AsiBackbone.EntityFrameworkCore
AsiBackbone.AspNetCore

The minimum supported setup is AsiBackbone.Core. Add integration packages only when the host application needs them.

Need Package
Framework-neutral decisions, constraints, audit residue, handshakes, and capability-token primitives AsiBackbone.Core
Non-durable local validation or sample audit storage AsiBackbone.Storage.InMemory
Host-owned EF Core audit ledger persistence AsiBackbone.EntityFrameworkCore
ASP.NET Core request correlation, actor context, result mapping, and acknowledgment challenge helpers AsiBackbone.AspNetCore

Install the minimum package

For a console app, worker, library, or existing service that only needs framework-neutral governance primitives:

dotnet add package AsiBackbone.Core

For local validation with non-durable in-memory audit storage:

dotnet add package AsiBackbone.Storage.InMemory

For ASP.NET Core host integration:

dotnet add package AsiBackbone.AspNetCore

For host-owned EF Core persistence:

dotnet add package AsiBackbone.EntityFrameworkCore

Basic public API example

The following example uses only public Core APIs. It creates a host-defined constraint, evaluates a request, and produces audit residue from the decision.

using AsiBackbone.Core.Actors;
using AsiBackbone.Core.Audit;
using AsiBackbone.Core.Constraints;
using AsiBackbone.Core.Decisions;
using AsiBackbone.Core.Evaluation;

var evaluator = new DefaultAsiBackbonePolicyEvaluator<AsiBackboneConstraintEvaluationContext>(
    [new RegionRequiredConstraint()]);

var context = new AsiBackboneConstraintEvaluationContext(
    correlationId: Guid.NewGuid().ToString("N"),
    policyVersion: "policy-v1",
    policyHash: "policy-hash-v1",
    metadata: new Dictionary<string, string>(StringComparer.Ordinal)
    {
        ["region"] = "US-LA",
        ["risk"] = "routine"
    });

GovernanceDecision decision = await evaluator.EvaluateAsync(context);

AuditResidue residue = AuditResidue.FromDecision(
    AsiBackboneActorContext.Human("user-123", "Example User"),
    "example.document.approve",
    decision,
    metadata: context.Metadata);

Console.WriteLine($"Decision: {decision.Outcome}");
Console.WriteLine($"Can proceed: {decision.CanProceed}");
Console.WriteLine($"Audit event: {residue.EventId}");

internal sealed class RegionRequiredConstraint : IAsiBackboneConstraint<AsiBackboneConstraintEvaluationContext>
{
    public string Name => "region.required";

    public ValueTask<ConstraintEvaluationResult> EvaluateAsync(
        AsiBackboneConstraintEvaluationContext context,
        CancellationToken cancellationToken = default)
    {
        cancellationToken.ThrowIfCancellationRequested();

        bool hasRegion = context.Metadata.TryGetValue("region", out string? region)
            && !string.IsNullOrWhiteSpace(region);

        return ValueTask.FromResult(hasRegion
            ? ConstraintEvaluationResult.Allow()
            : ConstraintEvaluationResult.Deny(
                "region.missing",
                "A region is required before this operation can proceed."));
    }
}

This example does not execute the requested operation. It only evaluates the request and creates audit residue. The consuming application remains responsible for deciding whether and how to execute the underlying operation.

Optional in-memory audit storage

For local validation, tests, or sample hosts, write audit residue to InMemoryAuditLedger:

using AsiBackbone.Core.Audit;
using AsiBackbone.Storage.InMemory.Audit;

var ledger = new InMemoryAuditLedger();
IAsiBackboneAuditSink sink = ledger;

await sink.WriteAsync(residue);

IAsiBackboneAuditResidue stored = ledger.Records.Single();
Console.WriteLine(stored.CorrelationId);

InMemoryAuditLedger is non-durable. It is intended for local validation, tests, examples, and simple smoke checks. Production hosts should use a durable host-owned persistence strategy.

Optional ASP.NET Core service registration

For ASP.NET Core hosts, register the thin host adapter package:

using AsiBackbone.AspNetCore.DependencyInjection;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.Services.AddAsiBackboneAspNetCore();

WebApplication app = builder.Build();

The ASP.NET Core package provides integration seams. It does not register authentication, authorization, MVC, Razor Pages, Minimal API endpoints, EF Core, policy evaluators, or operational execution behavior for the host.

Optional EF Core host-owned persistence

For EF Core persistence, the host application owns its DbContext, provider, connection string, migrations, deployment, and schema lifecycle. AsiBackbone contributes model configuration helpers.

using AsiBackbone.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

internal sealed class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        _ = modelBuilder.ApplyAsiBackboneConfigurations();
    }
}

See EF Core Host Ownership and Migrations before using durable persistence in a real host application.

1.0.0 versus later provider work

The 1.0.0 release path is intended to stabilize the public package surface for the implemented governance spine: Core primitives, in-memory validation storage, ASP.NET Core host adapters, and EF Core host-owned persistence.

Later release lines have added several capabilities as stable package surfaces. This 1.0.0 quickstart remains a historical minimum-path guide. For the current 2.0.x package family, see 2.0.0 Release Notes, First 15 Minutes: Standard API Gating, and Progressive Adoption Ladder.

Those later provider packages should not be treated as required for the 1.0.0 quickstart. Later package areas should be considered stable only for the release lines where they completed their own API review, package boundary review, and release documentation.

Next steps