v2026.4.1

Previous release

AIWG v2026.4.1 — (working title TBD)

Status: In progress — building up to next stable Previous stable release: v2026.4.0 (2026-04-01)

This is a rolling draft. RC builds (rc.32, rc.33, …) accumulate work here without separate announcements. The file is finalized when the next stable tag is cut.

This release thread is mostly about closing one specific gap: when an AIWG agent lands in a project, it has to guess — which git remote drives CI, where issues live, how the team ships code, what merge style to use. Multiple guesses, multiple failure modes, all of them user-visible. v2026.4.1 makes those things declarative.


Highlights

What changedWhy you care
Project repo topology in `.aiwg/aiwg.config`New `remotes` block declares which git remote is primary (CI/issues/PRs) vs. secondary (mirrors, publishing targets). Agents stop guessing from URL patterns. (#994)
Delivery / repo-control policyNew `delivery` block declares `mode` (direct / feature-branch / pr-required), `merge_style`, `branch_naming`, force-push policy, signed-commit requirement, and operational flags. Defaults match today's behavior — no regression. (#995)
Repo topology emitted into agent context`aiwg use` now writes a `## Repo Topology` section into `AIWG.md` and the AGENTS.md template family. Agents see primary/secondary URLs at session start without reading the config. (#998)
`aiwg config show --project`Inspect resolved project config — providers, installed frameworks, resolved remotes (with URLs from `git remote get-url`). `--json` for CI scripts. (#999)
`aiwg config get/set --project`Read and write the project config from the CLI. Dotted paths (`delivery.mode`, `remotes.primary`). Enum + boolean validation on set. No more hand-editing JSON. (#1006)
Skill consumers respect resolved policy`commit-and-push`, `issue-create`, `issue-list`, `pr-review` consult `resolveRemotes()` and `resolveDelivery()` with explicit precedence — `--provider` flag > config > defaults. Self-hosted instances prompt instead of guessing. (#997, #1007)
Intake-wizard delivery question`/intake-wizard` now captures the team's delivery mode at project setup: solo / feature-branch / pr-required + advanced sub-flow. Persists to `delivery.mode`. `default_branch` derived from `git symbolic-ref HEAD` so `master → main` projects work without surprises. (#1005)
`aiwg refresh` replaces `aiwg sync`The rename matches the operation's actual semantics (re-deploy + health check). `aiwg sync` still works as a deprecated alias; removal in 2026.6.0. (#932)
`aiwg ops init` no longer nests workspacesWalks up from the target home looking for `OpsInventory.yaml`; refuses with a clear error and a suggested sibling path if it finds one in an ancestor. (#935)
`aiwg validate-metadata` doesn't crashOne-line import-path fix and a regression test that parses the `.mjs` and asserts the import resolves on disk. Catches future `dist/` layout drift. (#1001)

Repo Topology and Delivery Policy

The problem

An AIWG agent landing in a project today has to infer:

  • Which git remote drives CI? (Look at hostnames? Hope `origin` is right?)
  • Where do issues live — Gitea, GitHub, both?
  • Should it open a PR or push direct?
  • What merge style does the team use?
  • Are signed commits required?

Each of those is a guess. Each guess has a failure mode visible to the user — opening an issue against the wrong tracker, force-pushing on a project that forbids it, picking the wrong merge style, etc.

The fix

Two new optional blocks in `.aiwg/aiwg.config`:

{
  "remotes": {
    "primary": "origin",
    "issue_tracker": "origin",
    "ci": "origin",
    "secondary": [
      { "name": "github", "purpose": "public-mirror", "push_on_release": true }
    ]
  },
  "delivery": {
    "mode": "pr-required",
    "default_branch": "main",
    "merge_style": "rebase-merge",
    "delete_branch_on_merge": true,
    "require_ci_green": true,
    "force_push_policy": "never",
    "auto_close_issues": true,
    "issue_comment_on_cycle": true
  }
}

Both blocks are optional. When absent, `resolveRemotes(undefined)` and `resolveDelivery(undefined)` return defaults that match exactly what AIWG agents do today — adding the schema doesn't shift behavior for existing projects.

Resolved view

$ aiwg config show --project
Project config: /home/user/proj/.aiwg/aiwg.config

Schema version: 1
Providers:      claude, codex
Installed frameworks:
  - sdlc v2026.4.0 → claude, copilot, codex

Remote topology:
  Primary       : origin ([email protected]:roctinam/aiwg.git)
  Secondary     : github (https://github.com/jmagly/aiwg.git) — public-mirror [push tags on release]

Mutation from CLI

aiwg config set --project delivery.mode pr-required
aiwg config set --project delivery.merge_style squash
aiwg config set --project delivery.require_signed_commits true

aiwg config set --project delivery.mode banana
# ✗ Invalid value for delivery.mode: 'banana'.
#   Allowed: direct, feature-branch, pr-required

What agents see at session start

`aiwg use` interpolates this into `AIWG.md` (and the AGENTS.md template family for codex/cursor/factory/hermes/opencode):

## Repo Topology

Agents: respect this when picking remotes/providers. From `.aiwg/aiwg.config` `remotes` block (#994).

- **Primary**: `origin` ([email protected]:roctinam/aiwg.git) — issues, PRs, CI live here
- **Secondary**: `github` (https://github.com/jmagly/aiwg.git) — public-mirror (push tags on release)

No more `git remote -v` reconnaissance.


Migration

Non-breaking. Projects with no `remotes` or `delivery` block keep working exactly as before. Teams opt in by:

1. Running `/intake-wizard` (asks the delivery-policy question) 2. Or hand-adding the blocks to `.aiwg/aiwg.config` 3. Or via `aiwg config set --project delivery.mode pr-required` etc.

`aiwg doctor` will warn when declared remote names are missing from `git remote -v` and when delivery enums are out of range.


Install / Upgrade (next channel)

npm install -g aiwg@next       # latest RC
aiwg refresh                   # re-deploy after upgrade
aiwg doctor                    # verify
aiwg config show --project     # inspect resolved policy

What's Next (in this thread)

  • Branch-protection sanity check for `delivery.mode = direct` (deferred from #1006 — needs authenticated round-trip to the forge API)
  • Wire remaining 4 providers through topology emission: copilot, warp, windsurf, openclaw (deferred from #998 — each has a unique deploy path not routed through `createAgentsMdFromTemplate`)
  • Storage backend adapters progress (#959 notion, #960 anythingllm, #962 s3, #963 webdav)

This file rolls forward as new RCs land. Final once cut to stable.