Skip to content

Commit dea3d7e

Browse files
committed
test(hygiene): add manifest and package parity regression test, sync test script, update llms.txt & changelog [2026-08-14]
1 parent bfc1ee6 commit dea3d7e

4 files changed

Lines changed: 41 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ All notable changes to `ellmos-blender-use-mcp` are tracked here.
44

55
## 0.1.0-alpha.7 - 2026-07-31
66

7+
### Maintenance (2026-08-14)
8+
- Technical Hygiene & Maintenance Check (Pfad A): Added automated regression test `test/manifest-parity.test.js` guarding version, name, license, tools count, and package file integrity across `package.json`, `server.json`, `glama.json`, and filesystem.
9+
- Updated `package.json` test script to include manifest parity test.
10+
- Synchronized `llms.txt` Last-checked timestamp to `2026-08-14`.
11+
- Verified 100% test suite pass (privacy hygiene, runtime memory safety, manifest & file packaging parity) and clean syntax check (`npm run build`).
12+
713
### Security (2026-08-10)
814
- Refreshed transitive `fast-uri` (3.1.4 to 3.1.5) and `hono` (4.12.32 to 4.13.1) dependencies; `npm audit` now reports zero vulnerabilities.
915

llms.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,6 @@ ellmos-blender-use-mcp
7272
- `THIRD_PARTY_LICENSES.md`: dependency and prior-art license review.
7373
- `src/index.js`: MCP server entrypoint and tool definitions.
7474
- `test/privacy-hygiene.test.js`: regression test guarding against leaked local user-profile paths.
75+
- `test/manifest-parity.test.js`: automated regression test guarding manifest, file package, and metadata parity.
7576

76-
## Last-checked: 2026-08-13
77+
## Last-checked: 2026-08-14

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
],
2222
"scripts": {
2323
"build": "node --check src/index.js",
24-
"test": "node test/privacy-hygiene.test.js && node test/runtime-safety.test.js",
24+
"test": "node test/privacy-hygiene.test.js && node test/runtime-safety.test.js && node test/manifest-parity.test.js",
2525
"start": "node src/index.js",
2626
"prepublishOnly": "npm run build"
2727
},

test/manifest-parity.test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import assert from "node:assert/strict";
2+
import { existsSync, readFileSync } from "node:fs";
3+
import path from "node:path";
4+
import { fileURLToPath } from "node:url";
5+
6+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
7+
8+
const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
9+
const server = JSON.parse(readFileSync(path.join(root, "server.json"), "utf8"));
10+
const glama = JSON.parse(readFileSync(path.join(root, "glama.json"), "utf8"));
11+
12+
// 1. Version parity across manifests
13+
assert.equal(server.version, pkg.version, "server.json version mismatch");
14+
assert.equal(glama.version, pkg.version, "glama.json version mismatch");
15+
assert.equal(server.packages[0].version, pkg.version, "server.json package[0] version mismatch");
16+
17+
// 2. Package and identifier parity
18+
assert.equal(server.packages[0].identifier, pkg.name, "server.json package identifier mismatch");
19+
assert.equal(glama.name, pkg.name, "glama.json package name mismatch");
20+
assert.equal(server.name, pkg.mcpName, "server.json MCP name mismatch");
21+
22+
// 3. License parity
23+
assert.equal(glama.license, pkg.license, "glama.json license mismatch");
24+
25+
// 4. Packaging files existence
26+
for (const relPath of pkg.files) {
27+
const target = path.join(root, relPath);
28+
assert.ok(existsSync(target), `Packaged file or directory missing: ${relPath}`);
29+
}
30+
31+
// 5. Tool count consistency in glama.json
32+
assert.equal(glama.tools.count, 3, "glama.json tool count mismatch (expected 3)");

0 commit comments

Comments
 (0)