# `MingaEditor.Extension.SourceFinalizer`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/extension/source_finalizer.ex#L1)

Finalizes Editor-owned work and presentation for one contribution source.

Extension cleanup requests this workflow asynchronously and waits for an
explicit Editor acknowledgement outside the lifecycle authority mailbox. The
generation-owned effect scheduler drains before source presentation is removed.

# `result`

```elixir
@type result() :: :ok | {:error, term()}
```

# `source`

```elixir
@type source() :: Minga.Extension.ContributionCleanup.contribution_source()
```

# `unload_context`

```elixir
@type unload_context() :: %{
  :token =&gt; Minga.Extension.CodeLease.unload_token(),
  optional(:callback_registry) =&gt; Minga.Extension.CallbackRegistry.registry(),
  optional(:callback_admission) =&gt; GenServer.server()
}
```

# `ensure_cleanup_registered`

```elixir
@spec ensure_cleanup_registered() :: :ok
```

Registers the Editor finalizer with source-owned contribution cleanup.

# `finalize`

```elixir
@spec finalize(MingaEditor.State.t(), source()) :: {result(), MingaEditor.State.t()}
```

Cancels source work before removing its live picker presentation.

# `finalize_unload`

```elixir
@spec finalize_unload(
  MingaEditor.State.t(),
  Minga.Extension.CallbackInvoker.source(),
  unload_context(),
  {pid(), reference()}
) :: {:ok, MingaEditor.State.t()} | {:error, term(), MingaEditor.State.t()}
```

Schedules source-filtered unload callbacks and defers the cleanup acknowledgement.

# `unload_source`

```elixir
@spec unload_source(Minga.Extension.CallbackInvoker.source(), unload_context()) ::
  result()
```

Runs token-scoped unload callbacks against the production Editor, if it is running.

# `unregister_source`

```elixir
@spec unregister_source(source()) :: result()
```

Finalizes a source against the production Editor, if it is running.

# `unregister_source`

```elixir
@spec unregister_source(source(), GenServer.server() | nil) :: result()
```

Finalizes a source against an explicit Editor server.

---

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