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:
| Asset | Identity and relationship |
|---|---|
| Domain | A globally unique hostname. May belong to several scopes. |
| IP address | A globally unique IPv4 or IPv6 value. May belong to several scopes. |
| Port | A port value on an IP address; may also record an observed HTTP scheme. |
| HTTP path | A path observed on a domain and literal port, with optional status, length, and source tool. |
| Technology | A named fingerprint with categories, linked to a path or port observation. |
| Mobile app | A package URL and mobile type, associated with scopes. |
| Wildcard | A normalized wildcard plus its original source value, associated with scopes. |
| CIDR | An IPv4 or IPv6 network range, associated with scopes. |
Relationships
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.