ContextTierService started empty on every CLI invocation, so the LLM
received zero file context during plan execution (bug #1028).
- Add context_tier_hydrator.py: reads files from linked project resources
(via git ls-files or os.walk) and stores them as TieredFragment objects
in the tier service. Respects max file size (256 KB), total budget
(10 MB), binary exclusion, and .git/node_modules/__pycache__ skipping.
- Wire hydration into LLMExecuteActor.execute() via lazy import (avoids
M1 E2E regression from top-level import).
- Inject tier_service, project_repository, resource_registry into
LLMExecuteActor from the DI container in _get_plan_executor().
- Add tier_service property to ExecutePhaseContextAssembler.
- Suppress exc_info traceback rendering in context warnings to prevent
false-positive crash detection in M1 E2E tests.
- Add sandbox file-writing support in plan apply (path traversal guards,
protected directory skipping).
- Add 6 Behave scenarios for context tier hydration.
Closes#1028