Agentic AI Atlasby a5c.ai
OverviewWikiGraphFor AgentsEdgesSearchWorkspace
/
GitHubDocsDiscord
iiRecord
Agentic AI Atlas · WP-RN-05 record: Phase-1 package renames — the full §3.1/§3.2 matrix
page:docs-specs-platform-gaps-phase1-rn-05-renamea5c.ai
Search record views/
Record · tabs

Available views

II.Record viewspp. 1 - 1
overviewarticlejsongraph
III.Related pagespp. 1 - 1
II.
Page reference

page:docs-specs-platform-gaps-phase1-rn-05-rename

Reading · 18 min

WP-RN-05 record: Phase-1 package renames — the full §3.1/§3.2 matrix reference

Executed 2026-09-29 on branch phase1/rename-train of a5c-ai/fabric (base 531975433 = origin/staging). Spec: docs/specs/platform-gaps/15-private-isolation-rename.md §3.1 (43 publishables), §3.2 (8 renamable private workspaces + the 8-shell retirement row), §3.4/§3.5 (env vars and directories do NOT change in RN-1), §4.3 (guards G1–G6) and "WP-RN-05"; intent 00-intent.md D10 (major bump, no shims) and D17–D21; roadmap 50-roadmap-workpackages.md Phase 1 / M1. Builds on the Phase-0 records phase0/publish-guards.md (selector deferral), phase0/no-double-rename.md (baseline oracle) and phase0/scope-relock.md (@fabricstack).

Pagewiki/docs/specs/platform-gaps/phase1/rn-05-rename.mdOutgoing · 0Incoming · 1

WP-RN-05 record: Phase-1 package renames — the full §3.1/§3.2 matrix

Executed 2026-09-29 on branch phase1/rename-train of a5c-ai/fabric (base 531975433 = origin/staging). Spec: docs/specs/platform-gaps/15-private-isolation-rename.md §3.1 (43 publishables), §3.2 (8 renamable private workspaces + the 8-shell retirement row), §3.4/§3.5 (env vars and directories do NOT change in RN-1), §4.3 (guards G1–G6) and "WP-RN-05"; intent 00-intent.md D10 (major bump, no shims) and D17–D21; roadmap 50-roadmap-workpackages.md Phase 1 / M1. Builds on the Phase-0 records phase0/publish-guards.md (selector deferral), phase0/no-double-rename.md (baseline oracle) and phase0/scope-relock.md (@fabricstack).

The public repository a5c-ai/babysitter was never written to: gh api repos/a5c-ai/babysitter --jq .pushed_at → 2026-09-16T19:59:50Z at start and end (only GET calls were issued); git remote -v → upstream no_push (push). Nothing was published to any registry, no tag was created, no PR was opened.

What changed

Every change is driven by the machine-readable matrix scripts/lib/rename-spec.cjs (which parses spec 15), never by a hand-typed list. **Directories do not move** (RN-3, WP-RN-10): every package keeps its current directory; only names, publishConfig, dependency edges, import specifiers, scripts, workflow invocations, the lockfile and versions change.

SurfaceChange
43 publishable manifests (§3.1)name → @fabricstack/<neutral name>; publishConfig → { "registry": "https://us-central1-npm.pkg.dev/boot-464019/fabric-npm/" } (no access: "public", G1); version → 7.0.0
8 renamable private workspaces (§3.2)@a5c-ai/kip-sdk→@fabricstack/memory, kradle-sdk→control-plane-sdk, kradle-cli→control-plane-cli, kradle-web→admin-console, kradle-jitsi-agent-sidecar→meeting-sidecar, atlas-webui→catalog-webui, genty-tui-plugins→console-tui-plugins, a5c-commander (apps/commander)→@fabricstack/ops-console; private: true kept; versions → 7.0.0 (the §3.2 note "rename rides RN-3" for the commander is read as the *directory* move: the WP-RN-05 objective names all 8 workspaces)
8 retirement-listed shells (§3.2 last row, T-27)names, versions and private: true untouched (@a5c-ai/genty-{web,desktop,mobile-android,mobile-ios,tv-androidtv,tv-appletv,watch-watchos,watch-wearos}-app); only their dependency edges on renamed packages were renamed and pinned (interaction rule 4)
Internal dependency edgesevery dependencies/devDependencies/peerDependencies/optionalDependencies entry naming a renamed package → new name, pinned exactly to 7.0.0 (also packages/atlas/webui's former "@a5c-ai/atlas": "*" → "@fabricstack/catalog": "7.0.0", and the root "@a5c-ai/adapters": "^6.0.0" → "@fabricstack/harness-sdk": "7.0.0")
Root package.jsonversion → 7.0.0; every --workspace=@a5c-ai/* script invocation renamed; workspaces globs unchanged
Lockstepscripts/sync-workspace-versions.mjs now keys the synchronized family on the private scope from the root fabric block and was run with --version 7.0.0: plugins/{babysitter,atlas}-unified/plugin.json, plugins/{babysitter,atlas}-unified/versions.json (sdkVersion/extensionVersion; there is no root versions.json — review round 1 record correction) and the three marketplace manifests (.agents/plugins, .claude-plugin, .cursor-plugin) carry 7.0.0
package-lock.jsonregenerated with npm install --legacy-peer-deps (never deleted): 50 @fabricstack/* workspace links, root 7.0.0; the only @a5c-ai/* nodes left are the external dependency @a5c-ai/compendium@0.1.1 (resolved from npmjs, not a workspace) and the 8 retired-shell links. The 64 extraneous: true nodes (packages/agent-mux/*, packages/tula/*, packages/krate/*, packag../tula-platform) are pre-existing at 531975433 (stale directories of an earlier machine) and are not in the install graph; no non-link node was added, removed or changed
Import-specifier sweep4,399 replacements in 3,193 files across packages/ apps/ library/ e2e-tests/ scripts/ .github/workflows/ action.yml vitest.config.ts tsconfig.json and the tool-input documents docs/generated/package-plugin-docs-coverage.json and docs/adapters/terminology-and-structure-gaps/binary-renames.md; plus the two tracked dist-types/ trees of the retired mobile shells (4 files) and, after restoring it, the retired desktop shell (5 files; see "Incident"). Regex: the 50 scoped old names, longest first, followed by a name boundary ((?![A-Za-z0-9-])), so @a5c-ai/babysitter never touches @a5c-ai/babysitter-pi and subpath imports (@a5c-ai/atlas/catalog) are renamed
Hooks template namepackages/adapters/hooks/cli/src/cli/adapter-loader.ts gained hooksAdapterPackageName(id) = @fabricstack/harness-hooks-<id> with the one template rename of §3.1 rows 22–33 (genty → agent-runtime, mirrored by rename-spec.cjs TEMPLATE_ID_RENAMES); used by adapter-loader, commands/doctor.ts, __tests__/packaging.test.ts (and the cli.test.ts mock). The CLI still does not pin the Genty leaf (its //deferred-dependency note, FIX-005), so the mapping is encoded but not exercised at runtime
Docs executed by CIthe three documents whose npm run … --workspace= commands docs:snippets executes (docs/cli-examples.md, docs/v6-spec-and-roadmap/{v6-implementation-roadmap,testing-framework}.md) were swept (27 replacements) so the documented commands resolve

Counts: node scripts/lib/publishable-packages.cjs | jq length → **43**, all @fabricstack/* (0 outside the scope); git diff --stat of the three commits: 65 + 3186 + tooling files.

Commands run (from `C:/work/fabric`)

text
node <scratch>/rename-train.cjs --apply --no-md          # phase A manifests (rename-spec.cjs matrix), phase B sweep
node scripts/sync-workspace-versions.mjs --version 7.0.0  # lockstep (after pointing it at the private scope)
npm install --legacy-peer-deps                            # lockfile regeneration (24 s: added 50, removed 51, changed 1)
node scripts/ci/no-double-rename.cjs --write-baseline     # 59 packages: 51 new names + 8 retired shells
npm run build:runtime && npm run build:observer && npm run build:cloud && npm run build:atlas && npm run build:kip
npm run build:adapters && npm run build:hooks-adapter && npm run build:kradle && npm run build:realtime-flow && npm run build:adapters-extensions && npm run build:kradle-web
npm run test:architecture && npm run test:sdk && npm run test:effect-baseline && npm run test:release-tooling
npm run test:publish-guards && npm run test:no-double-rename && npm run test:package-renames && npm run test:binary-renames
node scripts/release-version.cjs verify-manifests --version 7.0.0
<orchestrator gate, verbatim — see "Gates">

Tooling flips and the private-train flag decision

Spec 15 §4.3 G1 requires the inventory selector to change "in the same commit" as the manifests. WP-RN-04 had implemented the RN-1 selector behind FABRIC_PRIVATE_TRAIN=1. This WP flips it:

ComponentNow
scripts/lib/registry-pin.cjs selectsForPublishunconditionally private !== true && publishConfig.registry === <AR URL> && name in @fabricstack — **the legacy opt-out (FABRIC_PRIVATE_TRAIN=0) was NOT kept**: a selector keyed on publishConfig.access === "public" selects zero packages after the rename, so an opt-out would be a trap, not a feature
scripts/lib/publishable-packages.cjsno privateTrain option; resolves the workspace globs before reading the registry config (an unsupported glob stays the first error)
G2(b) (manifestProblems: legacy-scope-name, publishable-outside-private-scope)unconditional over every manifest that can publish (retirement shells are private → exempt by construction)
G2(d) (scripts/lib/release-version.cjs collectVersionDivergences)unconditional: the synchronized family is @fabricstack/*; a legacy @a5c-ai/* dependency is a divergence **iff it is an internal name** (spec 15 §3.1/§3.2 current-name column via rename-spec.cjs) — the guard had been stricter than the spec text ("internal dep") and flagged the third-party @a5c-ai/compendium
G6 (scripts/verify-release-artifacts.mjs scope step)unconditional: any tarball that is not private-scope fails before install
scripts/ci/publish-isolation-guard.cjsmanifest rules unconditional; scripts/ci/fixtures/no-double-rename/ excluded from the real scan like its own fixtures (that gate's negatives carry public @a5c-ai/* manifests by design); workflow rules G2(c)/G3 still flag-gated
scripts/ci/bin-collision-guard.cjs (G5)LEGACY_COLLISIONS re-keyed on the renamed owners (@fabricstack/orchestrator+orchestrator-sdk, harness-sdk+orchestrator-sdk, orchestrator-sdk+harness-hooks-cli, control-plane+control-plane-cli); until the bin cutover a publishable private-scope package may still declare exactly the legacy bins of its own §3.1 row ("Current package — bins", now parsed by rename-spec.cjs as currentBins; the "Bin(s)" column as newBins) — reported as carry-over notices (33 on the tree), any other public-train or off-spec bin is still an error; public-train-bin/bin-not-in-spec apply to *publishable* owners only (private §3.2 workspaces such as memory's kip/kip-mcp ship dev-only bins outside the spec column; they remain subject to duplicate-bin); public-train-bins-drift now compares PUBLIC_TRAIN_BINS with the spec-derived union (26 = 26) instead of the (now empty) live legacy inventory
FABRIC_PRIVATE_TRAIN=1 / --private-trainkept, with a narrowed meaning documented in registry-pin.cjs: assert the two surfaces still ahead in the train — the G5 bin end-state (WP-RN-06: tolerance retired, spec-bins-missing, public-train-bin, bin-not-in-spec) and the whole-tree workflow rules G2(c)/G3 (WP-RN-07). Default OFF for those; the inventory ignores it
scripts/check-package-metadata.cjs (guard:packages)public surfaces must pin publishConfig.registry and carry no access; "managed by namespace" = private scope; RELEASE_MATRIX_SURFACES = [] with a tracked-gap comment — the inherited publish-packages-from-tag.yml publishes the public train to npmjs and by D19 may never name a @fabricstack/* package, so it cannot be the private inventory's release surface; **WP-RN-07 must register the AR publish workflow there** to make the coverage gate live again
scripts/check-package-renames.cjs (test:package-renames)rewritten against spec 15 (was: a 20-row parser of docs/adapters/terminology-and-structure-gaps/package-renames.md that already failed on staging with "found 13"): every §3.1/§3.2 unit carries its new name in its current directory, every retirement-listed shell keeps its name, and no old name survives in the RN-1 sweep scope (structured scan of package-lock.json ignoring extraneous nodes; .md/.mdx/.mdc are WP-RN-13's) except an explicit, reasoned allowlist (ALLOWED_LEGACY_REFERENCES)
scripts/lib/gateway-engine-floor.cjsits private copy of the old access === "public" selector made the gateway-reachability walk return nothing; it now uses selectsForPublish
scripts/docs-code-samples-check.cjsguard fixture trees are excluded from its package-name map: the WP-RN-04 G5 fixtures carry @fabricstack/orchestrator-sdk and shadowed the real SDK once it took that name
Five package-level verify:release gates (packages/adapters/{core,extensions}, packages/genty/{tui,ui}, packages/kradle/installer)assert publishConfig.registry === <root fabric.privateRegistry> and no access instead of access === "public"

Tests adjusted, and why

  • scripts/__tests__/publishable-packages.test.mjs: census is the 43 spec 15 names; a new test pins inventory == §3.1 new-name column, each in its pre-RN-3 directory; entries must pin AR, carry no access, be at 7.0.0; the git-tracked oracle uses the G1 predicate.
  • scripts/ci/publish-guards.test.mjs: the two "selector deferral" tests became "selector (RN-1)" tests (43 @fabricstack entries, CLI byte-identical to the G1 oracle with the flag unset, =1 and =0; a legacy or public-access manifest is never selected); G1 rules: a publishable legacy manifest always trips legacy-scope-name, a private legacy shell does not; G2(d) test uses a genuinely legacy internal name (built with join() so a future sweep cannot rewrite it) and proves @a5c-ai/compendium is not flagged, plus the real tree has zero divergences; the eight workflows that now name @fabricstack/* workspaces are the expected touchingPrivate set and the three legacy npmjs workflows are asserted NOT swept; G5: tolerance keyed on new names, carry-over notices present, under the flag all four bin rules trip; G6: unconditional.
  • scripts/ci/no-double-rename.test.mjs: the baseline oracle is now the §3.1/§3.2 **new-name** column plus the 8 retirement-listed names (59), @fabricstack/ops-console replaces a5c-commander; an old name in a spec directory now also trips legacy-scope-new-unit (it is no longer baselined); the "moved elsewhere" notice case uses the new name; the spec-10 allow-rule test cites an existing unit by a join()-built legacy name. Gate fix: the "baselined at another directory" notice was unreachable for private-scope names (it sat in the legacy-scope branch) — now independent of scope.
  • scripts/ci/fixtures/no-double-rename/positive/baseline-unchanged: @fabricstack/catalog at packages/atlas, pinned to AR (renamed in place); publish-guards/g1/positive/pinned/packages/legacy-unit: @a5c-ai/legacy is now private: true (the retirement-list shape; a publishable legacy unit is no longer a positive); publish-guards/g5/negative/public-train-bin: @fabricstack/orchestrator declares atlas (another row's bin) instead of its own carry-over babysitter, so the negative still trips in default mode.
  • scripts/__tests__/fixtures/fix011/* (9 verifier fixtures): renamed to @fabricstack/fix011-<case> and pinned to AR — G6 refuses any other scope before the steps those tests exercise; verify-release-artifacts.test.mjs reads reports as fabricstack__<id>.json.
  • scripts/__tests__/{release-version,release-promotion,verify-published-release,publish-package-from-tag}.test.mjs: synthetic fixture repositories carry the root fabric block (the selector and G2(d) read it) and private-scope, AR-pinned fixture packages (@fabricstack/fixture-*) instead of @a5c-ai/fixture-* / @fixture/* with access: public (which the selector no longer selects). The npm-stub tests among them cannot run on Windows (pre-existing); CI verifies them.
  • scripts/__tests__/release-matrix.test.mjs: EXPECTED_HOOKS_LEAVES sorted (harness-hooks-agent-runtime sorts first now); leaf prefix @fabricstack/harness-hooks-.
  • packages/adapters/hooks/cli/src/__tests__/{cli,packaging}.test.ts: hooksAdapterPackageName.
  • Four release-verification.test.ts fixtures (adapters/core, genty/tui, genty/ui, kradle/installer): publishConfig.registry instead of access: public.

Residuals of `grep -rn "@a5c-ai/" --include=package.json --include=*.ts --include=*.tsx --include=*.js --include=*.mjs --include=*.cjs --include=*.json -l packages apps scripts library | sort`

Verbatim (with a full install) the command also lists installed third-party copies under node_modules/ (e.g. the public @a5c-ai/* packages pulled in by @a5c-ai/compendium) and dist//dist-types//.next/ build output — 364 such files at the time of the full install; excluding those, the **64** tracked-relevant files and their one-line justification:

FilesToken(s)Why it stays
packages/genty/{desktop,mobile-android,mobile-ios,tv-androidtv,tv-appletv,watch-watchos,watch-wearos,web}-app/package.json (8)their own namesspec 15 §3.2 retirement list (T-27): "retired, not renamed"
scripts/check-architecture-boundaries.cjs, scripts/bump-version.mjs, scripts/ci/no-double-rename.cjs (RETIRED_UNITS), scripts/ci/fixtures/no-double-rename/baseline-packages.json, scripts/__tests__/publishable-packages.test.mjsretired-shell namesclassify / baseline / assert the retirement list
packages/babysitter-sdk/src/harness/install.ts (+ __tests__/install.test.ts), packages/kradle/installer/src/sdk/agents.ts, packages/kradle/installer/tests/plans.test.ts, packages/adapters/extensions/src/__tests__/piAgentEndHook.regression.test.ts, scripts/docs-freshness-report.cjs, scripts/fix-broken-latest-tags.mjs, scripts/test-atlas-plugins.mjs, library/processes/shared/{db-agent-explore,local-db-build,n-strikes-escalation,scene-context-builder,source-discovery}.js, library/specializations/meta/assimilation/harness/shared-assimilation.js@a5c-ai/babysitter-<harness>, @a5c-ai/babysitter-library, @a5c-ai/atlas-<harness>public marketplace plugin package ids installed into third-party harnesses from npmjs — the blueprints/plugins surface (spec 15 §3.4 last paragraph; RN-4, WP-RN-11); not in the §3.1/§3.2 matrix
packages/atlas/webui/{package.json,components/ThemeToggle.tsx,components/ui/{badge,button,input}.tsx}, scripts/lib/release-version.cjs (comment), scripts/ci/publish-guards.test.mjs@a5c-ai/compendiumexternal npm dependency (non-link lockfile node), not a fabric package
packages/adapters/gateway/examples/push-relay/package.json (@a5c-ai/adapters-push-relay-example), packages/adapters/gateway/src/static/webui-server.ts (@a5c-ai/genty-webui, optional external package), packages/adapters/tasks/.copilot/mcp-config.json + .cursor/mcp.json (npx -y @a5c-ai/breakpoints-adapter, harness config for a public npm package), packages/kradle/installer/src/terraform/root.ts (@a5c-ai/cloud in a generated README header), packages/atlas/src/catalog/catalog.test.ts (@a5c-ai/catalog catalogue id) and {consumer-imports,final-removal,workspace-metadata}.contract.test.ts (@a5c-ai/agent-catalog legacy alias also in root vitest.config.ts), packages/kip-sdk/src/__tests__/kip-mcp.test.ts (prose glob @a5c-ai/genty-* in a describe title), packages/observer-dashboard/src/lib/__tests__/ensure-local-deps.test.ts (@a5c-ai/fake-dep), scripts/check-package-metadata.cjs (@a5c-ai/agent-core, an old-name tombstone check), scripts/docs-qa-config.cjs (@a5c-ai/voice-adapter, comment)names that were never in the matrixnot fabric workspace packages; nothing to rename in RN-1
scripts/ci/fixtures/publish-guards/{g1/negative/foreign-scope-on-ar,g1/negative/legacy-scope-private-train,g1/positive/pinned,g6/negative/legacy-scope-on-ar}/**, scripts/ci/fixtures/no-double-rename/negative/{legacy-scope-new-unit,old-name-in-spec-dir}/**, scripts/ci/fixtures/public-push-guard/positive/package-metadata.json@a5c-ai/{mis-scoped,legacy,new-unit,atlas,positive-fixture}guard fixtures that must present legacy-scope inputs to prove the guards reject (or, for the push guard, ignore) them
scripts/ci/publish-guards.test.mjs, scripts/ci/no-double-rename.test.mjs, scripts/__tests__/release-matrix.test.mjslegacy sample inputs (@a5c-ai/{legacy,mis-scoped,acp,atlas,contracts,new-unit,genty-web-app}; release-matrix: workflow-text fixtures @a5c-ai/{anchor,only-in-a-comment,real-package,trailing-comment,after-a-positional-count} and the old hooks prefix in a comment)tests of the legacy-rejection paths and of comment-stripping over workflow text
scripts/ci/publish-isolation-guard.cjs, scripts/ci/check-spec10-names.cjs, scripts/lib/rename-spec.cjs, scripts/check-package-renames.cjs, scripts/ci/bin-collision-guard.cjsthe scope string / current-name parsing / documented pre-rename ownersthe guards that encode the legacy scope on purpose
scripts/publish-package-from-tag.mjs, scripts/sync-atlas-plugin-repos.mjs, scripts/sync-external-plugin-repos.mjsname.startsWith('@a5c-ai/')the public-train publish helper (WP-RN-07 retargets it; its comments were swept) and the external plugin-repo sync (marketplace surface, WP-RN-11)

Deliberately outside the RN-1 sweep (not residual defects): .github/workflows/{publish-packages-from-tag,fix-npm-tags,live-stack-published}.yml (legacy npmjs train; naming @fabricstack/* there would be a G2(c) finding — WP-RN-07), packages/atlas/graph/** (105 YAML + 169 Markdown catalogue records describing the public ecosystem by its public npm names, which D17 keeps), all Markdown/.mdc (992 hits: READMEs, skills, process-library docs — WP-RN-13), plugins/ and blueprints/ (WP-RN-11), docs/ other than the three snippet-executed pages and the two tool inputs, docs-site/, .a5c/, .claude/, .codex/, .changeset/ (removed by WP-PKG-02), e2e-tests/**/*.md, video/.

Gates (from `C:/work/fabric`)

Orchestrator gate, verbatim, final run after every change: N=$(node scripts/lib/publishable-packages.cjs | jq -r 'length') && test "$N" = "43" && node scripts/lib/publishable-packages.cjs | jq -r '.[] | (.name // .)' | grep -vc "^@fabricstack/" | grep -qx 0 && node scripts/release-version.cjs verify-manifests --version 7.0.0 && node scripts/ci/publish-isolation-guard.cjs --self-test && node scripts/ci/no-double-rename.cjs --self-test && node scripts/ci/public-push-guard.cjs && npm run guard:packages && echo RN05-PASS →

text
All synchronized manifests are at release version 7.0.0.
publish-isolation-guard self-test: 14/14 assertions passed
publish-isolation-guard: self-test passed; repository scan clean (101 files, 0 findings, 8 legacy-train notice(s))
ok   repository scan — 59 manifest(s), 0 findings, 0 notice(s), 0 new unit(s)
no-double-rename self-test: 10/10 assertions passed (7 negative, 2 positive fixtures; retirement list: 8 units)
public-push-guard: scanned 215 files, 0 finding(s), 0 suppressed
✓ package-integrity guard passed (lockfile sync, native bindings, metadata, arch boundaries).
RN05-PASS

Suites (Node built-ins only, green after the last change): test:publish-guards 17/17; test:no-double-rename 16/16; scripts/__tests__/publishable-packages.test.mjs 8/8; gateway-engine-floor.test.mjs 6/6; test:package-renames → "51 renamed packages (43 publishable + 8 private) and 8 retirement-listed shells; 113 allowed legacy reference file(s)"; test:binary-renames → "single-bin policy (G5) holds over 32 workspace bin names"; test:effect-baseline 13/13 (with the full install; see the environment note); check-spec10-names --self-test passed; check:sdk-command-templates / check:plugin-commands synchronized; docs:snippets and docs:lint:style clean, docs:freshness fails only on the pre-existing stale-date list (identical on pristine staging).

Builds (full install, sequential): build:runtime (459 s), build:cloud, build:atlas, build:kip, build:adapters, build:hooks-adapter, build:kradle, build:realtime-flow, build:adapters-extensions, build:kradle-web — all PASS.

**Environment (Windows, this machine) — cannot pass here, CI verifies:** build:observer fails with Cannot find module '../lightningcss.win32-x64-msvc.node', and test:sdk / test:architecture (vitest) with Cannot find module './rolldown-binding.win32-x64-msvc.node'. The lockfile carries no Windows native bindings (only lightningcss-linux-x64-gnu; its non-link nodes are byte-identical to origin/staging, so this is not a rename effect); .github/workflows/ci.yml works around the same gap on Linux with npm install --no-save @rolldown/binding-linux-x64-gnu lightningcss-linux-x64-gnu …, and there is no Windows counterpart in the repository. An attempt to mirror it (npm install --no-save of the win32 bindings, 5 min) still left them absent, and the npm ci started to restore a faithful install was stopped by the session for low system memory, leaving node_modules partial (typescript, next, yaml, effect, @effect/vitest, patch-package missing). Consequently the vitest-based suites (test:sdk, test:architecture, the four package-level release-verification.test.ts, the hooks-CLI packaging/cli tests) and the five package-level verify:release gates could not be re-run on this machine after the last edits to them; the CI test / observer-dashboard / workspace-coverage jobs (ubuntu) verify them on the pushed commits. package-lock.json was never modified by any of this (md5 ab51e0832bee9404974780a1329a8898 before and after). The same partial install had removed eslint, which .githooks/pre-commit (scripts/validate-library-js-syntax.cjs --staged) requires; for the third commit the hook was run unchanged, with eslint@9.39.5 resolved from an isolated scratch install through NODE_PATH (nothing added to the repository tree, no hook bypassed; the commit stages no library/*.js, so the hook reports "No matching library JavaScript files to validate").

test:release-tooling (node --test scripts/__tests__/*.test.mjs): pristine staging on this machine → **111 pass / 37 fail of 148** (the FIX-010/FIX-011 workflow-shape tests and the npm-on-PATH stub tests, Windows-impossible; list saved with the WP output). After all changes, with the partial install → 103 pass / 46 fail of 149: the 37 pristine failures, 5 environmental ones (yaml / tsx missing: three verify-release-artifacts workflow-shape tests, and the two hooks-leaf packed-install tests, which additionally 404 against npmjs for @fabricstack/catalog@7.0.0 until the first AR publication — M1 exit criterion 1), and 4 caused by this WP that were then fixed (@a5c-ai/fixture-* regexes; legacyInternalNameSet() fallback when spec 15 is not reachable from a copied scripts/lib). Re-verified per file afterwards: release-version.test.mjs + verify-published-release.test.mjs → **zero failures that are not in the pristine list**, and four pristine failures now pass (FIX-001: the release version may be carried by the publication workspace release plan, FIX-001: the same tag re-tags the release version once the workspace is synchronized to it, FIX-010: channel promotion is a separate job …, FIX-010: the publish workflow calls the published-consumer workflow …). release-promotion.test.mjs cannot load in the partial install (yaml); with the full install its only non-pristine failure was one of the four fixed regexes. No test was deleted or skipped.

Incident during execution (recorded for honesty)

A read-only comparison against pristine staging was done through a temporary git worktree at /tmp/fabric-staging with a node_modules link back into this checkout; git worktree remove --force followed that link into the node_modules/@a5c-ai/genty-desktop-app workspace junction and emptied packages/genty/desktop-app/ (14 tracked files) at 11:34. It was restored from 531975433, re-swept (5 .tsx files) and re-pinned before anything was pushed; git ls-files -d is empty and no other path was affected (checked against git ls-files -d, the lockfile and node_modules link health). No worktree or link is left behind.

Gate-B clarifications for the owner (review round 1)

  • **@fabricstack/ops-console (apps/commander)**: spec 15 §3.2 (line 137) says the commander rename "rides RN-3", while the binding WP-RN-05 objective (line 293) is "the 8 renamable private workspaces carry their @fabricstack/* names" and §3.2 lists exactly eight renamable rows including the commander. This record reads "rides RN-3" as the *directory* move (apps/commander did not move) and executed the *name* rename here; the adversarial review judged this the only reading consistent with the WP text, not a deviation. If the owner intended the name to wait for RN-3 as well, the revert is the one manifest line plus its two dependency edges.
  • **scripts/check-package-metadata.cjs RELEASE_MATRIX_SURFACES = []**: the release-coverage gate checks nothing until WP-RN-07 registers the AR publish workflow there (the inherited publish-packages-from-tag.yml publishes the public train and by D19 may never name a @fabricstack/* package). Carried on the WP-RN-07 checklist together with the tag prefix (babysitter/ → fabric/) and the retargeting of the three legacy npmjs workflows.

Review round 1 (adversarial review, score 74 → fixes)

Findings and what changed are recorded per work package: B1/M2/M3/M6 in rn-06-bins.md ("Review round 1"), M1 and the CI job split in this file's commits (f8224cae7 release-tooling job split; 7fdb9becd publish.yml hooks-leaf names + templated-legacy-name guard in publish-isolation-guard.cjs and check-package-renames.cjs, the latter now wired into the publish-isolation job), M4 in pkg-01-exports.md, M5 in rn-06-bins.md. Two further split-token rename casualties of the RN-1 sweep (which matched whole @a5c-ai/<name> tokens and therefore could not see path.join("@a5c-ai", "babysitter-sdk")) were fixed in ed01994df: packages/babysitter-sdk/src/cli/main/runSupport.ts and packages/genty/platform/.../planProcess/validation.ts linked the process-local SDK fallback under the legacy name, where require("@fabricstack/orchestrator-sdk") never looked. The ADR docs/v6-spec-and-roadmap/decisions/ADR-001-agent-platform-seam-contract.md (asserted by the architecture gate) was swept in b76f636dd.

Not done here (by design)

  • Bins keep their legacy names (WP-RN-06 renames them, retires the G5 carry-over tolerance and the four pinned collisions, and flips spec-bins-missing on by default).
  • The release machinery (publish-packages-from-tag.yml, fix-npm-tags.yml, live-stack-published.yml, publish.yml publication steps, scripts/publish-package-from-tag.mjs, tag prefix fabric/) is WP-RN-07's; it must also register the AR publish workflow in check-package-metadata.cjs RELEASE_MATRIX_SURFACES and retire the G2(c)/G3 flag.
  • Docs, READMEs, skills, blueprints/plugins, Atlas catalogue data: WP-RN-13 / WP-RN-11.
  • The first AR publication of the 43 renamed packages (M1 exit criterion 1): until it happens, clean-consumer verifications that install a renamed dependency from a registry cannot pass (see "Gates").

Article source

The article body is owned directly by this record.

Related pages

No related wiki pages for this record.

Shortcuts

Open overview
Open JSON
Open graph