feat(cmd): launch terminal commands under entry-declared security context - #558
Merged
Conversation
…text A command entry may declare meta.command.security (actor id plus policy and group references). The CLI launcher resolves it against the deployment's security registry and attaches the actor and scope to the process start context, so the command runs with a complete security context under strict mode instead of having every check denied. The block lives inside meta.command deliberately: it applies only to the trusted terminal-launcher path — the operator started the command on their own deployment — and never to ordinary spawns of the same process entry. Unknown entries, commands without the block, and unresolvable references keep today's behavior.
wolfy-j
added a commit
to wippyai/framework
that referenced
this pull request
Aug 8, 2026
The runner discovers and executes arbitrary registry entries, so it declares meta.command.security with its own actor and an unrestricted runner_policy. The CLI launcher (wippyai/runtime#558) resolves the block and installs the context at start, which restores test discovery under strict security mode — previously the actor-less runner process had every registry read denied and reported 'No tests found'.
wolfy-j
added a commit
to wippyai/kickside-module
that referenced
this pull request
Aug 8, 2026
…contract Initializer: single-pass longest-first replacement so starter-prefixed module names cannot be corrupted by rescanning replaced output; bare Starter prose falls back to the module title/name; pg_database templates to <org>_test_<module>; the initializer test skips on initialized checkouts so make verify works after init. Checks: check-module now requires the vite process.env define shim (the fleet pattern), requires shell-import-map packages to stay external, enforces the :host height + overflow scroll contract for page components (shell surface ancestors hide overflow and silently clip non-scrolling pages), and scans leftovers with identity-aware lookaheads so starter-* module names pass. Harness: depends on wippy/security so host-managed services (bootloader, migration) resolve their wippy.security:process scope under strict security mode; test targets in Makefile and make.ps1 fail on 'No tests found' (the runner exits 0 on empty discovery); strict-mode runner support arrives with wippyai/runtime#558 + wippy/test 0.4.17 — until a CLI release carries #558, CI stays pinned to the last-good version. Frontend: @wippy-fe pinned 0.0.53, define shim and full external roster in vite config (0.0.53 pulls pinia transitively; a bundled copy breaks on process.env in the shadow DOM). Blocks: canonical kickside.block/v1 example (block.write_log + function implementation) with a wiring test, so modules ship composable capability. Docs: AGENTS.md gains the live hub wiki + wippy.ai doc endpoints and a reuse-before-you-build discipline (discover hub/kickside subsystems before implementing); dev-loop documents the two-phase bootstrap and the user_security_scope overlay binding; publish excludes wippy.lock.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Strict security mode exposed that CLI terminal commands start without the actor and policy scope declared for that command. Security checks then deny because the process frame is incomplete.
Change
A command can declare its launch security context in
meta.command.security:security.Config; actor metadata is preserved and malformed known fields are rejected.system/security.ResolveConfigPairsis the single resolution path used by bothWithSecurityConfigand terminal command launch.process.Start.Context, which the terminal host applies to the process frame.WithSecurityConfigremains a compatibility wrapper: it applies all successfully resolved pairs and retains its existing tolerant behavior for unresolved references.Security boundary
The declaration lives under
meta.command, so it is honored only by the trusted CLI terminal-launch path. Ordinary process spawns do not consume it. Entries without the declaration retain their existing behavior.Verification
go test ./..., targeted race tests, and linters for the changed packages pass locally.