AIWG 2026.9.10 — Nothing that looks clean is quietly empty
AIWG 2026.9.10 — Nothing that looks clean is quietly empty
Release date: 2026-09-14
Channel: stable
Most of this release is one failure mode, found in six places: a check that cannot fire reads exactly like a check that passed. A lint target that excludes every rule reports PASS. A drift report lists artifacts that are byte-identical to their source. A deploy lands over a cap the same tool flags a moment later. A warning points at a command that re-emits the warning. None of these looked like bugs while they were happening, which is why they lasted.
If you run AIWG in a nested workspace, or lint a subdirectory, or deploy to Codex with bundles, this one is worth taking.
A lint run that applies no rules now says so
`aiwg lint documentation/references --ruleset research` reported 2,542 files and zero findings. `aiwg lint . --ruleset research` reported 34 findings in the same files with the same ruleset. The rule's glob is written from the project root (`documentation/references/**/*.md`) while the walk was rooted at the target, so narrowing the target to the directory you care about — the natural thing to do — silently matched nothing and printed PASS.
Globs now resolve the same way wherever the walk starts. And because a run that applies no rules should never be indistinguishable from a clean one, output now names how many of the selected rules applied, lists the ones that matched nothing, and says plainly that zero applied is not a clean result.
Two smaller things in the same area: files git ignores are skipped by default (`--no-gitignore` opts back in), so regenerated trees stop reporting findings about their own generated text; and a reference sitting beside an absence marker — "REF-2464 remains unallocated after deduplication" — is read as documentation of a deliberate gap rather than a dangling reference. Silencing that previously meant deleting accurate documentation or allocating a REF that is deliberately absent.
The recommended retraction convention works at any length
`research/uncertainty-registered` accepts "an outcome with a date". The retraction convention written for it supplies exactly that:
~~<original limitation>~~ **Done YYYY-MM-DD (<what closed it>).** <evidence>
It was accepted when the struck text was one sentence and rejected when it was two — the accepting window ended at the clause, before the `Done <date>` that closed it. A struck span followed by a dated outcome on the same line is now a completed retraction whatever its length, an explicit dated closure discharges an uncertainty outside struck spans too, and the fix hint names the retraction form instead of only listing obstacles.
Drift you can actually clear
`aiwg doctor` reported every project-local artifact as drifted immediately after a clean `aiwg use`, and re-running the deploy never cleared it. The entire difference was the managed marker the deployer writes itself. The check now judges "differs from source" against the source: a deployed file that equals its source plus the marker matches, whichever recorded hash the registry happens to hold. Real edits are still detected.
Codex deploys stay under the startup listing cap
A default deploy produced a skill set the same run then flagged as over Codex's 8,000-character startup listing cap, and the only remediation offered was `--force` — which replaces unmanaged files and does nothing for the budget.
The deployer now projects the listing and places overflow on the standard tier, largest entry first and never a kernel skill, naming what moved. Overflow skills stay indexed, so `aiwg discover` and `aiwg show` still return them. A plain redeploy re-places an over-cap deployment without `--force`. An explicit `--copy-all` still means what it says: everything in the listing. `AIWG_CODEX_LISTING_CAP` overrides the cap; `0` disables it.
`--force` guidance changed too. The unmanaged-file advisory lists up to ten files and points at a `--force --dry-run` preview, so the overwrite set is visible before anything is overwritten.
Rules are budgeted for subagent dispatch, not just the session
Dispatching `aiwg-steward` failed with `Prompt is too long` before its first tool call, in a project whose startup-context check read `~97K of 200K, ok`. Two reasons: the check measured only the project's own rules, while Claude Code also inlines each ancestor directory's memory file and rules directory; and a subagent inherits that whole surface plus its own definition and still needs room to work.
Rule deployment now reconciles `.claude/rules/` against a 64K-token inline budget after every deploy pass. HIGH rules beyond it move on demand — never CRITICAL, never the indexes — and are listed in `RULES-ONDEMAND.md` under their own heading with the `aiwg show rule` fetch hint. They remain binding. `AIWG_RULES_INLINE_BUDGET_TOKENS` sets the budget; `0` disables it. `aiwg doctor` gained a `Subagent Dispatch` check that fails when the inlined surface leaves no room, and names the ancestor contribution.
Recovery commands work while the installation is drifted
An installation identity mismatch blocked every command except `installation`, including `status`, `doctor`, `runtime-info`, `version`, and the documented `discover --backend local` fallback — the steward's whole recovery ladder. Those read-only commands now run under drift and print the drift first; `version` reports a same-root method mismatch, and `status --probe --json` carries an `installation` block with `mutations_blocked`. Everything that writes still fails closed. `aiwg discover --backend local "<phrase>"` also parses correctly when the flag comes before the phrase, which is how the fallback is documented.
Two warnings that had no exit
`aiwg doctor`'s Permissions line pointed at `steward permissions audit`, which re-emitted the same warning, while `migrate --dry-run` reported "0 legacy sources" and never said it would write anything. A project with no legacy permissions now gets an informational line pointing at `aiwg steward permissions migrate --apply`, and migrate says it writes the initial default-deny block.
The Model Policy line flagged deployed agents carrying bare model aliases, which consuming projects could not fix because the source is here. Claude deploys now compile a bare alias to its pinned variant (`sonnet` → `claude-sonnet-4-6`, `opus` → `claude-opus-4-7`, `haiku` → `claude-haiku-4-5`), so a subagent dispatch never inherits a 1M-context parent. Source frontmatter stays provider-neutral; pinned ids, `inherit`, and `[1m]` opt-ins deploy unchanged.
Operator context stays in the load path
`aiwg regenerate --existing-project` moved a provider startup file's operator content to `.aiwg/context/providers/<PROVIDER>.md` and linked it from WORKSPACE.md. No bootstrap imports that file, and the next `aiwg use` dropped the link — so operator policy left the agent's context with nothing reporting it.
Provider startup files are bootstrap surfaces. Their operator content now ports into the WORKSPACE.md operator block, verbatim and attributed, which every provider bootstrap loads and which regeneration preserves. Tables, procedures and code blocks survive intact. Links to previously migrated files survive `aiwg use`, doctor reports such files as not auto-loaded, and identical directives shared by two files are reported once per pair rather than once per line.
Also in this release
- Fortemi dataset execution validates the advertised capability descriptor and
binds negotiation to it, with shared SemVer and wire vectors rather than shared code (#2242).
- A control-API-backed Cockpit desktop panel and inventory entry, gated on the
runtime advertising both the identity verifier and the desktop backend (#2547).
- A Keycloak (OIDC) verifier for the desktop identity boundary (#2545).
- `llm-model-archivist`, a media-curator agent that discovers, ranks and
preserves open-weight models in original-precision weights (#2554).
- `address-issues-threat-assess` no longer flags an issue because of the
orchestrator's own prior cycle comments (#2549).
Upgrading
npm install -g aiwg@latest
aiwg doctor
Projects on a prior version pick up the rule budget and the Codex listing budget on the next `aiwg use`. `aiwg doctor` reports the new `Subagent Dispatch` line and, on a nested workspace, the ancestor rule contribution it was previously blind to.