execverb: KDL exec dialect (wrap+exec transport) for passthrough/remote-exec verbs #130
Labels
No labels
burndown-2026-06
sunday-sprint
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/cli-guard#130
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The KDL Guardfile currently expresses only the HTTP transport (spec + base-url + auth). The coily->ward merge needs the same policy-as-sentences treatment for exec-shaped verbs: git passthroughs, brew/pkg, docker, tailscale, systemctl, gaming, and the forgejo admin/doctor leaves (kubectl-exec into the pod) - the remaining non-HTTP slice of the 40-leaf migration (coilyco-flight-deck/ward#75). Today each is hand-written Go on cli/passthrough; the policy (which subcommands, which flags refused) deserves the same reviewable, non-executable KDL form specverb proved.
Grammar (the exec dialect)
A
wrapblock whose transport isexecinstead ofspec/auth:exec <bin>- the real binary, fixed at parse; an optionalargv-prefixchild pins an unoverridable leading argv (the kubectl-exec / remote-exec transport).can run <subcommand>- deny-by-default subcommand allowlist; multi-word sentences quote.deny-flag(default-allow minus denials),allow-flag(strict allowlist mode when present),allow-arg-re(positional shape rule),describe.Engine (execverb, sibling of specverb)
execverb.Build(Config{Guardfile, Wrap, Runner})mounts one leaf per grant underverb.Wrap(audit + argv metachar gate), reusingcli/passthrough's exec/env machinery. Invariants:ward.git.commit), same rows as the hand-written verbsThe describe model extends naturally: each leaf reports bin, fixed prefix, flag policy - same reference-doc emission via specverb-gen (the driver grows a transport switch).
M0 scope
Parser (exec block + run grants + flag rules), engine (mount + flag policy + exec via passthrough), tests (deny-by-default, flag denial, prefix immutability, audit row), proving consumers:
ward git status|log|diff|commitandward ops forgejo admin/doctor(replacing the 4 kubectl-exec leaves). M1: egress/env policy blocks, completions,never runexplicit denials.Part of #123 (security-pure engine + thin KDL consumers). Supersedes the per-binary Go wrapper pattern named in #101.