#1815 + #1816 — Rules-size warning + storage-patterns reference

Problem

Claude Code auto-loads everything matching .claude/rules/*.md into every <system-reminder>. At 40,000 chars CC emits a yellow runtime warning — by then context burn is already material. The hq-ext platform recent-decisions.md ballooned to 53.8k chars (1.3× cliff) before anyone noticed.

Two-part fix

#1815 — lifecycle/rules-size-check (this PR)

SessionStart async hook scans .claude/rules/ + .claude/plugins/ and emits operator-facing stderr warnings:

[orchestkit] WARN: .claude/rules/foo.md is 36.2 KiB (37,123 chars) — auto-loaded into every prompt. CC warns at 40k. Consider splitting via index-per-entry pattern (see src/skills/CONTRIBUTING-SKILLS.md#storage-patterns or skill-evolution/references/storage-patterns.md).

Thresholds:

#1816 — storage-patterns reference

New doc at src/skills/skill-evolution/references/storage-patterns.md with trade-off table, decision matrix, migration script. Pointer added to src/skills/CONTRIBUTING-SKILLS.md so future skill authors hit it during the authoring flow.

Two patterns documented

PatternBest forFailure mode
Rolling logbookBounded growth, < 30k chars total, chronological narrativeCrosses 40k cliff silently
Index-per-entryUnbounded growth, lookups by-key or by-dateTwo-step writes, more PR diff noise

Default to index-per-entry if unsure — bounded by construction.

Tests

Hook count

Total: 196 → 197 (one new lifecycle/ hook, SessionStart async).

Closes #1815. Closes #1816.