| 230 | } |
| 231 | |
| 232 | cbm_daemon_ipc_endpoint_t *cbm_daemon_bootstrap_endpoint_new(const char *runtime_parent) { |
| 233 | char key[CBM_DAEMON_KEY_SIZE]; |
| 234 | if (!cbm_daemon_rendezvous_key(key)) { |
| 235 | return NULL; |
| 236 | } |
| 237 | /* An explicit parent keeps precedence: it carries the compile-time test |
| 238 | * seam and the lifecycle guards' isolated namespace. The override is |
| 239 | * resolved HERE, the one function every product endpoint goes through |
| 240 | * (daemon, MCP client, local CLI, index worker, activation), so no call |
| 241 | * site can silently keep the default. */ |
| 242 | char override_parent[BOOTSTRAP_PATH_CAP]; |
| 243 | const char *parent = |
| 244 | runtime_parent |
| 245 | ? runtime_parent |
| 246 | : bootstrap_runtime_parent_override(override_parent, sizeof(override_parent)); |
| 247 | return cbm_daemon_ipc_endpoint_new(key, parent); |
| 248 | } |
| 249 | |
| 250 | bool cbm_daemon_bootstrap_launch_spec_init(const char *executable_path, |
| 251 | cbm_daemon_bootstrap_launch_spec_t *spec_out) { |