## Summary

Removes all usage of the two forked dependencies (`gurafi/erased-serde` and `gurafi/serde-value`). The workspace now builds against published crates only:

- `erased-serde = "0.4.11"` (crates.io)
- `serde-value` removed entirely

No third-party source was vendored.

## Design

### gql owns the map/sequence layer

`gql::serializer` now defines three object-safe traits:

- `SerializerImpl` — the scalar `serialize_*` methods, `serialize_some` / `serialize_serde` taking `&dyn erased_serde::Serialize`, and `serialize_map` / `serialize_seq` returning `&mut dyn MapImpl` / `&mut dyn SeqImpl`.
- `MapImpl` — key/value/end plus default scalar writers that delegate to `serialize_value` (used by the `Serializer::MapValue` state).
- `SeqImpl` — element/end.

They are implemented by `SerdeAdapter<S: serde::Serializer>`, a state machine holding `Option<S>` + `Option<S::SerializeMap>` / `Option<S::SerializeSeq>` (same pattern shiri's `SerdeInterop` already used). `serialize_map` takes the serde serializer out, calls `serde::Serializer::serialize_map`, stores the map and returns `Ok(self)` coerced to `&mut dyn MapImpl`; the map/seq impls call serde's `SerializeMap` / `SerializeSeq` methods directly.

Generic values crossing a `dyn` boundary are erased with the public `erased_serde::Serialize` trait. Values crossing back into serde (`serialize_some` / `serialize_key` / `serialize_value`) go through a tiny local `ErasedValue` wrapper whose `serde::Serialize` impl calls the public `erased_serde::serialize` helper. There are no references left to the removed `erased_serde::SerializeMap`, `SerializeSeq`, `SerializeStruct*` or `SerializeTuple*` traits.

`Serializer<'a>` and its public method set are unchanged in behaviour; the internals are now `SerializeImpl::Regular(&mut dyn SerializerImpl)` / `MapValue(&mut dyn MapImpl)` and the existing `dispatch!` pattern is retained. `OwnedSerializer<S>` owns the `SerdeAdapter<S>`, and `AnyOwnedSerializer` plus its sealing glue are gone. `suku::Server::execute` is now generic over `S: serde::Serializer`, so `examples/axum` and `hidoki` construct `OwnedSerializer` exactly as before.

### serde-value removal

- `gql`: removed the `SerializeMapImpl::SerdeValue` variant and the `serde_value::Serializer` construction. Every method on that variant was `todo!()`/commented out, so behaviour is unchanged. The nested-map-inside-map-value path remains `todo!()` for parity, as before.
- `shiri`: removed the dependency. Placeholder associated types are now `type Ok = ()` and `type Serialize*/.. = serde::ser::Impossible<(), Error>` (serde provides `Impossible` for exactly this case). `SerdeInterop::serialize_str`'s `MapValue` arm calls `s.serialize_value(value)` directly, and `SerdeInterop2::serialize_str` returns `Ok(())`.

## Performance

The hot path still streams: a map/sequence is written directly into the format's serde serializer as entries/elements arrive. There is no per-value buffering, no `Box`, and no extra allocation compared with the fork (the only new dynamic dispatch is the existing `dyn` boundary). `serde-value`'s in-memory collection path is gone; it was only reachable through the dead `todo!()` code.

## DX

- `OwnedSerializer::new(any_serde_serializer)` still works unchanged: callers pass a `serde::Serializer` (`&mut serde_json::Serializer` in the examples) and get a `Serializer<'_>` back.
- The resolver API (`Serializer` methods, `SerializeMap` / `SerializeSeq`) is unchanged.
- `hidoki` and both axum examples needed no source changes; only `suku::Server::execute`'s generic bound changed.

## Note on shiri

shiri's public `serde::Serializer` impl for `SerdeInterop` changes its `Ok` type from `serde_value::Value` to `()`. shiri is `0.0.0`/WIP and every method except `serialize_str` is still `todo!()`, so this has no working-code impact.

## Tests

- Added `crates/gql/tests/owned_serializer.rs` (with `serde_json` as a dev-dependency). It builds a serializer from `OwnedSerializer::new(&mut serde_json::Serializer::new(&mut buf))`, writes a map with scalar entries plus a nested sequence value, writes a top-level sequence through `serialize_seq`/`serialize_element`, and writes through the `MapValue` state, asserting exact JSON.
- `cargo check --workspace --all-targets --locked` passes.
- `cargo test --workspace --locked` passes.
- `cargo tree -p gql -p shiri` resolves `erased-serde v0.4.11` from crates.io and has no `serde-value` or git entries.

The only remaining `git =` entries in the root `Cargo.toml` are the pre-existing `[patch.crates-io]` pins for `async-graphql` / `async-graphql-axum` (Axum 0.7 support), which are unrelated to these forks and were left untouched.

## Follow-up

`gurafi/erased-serde` and `gurafi/serde-value` are no longer referenced by this repo and can be archived.

<sub>Generated on _MrBeast_ using _opencode-go/deepseek-v4.1-flash_ in _ses_e3fa1c4a2ffeXAMurvsFnfhkRL_</sub>
