# XCUT — Cross-cutting Known Issues

Canonical entries for known issues that span two or more topics. See `README.md` in this folder for the cross-cutting convention.

For planned cross-cutting work, see `XCUT_TODO.md`.

---

## ACCORE-XCUT-I-X8Q1: JSON-in-Binary request parameters

**Status:** Closed (2026-04-26, landed in commits `cdd54d3` 2026-04-05 + `3b70070` 2026-04-06)
**Affects:** BINARY serializer (wire format) ↔ SIGNALR transport (envelope) ↔ all consuming projects (caller code)

### Description (historical)

Client→server request parameters previously travelled as JSON inside a Binary envelope:
- `SignalPostJsonDataMessage<T>` was the original envelope
- Response path already used pure Binary (no JSON)
- Asymmetry: request was JSON-in-Binary, response was Binary

### Why it spanned multiple topics

- **BINARY side**: the serializer had to special-case JSON payloads inside a Binary stream; ideal Binary-only flow was broken on the request side.
- **SIGNALR side**: the transport carried the JSON-wrapped Binary payload; `SignalPostJsonDataMessage<T>` was a SignalR-level concept.
- **Consumer side**: every caller sent requests via this asymmetric path; changing the wire format required coordinated client + server + all-consuming-project updates.

### Resolution

- **What:** Length-prefixed, per-parameter binary format introduced via `SignalRSerializationHelper.SerializeParametersToBinary` / `DeserializeParametersFromBinary`, then unified into `SignalParams` carrying packed parameters as a single `byte[]` with `SetParameterValues` / `GetParameterValues` for type-safe pack/unpack.
- **Where:** `AyCode.Services/SignalRs/` — `AcSignalRClientBase.cs`, `AcWebSignalRHubBase.cs`, `ISignalParams.cs`; legacy types in `IAcSignalRHubClient.cs` marked `[Obsolete]`.
- **Wire impact:** No JSON round-trip on the wire for request params. **Breaking change** vs. previous JSON-in-Binary clients/servers — version bump required.
- **Equivalent, not literal:** `SignalParams` (object[]-style packed payload) replaced `SignalPostJsonDataMessage<T>` instead of introducing a parallel `SignalPostBinaryDataMessage<T>`. Single unified envelope, fewer hot-path indirections.
- **Coordinated change:** client + server + consumer projects updated together in the two commits (BREAKING). All five steps from the original "Do NOT attempt as a side-effect" list completed.
- **Legacy cleanup outstanding (not blocking closure):** `[Obsolete]` wrappers can be deleted once external consumer projects stop referencing them — tracked in `../../../AyCode.Services/docs/SIGNALR/SIGNALR_TODO.md#accore-sig-t-s3n8` (separate from this canonical issue).

### Cross-references

- **BINARY_ISSUES.md** (`../BINARY/BINARY_ISSUES.md#accore-xcut-i-x8q1`): cross-ref pointing here
- **SIGNALR_ISSUES.md** (`../../../AyCode.Services/docs/SIGNALR/SIGNALR_ISSUES.md#accore-xcut-i-x8q1`): cross-ref pointing here
- **BINARY_TODO.md#accore-bin-t-s8p4**: migration plan (also marked Closed)
