ArkGate
4.8.23

Published

Hierarchical slices.

ArkGate 4.8.23 is published. Current is 4.8.25. Ships the issue #326 series (#327–#333): a universe → feature wall you can adopt one step at a time. No config migration: every new field is optional, and a config without them keeps today's output. That is Contener · Guiar · Ordenar.

Upgrade

Install 4.8.23

npm install -D arkgate@4.8.23
npx arkgate upgrade --json
npx arkgate-check --doctor

Current is 4.8.25 on npm latest. Install that unless you need this patch pinned. No schema bump.

Minimum version 4.8.23 for the new config fields. arkgate 4.8.22 and older reject childSlices and sharedImportsSlice: "deny-cross-parent" at config load. Pin 4.8.23 in the write hook and CI before you commit a config that uses them.

What shipped

Two walls you already know.

Nested wall: childSlices (#328)

An optional inner wall under today's universe wall on a peerIsolation rule. A cross-universe import is CROSS_PARENT_SLICE (never advisory). A crossing between features of one universe is CROSS_SIBLING_SLICE, deny or advisory. ruleId stays LAYER_IMPORT_VIOLATION and the baseline key does not change.

No laundering through shared roots (#329)

sharedImportsSlice: "deny-cross-parent" keeps the direct shared-root hop a warning, and ark-check and CI report CROSS_PARENT_VIA_SHARED when a slice reaches another universe only through a shared root.

Enforce one subtree at a time (#330)

childSlices.siblings may be { "default": "advisory", "enforce": [...] }. Listed children fail on a sibling crossing; the rest stay warnings and still fail when they grow past the baseline.

Whole-segment wildcards (#331)

childSlices.allowedCrossSlice accepts features/projects/*. It clears a sibling crossing inside one universe only, never a cross-parent finding.

sliceAliases (#332)

Map a folder outside the slice trees onto a child slice, such as lib/compliance/** → features/projects/compliance. Doctor lists each alias as an owed move, not a finished house.

Doctor flat-parent move card (#333)

A flat file at universe level that exactly one child slice imports gets a suggested destination inside that child that keeps its layer. A suggestion only. The reshape destination check now uses the walls' slice identity, so sliceIdentity: "stars" no longer treats two children as one slice.

Honesty

What stayed the same.

Without childSlices, behavior and output stay the same as the 4.8.22 universe wall (#327 pins it). Import rules still hold at write and at merge. Required CI is still the hard line. Cursor, Grok, and Claude can block listed writes when hooks are trusted.

Maintainer source: CHANGELOG.md ↗