# `Descripex.Manifest`
[🔗](https://github.com/ZenHive/descripex/blob/v0.12.0/lib/descripex/manifest.ex#L1)

Introspects modules to build a JSON-serializable API manifest.

Combines `Code.fetch_docs/1` and type spec introspection to assemble
a complete description of every public function — docs, hints, specs, and
signatures — suitable for agent discovery, validators, and API generation.

## Usage

    manifest = Descripex.Manifest.build([MyLib.Funding, MyLib.Risk])
    manifest.modules |> hd() |> Map.get(:functions) |> hd()
    # => %{name: "annualize", arity: 2, spec: "annualize(...) :: float()", ...}

## API Functions
| Function | Arity | Description | Param Kinds |
| --- | --- | --- | --- |
| `build` | 1 | Build a complete API manifest from the given modules. | `modules: value` |

# `build`

```elixir
@spec build([module()]) :: map()
```

Build a complete API manifest from the given modules.

## Parameters

  * `modules` - List of module atoms to introspect (value)

## Returns

JSON-serializable manifest with version, generated_at, and modules keys (`map`)

### Example

```elixir
%{version: "1.0", modules: [], generated_at: "2025-01-01T00:00:00Z"}
```

```elixir
# descripex:contract
%{
  params: %{
    modules: %{description: "List of module atoms to introspect", kind: :value}
  },
  returns: %{
    type: :map,
    description: "JSON-serializable manifest with version, generated_at, and modules keys"
  },
  returns_example: %{
    version: "1.0",
    modules: [],
    generated_at: "2025-01-01T00:00:00Z"
  }
}
```

---

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