Commit Graph
4 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 5 cd5b59d0a1 fix(dsk): run the MCP bridge as the workstation user and verify it there
53c120aaac paired "become: false" with "become_user" on the desktop roles.
Setting become to false means do not escalate, so the sibling become_user is
inert and the task runs as the connection user: pipx installed the Blender MCP
server into /root and the editor extension landed in the profile of root. The
package install inside the addon file now pins become_user to root explicitly,
because it would otherwise inherit the workstation user from the apply block of
the include and run apt unprivileged.

Two consequences of the same chain ship with it, because no half of it leaves a
deployable state on its own:

- The registration inferred an installed editor from services.code.enabled, but
  dsk-code declares nothing for code-oss, vscode or vscodium on Debian and
  RedHat, so no editor can exist there and the command exited 2. It now probes
  the binary and registers only when it resolves.
- The CLI test resolved the server through PATH and read the config under HOME
  while running as root. It now uses absolute paths rendered from the role vars
  and reads the registry claude writes as a file, the way the test of
  dsk-gnt-claude already does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-04 14:22:38 +02:00
kevinveenbirkenbachandClaude Opus 5 d76358ba24 fix(dsk-code): register the editor service and order its run-once flag
The role carried a primary entry with modes, flavor and limits but never declared itself the provider of the code service, so a role referencing it found nobody registering it. Continues fc5ad87dc5.

Registering turns the role into one load/app.yml pulls in dynamically, and that path checks run_once_dsk_code before including it. With the flag set at the end of 00_core.yml a second load attempt would still see it absent and include the role again, so it moves to the first task as 3bfeba1243 did for the other shared providers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-04 00:56:01 +02:00
kevinveenbirkenbachandClaude Opus 5 3eba518db9 feat(dsk-code): carry each agent's editor extension through the addon contract
b958322400 kept the extension catalogue in vars/main.yml as code_agent_extensions,
a map from role id to extension id filtered through group_names. That put a
catalogue in vars/ where every other role keeps one in meta/addons/, and it knew
only Claude.

The fact splits three ways now, each owned once. meta/services.yml states
whether the host deploys the agent, and is the only place group_names appears.
meta/addons/<id>.yml states the extension id and defers its gate to that flag
through lookup('config'), which is what the addon contract expects and what
test_addon_enabled_no_group_names enforces: an addon testing group_names itself
restates a fact the owning role already carries. vars/main.yml reads the addons
back, and 00_core.yml loops them.

The loop evaluates item.value.enabled | bool in its when rather than filtering
with selectattr. An addon's enabled survives as Jinja text, so selectattr would
read the string 'False' as true and install an extension the host did not ask
for.

codex joins Claude. open-vsx.org serves openai.chatgpt from a verified openai
namespace as 'Codex, OpenAI's coding agent', so the id resolves on the Open VSX
registry that Code - OSS and VSCodium query, not only on the Microsoft one.
Cursor and pi stay out, as b958322400 recorded: neither Anysphere nor
earendil-works publishes there.

The two tasks/addons/ hooks are empty because the generic install loop is the
whole integration; test_addons_integration_tasks requires the file to exist for
a service-coupled addon, and web-app-nextcloud/tasks/addons/deck.yml is the same
shape.

Verified: 396 lints with 363 subtests, including the three that this change
turns green, and the extension ids resolved against the Open VSX API.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-25 13:57:20 +02:00
kevinveenbirkenbachandClaude Opus 5 53c120aaac refactor(dsk): rename the desktop tier and give its agents a category
Every desk- role becomes dsk-, and the three coding agents move to dsk-gnt- under a category of their own. The category carries a title, hanzi and icon but no invokable flag: an invokable child under an invokable parent is rejected outright, which is also why web itself is not invokable.

Three things a search and replace would have broken without a sound. get_entity_name now strips dsk-gnt-, so the primary entity keys agnt-claude, agnt-cursor and agnt-pi no longer resolved and all three roles dropped out of the CI plan. Eighteen run_once guards carried the old name against a convention its own test enforces. DESKTOP_ROLE_PREFIX in the addon spec lint is a literal, so the desktop exemption it grants would have matched nothing and the lint would have moved to the wrong rule in silence.

docs/requirements/035 is not a historical document but a register a lint holds to every role with an application_id, so its list carries the new ids. In 026 only the links move; the prose stays as a statement about the tree at the time it was written.

Measured against the plan with the rename normalised, the deployed role#variant set is unchanged. A stale id in an inventory is caught before any deploy starts: the pre-flight validator reports Invalid group 'desk-firefox' (not in application_ids).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-24 22:15:41 +02:00