Skip to content

OpenClaw ACP-runtime agent entry cannot evaluate: nix-openclaw generated schema makes the acp runtime branch unreachable #2509

Open

Description

@dezren39

Problem

The opencode-acp agent entry added to home/openclaw/default.nix (PR #2237, #2229 mechanism 1) makes the whole NixOS configuration fail to evaluate, which blocks every nixos-rebuild switch on the laptop:

error: The option `home-manager.users.user.programs.openclaw.config.agents.entries.opencode-acp.runtime.acp' does not exist.
       Did you mean `home-manager.users.user.programs.openclaw.config.agents.entries.opencode-acp.runtime.type'?

Root cause (verified with a minimal reproduction)

The generated schema in nix-openclaw (nix/generated/openclaw-config-options.nix, locked rev 4e5f444, identical on upstream main) types an agent entry's runtime as:

t.nullOr (t.oneOf [
  (t.submodule { options = { type = enum [ "embedded" ]; }; })
  (t.submodule { options = { acp = ...; type = enum [ "acp" ]; }; })
])

Under the pinned nixpkgs, types.oneOf is foldl' either ..., and a submodule type's check accepts any attribute set — so every plain-attrset definition is claimed by the FIRST (embedded) branch, which then rejects the acp attribute as an unknown option. The acp branch is unreachable:

  • { type = "acp"; acp = { ... }; } → "The option `x.acp' does not exist"
  • { type = "acp"; } alone → "A definition for option x.type' is not of type value "embedded" (singular enum)'"

Both reproduced against the pinned nixpkgs (6510408) with a 15-line evalModules test, independent of this repo's config.

Impact

Fix plan

  1. Remove the opencode-acp entry from home/openclaw/default.nix (leaving a comment pointing here) so the configuration evaluates and the deployment chain can proceed. The ACP capability itself (acp.enabled, allowedAgents, acpx plugin, per-agent wrappers from openclaw: enable claude, codex, agy as ACP agents alongside opencode #1728) is unaffected — OpenClaw can still spawn OpenCode over ACP from sessions.
  2. File the generator bug upstream in openclaw/nix-openclaw with the minimal reproduction (a discriminable encoding would be a single submodule with type = enum [ "embedded" "acp" ] plus an optional acp attrset).
  3. Restore the entry (tracked by Follow-up (#2229): ACP-runtime agent entry for OpenClaw→OpenCode dispatch (opencode-acp) #2256) once the schema can express it — either an upstream generator fix + input bump, or a local workaround proven by evaluation.

Acceptance: the entry is restored AND nixos-rebuild switch succeeds with it present.

Acceptance criteria

Activity

  1. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    Upstream generator bug filed: openclaw/nix-openclaw#176 (with the minimal reproduction and a suggested discriminable encoding). Fix PR for the immediate unblock: #2512 — evaluation of the full NixOS toplevel verified succeeding with the entry removed.

  2. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    priority/highImportant and time-sensitive
    effort/mMedium: expected under 1 day of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 30, 2026
  3. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: #2256 (the ACP-runtime agent entry follow-up), #2237 (PR that added the entry), #2229 (OpenClaw dispatch mechanisms)

    Notes: Filed 2026-10-30T02:03Z with a verified minimal reproduction: under the pinned nixpkgs, types.oneOf folds with either and a submodule check accepts any attrset, so the first (embedded) branch claims every definition and the acp branch of the nix-openclaw generated schema is unreachable. The defect is in the generated schema / nixpkgs type interaction, not in this repo's entry definition. Impact per the body: the laptop's NixOS configuration fails to evaluate, blocking every nixos-rebuild switch. This pass appends acceptance criteria and applies kind/priority/effort; no source label (filer session not recorded on the issue).

    Risks: While this is open, any laptop config change is blocked or must route around the entry; a silent removal of the entry would also silently drop the #2229 ACP dispatch work.

    Suggested approach: Decide the layer: (a) patch the generated schema consumption in this repo (e.g. restructure the entry so the embedded branch cannot claim it, or override the option type), or (b) carry the entry disabled with a pointer here until nix-openclaw regenerates its schema. Verify with the body's 15-line evalModules repro before touching the laptop config.

    🤖 Agent note · filed

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: repo-fleet-monitor run 2026-10-30T02:12Z (2026-10-29 21:12 CDT)
    • Found via: monitor reconciliation
    • Task: Duty 2 intake enrichment — labels normalized and meta/enriched applied; acceptance criteria appended to the body only where no acceptance section existed (original body preserved verbatim above it). Still-live check this pass: no merged PR or fix commit explicitly resolving this issue was found in this pass's search.
    • Expectation: see the effort label; done = the acceptance criteria are met.
    • Links: this issue
  4. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    Update (2026-10-29): Drew chose the embedded runtime as the standing shape for OpenClaw's agents, so the opencode-acp entry will NOT be restored even when the schema can express it — #2256 is closed as not planned. This issue stays as the record of the evaluation blocker (fixed forward by #2512) and the upstream generator report (openclaw/nix-openclaw#176).

  5. added
    source/creatorFiled by the new-issue-creator job
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  6. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: reviewed (coverage loop-back)
    Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 7332 (triage, queued, priority 50) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
    Found via: coverage loop-back 2026-11-03

  7. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: picked_up
    Found via: OpenChamber scheduled lane
    Task: 7332 (repo-health-code-pilot)
    Worker: repo-worker-code
    Lane: 8ac61616-3815-4e7b-b33d-840a3829154a
    Session: ses_e5e5c374d17ffezowNmwt2RE2W
    Next: Revalidate #2509 and linked #2512 against current GitHub state; close with evidence if already resolved.

  8. added
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  9. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: triaged (task 7332)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

effort/mMedium: expected under 1 day of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/highImportant and time-sensitivesource/creatorFiled by the new-issue-creator jobtask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions