Files
railiance-fabric/docs/canon-alignment-review.md

8.5 KiB

Canon Alignment Review For RAIL-FAB-WP-0016

Date: 2026-05-23

Review Packet

This review follows the InfoTechCanon consumer alignment workflow for railiance-fabric.

Reviewed Fabric sources:

  • INTENT.md, SCOPE.md, and README.md
  • railiance_fabric/graph.py, scanner.py, registry.py, and graph_explorer.py
  • schemas/discovery-snapshot.schema.yaml and schemas/state-hub-export.schema.yaml
  • workplans RAIL-FAB-WP-0010 through RAIL-FAB-WP-0016

Reviewed canon sources:

  • infospace/agent/review-kit/review-kit.yaml
  • infospace/agent/review-kit/review-workflow.yaml
  • infospace/evaluations/railiance-fabric/conformance-pack.yaml
  • infospace/evaluations/railiance-fabric/entity-edge-capture-criteria.yaml
  • infospace/evaluations/railiance-fabric/mapping-expectations.yaml
  • infospace/evaluations/railiance-fabric/visualization-examples.yaml

The workplan's review-kit/alignment reference is the canon artifact id; the physical files are under infospace/agent/review-kit/.

Repository Context

Producer intent: Railiance Fabric owns repo-authored graph declarations, scanner output, registry projection, validation, query tooling, and State Hub export contracts for the Railiance ecosystem graph.

Current scope: source-controlled declarations model services, capabilities, interfaces, dependencies, and binding assertions. Deterministic scanning adds candidate repositories, libraries, manifests, runtime endpoints, domains, ports, and source evidence. The graph explorer adds visual projection edges and inferred runtime views for usability.

Consumer purposes:

  • make cross-repo dependencies reviewable,
  • make provider/consumer and blast-radius queries reliable,
  • provide State Hub with a read model rather than an authoring surface,
  • support reingest after a canon-aligned model reset,
  • prevent visualization metadata from becoming graph truth.

Selected Canon Surfaces

Surface Why selected
model/landscape Services, software systems, runtime resources, environments, ownership, and dependency claims.
model/devsecops Source repositories, packages, lockfiles, pipelines, artifacts, deployments, and attestations.
model/network Endpoints, ports, DNS, routes, reachability, and future flow nodes.
model/data Datastore and reads/writes relationships are expected gaps in current Fabric capture.
model/observability Evidence, telemetry signals, scanner provenance, and validation support.
model/governance Policies, reviews, decisions, exceptions, and reset guardrails.
model/security Controls and findings that should not be flattened into generic dependency edges.
model/task Review and remediation work created from graph gaps.
model/purpose-demand-extension Consumer purpose, scope pressure, and canon evolution feedback.
standard/tagging Non-relationship classification without using display edges as semantics.

Target Node Taxonomy

Canon category Current Fabric source Fit Target action
source-repository Repository candidates and registered repos direct Keep as source evidence for repo-local declarations and scans.
service ServiceDeclaration direct Keep as logical/deployable service boundary.
software-system CapabilityDeclaration, Library, ExternalLibrary partial Keep as transitional mapping; later split capability semantics from system/component boundaries.
endpoint InterfaceDeclaration, ApplicationEndpoint, NetworkPort, DomainName partial/direct Prefer explicit endpoint nodes for network reachability; preserve interface contract attributes.
deployment DeploymentService, ScoreWorkload, ContainerBuild partial/direct Add deployment nodes for actual release/deploy evidence before destructive reset.
runtime-resource RuntimeService, Server, Kubernetes* candidates partial/direct Capture workload, service DNS, namespace, VM/server, and cluster objects as runtime reality.
datastore none first-class gap Add explicit datastore extraction from declarations, manifests, and config before reingest acceptance.
flow route/resolve/port edges only gap Add first-class Flow nodes when observed traffic or declared communication needs protocol/evidence context.
policy none first-class gap Add policy nodes for governing declarations, reset gates, and validation controls.
control none first-class gap Add control nodes only when preventive/detective/corrective controls have evidence.
evidence BindingAssertion, Lockfile, ServiceConfig, contracts, source anchors partial Make evidence explicit instead of hiding it only in attributes.
task workplans and review gaps gap Capture review/remediation tasks after State Hub readiness work is agreed.
consumer-purpose interface card and purpose-fit review gap Keep in docs now; model as graph nodes only if State Hub needs purpose-driven filtering.
telemetry-signal none first-class gap Add metrics/logs/alerts/dashboards as observed signals when connectors exist.

Target Edge Taxonomy

Current Fabric edge Canon relationship Fit Notes
exposes, exposes_port, listens_on exposes direct/partial Good first canonical family for service/endpoint reachability.
consumes, depends_on_library, binds:*, uses_interface depends_on partial Preserve helper nodes until a reingest can project direct service relationships safely.
provides implements partial Service-to-capability is a Fabric helper relation; needs stronger canon treatment or collapse.
available_via, names_endpoint exposes partial Useful transitional mappings from capability/interface/domain to endpoint.
defines_deployment, builds_container, declares_package built_from partial Direction and artifact semantics need cleanup before being canonical claims.
defines_runtime_object, defines_workload, runs_on, deployed_as deploys partial Current scanner/UI edges mix source definitions and deployment reality.
routes_to_port, routes_to_service, resolves_to flows_to partial These are reachability hints, not logical dependencies.
uses_lockfile, uses_config, documents_interface, cataloged_as evidenced_by partial Evidence should become first-class where it supports a specific claim.
declares, owns_deployment, canon display examples display-only direct These are view/cluster edges and must not be conformance claims.

Mapping Findings

Direct mappings are strong for repositories, services, runtime resources, application endpoints, network ports, and explicit exposes relationships.

Partial mappings are expected for capability, interface, dependency, binding, package, manifest, and route concepts. They should keep legacy names during the transition but carry canon_category, canonical_type, mapping_fit, and evidence_state metadata.

Conflicts: network flow must not be treated as logical dependency, and graph-explorer layout edges must not be treated as canonical ownership, dependency, reachability, policy, or evidence.

Gaps: datastores, flows, policy, control, telemetry signals, tasks, and consumer-purpose nodes are not first-class scanner outputs yet. These should be implemented as explicit gaps or candidate mappings, not forced into nearby legacy Fabric semantics.

Execution Direction

The first implementation slice adds canon metadata beside existing node and edge names. That keeps registry and graph explorer behavior stable while making the renewed model inspectable and testable.

The destructive reset phase remains blocked until the following exist:

  • export and archive command for current registry graph data,
  • reset command that requires an explicit operator flag,
  • rollback note that explains restore limits,
  • validation that the new scanner/projection can reingest registered repos,
  • before/after counts and sample graph review.

No destructive reset was executed during this T01/T02 start.

Canon Feedback

  • Capability and dependency helper nodes are useful Fabric authoring concepts but do not map cleanly to canonical graph entity categories.
  • Edge direction needs explicit treatment for source repo to package/deployment evidence, because canon built_from points from deployment/artifact context back to source.
  • Evidence state should remain independent from review state: accepted inferred claims and candidate declared claims are different situations.