flowchart TD
Start["VS Code TourEngine.start"] --> List["client.listTours"]
List --> Server["OnboardingListTours.run_with_snapshot"]
Server --> Service["TourService.list_tours"]
Service --> Resolve["OnboardingTargetResolver.resolve"]
Resolve --> Branch{"target kind"}
Branch --> Contract["Contract or Dataset or Column field"]
Branch --> Quality["Quality Spec or Check"]
Branch --> SQL["SQL text target"]
Branch --> UI["UI target id"]
Branch --> YAML["Structural YAML fallback"]
Contract --> Editor["ResolvedHighlight kind = editor_range"]
Quality --> Editor
SQL --> Editor
YAML --> Editor
UI --> UiResult["ResolvedHighlight kind = ui_target"]
Editor --> DTO["StepDto.resolvedTarget"]
UiResult --> DTO
DTO --> Client["TourEngine.revealAndWatch"]
Client --> Open{"resolved target kind"}
Open --> File["open editor and decorate range"]
Open --> Surface["route UI target id to All Contracts or Swagger or Dashboard"]
File --> Watch["watchStep for predicates if present"]
Surface --> Watch
Watch --> Done["Next unlocks by predicate or timer policy"]sequenceDiagram
participant E as TourEngine
participant C as TurbineClient
participant L as OnboardingListTours
participant S as TourService
participant R as OnboardingTargetResolver
participant O as TourFileOpener
E->>C: listTours()
C->>L: turbine/onboarding/listTours
L->>S: list_tours(sandbox_root)
loop each Step
S->>R: resolve(sandbox_root, target)
R-->>S: ResolvedHighlight
end
S-->>L: ListToursResult
L-->>C: response
C-->>E: tours
E->>O: revealTarget(sandboxPath, resolvedTarget)
E->>C: watchStep(tourId, stepId)
C-->>E: stepCompleted notification
E->>E: nextUnlocked = trueclassDiagram
class Step {
+str id
+str title
+str body_markdown
+HighlightTarget target
+Predicate predicate
+SkipAction skip
}
class HighlightTarget {
<<Protocol>>
}
class ContractFieldTarget {
+str file
+str contract_id
+str field
}
class DatasetTarget {
+str file
+str contract_id
+str dataset
}
class ColumnFieldTarget {
+str file
+str dataset
+str column
+str field
}
class QualitySpecFieldTarget {
+str file
+str spec_id
+str field
}
class CheckTarget {
+str file
+str source_id
+str dataset
+str check_type
+str name
}
class SqlTextTarget {
+str file
+str text
}
class UiTarget {
+str target_id
}
class OnboardingTargetResolver {
+resolve(sandbox_root, target) ResolvedHighlight
}
class ResolvedHighlight {
+ResolvedHighlightKind kind
+str file
+tuple~int~ range
+str target_id
}
HighlightTarget <|.. ContractFieldTarget
HighlightTarget <|.. DatasetTarget
HighlightTarget <|.. ColumnFieldTarget
HighlightTarget <|.. QualitySpecFieldTarget
HighlightTarget <|.. CheckTarget
HighlightTarget <|.. SqlTextTarget
HighlightTarget <|.. UiTarget
Step --> HighlightTarget
OnboardingTargetResolver --> ResolvedHighlight