chore(#516): single-source the package name from package.json (#517)

Adds get-shit-done/bin/lib/package-identity.cjs as the single source of
truth for PACKAGE_NAME, derived from package.json `name` via require.
Refactors all runtime code-line occurrences in bin/install.js,
get-shit-done/bin/check-latest-version.cjs,
get-shit-done/bin/lib/shell-command-projection.cjs,
get-shit-done/bin/lib/verify.cjs, scripts/changeset/cli.cjs,
scripts/changeset/github-release-notes.cjs, and
scripts/release-tarball-smoke.cjs to import PACKAGE_NAME from the
identity module instead of hardcoding the literal.

The package name is unchanged (@opengsd/get-shit-done-redux). Behaviour
is byte-identical: all --help, hint, and release-notes strings render
exactly as before. Golden-literal tests (bug-2992, bug-378) keep their
hardcoded expected values and remain GREEN.

Adds tests/package-name-single-source.test.cjs lint guard: fails CI if
@opengsd/get-shit-done-redux appears as a code-line literal in runtime
.cjs/.js outside the identity module, enforcing a one-file rename path.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-05-30 13:07:58 -04:00
committed by GitHub
parent a1f4996d9a
commit b54026e106
9 changed files with 159 additions and 17 deletions

View File

@@ -25,6 +25,7 @@ const {
compareSemverCore,
isStableTripletSemver,
} = require('../../get-shit-done/bin/lib/semver-compare.cjs');
const { PACKAGE_NAME } = require('../../get-shit-done/bin/lib/package-identity.cjs');
function parseArgs(argv) {
const opts = {
@@ -37,7 +38,7 @@ function parseArgs(argv) {
changelog: null,
output: null,
repoSlug: 'open-gsd/get-shit-done-redux',
installCommand: 'npx @opengsd/get-shit-done-redux@latest',
installCommand: `npx ${PACKAGE_NAME}@latest`,
json: false,
};
if (argv.length === 0) return { ok: true, opts };