Initial Commit

This commit is contained in:
2026-05-27 23:29:53 +01:00
commit fbc70f96e6
10000 changed files with 1102152 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
# `@suaveplan/bitpacker` — Full Port from Suaveplan (v2.0.0)
**Status:** **SUPERSEDED (2026-05-03)** — fold complete via the modular family; remaining hardening carved to `bitpacker-hardening`.
**Target:** `@suaveplan/bitpacker` 0.0.0 → 2.0.0 (full port, replacing the cut-down genesis version)
**Source:** `/home/ubuntu/web/suaveplan/packages/universal/bitpacker/` (400 source files, v1.2.0)
## Triage outcome (2026-05-03)
This proposal was authored when `@suaveplan/bitpacker` was a 20-file stub. The reality on 2026-05-03 is a 10-package family of ~232 `.ts` files at 100/100/100/100 coverage, delivered through six smaller, archived changes:
| Archived change | What it delivered |
|---|---|
| `2026-04-24-enterprise-bitpacker` | Initial enterprise-grade reshape |
| `2026-05-02-bitpacker-modular-restructure` | Split the monolith into the 10-package family |
| `2026-05-02-bitpacker-stub-completion` | Filled the DeltaManager / NetworkSimulator / CompressedBitPacker / StreamingBitPacker stubs |
| `2026-05-02-bitpacker-canonical-spec` | Canonical `openspec/specs/bitpacker/spec.md` (adaptive `"~"` blob, strategy ordering, safety enforcement) |
| `2026-05-02-bitpacker-crypto-port` | First-pass `bitpacker-crypto` |
| `2026-05-02-bitpacker-crypto-rewrite` | Slimmed to non-overlapping primitives (`SchemaFingerprint`, `HashAlgorithmRegistry`) |
**Of the original 51 tasks:** 28 were already checked when this triage began, and a further 17 were verified done by the modular work. **6 are genuinely outstanding** and carved into `bitpacker-hardening`:
1. Zod schemas for every public type (partial today — only `bitpacker-crypto`, `-delta`, `-schema`)
2. Register Zod with `@suaveplan/schema-registry` (zero usage today)
3. OTel instrumentation across the core (only `bitpacker-crypto` has spans today)
4. `fast-check` property tests (zero, dependency not installed)
5. `mitata` benchmark suite + CI regression gate (zero, dependency not installed)
6. `@suaveplan/feature-flags` integration — decision pending (may be unnecessary)
**Plus one tracked-separately:** 47 source files in the bitpacker family lack a sibling `.md` (mostly `bitpacker` core 30, `bitpacker-validation` 9, `bitpacker-game` 7, `bitpacker-crypto` 1). Tracked as a documentation pass, not blocking.
This change folder is retained for archival traceability. **Do not start work here.** Do new work in `bitpacker-hardening`.
---
> Original proposal text below — preserved for traceability. The "What changes" sections are accurate as historical intent; for current state, see per-package CLAUDE.md entries and the canonical spec at `openspec/specs/bitpacker/spec.md`.
## Why
The genesis `bitpacker` at `packages/primitives/bitpacker` is a cut-down greenfield build (~20 source files) providing only low-level `BitWriter`/`BitReader` and a minimal `defineBitSchema`. It is missing the entire schema-driven packing system that makes suaveplan's bitpacker useful:
- **Six schema-reachable packers** (`enum`, `datetime`, `varint`, `map`, `set`, `bitarray`) — missing entirely.
- **Custom type registry** — `_customType` marker has no wiring.
- **Advanced schema primitives** — no optional fields (`?`), unions (`_union`), tuples (`_tuple`), shared sub-schemas (`$ref`), versioning (`_version`), or conditional presence (`_if`/`_when`).
- **Game state schemas** — no delta encoding, no compression pipeline.
- **Network simulation** — no jitter/latency helpers.
- **Streaming packers** — no chunked/iterative encode/decode.
- **Enterprise quality gaps** — no Zod schemas, no structured errors, no OTel, no benchmarks, no property tests.
This violates the directive: "ensure we don't write basic / cut down versions of the original libraries ever again."
---
## What changes
### Phase 1 — Core schema system port
Replace the genesis bitpacker source with the full suaveplan bitpacker source, preserving genesis additions (zigzag encoding, `peek`/`seek`, alignment helpers) where they don't conflict.
### Phase 2 — Schema flexibility (Tier 1–3)
Port the `bitpacker-schema-flexibility` change on top of the core:
- Tier 1: Register `EnumPacker`, `DateTimePacker`, `VarIntPacker`, `MapPacker`, `SetPacker`, `BitArrayPacker` in `createPackingStrategyManager`.
- Tier 2: Wire `CustomTypeRegistry` + `_customType` into the pack/unpack path.
- Tier 3: Add `?`, `_union`, `_tuple`, `_def`/`$ref`, `_version`, `_if`/`_when`.
### Phase 3 — Enterprise hardening
Port the `enterprise-bitpacker` requirements:
- Zod schemas registered with `@suaveplan/schema-registry`.
- Structured error hierarchy (`BITPACKER.*` codes) via `@suaveplan/error`.
- OTel instrumentation via `@suaveplan/opentelemetry`.
- Injectable `Clock` and `Rng` — no module-scope `Math.random()` / `Date.now()`.
- `AbortSignal` on iterative APIs.
- `fast-check` property tests + `mitata` benchmark suite.
- Explicit named re-exports, expanded `package.json` `exports` map.
- Coverage ≥ 95%, docs ≥ 90%.
### Non-goals
- No runtime code generation, `eval`, or schema → JS compilation.
- No replacement of `BitOperations` / standalone-packer APIs (escape hatch stays).
- No general expression language for conditional predicates.
---
## Impact
### Affected dependents
Run `bunx turbo ls --filter=...@suaveplan/bitpacker` to enumerate.
- `@suaveplan/packer` — imports bitpacker for envelope encoding; must be verified after port
- `@suaveplan/network-*` — imports bitpacker for protocol encoding; must be verified after port
- `@suaveplan/storage-*` — imports bitpacker for payload encoding; must be verified after port
### Breaking changes
The genesis `BitWriter`/`BitReader`/`defineBitSchema` API surface is preserved where possible, but:
- `defineBitSchema` return type will change to match suaveplan's richer `BitSchema` interface.
- Error types change from plain `Error` to `BitpackerError extends SuaveplanError`.
- New runtime deps: `@suaveplan/schema-registry`, `@suaveplan/opentelemetry`, `@suaveplan/feature-flags`.
---
## Migration
For consumers of the genesis cut-down API:
- `BitWriter` / `BitReader` — unchanged signatures, but now live under subpath imports.
- `defineBitSchema` — return type gains `pack`/`unpack` methods and metadata; existing call sites compile without change.
- Error handling — catch `BitpackerError` instead of `Error` for programmatic handling.