Slice 106 - Source Address Resolution Boundaries
Scope#
Keep SourcesService as the service-facing facade and move source-address
syntax parsing out of services/sources/service.py.
Why Now#
After slice 105, services/sources/service.py became the largest production
file. It currently mixes service orchestration with GitHub shorthand parsing,
Git range/diff parsing, transcript source parsing, HTTP URL validation,
GitHub URL decomposition, local path classification, file fingerprinting, and
prompt-hint constants.
Cosmic Python chapter 04 frames the service layer as the entrypoint for use cases and separates orchestration logic from interfacing code. The service should express "resolve these user inputs," "discover transcripts," and "inspect source runtime," while address syntax mechanics should be named and testable separately.
In Scope#
- Move source prompt hints and address parsing to
services/sources/address_resolution.py. - Move transcript discovery ordering to
services/sources/transcripts.py. - Keep
SourcesService.resolve(...),discover_transcripts(...), andinspect_runtime(...)public behavior unchanged. - Add an architecture test that keeps URL parsing, hashing, and source-family
resolver functions out of
service.py.
Out of Scope#
- New source kinds.
- Changes to source address syntax.
- Changes to
SourceAddress -> SourceRef -> SourceBrief -> SourceRuntime. - Changes to source runtime adapters.
Verification#
- Focused source service tests.
- Focused ingest/source runtime tests that exercise resolved refs.
- Architecture boundary test.
- Service-level source-resolution dogfood.
- Full pytest, Ruff, and diff hygiene.