-
Registry-extracted packages are upgradable again (closes #187, #188). Packages installed via
@scope/name(e.g.@metafactory/soma) could not be upgraded three ways:arc upgrade <pkg> --checkfalsely reported "up to date" — it resolved the advertised version through the YAML registry index (findInAllSources), but registry packages are published to the metafactory HTTP API.checkUpgradesnow resolves those viaresolveFromRegistry; git / YAML-registry packages keep the old path.arc upgrade <pkg> --forceerroredgit pull failed: not a git repository— a registry tarball has no.git.upgradePackagenow detects registry packages and upgrades them by clean re-download + atomic swap. The newfetchAndVerifyRegistryPackagehelper verifies with install parity (SHA-256 + Ed25519 registry signature + Sigstore).- The documented
remove+installfallback could strand the user (remove succeeds, reinstall fails on a stale token). The registry upgrade now downloads and verifies before touching the working install and restores it on any failure, so an upgrade can never leave the user with no install.
-
CI green on Linux + eslint gate (#189).
createBundlewrote the tarball into the package dir while archiving., tripping GNU tar's "file changed as we read it" (exit 1) on Linux CI (bsdtar/macOS tolerated it); the archive is now staged in a temp dir outside the source tree and moved into place. Plus 8 mechanical eslint-gate fixes (unnecessary assertions/conditions,Array<T>→T[], regex→String#startsWith).
arc loginhelp text and install-time error are now actionable (closes #156).arc logindescription previously claimed "required for publishing only"; install also needs authentication. Updated to "required for installs and publishing".arc logoutdescription likewise expanded to acknowledge that signed-in installs are affected.- 401/403 from a metafactory storage endpoint now hints at the next step: if no bearer was sent,
Run \arc login` first; if a bearer was sent and rejected,Token rejected — run `arc login --force` to refresh.` HTTP status code included for diagnosis.
- Multi-backend host adapter foundation (closes #117). 12-PR series (#118–#129) splits the monolithic
PaiPathsinto two concerns:ArcPathsfor arc's own host-independent state (config, db, repos, catalog) andHostAdapter+HostPathsfor per-backend install dirs (Claude Code, Cortex). Phase 1 added the types and the Claude-Code adapter; Phase 2 introducedhostPathFor()/requireHostDir()dispatch and the Cortex adapter; Phase 3b migrated every production command (verify,upgrade,install,remove,enable,disable,catalog) command-by-command; this release (Phase 3d) deletes the deprecatedPaiPathstype,createPaths()factory, andTestEnv.pathsback-compat field, plus migrates the 5 remaining non-command callers (info,login,logout,publish,review,bundle).
- Breaking (TS only):
PaiPathstype,createPaths()factory,TestEnv.pathsfield. Replace withArcPaths+HostAdapter. Seesrc/types.tsandtest/helpers/test-env.tsfor the new shape.
- Runtime behavior unchanged. Multi-host dispatch is wired but Claude Code remains the only default; future host adapters (Codex, Cursor) plug in via the
HostAdapterinterface without further surgery to commands. ensureDirectories()signature changed from(paths: PaiPaths)to(arc: ArcPaths, host: HostAdapter).
PackageBuilder§ 12: Persona-Driven Agents (Authoring Convention). Codifies the four-layer split (persona / skill bundle / built bundle / instance state), bundle-and-persona decoupling, blueprint contents, composition rules, authority-via-host-primitives, two-phase gates for irreversible operations, conformance checklist, and instance-vs-bundle separation. Aligns with the metafactory agent-platform design atforge/design/agent-platform.md. Closes arc#100, pairs with grove#230, part of mf#390 Phase 4.- New workflow
skill/Workflows/PublishBundle.md: walksarc bundle->arc publish --dry-run-> operator confirm ->arc publish->arc verifyround-trip. Two-phase gate at the dry-run step (halt for confirmation). Sha256 verification at the end; halt on mismatch. - New workflow
skill/Workflows/AuthorPersonaAgent.md: six-step walk (decide new vs reusable, scaffold new bundles, write workflow MDs, write persona, write manifest, wire host, verify conformance) for composing a persona-driven agent on top of one or more existing skill bundles. triggers:extended inskill/SKILL.mdfrontmatter withauthor persona agent,persona-driven agent,compose blueprints,publish bundle.
- Docs-only release: no test suite covers SKILL.md or workflow markdown content. Existing
bun testsuite continues to pass; no behavior change in arc CLI. - Out of scope (post-MVP): manifest signing (SkillSeal),
arc install --type agentruntime flow. Tracked separately under the-metafactory/meta-factory#389.
arc reviewcommand family for sponsor / steward submission triage while the metafactory reviewer UI (the-metafactory/meta-factory#114) is still spec-only:arc review list— pending submissions assigned to you (paginated,--per-pagecapped at 100 client-side,--jsonfor scripting)arc review show <id>— full submission detail; pretty-prints nestedvalidation_resultJSONarc review approve <id>— advance submission toapproved(first approval promotes packagedraft→active)arc review reject <id> -r <reason>— reject with reason shown to publisherarc review request-changes <id> -m <message>— request changes with comment to publisher
- All action commands accept
--jsonfor machine output. - Reuses existing
arc loginbearer-token auth;-s, --source <name>selects a metafactory source. Server enforces tier-gating (trusted+), sponsor-only queue scoping, and DD-9 self-review prevention.
arc publishrendered server errors as[object Object]when the registry returned a non-stringerrorfield (e.g.{"error":{"message":"Internal server error"}}). AddedformatServerError()helper insrc/lib/publish.tsthat extractsmessage/errorstring fields or falls back to JSON — applied to uploadBundle, ensurePackageExists, and registerVersion error paths.
arc-manifest.yamlat arc repo root (schema: arc/v1, type: tool), withbundle.excludeforvendor/(128MB cosign binary, fetched at build time viascripts/fetch-cosign.ts).
- Lifecycle hooks:
preinstall,preupgrade, andpostupgradescripts inarc-manifest.yamlpreinstallruns before symlinks are created during first installpreupgraderuns before symlinks are updated during upgradepostupgraderuns after symlinks + bun install during upgrade (falls back topostinstallif not declared)- Scripts receive
PAI_INSTALL_PATHandPAI_HOOKenv vars - Upgrade hooks also receive
PAI_OLD_VERSIONandPAI_NEW_VERSION
- Shared script runner (
src/lib/scripts.ts) for consistent hook execution - 10 new tests covering all lifecycle hook paths
upgrade.tscrash when upgrading components withoutcapabilitiesfield (undefined guard)
scripts.postinstallsupport inarc-manifest.yaml- Component artifact type (
type: component) for file-to-target symlink packages - Optional
capabilitiesfield for components
arc self-updatecommandarc upgrade --checkshows self-update availability- Remote registry sources (apt-get style)
- Agent, prompt, and tool artifact types
- CLI shim generation for tools
- Path traversal guards
- Case-insensitive install lookup
- Comprehensive audit command
- Initial release: install, list, info, disable, enable, remove, verify
- Capability-based security model
- SQLite package database