commit 53027a33a9d94ee7b7d75ba9295d24d1550bdc7f
parent 5b3b5902a81a033345d2dc02d225a7c23586d11a
Author: triesap <tyson@radroots.org>
Date: Thu, 9 Apr 2026 17:29:21 +0000
runtime: track hyf startup config path
Diffstat:
5 files changed, 106 insertions(+), 2 deletions(-)
diff --git a/src/hyf_runtime/startup.mojo b/src/hyf_runtime/startup.mojo
@@ -15,6 +15,8 @@ struct RuntimeStartupContext(Copyable, Movable):
var paths_profile: String
var repo_local_base_root: String
var user_home: String
+ var startup_config_path: String
+ var startup_config_path_source: String
var paths: RuntimePaths
@@ -30,6 +32,7 @@ struct RuntimeStartupInput(Copyable, Movable):
struct _StartupOverrides(Copyable, Movable):
var paths_profile: String
var repo_local_base_root: String
+ var startup_config_path: String
def _require_flag_value(
@@ -48,7 +51,9 @@ def _require_flag_value(
def _parse_startup_overrides(args: List[String]) raises -> _StartupOverrides:
- var overrides = _StartupOverrides(paths_profile="", repo_local_base_root="")
+ var overrides = _StartupOverrides(
+ paths_profile="", repo_local_base_root="", startup_config_path=""
+ )
var index = 0
while index < len(args):
var arg = String(args[index])
@@ -87,6 +92,22 @@ def _parse_startup_overrides(args: List[String]) raises -> _StartupOverrides:
index += 1
continue
+ if arg == "--config":
+ overrides.startup_config_path = _require_flag_value(
+ args, index + 1, "--config"
+ )
+ index += 2
+ continue
+
+ if arg.startswith("--config="):
+ overrides.startup_config_path = String(
+ arg[byte = len("--config=") :]
+ )
+ if overrides.startup_config_path == "":
+ raise_runtime_contract_error("--config requires a value")
+ index += 1
+ continue
+
raise_runtime_contract_error("unknown startup argument '" + arg + "'")
return overrides^
@@ -109,10 +130,18 @@ def resolve_startup_context(
var paths = hyf_runtime_paths_for_unix_profile(
profile, input.user_home, repo_local_base_root
)
+ var startup_config_path = String(paths.config_path)
+ var startup_config_path_source = String("canonical_runtime_path")
+ if overrides.startup_config_path != "":
+ startup_config_path = String(overrides.startup_config_path)
+ startup_config_path_source = String("startup_flag")
+
return RuntimeStartupContext(
paths_profile=profile,
repo_local_base_root=repo_local_base_root,
user_home=String(input.user_home),
+ startup_config_path=startup_config_path,
+ startup_config_path_source=startup_config_path_source,
paths=paths^,
)
diff --git a/src/hyf_runtime/status.mojo b/src/hyf_runtime/status.mojo
@@ -27,6 +27,16 @@ def build_runtime_status_value(context: RuntimeStartupContext) raises -> Value:
)
status.set("paths", _runtime_paths_status_value(context))
+ var config = loads("{}")
+ config.set("artifact_path", Value(String(context.startup_config_path)))
+ config.set(
+ "artifact_path_source",
+ Value(String(context.startup_config_path_source)),
+ )
+ config.set("loaded", Value(False))
+ config.set("compiled_defaults_active", Value(True))
+ status.set("config", config)
+
var secret_storage = loads("{}")
secret_storage.set("default_backend", Value("local_file"))
secret_storage.set("secret_values_reported", Value(False))
diff --git a/tests/stdio_process_helper.mojo b/tests/stdio_process_helper.mojo
@@ -53,6 +53,20 @@ def _read_pipe_to_string(mut pipe: Pipe) raises -> String:
def run_stdio_entrypoint(
entrypoint: String, request_json: String
) raises -> Value:
+ return run_stdio_entrypoint_with_2_args(entrypoint, request_json, "", "")
+
+
+def run_stdio_entrypoint(
+ entrypoint: String, request_json: String, arg0: String, arg1: String
+) raises -> Value:
+ return run_stdio_entrypoint_with_2_args(
+ entrypoint, request_json, arg0, arg1
+ )
+
+
+def run_stdio_entrypoint_with_2_args(
+ entrypoint: String, request_json: String, arg0: String, arg1: String
+) raises -> Value:
var stdin_pipe = Pipe()
var stdout_pipe = Pipe()
var output = String("")
@@ -60,7 +74,9 @@ def run_stdio_entrypoint(
var include_flag = String("-I")
var include_path = String("src")
var entrypoint_path = String(entrypoint)
- var argv = List[Optional[CStringSlice[ImmutAnyOrigin]]](length=6, fill={})
+ var process_arg0 = String(arg0)
+ var process_arg1 = String(arg1)
+ var argv = List[Optional[CStringSlice[ImmutAnyOrigin]]](length=8, fill={})
argv[0] = rebind[CStringSlice[ImmutAnyOrigin]](command.as_c_string_slice())
argv[1] = rebind[CStringSlice[ImmutAnyOrigin]]("run".as_c_string_slice())
argv[2] = rebind[CStringSlice[ImmutAnyOrigin]](
@@ -72,6 +88,14 @@ def run_stdio_entrypoint(
argv[4] = rebind[CStringSlice[ImmutAnyOrigin]](
entrypoint_path.as_c_string_slice()
)
+ if process_arg0 != "":
+ argv[5] = rebind[CStringSlice[ImmutAnyOrigin]](
+ process_arg0.as_c_string_slice()
+ )
+ if process_arg1 != "":
+ argv[6] = rebind[CStringSlice[ImmutAnyOrigin]](
+ process_arg1.as_c_string_slice()
+ )
var pid = vfork()
if pid < 0:
diff --git a/tests/test_runtime_paths.mojo b/tests/test_runtime_paths.mojo
@@ -119,6 +119,8 @@ def test_startup_context_defaults_from_env_and_home() raises:
context.paths.config_path,
"/home/hyf-test/.radroots/config/services/hyf/config.toml",
)
+ assert_equal(context.startup_config_path, context.paths.config_path)
+ assert_equal(context.startup_config_path_source, "canonical_runtime_path")
def test_startup_context_cli_flags_override_env() raises:
@@ -142,6 +144,24 @@ def test_startup_context_cli_flags_override_env() raises:
)
+def test_startup_context_config_flag_overrides_config_artifact_only() raises:
+ var context = resolve_startup_context(
+ RuntimeStartupInput(
+ env_paths_profile="repo_local",
+ env_repo_local_base_root="/tmp/hyf-runtime",
+ user_home="/home/ignored",
+ argv=_startup_argv2("--config", "/tmp/hyf-config/config.toml"),
+ )
+ )
+
+ assert_equal(
+ context.paths.config_path,
+ "/tmp/hyf-runtime/config/services/hyf/config.toml",
+ )
+ assert_equal(context.startup_config_path, "/tmp/hyf-config/config.toml")
+ assert_equal(context.startup_config_path_source, "startup_flag")
+
+
def test_startup_context_rejects_missing_root_unknown_flag_and_flag_as_value() raises:
with assert_raises():
_ = resolve_startup_context(
diff --git a/tests/test_stdio_contract.mojo b/tests/test_stdio_contract.mojo
@@ -40,11 +40,14 @@ def test_status_success() raises:
def test_status_reports_repo_local_runtime_truth() raises:
with TemporaryDirectory() as temp_dir:
+ var startup_config_path = Path(temp_dir) / "explicit-hyf-config.toml"
with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"):
with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir):
var response = run_stdio_entrypoint(
"src/main.mojo",
load_scenario_request_json("scenarios/status_ok.json"),
+ "--config",
+ startup_config_path.__fspath__(),
)
assert_equal(
@@ -74,6 +77,24 @@ def test_status_reports_repo_local_runtime_truth() raises:
temp_dir + "/config/services/hyf/config.toml",
)
assert_equal(
+ response["output"]["runtime"]["config"][
+ "artifact_path"
+ ].string_value(),
+ startup_config_path.__fspath__(),
+ )
+ assert_equal(
+ response["output"]["runtime"]["config"][
+ "artifact_path_source"
+ ].string_value(),
+ "startup_flag",
+ )
+ assert_equal(
+ response["output"]["runtime"]["config"][
+ "compiled_defaults_active"
+ ].bool_value(),
+ True,
+ )
+ assert_equal(
response["output"]["runtime"]["paths"][
"diagnostics_dir"
].string_value(),