v1.2.1 — review fixes
Review-driven follow-up to 1.2.0. Ten findings addressed — three user-visible bugs, the rest cleanup and UX polish.
User-visible fixes
- CachedSheetsService now supports `readEntities()` — the previous wiring dropped the serializer, breaking typed reads on any cached binding.
- CachedSheetsService now invalidates the cache on writes — `append()` / `update()` / `clear()` / `addSheet()` / `deleteSheet()` drop every key this instance populated, so the next read returns fresh data.
- TraceableSheetsService now records `readEntities` and `readAssocIterable` — both methods were invisible in the profiler before.
Cleanup + UX
- `InMemorySheetsService` accepts an explicit `sheetIds` map for realistic stable-ID lookups in tests.
- `google-sheets:doctor --strict` flag — missing bound sheets are a warning by default, failure under `--strict`.
- `google-sheets:peek --with-header` flag — `--range` no longer auto-strips the first row.
- Cache pool typo (`cache: { pool: missing }`) fails at boot with a bundle-scoped error.
- `captureOrigin` filter narrowed so bundle tests can verify the captured frame.
- `buildColumnMap` memoised per class.
105 tests / 290 assertions, PHPStan max + strict + deprecation clean.
No public API changes. Safe to upgrade from 1.2.0 without any code changes — and recommended if you use the cache feature.
```bash
composer update gulaandrij/google-sheets-bundle:^1.2
```
Full CHANGELOG.