director: config-stored default scope (org list) so the launch folder stops deciding scope #398

Closed
opened 2026-07-01 05:35:37 +00:00 by coilysiren · 2 comments
Owner

Problem

Default director scope is the cwd git origin (agent-director.md:48, resolveDirectorScope in cmd/ward/agent_director.go ~line 361). Launching warded director from a default terminal tab silently narrows every director to whatever repo that folder happens to be - in practice always coilyco-flight-deck/agentic-os. --org (ward#370) exists precisely to fan the drain across every repo an org owns, but it only activates when passed by hand, so the fleet-wide drain it was built for never runs. Scope ends up decided by which folder a tab opened in, not by intent.

Ask

Add a config-stored default scope read from ward's global config (config.GlobalDir(), e.g. a director.default-scope key). It takes a list of orgs (and optionally bare repos). When neither --repo nor --org is passed, resolveDirectorScope falls back to this config default instead of the cwd origin. Explicit --repo/--org flags still override it.

  • Expand the config default through the same --org union / de-dup / trust path (agent-director.md:51-52 - dispatch refused unless every scope repo is a trusted owner). Keep the empty-expansion error.
  • Front-load: read resolveDirectorScope and the existing config struct/load path before adding the key, so the fallback slots in cleanly and the trust check still gates the config-sourced scope.

Operator's default value

Kai's default scope should be the two orgs coilyco-flight-deck and coilyco-bridge. Explicitly not coilyco-gaming, and not the proving/providing-grounds namespace (which is not an org - excluded by omission). So her ~/.ward config sets:

director.default-scope: [coilyco-flight-deck, coilyco-bridge]

Note: that value is a host ~/.ward config setting Kai applies herself - it is not a shipped universal default (other users own different orgs). This carry ships the mechanism and documents the key. Do NOT hardcode flight-deck/bridge as ward's built-in default. Document the key in docs/agent-director.md under "Scope, ledger, trust" with the example above.

Relates

  • ward#370 - the --org scope expansion this reuses.
  • Companion to the director startup-triage issue (warming the headless lane): once scope spans the fleet by default, the startup triage pass has the whole fleet's backlog to warm from.

Mode / tier

headless-eligible. Self-contained config + scope-resolution change, direction settled, no pending human decision.

## Problem Default director scope is the **cwd git origin** (`agent-director.md:48`, `resolveDirectorScope` in `cmd/ward/agent_director.go` ~line 361). Launching `warded director` from a default terminal tab silently narrows every director to whatever repo that folder happens to be - in practice always `coilyco-flight-deck/agentic-os`. `--org` (ward#370) exists precisely to fan the drain across every repo an org owns, but it only activates when passed by hand, so the fleet-wide drain it was built for never runs. Scope ends up decided by which folder a tab opened in, not by intent. ## Ask Add a **config-stored default scope** read from ward's global config (`config.GlobalDir()`, e.g. a `director.default-scope` key). It takes a **list of orgs** (and optionally bare repos). When **neither `--repo` nor `--org`** is passed, `resolveDirectorScope` falls back to this config default instead of the cwd origin. Explicit `--repo`/`--org` flags still override it. - Expand the config default through the **same** `--org` union / de-dup / trust path (`agent-director.md:51-52` - dispatch refused unless every scope repo is a trusted owner). Keep the empty-expansion error. - Front-load: read `resolveDirectorScope` and the existing config struct/load path before adding the key, so the fallback slots in cleanly and the trust check still gates the config-sourced scope. ## Operator's default value Kai's default scope should be the two orgs **`coilyco-flight-deck`** and **`coilyco-bridge`**. Explicitly **not** `coilyco-gaming`, and not the proving/providing-grounds namespace (which is not an org - excluded by omission). So her `~/.ward` config sets: ``` director.default-scope: [coilyco-flight-deck, coilyco-bridge] ``` Note: that value is a **host** `~/.ward` config setting Kai applies herself - it is not a shipped universal default (other users own different orgs). This carry ships the **mechanism** and documents the key. Do NOT hardcode flight-deck/bridge as ward's built-in default. Document the key in `docs/agent-director.md` under "Scope, ledger, trust" with the example above. ## Relates - ward#370 - the `--org` scope expansion this reuses. - Companion to the director startup-triage issue (warming the headless lane): once scope spans the fleet by default, the startup triage pass has the whole fleet's backlog to warm from. ## Mode / tier headless-eligible. Self-contained config + scope-resolution change, direction settled, no pending human decision.
Author
Owner

HOLD / re-scope - superseded by the aos#306 config-architecture decision.

This issue was filed to add a config-stored director default-scope, and its body implied slotting a key into an existing global config struct. Correction: there is no global user-settings file in ward today (config.GlobalDir() from cli-guard pkg/config gives a state dir - backlog ledgers, reservations - not settings; repocfg.go is the per-repo .ward/ward.yaml allowlist, not user settings). So as written this would birth ward's first global config file, and where that lives is governed by aos#306 (the config-vs-code boundary + the A/B/C delivery-channel fork), which is unresolved (consult / P2, Kai picks the channel).

Do not land a standalone ward-local ~/.ward/config.yaml loader. Per aos#306's layering, config parsing belongs in cli-guard pkg/config, and director.default-scope is the operator-preference axis I have just added to aos#306 (a local ~/.ward file parsed by cli-guard, distinct from aos-authored fleet config).

Disposition:

  • The FEATURE (director default-scope from config, folder-independent, value [coilyco-flight-deck, coilyco-bridge] for Kai) stays wanted.
  • The MECHANISM is blocked on aos#306's channel decision.
  • Blocked-on-dependency on aos#306. Re-scope the build once aos#306 settles the parser + source split.

Note to the carry currently on this issue: the premise you were seeded with (add to an existing config struct) is wrong, and my earlier inline call of a ward-local loader is retracted - it contradicts aos#306. Hold rather than inventing a standalone config subsystem.

Filed from the read-only director surface (she/her).

**HOLD / re-scope - superseded by the aos#306 config-architecture decision.** This issue was filed to add a config-stored director default-scope, and its body implied slotting a key into an existing global config struct. Correction: there is **no** global user-settings file in ward today (`config.GlobalDir()` from cli-guard `pkg/config` gives a state dir - backlog ledgers, reservations - not settings; `repocfg.go` is the per-repo `.ward/ward.yaml` allowlist, not user settings). So as written this would **birth ward's first global config file**, and where that lives is governed by **aos#306** (the config-vs-code boundary + the A/B/C delivery-channel fork), which is unresolved (consult / P2, Kai picks the channel). **Do not** land a standalone ward-local `~/.ward/config.yaml` loader. Per aos#306's layering, config parsing belongs in cli-guard `pkg/config`, and `director.default-scope` is the **operator-preference axis** I have just added to aos#306 (a local `~/.ward` file parsed by cli-guard, distinct from aos-authored fleet config). **Disposition:** - The FEATURE (director default-scope from config, folder-independent, value `[coilyco-flight-deck, coilyco-bridge]` for Kai) stays wanted. - The MECHANISM is blocked on aos#306's channel decision. - Blocked-on-dependency on aos#306. Re-scope the build once aos#306 settles the parser + source split. **Note to the carry currently on this issue:** the premise you were seeded with (add to an existing config struct) is wrong, and my earlier inline call of a ward-local loader is retracted - it contradicts aos#306. Hold rather than inventing a standalone config subsystem. Filed from the read-only director surface (she/her).
Author
Owner

Re-pointing the hold above (after actually reading the aos#306 thread + #308, which I should have done before the first hold comment).

Correction to that comment: aos#306's channel decision (B fetch + C cli-guard parser) is already settled, and it covers fleet config only. So this issue is not blocked on "the #306 channel pick" - that is done and not about operator config.

director.default-scope is operator config. Its correct home is alongside #308 Bucket D / ward#396 (the fleet org-inventory externalization), as an operator's default selection over that inventory. I have raised the axis there.

Actual dependency: (1) the decided cli-guard C parser, reused for an operator-config schema, and (2) an operator-config local ~/.ward file source - to be designed with ward#396. NOT a standalone ward-local loader (my earlier inline call, retracted). Feature unchanged; dependency corrected. (she/her)

**Re-pointing the hold above** (after actually reading the aos#306 thread + #308, which I should have done before the first hold comment). Correction to that comment: aos#306's channel decision (**B** fetch + **C** cli-guard parser) is already **settled**, and it covers **fleet** config only. So this issue is not blocked on "the #306 channel pick" - that is done and not about operator config. `director.default-scope` is **operator** config. Its correct home is alongside #308 **Bucket D / ward#396** (the fleet org-inventory externalization), as an operator's default **selection over** that inventory. I have raised the axis there. Actual dependency: (1) the decided cli-guard **C** parser, reused for an operator-config schema, and (2) an operator-config **local `~/.ward` file** source - to be designed with ward#396. NOT a standalone ward-local loader (my earlier inline call, retracted). Feature unchanged; dependency corrected. (she/her)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coilyco-flight-deck/ward#398
No description provided.