# `Chronicle.Discovery.Artifact`
[🔗](https://github.com/Cratis/Chronicle.Elixir/blob/main/lib/chronicle/discovery/artifact.ex#L4)

One artifact found by `Chronicle.Discovery.Report.build/1`.

Represents an artifact the client knows about, not a registration verdict or a kernel-side
identity check — see `Chronicle.Discovery.DriftDetector` for that.

# `id_source`

```elixir
@type id_source() :: :explicit | :module_name | :unknown
```

Whether an artifact's identifier was given explicitly, defaults to its declaring module's
name (a rename hazard — see `Chronicle.Discovery.DefaultedIdWarning`), or isn't tracked for
this kind of artifact (`:unknown`).

# `kind`

```elixir
@type kind() ::
  :event_type
  | :event_source
  | :reactor
  | :reducer
  | :projection
  | :read_model
  | :constraint
  | :webhook
  | :event_store_subscription
  | :seeder
  | :migration
  | :global_handler
  | :capture
```

# `t`

```elixir
@type t() :: %Chronicle.Discovery.Artifact{
  generation: pos_integer() | nil,
  id: String.t(),
  id_source: id_source(),
  kind: kind(),
  module: module()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
