Astrixion Docs

Inventory domain model

Understand how Inventory separates engagement boundaries from collected observations.

Inventory separates the engagement boundary from the observations collected inside it. Programs and scopes define that boundary; assets are globally de-duplicated observations associated with it.

Program

A program is Sonar's top-level inventory boundary. It identifies a security program by platform and handle and stores its name, state, policy description, website, bounty metadata, and version.

Operators often call a program a target. “Target” is shorthand, not a separate entity.

Scope

A scope belongs to exactly one program. It carries a name, instructions, a validity flag, and the source rules used to decide whether observations belong to the program.

One program may contain several scopes. A user can therefore refer to:

  • the whole program; or
  • one narrower scope within it.

Invalid scopes remain historical records but do not participate in current resolution or verification work.

Assets

Assets record discovered security surface:

AssetIdentity and relationship
DomainA globally unique hostname. May belong to several scopes.
IP addressA globally unique IPv4 or IPv6 value. May belong to several scopes.
PortA port value on an IP address; may also record an observed HTTP scheme.
HTTP pathA path observed on a domain and literal port, with optional status, length, and source tool.
TechnologyA named fingerprint with categories, linked to a path or port observation.
Mobile appA package URL and mobile type, associated with scopes.
WildcardA normalized wildcard plus its original source value, associated with scopes.
CIDRAn IPv4 or IPv6 network range, associated with scopes.

Relationships

Program ──< Scope

              ├──< DomainScope ──> Domain ──< HttpPath ──< Technology link
              ├──< IpAddressScope ──> IP address ──< Port ──< Technology link
              ├──< MobileScope ──> Mobile app
              ├──< WildcardScope ──> Wildcard
              └──< CidrScope ──> CIDR

Domain ──< DomainIpAddress >── IP address

The asset row is global; scope membership lives in join records. Re-observing the same hostname updates one domain record rather than creating one copy per program. Querying a program follows its scopes through those associations.

Rules and invariants

  • Program and scope records define policy boundaries; external asset synchronization cannot create either one.
  • Asset identity is based on the canonical conflict key for its type.
  • A child observation requires its parent relationship: a port needs its IP, and an HTTP path needs its domain.
  • Discovery and verification preserve distinct provenance even when verification later enriches an asset with status or response length.

See Asset acquisition for how observations enter this model.

On this page