From 07d6690b9b9de7db7debe25e8e3def5c0d68bb26 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 09:27:28 +0800 Subject: feat(probe): YJ-01 real-probe 7-stage dataset + probe design branch in pipeline/CLI --- src/SomhairlesDream.Cli/Arguments.fs | 57 ++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 13 deletions(-) (limited to 'src/SomhairlesDream.Cli/Arguments.fs') diff --git a/src/SomhairlesDream.Cli/Arguments.fs b/src/SomhairlesDream.Cli/Arguments.fs index 2de96be..fa9087b 100644 --- a/src/SomhairlesDream.Cli/Arguments.fs +++ b/src/SomhairlesDream.Cli/Arguments.fs @@ -9,7 +9,8 @@ type RunOptions = OutputRoot: string StageRoot: string Python: string - Render: bool } + Render: bool + Design: string } type Command = | Run of RunOptions @@ -19,22 +20,32 @@ type Command = module Arguments = let usage = "usage: dotnet run --project src/SomhairlesDream.Cli -- run [options]\n" - + " dotnet run --project src/SomhairlesDream.Cli -- verify " + + " dotnet run --project src/SomhairlesDream.Cli -- verify \n" + + "options: --project-id --run-id --base-id --target-id --output-root --stage-root --python --render --design heritage|probe" let private defaultPython () = let configured = Environment.GetEnvironmentVariable("SOMHAIRLES_BPYTHON") if String.IsNullOrWhiteSpace(configured) then "python3" else configured + let private heritageIds = + { ProjectId = "heritage-001" + RunId = "run-001" + BaseId = "base-000" + TargetId = "target-003" } + + let private probeIds = + { ProjectId = "probe-001" + RunId = "run-001" + BaseId = "probe-base-000" + TargetId = "probe-target-007" } + let private defaults () = - { Ids = - { ProjectId = "heritage-001" - RunId = "run-001" - BaseId = "base-000" - TargetId = "target-003" } + { Ids = heritageIds OutputRoot = ".artifacts" StageRoot = "stage" Python = defaultPython () - Render = false } + Render = false + Design = "heritage" } let private requiredValue (args: string array) (index: int) (optionName: string) = if index + 1 >= args.Length || String.IsNullOrWhiteSpace(args[index + 1]) then @@ -51,14 +62,34 @@ module Arguments = | "--output-root" -> Ok { options with OutputRoot = value } | "--stage-root" -> Ok { options with StageRoot = value } | "--python" -> Ok { options with Python = value } + | "--design" -> Ok { options with Design = value } | _ -> Error $"unknown option: {optionName}" + let private resolveIds (options: RunOptions) = + if options.Design = "probe" then + let swap heritage probe value = if value = heritage then probe else value + + let ids = + { ProjectId = swap heritageIds.ProjectId probeIds.ProjectId options.Ids.ProjectId + RunId = swap heritageIds.RunId probeIds.RunId options.Ids.RunId + BaseId = swap heritageIds.BaseId probeIds.BaseId options.Ids.BaseId + TargetId = swap heritageIds.TargetId probeIds.TargetId options.Ids.TargetId } + + { options with Ids = ids } + else + options + let private validateRunOptions (options: RunOptions) = - [| options.Ids.ProjectId; options.Ids.RunId; options.Ids.BaseId; options.Ids.TargetId |] - |> Array.tryFind (Ids.validateResourceId >> Result.isError) - |> function - | Some value -> Error $"invalid resource id: {value}" - | None -> Ok(Run options) + if options.Design <> "heritage" && options.Design <> "probe" then + Error $"invalid design: {options.Design}" + else + let resolved = resolveIds options + + [| resolved.Ids.ProjectId; resolved.Ids.RunId; resolved.Ids.BaseId; resolved.Ids.TargetId |] + |> Array.tryFind (Ids.validateResourceId >> Result.isError) + |> function + | Some value -> Error $"invalid resource id: {value}" + | None -> Ok(Run resolved) let private parseRun (args: string array) = let rec loop (index: int) (options: RunOptions) = -- cgit v1.2.3