Verbose Taskfile Toggle Script Specification

Purpose

Implement a Bun script that traverses a plugin directory, locates the target ops file, finds the specified task in the Taskfile, and updates its silent setting.

The script must work without external Node dependencies.

It should use yq for YAML editing and assume yq is already installed and available in PATH.

Expected Taskfile Format

tasks: : silent: true|false

Example:

tasks: sync: silent: true

Command Format

Arguments are positional and must be provided in this order:

...

Arguments

Boolean value: true or false

Controls the value of silent for the target task. • true → set silent: true • false → set silent: false

Boolean value: true or false • If true, ask the user for confirmation • If confirmed, restore the target file using Git • If false, continue with the normal update flow

...

One or more path segments followed by the task name as the final element.

Rules: • All values except the last one are treated as directory names • The last value is treated as the task name • The first value determines the root directory (see Traversal Logic)

Example:

trustable doctor check

Would mean: • First value: trustable → resolves to olaris-trustable plugin directory • Remaining directory path: doctor • Task name: check

Example:

debug kube info

Would mean: • First value: debug → resolves to debug folder inside OPS_ROOT • No additional directory segments • Task name: info

Traversal Logic 1. Take the first value from 2. Check if a plugin directory olaris- exists inside $OPS_ROOT_PLUGIN • If it exists, use that directory as the root and continue with the remaining values 3. Otherwise, use $OPS_ROOT as the root and keep all values (including the first) 4. From the resolved root, descend into the directory tree using all remaining values except the last one 5. Treat the final value as the task name 6. Locate the ops file in the resolved directory 7. Find the target task under:

tasks.

8.	Update:

tasks..silent

Environment Variables

OPS_ROOT

The main olaris plugin directory. Used as the root when the first is not a plugin name. Required if the first does not match a plugin.

OPS_ROOT_PLUGIN

The parent directory containing olaris-* plugin directories. Required if the first matches a plugin name.

Reset Behavior

If is true: 1. Ask the user for confirmation 2. If confirmed: • Run Git restore/reset on the target file • Revert the file to the version stored in Git 3. Do not perform any silent modifications

Example confirmation prompt:

Restore ops file from Git? [y/N]

YAML Update Behavior

When not resetting: • Use yq to modify the YAML file in place • Update:

tasks..silent

Mapping: • = true → silent: true • = false → silent: false

Example:

Before:

tasks: sync: silent: false

Command:

verbose true false debug aws s3 sync

After:

tasks: sync: silent: true

Example Commands

Enable Verbose Output (main olaris)

verbose false false debug kube info

Behavior: • First cmd: debug → no olaris-debug plugin found • Use $OPS_ROOT as root • Descend into debug/kube • Set tasks.info.silent = false

Disable Verbose Output (plugin)

verbose true false trustable doctor check

Behavior: • First cmd: trustable → olaris-trustable exists in $OPS_ROOT_PLUGIN • Use olaris-trustable as root • Descend into doctor • Set tasks.check.silent = true

Reset File From Git

verbose false true debug kube info

Behavior: • Ask for confirmation • Restore the target file from Git

Error Conditions

Fail with a clear error if: • OPS_ROOT is not set and first is not a plugin • OPS_ROOT_PLUGIN is not set and first matches a plugin • The root directory does not exist • The target directory does not exist • The ops file is missing • The task does not exist in the Taskfile • yq is not available in PATH • An invalid boolean value is provided • Fewer than 3 arguments provided

Example errors:

OPS_ROOT is not set.

Task ‘sync’ not found in ops file.

Could not find ops file in directory: debug/kube