@pareto4/pp-core 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pp-core",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "PP Core — a meta-prompting, context engineering, and spec-driven development system for AI coding agents. Loads pp-core's operating context into every Gemini CLI session.",
|
|
5
5
|
"contextFileName": "GEMINI.md"
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pareto4/pp-core",
|
|
3
|
-
"version": "1.5.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.5.1",
|
|
4
|
+
"description": "Pareto pp-core — The Pareto Project's AI-assisted engineering framework: meta-prompting, context engineering, and spec-driven development for AI coding agents.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pp-core": "bin/install.js",
|
|
7
7
|
"pp-tools": "pp-core/bin/pp-tools.cjs",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"codex",
|
|
32
32
|
"codex-cli"
|
|
33
33
|
],
|
|
34
|
-
"author": "
|
|
34
|
+
"author": "The Pareto Project",
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|
|
@@ -41,6 +41,16 @@ const ROOT = path.resolve(__dirname, '..');
|
|
|
41
41
|
/** Matches any recognised OpenGSD spelling in a line of text. */
|
|
42
42
|
const OPENGSD_RE = /opengsd|open-gsd/i;
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Broader brand pattern for npm-facing manifest metadata (package.json
|
|
46
|
+
* `description` / `author`). Catches the upstream product name ("GSD Core")
|
|
47
|
+
* and the org spelling ("OpenGSD") that leaked into the published 1.5.0
|
|
48
|
+
* description/author. Applied ONLY to those manifest fields — not the code/docs
|
|
49
|
+
* surface — so legitimate `gsd-core` references in carved-out provenance files
|
|
50
|
+
* are unaffected.
|
|
51
|
+
*/
|
|
52
|
+
const MANIFEST_BRAND_RE = /opengsd|open-gsd|gsd[\s-]?core/i;
|
|
53
|
+
|
|
44
54
|
// ── Carve-out allowlists (all paths are absolute) ───────────────────────────
|
|
45
55
|
|
|
46
56
|
/**
|
|
@@ -224,6 +234,44 @@ function collectDocsFiles() {
|
|
|
224
234
|
return files;
|
|
225
235
|
}
|
|
226
236
|
|
|
237
|
+
// ── Manifest metadata surface ────────────────────────────────────────────────
|
|
238
|
+
|
|
239
|
+
const PACKAGE_JSON = path.join(ROOT, 'package.json');
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Scan package.json's npm-facing branding fields (`description`, `author`) for
|
|
243
|
+
* leftover upstream branding. npm renders these on the public package page, and
|
|
244
|
+
* a published version's metadata is immutable — so a leak here can only be fixed
|
|
245
|
+
* by a new release. Guarding it keeps the class from recurring (the 1.5.0
|
|
246
|
+
* description shipped "GSD Core ..." / author "OpenGSD" past the file-surface
|
|
247
|
+
* sweep, which never read package.json).
|
|
248
|
+
*
|
|
249
|
+
* @returns {Array<{file: string, line: number, text: string}>}
|
|
250
|
+
*/
|
|
251
|
+
function scanManifestBranding() {
|
|
252
|
+
const hits = [];
|
|
253
|
+
let pkg;
|
|
254
|
+
try {
|
|
255
|
+
pkg = JSON.parse(fs.readFileSync(PACKAGE_JSON, 'utf8'));
|
|
256
|
+
} catch {
|
|
257
|
+
return hits; // no/unreadable package.json — nothing to scan
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const fields = [
|
|
261
|
+
['description', pkg.description],
|
|
262
|
+
// `author` may be a string or an { name, ... } object
|
|
263
|
+
['author', typeof pkg.author === 'object' && pkg.author ? pkg.author.name : pkg.author],
|
|
264
|
+
];
|
|
265
|
+
|
|
266
|
+
for (const [field, value] of fields) {
|
|
267
|
+
if (typeof value === 'string' && MANIFEST_BRAND_RE.test(value)) {
|
|
268
|
+
hits.push({ file: 'package.json', line: `${field} field`, text: value });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return hits;
|
|
273
|
+
}
|
|
274
|
+
|
|
227
275
|
// ── Main sweep logic ─────────────────────────────────────────────────────────
|
|
228
276
|
|
|
229
277
|
/**
|
|
@@ -247,7 +295,8 @@ function runSweep(opts) {
|
|
|
247
295
|
|
|
248
296
|
const codeHits = scanFiles(codeFiles);
|
|
249
297
|
const docsHits = scanFiles(docsFiles);
|
|
250
|
-
const
|
|
298
|
+
const manifestHits = scanManifestBranding();
|
|
299
|
+
const hits = [...codeHits, ...docsHits, ...manifestHits];
|
|
251
300
|
|
|
252
301
|
return { hits, clean: hits.length === 0 };
|
|
253
302
|
}
|
|
@@ -259,7 +308,7 @@ function cliMain() {
|
|
|
259
308
|
|
|
260
309
|
if (clean) {
|
|
261
310
|
process.stdout.write(
|
|
262
|
-
'[verify-opengsd-sweep] PASS — live code+docs surface
|
|
311
|
+
'[verify-opengsd-sweep] PASS — live code+docs surface and package.json branding are OpenGSD-free (carve-outs intact).\n'
|
|
263
312
|
);
|
|
264
313
|
return 0;
|
|
265
314
|
}
|
|
@@ -281,7 +330,7 @@ function cliMain() {
|
|
|
281
330
|
|
|
282
331
|
// ── Exports + guard ──────────────────────────────────────────────────────────
|
|
283
332
|
|
|
284
|
-
module.exports = { runSweep, OPENGSD_RE, isCarvedOut };
|
|
333
|
+
module.exports = { runSweep, OPENGSD_RE, MANIFEST_BRAND_RE, isCarvedOut, scanManifestBranding };
|
|
285
334
|
|
|
286
335
|
if (require.main === module) {
|
|
287
336
|
runMain(cliMain);
|