docs: Update JoinIR design map + organize CLAUDE.md (Phase 135 follow-up)
## Changes
### joinir-design-map.md
- Added "Allocator SSOT (Phase 135)" section
- Principle: All ValueId allocation via single allocator (ConditionContext.alloc_value)
- Prohibited: Internal counters in ConditionLoweringBox/ExprLowerer
- Reason: Collisions with JoinIR params (ValueId(1000+)) overwrite header PHI dst
- Detection: --verify catches "Value %N defined multiple times"
- Added "Boundary Injection SSA (Phase 135)" section
- Principle: condition_bindings allow aliases, but injected Copy dst must be unique
- Fail-Fast: Error on different sources to same dst
- Reason: Breaks MIR SSA, causes undefined behavior in VM/LLVM
- Added "Box Implementation Checklist"
- 4-point checklist for Box implementation/changes
- Covers: --verify, smoke tests, allocator usage, boundary injection
### CLAUDE.md
- Organized "重要設計書" section with clearer structure
- Added "JoinIR 設計図" subsection with both documents:
- JoinIR アーキテクチャ概要 (normative SSOT for contracts/invariants)
- JoinIR 設計マップ (navigation SSOT for implementation)
- Grouped related documents: JoinIR, MIR・言語仕様
## Context
Phase 135 revealed that missing "what not to do" (invariants/contracts) in
design docs led to Allocator SSOT violations and ValueId collisions.
This update ensures future Box implementations can follow clear contracts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>