Several remaining parser migrations share the same one-project-directory JSONL layout. Keeping that source shape in a thin helper lets provider implementations focus on parse behavior while still explicitly forwarding the source methods they support.
The helper embeds JSONLSourceSet and only adds the directory-shape constraint plus default project hints, so it avoids introducing a second provider framework.
feat(parser): share virtual source path helpers
SQLite and trace-backed providers use the same physical-container plus logical-source path shape. Keeping each parser's split/join logic local makes stored hint compatibility more fragile as providers migrate onto the facade.
Introduce one reusable virtual source path helper and move the existing Kiro SQLite virtual path handling onto it on the low helper branch, so later provider branches can reuse the same contract as the stack restacks.
Validation: go test -tags "fts5" ./internal/parser -run 'Test(VirtualSourcePath|ParseVirtualSourcePath|ParseKiroSQLiteVirtualPath|JSONLSourceSet|DirectoryJSONLSourceSet)' -count=1 -v; go test -tags "fts5" ./internal/parser -count=1; go vet ./...; go fmt ./...; git diff --check
feat(parser): add sibling metadata source helper
Several provider migrations have a primary transcript source plus sibling metadata files that affect watch routing and freshness. Leaving that pattern entirely provider-local keeps the facade migration dependent on ad hoc sidecar handling even after the JSONL helper exists.
Add a small composable source helper that embeds JSONLSourceSet, maps sibling file events back to the primary source, and fingerprints sibling freshness alongside the source. This keeps concrete providers explicit while giving sidecar-backed migrations a shared source-layer contract.
Validation: go test -tags "fts5" ./internal/parser -run TestSiblingMetadataSourceSetMapsSiblingEventsToPrimarySource -count=1 -v; go test -tags "fts5" ./internal/parser -run TestSiblingMetadataSourceSetFingerprintsSourceWithoutOpaque -count=1 -v; go test -tags "fts5" ./internal/parser -run 'Test(SiblingMetadataSourceSet|VirtualSourcePath|ParseVirtualSourcePath|ParseKiroSQLiteVirtualPath|JSONLSourceSet|DirectoryJSONLSourceSet)' -count=1 -v; go test -tags "fts5" ./internal/parser -count=1; go vet ./...; ./custom-gcl run --config .golangci.nilaway.yml ./internal/parser; go fmt ./...; git diff --check
fix(parser): thread ctx through sibling metadata source lookups
Several remaining parser migrations share the same one-project-directory JSONL layout. Keeping that source shape in a thin helper lets provider implementations focus on parse behavior while still explicitly forwarding the source methods they support.
The helper embeds JSONLSourceSet and only adds the directory-shape constraint plus default project hints, so it avoids introducing a second provider framework.