* chore: rename npm package + bin to @opengsd/gsd-core (functional) - package.json: name @opengsd/get-shit-done-redux → @opengsd/gsd-core, bin key get-shit-done-redux → gsd-core, repository/homepage/bugs URLs - package-lock.json: regenerated (npm install --package-lock-only) - tests/**, scripts/**, bin/**, .github/**, agents/**, commands/**, get-shit-done/bin/**, get-shit-done/workflows/**: applied the 4-rule replacement (scoped npm ref, GitHub repo path, bin/clone invocations) per #505 single-source refactor Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: sweep live references to @opengsd/gsd-core Update all live documentation (README.md + translations, docs/**, CONTRIBUTING.md, VERSIONING.md, SECURITY.md, CONTEXT.md, docs/CANARY.md) to reflect the renamed package and repository. Rules applied: - @opengsd/get-shit-done-redux → @opengsd/gsd-core (scoped npm name) - open-gsd/get-shit-done-redux → open-gsd/gsd-core (GitHub repo) - GSD-redux/get-shit-done-redux → open-gsd/gsd-core (stale badge org) - bare bin/clone refs → gsd-core CHANGELOG.md, docs/adr/**, docs/RELEASE-*.md, docs/research/**, and .changeset/** are preserved byte-identical. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix: add negative lookbehind to slash-command regex in bug-2954 test The extractSlashReferences regex matched /gsd-core inside npm package URLs (@opengsd/gsd-core), producing a false /gsd:core command reference. Adding a negative lookbehind (?<![a-z]) excludes matches preceded by a letter, so only standalone /gsd-<cmd> and /gsd:<cmd> tokens are found. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(#518): add changeset for package rename Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * test(#518): update package-identity expectations to the renamed coordinates The rebase regenerated the seam to @opengsd/gsd-core (bin gsd-core, repo open-gsd/gsd-core). The #498 seam tests assert deriveIdentity against the REAL package.json, so their expected literals must follow the rename. The drift-lint unit test is left as-is — its SEAM is a self-consistent fixture and its stale-literal detection cases would shift if altered; the live-repo scan in it already passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
2.0 KiB
JavaScript
49 lines
2.0 KiB
JavaScript
'use strict';
|
|
// allow-test-rule: reads product workflow markdown (update.md) to verify structural invocation contract — not a source-grep test
|
|
|
|
// Regression guard for bug #3130.
|
|
//
|
|
// Two failure modes were observed with the pre-fix npx invocation form:
|
|
// 1. Cache-stale: bare `npx -y @opengsd/gsd-core@latest` hits npx's local
|
|
// cache and may pull an older version instead of @latest.
|
|
// 2. Token-routing: Bash-tool wrappers misroute the `@` token in
|
|
// `@opengsd/gsd-core@latest`, causing npm to error with
|
|
// "Unknown command: @opengsd/gsd-core@latest".
|
|
//
|
|
// The robust form is:
|
|
// npx -y --package=@opengsd/gsd-core@latest -- gsd-core $ARGS
|
|
//
|
|
// `--package=` forces a fresh registry fetch, bypassing the npx cache.
|
|
// `--` clearly delineates npx flags from the run-command, preventing
|
|
// Bash-tool @-token misrouting.
|
|
|
|
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
const ROOT = path.join(__dirname, '..');
|
|
const UPDATE_WF = path.join(ROOT, 'get-shit-done', 'workflows', 'update.md');
|
|
|
|
const src = fs.readFileSync(UPDATE_WF, 'utf8');
|
|
|
|
test('bug #3130: update.md contains no bare npx invocations (cache-stale form)', () => {
|
|
// Any occurrence of `npx -y @opengsd/gsd-core@latest` without `--package=`
|
|
// is the stale form that triggers the two failure modes.
|
|
const stale = (src.match(/npx -y @opengsd\/gsd-core@latest[^\n]*/g) || []);
|
|
assert.deepEqual(
|
|
stale,
|
|
[],
|
|
`Stale npx forms found in update.md (must use --package= form): ${stale.join('; ')}`,
|
|
);
|
|
});
|
|
|
|
test('bug #3130: update.md has >=3 robust npx invocations (--package= + -- separator)', () => {
|
|
// Three sibling invocations: local, global, and unknown/fallback.
|
|
const robust = (src.match(/npx -y --package=@opengsd\/gsd-core@latest -- gsd-core/g) || []);
|
|
assert.ok(
|
|
robust.length >= 3,
|
|
`Expected >=3 robust npx invocations in update.md, found ${robust.length}`,
|
|
);
|
|
});
|