diff --git a/README.md b/README.md index 294b83e..6361524 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # GitGuardex — Guardian T-Rex for your repo -[![npm version](https://img.shields.io/npm/v/%40imdeadpool%2Fgitguardex?label=npm&color=cb3837&logo=npm)](https://www.npmjs.com/package/@imdeadpool/gitguardex) -[![npm downloads](https://img.shields.io/npm/dm/%40imdeadpool%2Fgitguardex?label=downloads&color=0b76c5)](https://www.npmjs.com/package/@imdeadpool/gitguardex) +[![npm version](https://img.shields.io/npm/v/%40imdeadpool%2Fguardex?label=npm&color=cb3837&logo=npm)](https://www.npmjs.com/package/@imdeadpool/guardex) +[![npm downloads](https://img.shields.io/npm/dm/%40imdeadpool%2Fguardex?label=downloads&color=0b76c5)](https://www.npmjs.com/package/@imdeadpool/guardex) [![GitHub stars](https://img.shields.io/github/stars/recodeee/gitguardex?label=stars&color=d4ac0d)](https://github.com/recodeee/gitguardex/stargazers) -[![License](https://img.shields.io/npm/l/%40imdeadpool%2Fgitguardex?label=License&color=97ca00)](./LICENSE) +[![License](https://img.shields.io/npm/l/%40imdeadpool%2Fguardex?label=License&color=97ca00)](./LICENSE) [![CI](https://img.shields.io/github/actions/workflow/status/recodeee/gitguardex/ci.yml?branch=main&label=CI)](https://github.com/recodeee/gitguardex/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/actions/workflow/status/recodeee/gitguardex/release.yml?label=Release)](https://github.com/recodeee/gitguardex/actions/workflows/release.yml) @@ -44,7 +44,7 @@ GitGuardex exists to stop that loop. Every agent gets its own worktree, claims t

Install in one line

```bash -npm i -g @imdeadpool/gitguardex +npm i -g @imdeadpool/guardex ```

@@ -55,8 +55,8 @@ npm i -g @imdeadpool/gitguardex

- npm - downloads + npm + downloads stars

@@ -83,12 +83,12 @@ Coming soon: [recodee.com](https://recodee.com) — live account health, usage, ## Quick start ```sh -npm i -g @imdeadpool/gitguardex +npm i -g @imdeadpool/guardex cd /path/to/your/repo gx setup ``` -That's it. New installs should use `@imdeadpool/gitguardex` so the published package matches the GitGuardex name. Setup installs hooks, scripts, templates, and scaffolds OpenSpec/caveman/OMX wiring. Aliases: `gx` (preferred), `gitguardex` (full), `guardex` (legacy compatibility). +That's it. Install and update via `@imdeadpool/guardex`. Setup installs hooks, scripts, templates, and scaffolds OpenSpec/caveman/OMX wiring. Aliases: `gx` (preferred), `gitguardex` (full), `guardex` (legacy compatibility). --- @@ -641,6 +641,11 @@ npm pack --dry-run
v7.x +### v7.0.17 +- Restored the published npm package name to `@imdeadpool/guardex` after the `@imdeadpool/gitguardex` rename only changed the package identity locally and could not rename the existing npm registry entry. +- README/install/tutorial/self-update surfaces now point back at `@imdeadpool/guardex` while keeping GitGuardex as the product/repo brand and `gitguardex` as the long-form command. +- Bumped the release from `7.0.16` → `7.0.17` because `@imdeadpool/guardex@7.0.16` is already published on npm. + ### v7.0.16 - GitGuardex now publishes under the matching npm package name `@imdeadpool/gitguardex`, and install/help/docs surfaces point at the renamed package instead of the older `@imdeadpool/guardex` scope. - `gx doctor` now keeps nested repo repair runs visibly progressing, and overlapping integration work stays off the protected base branch instead of trying to merge back on `main`. diff --git a/docs/images/install-hero.svg b/docs/images/install-hero.svg index 783bb27..668691b 100644 --- a/docs/images/install-hero.svg +++ b/docs/images/install-hero.svg @@ -16,12 +16,12 @@ npm i -g -@imdeadpool/gitguardex +@imdeadpool/guardex added 47 packages in 3.2s -+ @imdeadpool/gitguardex@ -7.0.16 ++ @imdeadpool/guardex@ +7.0.17 diff --git a/docs/images/setup-success.svg b/docs/images/setup-success.svg index 1dac87a..83f0cc8 100644 --- a/docs/images/setup-success.svg +++ b/docs/images/setup-success.svg @@ -16,7 +16,7 @@ deadpool@recodee:~/Documents/testguardex$ gx - [gitguardex] CLI: @imdeadpool/gitguardex/5.0.0 linux-x64 node-v22.22.0 + [gitguardex] CLI: @imdeadpool/guardex/5.0.0 linux-x64 node-v22.22.0 [gitguardex] Global services: - ● oh-my-codex: active - ● @fission-ai/openspec: active @@ -29,7 +29,7 @@ fatal: not a git repository (or any of the parent directories): .git deadpool@recodee:~/Documents/testguardex$ gx - [gitguardex] CLI: @imdeadpool/gitguardex/5.0.0 linux-x64 node-v22.22.0 + [gitguardex] CLI: @imdeadpool/guardex/5.0.0 linux-x64 node-v22.22.0 [gitguardex] Global services: - ● oh-my-codex: active - ● @fission-ai/openspec: active diff --git a/docs/images/status-tools-logs.svg b/docs/images/status-tools-logs.svg index 36b1c34..077a060 100644 --- a/docs/images/status-tools-logs.svg +++ b/docs/images/status-tools-logs.svg @@ -15,7 +15,7 @@ gx status - [gitguardex] CLI: @imdeadpool/gitguardex/5.0.2 linux-x64 node-v22.22.0 + [gitguardex] CLI: @imdeadpool/guardex/5.0.2 linux-x64 node-v22.22.0 [gitguardex] Global services: - ● oh-my-codex: active - ● @fission-ai/openspec: active diff --git a/docs/images/workflow-gx-terminal-status.svg b/docs/images/workflow-gx-terminal-status.svg index ac68d76..bf402d9 100644 --- a/docs/images/workflow-gx-terminal-status.svg +++ b/docs/images/workflow-gx-terminal-status.svg @@ -16,7 +16,7 @@ - [gitguardex] CLI: @imdeadpool/gitguardex/7.0.16 linux-x64 node-v22.22.0 + [gitguardex] CLI: @imdeadpool/guardex/7.0.17 linux-x64 node-v22.22.0 [gitguardex] Global services: - diff --git a/docs/redditpost.md b/docs/redditpost.md index 254b5db..57c7cdc 100644 --- a/docs/redditpost.md +++ b/docs/redditpost.md @@ -4,7 +4,7 @@ Source baseline: [`README.md`](../README.md) Project links: - GitHub: https://github.com/recodeecom/multiagent-safety -- npm: https://www.npmjs.com/package/@imdeadpool/gitguardex +- npm: https://www.npmjs.com/package/@imdeadpool/guardex ## Recommended Title Options @@ -29,7 +29,7 @@ What it does: Quick start: ```bash -npm i -g @imdeadpool/gitguardex +npm i -g @imdeadpool/guardex gx setup ``` @@ -45,7 +45,7 @@ bash scripts/agent-branch-finish.sh --branch "$(git rev-parse --abbrev-ref HEAD) If you run Codex/Claude-style parallel workflows, I would value feedback on edge cases your team hits in production. GitHub: https://github.com/recodeecom/multiagent-safety -npm: https://www.npmjs.com/package/@imdeadpool/gitguardex +npm: https://www.npmjs.com/package/@imdeadpool/guardex ## Copy-Ready Reddit Post (short) @@ -54,12 +54,12 @@ I open-sourced **GitGuardex** for safer multi-agent Git workflows. It adds branch/worktree guardrails, protected-branch enforcement, file-lock ownership, and repair scripts (`gx setup` / `gx doctor`) so parallel agent execution is safer by default. ```bash -npm i -g @imdeadpool/gitguardex +npm i -g @imdeadpool/guardex gx setup ``` GitHub: https://github.com/recodeecom/multiagent-safety -npm: https://www.npmjs.com/package/@imdeadpool/gitguardex +npm: https://www.npmjs.com/package/@imdeadpool/guardex ## Images to include in the Reddit post diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx index 7856df2..63b0f1c 100644 --- a/frontend/app/page.tsx +++ b/frontend/app/page.tsx @@ -126,7 +126,7 @@ interface ModeGuide { } const MODE_ORDER: ModeKey[] = ['execute', 'plan', 'merge', 'installation'] -const INSTALL_COMMAND = 'npm i -g @imdeadpool/gitguardex' +const INSTALL_COMMAND = 'npm i -g @imdeadpool/guardex' const PRODUCT_LABEL = 'Recodee' const EDITOR_LABEL = 'recodee — VS Code' @@ -1697,7 +1697,7 @@ const INSTALL_STEPS: TutorialStep[] = [ sub: '· global install', elapsed: '3.8s', rows: [ - { kind: 'shell', label: 'bash:', value: 'npm i -g @imdeadpool/gitguardex' }, + { kind: 'shell', label: 'bash:', value: 'npm i -g @imdeadpool/guardex' }, ], }, ], @@ -1712,7 +1712,7 @@ const INSTALL_STEPS: TutorialStep[] = [ ], worktrees: [], codeLines: [ - { parts: [c('$ npm i -g @imdeadpool/gitguardex', 'c')] }, + { parts: [c('$ npm i -g @imdeadpool/guardex', 'c')] }, { parts: [c('added 1 package in 3.8s')] }, { parts: [c('')] }, { parts: [c('$ gx --version')] }, diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md new file mode 100644 index 0000000..4f3b7c2 --- /dev/null +++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md @@ -0,0 +1,17 @@ +## Why + +- The repo changed `package.json.name` to `@imdeadpool/gitguardex`, but npm treats a package name change as a different package identity, not a rename of the existing registry entry. +- The live npm registry still serves `@imdeadpool/guardex@7.0.16`, while `npm view @imdeadpool/gitguardex version` returns `404`. +- README, tutorial, Reddit kit, and self-update expectations now point at a package name that is not the install target users actually have. + +## What Changes + +- Restore the published package metadata to `@imdeadpool/guardex`. +- Bump the package version from `7.0.16` to `7.0.17` so the next publish is valid against the existing `@imdeadpool/guardex@7.0.16` release. +- Refresh install, self-update, tutorial, and README-linked asset surfaces to reference `@imdeadpool/guardex`. + +## Compatibility + +- Keep `gx` as the preferred short command. +- Keep `gitguardex` as the long-form command and product/repo brand. +- Keep `guardex` as the legacy compatibility bin alias. diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md new file mode 100644 index 0000000..a79ee14 --- /dev/null +++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md @@ -0,0 +1,27 @@ +## ADDED Requirements + +### Requirement: Published npm package name stays on the existing guardex registry entry +The system SHALL publish and document the primary npm package as `@imdeadpool/guardex`. + +#### Scenario: package metadata advertises the existing package +- **WHEN** the root `package.json` metadata is inspected +- **THEN** `name` equals `@imdeadpool/guardex` +- **AND** downstream package metadata snapshots use the same package name. + +#### Scenario: the next release stays publishable on npm +- **WHEN** the package metadata is prepared for the next publish +- **THEN** the version is greater than the already-published `@imdeadpool/guardex@7.0.16` +- **AND** the package can publish without colliding with the existing registry version. + +### Requirement: Install and update guidance references the real npm package +The README, tutorial UI, and self-update/install guidance SHALL use `@imdeadpool/guardex` while keeping GitGuardex as the product brand. + +#### Scenario: install and self-update prompts use the restored package +- **WHEN** a user reads CLI install/setup guidance or the self-update flow +- **THEN** the npm command examples reference `@imdeadpool/guardex` +- **AND** the CLI keeps `gx`, `gitguardex`, and `guardex` command compatibility. + +#### Scenario: docs and README-linked assets are aligned +- **WHEN** the README, tutorial page, Reddit kit, or README-linked SVG assets are inspected +- **THEN** install commands, npm badges, and package-name callouts reference `@imdeadpool/guardex` +- **AND** GitGuardex remains the visible product/repo name. diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md new file mode 100644 index 0000000..8dc09af --- /dev/null +++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md @@ -0,0 +1,23 @@ +## 1. Spec + +- [x] 1.1 Capture why the npm package rename has to revert and the versioning constraint for the next publish. + +## 2. Tests + +- [x] 2.1 Update the package-name-dependent install/self-update/status assertions back to `@imdeadpool/guardex`. + +## 3. Implementation + +- [x] 3.1 Restore package metadata to `@imdeadpool/guardex` and bump the package version to `7.0.17`. +- [x] 3.2 Refresh README, tutorial, Reddit kit, and README-linked assets to reference `@imdeadpool/guardex`. + +## 4. Verification + +- [x] 4.1 Run targeted package-name verification (`node --test --test-name-pattern "(default invocation checks for update and can auto-approve latest install|self-update verifies on-disk version after @latest install and retries with pinned version when stale|self-update restarts into the installed CLI after a successful on-disk upgrade|status --json returns cli, services, and repo summary|prompt outputs AI setup instructions|prompt --exec outputs command-only checklist|deprecated copy-commands alias still works and warns)" test/install.test.js`, `node --check bin/multiagent-safety.js`, `npm pack --dry-run`) and record the results. Result: targeted package-name verification passed `7/7`; `node --check bin/multiagent-safety.js` passed; `npm pack --dry-run` produced `imdeadpool-guardex-7.0.17.tgz`. +- [x] 4.2 Run `openspec validate agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02 --type change --strict`. Result: `Change 'agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02' is valid`. +- [x] 4.3 Run `openspec validate --specs`. Result: `No items found to validate.` +- [x] 4.4 Run `npm test` after the package-name revert to confirm broader repo integrity. Result: full suite passed `163/163`. + +## 5. Cleanup + +- [ ] 5.1 Finish branch via PR merge + cleanup and record final `MERGED` evidence. diff --git a/package-lock.json b/package-lock.json index 1601785..e6ae4fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@imdeadpool/gitguardex", - "version": "7.0.16", + "name": "@imdeadpool/guardex", + "version": "7.0.17", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@imdeadpool/gitguardex", - "version": "7.0.16", + "name": "@imdeadpool/guardex", + "version": "7.0.17", "license": "MIT", "bin": { "gitguardex": "bin/multiagent-safety.js", diff --git a/package.json b/package.json index 8864ff6..1503f8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@imdeadpool/gitguardex", - "version": "7.0.16", + "name": "@imdeadpool/guardex", + "version": "7.0.17", "description": "Guardian T-Rex for your multi-agent repo. Isolated worktrees, file locks, and PR-only merges stop parallel Codex & Claude agents from overwriting each other's work. Auto-wires Oh My Codex, Oh My Claude, OpenSpec, and Caveman.", "license": "MIT", "preferGlobal": true, diff --git a/test/install.test.js b/test/install.test.js index 65cd18f..80455ac 100644 --- a/test/install.test.js +++ b/test/install.test.js @@ -191,7 +191,7 @@ function seedReleasePackageManifest(repoDir, overrides = {}) { const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); const mergedPackageJson = { ...packageJson, - name: packageJson.name || '@imdeadpool/gitguardex', + name: packageJson.name || '@imdeadpool/guardex', version: cliVersion, repository: { type: 'git', @@ -2447,7 +2447,7 @@ if [[ "$1" == "list" ]]; then echo '{"dependencies":{"oh-my-codex":{},"@fission-ai/openspec":{}}}' exit 0 fi -if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then +if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then echo "updated" > "${markerPath}" exit 0 fi @@ -2472,11 +2472,11 @@ exit 1 test('self-update verifies on-disk version after @latest install and retries with pinned version when stale', () => { const repoDir = initRepo(); const fakeGlobalRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'guardex-fake-global-root-')); - const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'gitguardex'); + const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'guardex'); fs.mkdirSync(installedPkgDir, { recursive: true }); fs.writeFileSync( path.join(installedPkgDir, 'package.json'), - JSON.stringify({ name: '@imdeadpool/gitguardex', version: cliVersion }), + JSON.stringify({ name: '@imdeadpool/guardex', version: cliVersion }), 'utf8', ); const markerLatest = path.join(repoDir, '.npm-at-latest-called'); @@ -2494,15 +2494,15 @@ if [[ "$1" == "root" && "$2" == "-g" ]]; then echo "${fakeGlobalRoot}" exit 0 fi -if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then +if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then touch "${markerLatest}" # Simulate the npm quirk: report success without rewriting the on-disk package.json. exit 0 fi -if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@9.9.9" ]]; then +if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@9.9.9" ]]; then touch "${markerPinned}" # Pinned retry actually advances the on-disk version. - printf '%s' '{"name":"@imdeadpool/gitguardex","version":"9.9.9"}' > "${installedPkgDir}/package.json" + printf '%s' '{"name":"@imdeadpool/guardex","version":"9.9.9"}' > "${installedPkgDir}/package.json" exit 0 fi echo "unexpected npm args: $*" >&2 @@ -2527,14 +2527,14 @@ exit 1 test('self-update restarts into the installed CLI after a successful on-disk upgrade', () => { const repoDir = initRepo(); const fakeGlobalRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'guardex-fake-global-root-')); - const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'gitguardex'); + const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'guardex'); const installedBinDir = path.join(installedPkgDir, 'bin'); const reexecMarker = path.join(repoDir, '.self-update-reexec-called'); fs.mkdirSync(installedBinDir, { recursive: true }); fs.writeFileSync( path.join(installedPkgDir, 'package.json'), JSON.stringify({ - name: '@imdeadpool/gitguardex', + name: '@imdeadpool/guardex', version: '9.9.9', bin: { gx: 'bin/multiagent-safety.js' }, }), @@ -2562,7 +2562,7 @@ if [[ "$1" == "root" && "$2" == "-g" ]]; then echo "${fakeGlobalRoot}" exit 0 fi -if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then +if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then exit 0 fi echo "unexpected npm args: $*" >&2 @@ -2651,7 +2651,7 @@ test('status --json returns cli, services, and repo summary', () => { assert.equal(result.status, 0, result.stderr || result.stdout); const parsed = JSON.parse(result.stdout); - assert.equal(parsed.cli.name, '@imdeadpool/gitguardex'); + assert.equal(parsed.cli.name, '@imdeadpool/guardex'); assert.equal(typeof parsed.cli.version, 'string'); assert.equal(Array.isArray(parsed.services), true); const claudeService = parsed.services.find((service) => service.name === 'oh-my-claudecode'); @@ -4601,7 +4601,7 @@ test('prompt outputs AI setup instructions', () => { const repoDir = initRepo(); const result = runNode(['prompt'], repoDir); assert.equal(result.status, 0, result.stderr || result.stdout); - assert.match(result.stdout, /npm i -g @imdeadpool\/gitguardex/); + assert.match(result.stdout, /npm i -g @imdeadpool\/guardex/); assert.match(result.stdout, /GitGuardex \(gx\) setup checklist/); assert.match(result.stdout, /gx setup/); assert.match(result.stdout, /gx doctor/); @@ -4618,7 +4618,7 @@ test('prompt --exec outputs command-only checklist', () => { const repoDir = initRepo(); const result = runNode(['prompt', '--exec'], repoDir); assert.equal(result.status, 0, result.stderr || result.stdout); - assert.match(result.stdout, /^npm i -g @imdeadpool\/gitguardex/m); + assert.match(result.stdout, /^npm i -g @imdeadpool\/guardex/m); assert.match(result.stdout, /^gh --version/m); assert.match(result.stdout, /^gx setup$/m); assert.match(result.stdout, /^gx doctor$/m); @@ -4641,7 +4641,7 @@ test('deprecated copy-commands alias still works and warns', () => { const repoDir = initRepo(); const result = runNode(['copy-commands'], repoDir); assert.equal(result.status, 0, result.stderr || result.stdout); - assert.match(result.stdout, /^npm i -g @imdeadpool\/gitguardex/m); + assert.match(result.stdout, /^npm i -g @imdeadpool\/guardex/m); assert.match(result.stderr, /'copy-commands' is deprecated/); assert.match(result.stderr, /gx prompt --exec/); });