7d59d3cf97
Tier 2 marked Phase 2 (VC8) as 'spec mismatch' because the spec says 'add ProjectContext with all fields observed in flat_config' but doesn't enumerate which fields. Tier 2 needs the spec to be specific before it can resume. This correction specifies the exact schema based on the actual code: flat_config returns a NESTED dict with 6 top-level fields: - project (Meta: name, summary_only, execution_mode) - output (Output: namespace, output_dir) - files (Files: base_dir, paths) - screenshots (Screenshots: base_dir, paths) - context_presets (opaque dict pass-through) - discussion (Discussion: roles, history) The 11 sub-fields are derived from aggregate.run's access patterns (src/aggregate.py:484-525). output_dir and files.base_dir are REQUIRED (direct subscript); all others use .get() with defaults. Recommended design: 6 sub-dataclasses (ProjectMeta, ProjectOutput, ProjectFiles, ProjectScreenshots, ProjectDiscussion, ProjectContext), each matching the nested dict shape. ProjectContext has dict-compat methods (__getitem__ + get) so consumers don't need migration. Two migration options: - Option A (incremental): ProjectContext has dict-compat; consumers unchanged. Flat fix. - Option B (full): Migrate all 8 consumer sites + 2 test mocks to use sub-dataclass access. ~40 lines across 10 files. Acceptance: 5 corrected VC8 criteria. Tier 2 can resume Phase 2 directly. TIER-1 READ conductor/tracks/cruft_elimination_20260627/spec.md + src/project_manager.py:268 + src/aggregate.py:484-525 + src/type_aliases.py + src/models.py before this commit.