Skip to content

Default actuator output to JSONL - #80

Merged
flyingrobots merged 13 commits into
mainfrom
fix/cli-machine-defaults
Jul 12, 2026
Merged

Default actuator output to JSONL#80
flyingrobots merged 13 commits into
mainfrom
fix/cli-machine-defaults

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Summary

  • Make the actuator entrypoint default to JSONL machine output and replace the old --json switch with opt-in --humanize output.
  • Add lazy help handling so help/usage paths do not construct graph runtime state.
  • Replace the flaky durable diagnostic logging subprocess assertion with an in-process deterministic runner.
  • Refresh CLI, protocol, teardown, and diagram documentation for the new actuator output contract.

Validation

  • npm run build
  • npm run lint
  • npm run test:local
  • bash scripts/check-diagrams.sh
  • Pre-push hook reran npm run test:local and diagram freshness checks successfully.

Notes

scripts/render-diagrams.sh refreshed the committed diagram artifacts. It also reported existing render failures for vision-layer-stack.mmd and wasm-target-lowerer.mmd; those are outside this PR's actuator-output change, and scripts/check-diagrams.sh passes.

Summary by CodeRabbit

  • New Features

    • Actuator/agent CLI output is now JSONL by default for machine-readable results.
    • Added/standardized --humanize for human-friendly rendering (and interactive wizard flows now align with it).
    • Help requests can be handled without full runtime initialization.
  • Bug Fixes

    • Improved consistency of terminal JSONL envelopes for success/error, including clearer failure reporting.
  • Documentation

    • Updated CLI, agent protocol, diagrams, and executive/teardown docs to remove prior --json framing and reflect the --humanize/default JSONL contract.

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: aaa23e5e-ca98-47ac-91f2-f91f096fb68b

📥 Commits

Reviewing files that changed from the base of the PR and between 3919c64 and 7a19fca.

📒 Files selected for processing (2)
  • src/cli/actuatorEntry.ts
  • test/unit/ActuatorEntry.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/cli/actuatorEntry.ts
  • test/unit/ActuatorEntry.test.ts

📝 Walkthrough

Walkthrough

The CLI now emits JSONL by default, uses --humanize for formatted output, centralizes actuator startup in runActuator, supports lazy help execution, updates runtime flag handling, and revises documentation, diagrams, workflows, and tests.

Changes

Actuator JSONL contract

Layer / File(s) Summary
JSONL protocol and documentation contract
docs/CLI-plan.md, docs/canonical/AGENT_PROTOCOL.md, docs/TEARDOWN.md, docs/diagrams/*, docs/EXECUTIVE_SUMMARY.md, .github/workflows/ci.yml, src/cli/commands/wizards.ts
Documentation, diagrams, CI invocation, and wizard messages now describe default JSONL output and --humanize rendering.
Centralized actuator bootstrap
src/cli/actuatorEntry.ts, xyph-actuator.ts, src/cli/index.ts
Actuator startup, context creation, command registration, help-only handling, logging, output-mode selection, and Commander error handling are centralized in runActuator.
Runtime flags and command modes
src/cli/runtimeEntry.ts
Runtime argument counting now excludes --humanize and --as values while preserving command arguments.
Entrypoint validation
test/unit/ActuatorEntry.test.ts, test/unit/runtimeEntry.test.ts, test/acceptance/cycles/0022-durable-diagnostic-logging/DurableDiagnosticLogging.test.ts
Tests cover JSONL and human modes, parsing failures, warning suppression, identity values, lazy help execution, durable logging, and runtime flag behavior.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User as CLI caller
  participant Actuator as xyph-actuator.ts
  participant Entry as runActuator
  participant Runtime as Graph runtime
  participant Commands as Commander commands
  participant Output as JSONL or human output
  User->>Actuator: invoke command
  Actuator->>Entry: delegate argv
  alt help request
    Entry->>Commands: create help-only context and parse help
  else normal request
    Entry->>Runtime: resolve runtime
    Runtime-->>Entry: runtime context
    Entry->>Commands: register and parse commands
  end
  Commands-->>Entry: success or Commander error
  Entry->>Output: emit JSONL or human-rendered result
Loading

Possibly related PRs


✅ Pre-merge checks override applied

The pre-merge checks have been overridden successfully. You can now proceed with the merge.

Overridden by @flyingrobots via command on 2026-07-12T17:41:51.728Z.

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Clearly summarizes the primary change: the actuator now defaults to JSONL output.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/cli-machine-defaults

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/cli/actuatorEntry.ts (1)

242-244: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Move command registration inside the try-catch block

defaultRegisterCommands (line 244) sits outside the try-catch (lines 246–262), so registration errors — Proxy throws from the help-only context, failed dynamic imports, or any register function accessing a missing property — propagate as unhandled rejections without structured logging. Moving registration inside the try block ensures all setup-and-parse errors are logged consistently via serializeError and handled through the same error path.

♻️ Proposed refactor
   const program = createActuatorProgram();
   program.exitOverride();
-
-  await (options.registerCommands ?? defaultRegisterCommands)(program, ctx);
 
   try {
+    await (options.registerCommands ?? defaultRegisterCommands)(program, ctx);
     await program.parseAsync(argv, { from: 'node' });
     logger.info('actuator session ended cleanly');
     return 0;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cli/actuatorEntry.ts` around lines 242 - 244, Move the command
registration call using registerCommands/defaultRegisterCommands inside the
existing try-catch in the actuator entry flow, before command parsing or
execution. Ensure registration failures use the same serializeError logging and
error-handling path as setup and parse failures, without changing the existing
registration selection or context.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/CLI-plan.md`:
- Around line 320-322: Update the preceding interactive handoff example in the
CLI documentation to include the --humanize option on the xyph handoff command.
Keep the message and headless JSONL example unchanged, ensuring the interactive
example explicitly requests human-oriented output.
- Around line 194-213: Add an appropriate language identifier, such as console,
to the fenced code blocks containing CLI examples near the JSONL example and the
corresponding section around line 320. Update only the fence annotations while
preserving the example content.

---

Nitpick comments:
In `@src/cli/actuatorEntry.ts`:
- Around line 242-244: Move the command registration call using
registerCommands/defaultRegisterCommands inside the existing try-catch in the
actuator entry flow, before command parsing or execution. Ensure registration
failures use the same serializeError logging and error-handling path as setup
and parse failures, without changing the existing registration selection or
context.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ebecb2b1-f287-4124-8e76-63f22438865b

📥 Commits

Reviewing files that changed from the base of the PR and between 402b366 and cbf73a9.

⛔ Files ignored due to path filters (9)
  • docs/diagrams/teardown-argv-scan.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-cli-context.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-domain-entities.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-hexagonal-arch.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-jsonl-protocol.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-jsonl-types.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-schema.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-system-architecture.svg is excluded by !**/*.svg
  • docs/diagrams/teardown-system-mind-map.svg is excluded by !**/*.svg
📒 Files selected for processing (20)
  • docs/CLI-plan.md
  • docs/EXECUTIVE_SUMMARY.md
  • docs/TEARDOWN.md
  • docs/canonical/AGENT_PROTOCOL.md
  • docs/diagrams/teardown-argv-scan.mmd
  • docs/diagrams/teardown-argv-scan.mmd.sha256
  • docs/diagrams/teardown-jsonl-protocol.mmd
  • docs/diagrams/teardown-jsonl-protocol.mmd.sha256
  • docs/diagrams/teardown-system-architecture.mmd
  • docs/diagrams/teardown-system-architecture.mmd.sha256
  • docs/diagrams/teardown-system-mind-map.mmd
  • docs/diagrams/teardown-system-mind-map.mmd.sha256
  • src/cli/actuatorEntry.ts
  • src/cli/commands/wizards.ts
  • src/cli/index.ts
  • src/cli/runtimeEntry.ts
  • test/acceptance/cycles/0022-durable-diagnostic-logging/DurableDiagnosticLogging.test.ts
  • test/unit/ActuatorEntry.test.ts
  • test/unit/runtimeEntry.test.ts
  • xyph-actuator.ts

Comment thread docs/CLI-plan.md
Comment thread docs/CLI-plan.md

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbf73a9dfe

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/cli/actuatorEntry.ts
Comment thread src/cli/actuatorEntry.ts
@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex update: addressed the valid review findings in follow-up commits. Commit aba4877 moves actuator command registration into the existing try/catch and fixes the CLI-plan fence/handoff examples. Commit 3cf6788 emits a terminal JSONL error envelope for Commander parse failures and adds focused regression coverage. I am intentionally not preserving --json as a compatibility no-op because this PR's requested contract is that machine JSONL is the default and --humanize is the only output-mode flag.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex self-audit finding before fix:

ID Severity Type File Lines Evidence Recommended Mitigation Prompt
SELF-001 P2 Functional correctness / machine protocol src/cli/actuatorEntry.ts ~242-272 npx tsx xyph-actuator.ts __definitely_missing_command__ exits 1 and emits JSONL on stdout, but also emits error: unknown command ... prose on stderr. The branch contract says actuator output is JSONL by default, with human prose gated behind --humanize. Configure Commander output in runActuator so parse/usage errors do not write prose to stderr when json mode is active. Preserve normal Commander stderr behavior in --humanize mode. Add a deterministic regression test that asserts JSONL-mode Commander parse failures emit one terminal JSONL error record and no stderr prose.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@flyingrobots

Copy link
Copy Markdown
Owner Author

Code Lawyer Activity Summary

ID Source Severity File Commit Outcome
SELF-001 Self-audit P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 28c44fb Fixed JSONL-mode Commander failures leaking prose to stderr. Added regression coverage asserting stderr is empty in JSONL mode and verified the direct failing actuator command now emits only the terminal JSONL error record.

Validation:

Check Result
RED regression Failed as expected before fix: stderr contained Commander prose.
Focused regression npm run test:local -- test/unit/ActuatorEntry.test.ts passed: 6/6 tests.
Lint npm run lint passed via commit hook.
Direct protocol probe npx tsx xyph-actuator.ts __definitely_missing_command__ exits 1, stdout contains JSONL error, stderr is empty.
Full local pre-push npm run test:local passed: 124 files passed, 1 skipped, 1079 tests passed, 4 todo; diagram checks passed.
GitHub CI Green on 28c44fb, including build, lint, test, diagrams, audit, traceability, strict-policy, verify-patch-ops, and CodeRabbit.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@coderabbitai ignore pre-merge checks

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
ℹ️ Actions performed

Pre-merge checks override executed successfully.

Overridden by @flyingrobots via command on 2026-07-12T17:41:51.728Z.

Approval outcome: Approval skipped: request-changes workflow disabled.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex self-audit findings before fix:

ID Severity Type File Lines Evidence Recommended Mitigation Prompt
SELF-002 P2 Functional correctness / machine protocol src/cli/actuatorEntry.ts 47-49 isActuatorHelpRequest() treats any -h or --help token after argv[2] as a help request, including values consumed by process-level options. npx tsx xyph-actuator.ts whoami --as -h exits 0 with empty stdout and stderr because the real command runs against the help-only context whose JSON emitters are no-ops. This violates the JSONL contract requiring a terminal record for command executions. Refine actuator help detection so only actual Commander help requests select the help-only context. Ignore tokens after --, skip values consumed by known value flags such as --as, and add a deterministic regression test proving whoami --as -h or an equivalent fixture command does not use the help-only context and emits a terminal JSONL record.
SELF-003 P2 Machine protocol / stderr contamination src/cli/actuatorEntry.ts 248-317 npx tsx xyph-actuator.ts analyze --dry-run exits 0 and writes valid JSONL to stdout, but stderr contains (node:...) [DEP0205] DeprecationWarning: module.register() is deprecated.... NODE_NO_WARNINGS=1 proves the warning is process-warning noise, not command output. Default actuator mode is agent-first JSONL; unsolicited stderr breaks strict machine consumers. In JSONL mode, suppress process warning stderr for actuator execution without changing --humanize behavior. Add focused regression coverage that emits a process warning during a JSONL-mode command and asserts stderr remains empty while the terminal JSONL record is still emitted.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

@flyingrobots

Copy link
Copy Markdown
Owner Author

Code Lawyer Activity Summary

ID Source Severity File Commit Outcome
SELF-002 Self-audit P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 7d9d7cc Fixed lazy-help argv pre-scan so --as -h is treated as an identity value, not a help request. Added regression coverage for the classifier and terminal JSONL output.
SELF-003 Self-audit P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 3919c64 Suppressed process-level deprecation-warning stderr in default JSONL mode while preserving --humanize warning behavior. Added regression coverage for warning-stderr contamination.

Validation:

Check Result
SELF-002 RED npm run test:local -- test/unit/ActuatorEntry.test.ts failed before fix: whoami --as -h path produced no terminal JSONL record.
SELF-002 GREEN Focused unit test passed; process probe npx tsx xyph-actuator.ts whoami --as -h exits 0 with a JSONL terminal success record and empty stderr.
SELF-003 RED Focused unit test failed before fix: process DeprecationWarning was written to stderr in JSONL mode.
SELF-003 GREEN Focused unit test passed; process probe npx tsx xyph-actuator.ts analyze --dry-run exits 0 with JSONL stdout and zero stderr bytes; --humanize still shows the Node warning.
Local lint npm run lint passed.
Local build npm run build passed.
Full local tests npm run test:local passed: 124 files passed, 1 skipped, 1081 tests passed, 4 todo.
Diagram integrity bash scripts/check-diagrams.sh passed.
Pre-push hook git push reran full local tests and diagram checks; both passed.
Xyph graph tracking Added graph comment comment:cli-machine-defaults-20260712-code-lawyer-followup; pushed WARP refs including patch 141a4eb.

@codex please confirm the follow-up fixes preserve the intended agent-first JSONL actuator contract.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3919c64d41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/cli/actuatorEntry.ts Outdated
Comment thread src/cli/actuatorEntry.ts Outdated
Comment thread src/cli/actuatorEntry.ts Outdated
@flyingrobots

Copy link
Copy Markdown
Owner Author

Code Lawyer Follow-up Activity Summary

ID Source Severity File Commit Outcome
CODEX-20260712-001 PR review P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 6b0303a Fixed help pre-scan so command option values such as --message -h are not misclassified as lazy help. Added classifier and command-execution regressions.
CODEX-20260712-002 PR review P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 6a7ab71 Moved startup resolution/context failures into the guarded actuator path and emit terminal JSONL error records in default machine mode. Added startup-failure regression coverage.
CODEX-20260712-003 PR review P2 src/cli/actuatorEntry.ts, test/unit/ActuatorEntry.test.ts 7a19fca Default help now emits a single JSONL success envelope containing Commander help text; --humanize --help preserves human prose output. Added regression and process probes.

Validation:

Check Result
Focused RED/GREEN npm run test:local -- test/unit/ActuatorEntry.test.ts passed after each fix; RED failures reproduced each finding before implementation.
Local lint npm run lint passed.
Local build npm run build passed.
Full local tests npm run test:local passed: 124 files passed, 1 skipped, 1084 tests passed, 4 todo.
Diagram integrity bash scripts/check-diagrams.sh passed.
Process probes xyph-actuator --help returns parseable JSONL with zero stderr; xyph-actuator --humanize --help still returns Commander help text.
Pre-push hook git push reran full tests and diagram checks; both passed.
Xyph graph tracking Added graph comment comment:cli-machine-defaults-20260712-codex-review-followup; pushed WARP patch 9e52568.
Review threads Resolved all three follow-up Codex threads after pushing fixes.

@codex please confirm the new actuator startup/help behavior now satisfies the default JSONL contract.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7a19fca06c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/cli/actuatorEntry.ts
* command line, because output mode determines which CLI context is built.
*/
export function parseHumanizeFlagFromArgv(argv: readonly string[]): boolean {
return argv.includes('--humanize');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Ignore --humanize when it is an option value

For free-text options such as comment --message, Commander consumes a following dash-prefixed token as the required option value (the tests already rely on this for --message -h), but this raw pre-scan flips the entire invocation to human mode whenever that value is exactly --humanize. An agent command like xyph-actuator comment comment:x --on task:x --message --humanize therefore stops emitting the default JSONL terminal envelope even though the user supplied --humanize as data, not as the output-mode switch. Apply the same token-consumption classification used by help detection before treating --humanize as global.

Useful? React with 👍 / 👎.

Comment thread src/cli/actuatorEntry.ts
i += 1;
continue;
}
if (HELP_FLAGS.has(arg)) return true;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor help subcommand after global options

When a root option precedes the help subcommand, for example xyph-actuator --humanize help status or xyph-actuator --as agent.x help status, the scan skips/ignores the option tokens but never recognizes the later help token. That leaves helpOnly false, so runActuator resolves graph runtime before Commander can render help; from a directory without a configured git repo this returns a startup error instead of help, breaking the lazy-help contract. Treat help as a help request after skipped global/value options too.

Useful? React with 👍 / 👎.

Comment thread src/cli/actuatorEntry.ts
{ registerShowCommands },
{ registerAgentCommands },
{ registerDoctorCommands },
{ registerApiCommands },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Route api TTY failures through JSONL

Because the new entrypoint registers api under the default JSONL actuator, the existing TTY guard in src/cli/commands/api.ts:17-19 is now reachable in machine mode but still writes plain text to stderr and exits without any terminal JSONL error. In the no-stdin case (xyph-actuator api run interactively, or by a tool that forgot to pipe request records), JSONL consumers get no parseable failure envelope and stderr is contaminated, so this rejection should go through the structured error path instead.

Useful? React with 👍 / 👎.

Comment thread src/cli/actuatorEntry.ts
try {
let runtime: ResolvedGraphRuntime | null = null;
if (!helpOnly) {
runtime = (options.resolveRuntime ?? ((runtimeCwd: string): ResolvedGraphRuntime => resolveGraphRuntime({ cwd: runtimeCwd })))(cwd);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Pass homeDir into runtime resolution

When tests or embedded callers pass RunActuatorOptions.homeDir to isolate XYPH user config, the log path and identity resolution honor that directory but graph runtime discovery still reads the process home directory. For non-help invocations from a cwd without local graph config, this can select the wrong graph or emit a startup error even though the supplied homeDir contains the intended .xyph/config; forward options.homeDir to resolveGraphRuntime here.

Useful? React with 👍 / 👎.

@flyingrobots
flyingrobots merged commit 23f37f7 into main Jul 12, 2026
9 checks passed
@flyingrobots
flyingrobots deleted the fix/cli-machine-defaults branch July 12, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant