@dzhechkov/cloudru-hub 0.1.10 → 0.1.12
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/.dz-manifest.json
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"path": "package.json",
|
|
48
|
-
"sha256": "
|
|
48
|
+
"sha256": "c40ea35a6a994034e4643310bdd990367abcb033f49279f5349e95fe489b4e1a"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"path": "src/classification.js",
|
|
@@ -87,9 +87,13 @@
|
|
|
87
87
|
"path": "test/install.test.mjs",
|
|
88
88
|
"sha256": "e986b29346672bf75b384ab6d8657265b8ecb8f62df6563dca317c1fc63fc8fc"
|
|
89
89
|
},
|
|
90
|
+
{
|
|
91
|
+
"path": "test/mutation-registry-freshness.test.mjs",
|
|
92
|
+
"sha256": "99cc5dd9f32ffbfbde09361940190f41b2efd682f687b3db67b5a3b943e66f47"
|
|
93
|
+
},
|
|
90
94
|
{
|
|
91
95
|
"path": "test/mutation-registry.json",
|
|
92
|
-
"sha256": "
|
|
96
|
+
"sha256": "e56ee7b4ba160f28687423ca113d1bfbcbfdd351fe9d31ad5a19b4d0069dbe3a"
|
|
93
97
|
},
|
|
94
98
|
{
|
|
95
99
|
"path": "test/pack-holds.test.mjs",
|
|
@@ -101,5 +105,5 @@
|
|
|
101
105
|
}
|
|
102
106
|
]
|
|
103
107
|
},
|
|
104
|
-
"signature": "
|
|
108
|
+
"signature": "NhFBu/MKRxi0dLb3A40PAfnOWi8pqEXs1vZ6+3AQIoh7K09B9/BFQXdQnMiCCfTtG1getGxSNK2SCr/57FGIBw=="
|
|
105
109
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/cloudru-hub",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"licenseHold": {
|
|
5
5
|
"adr": "features/hermes-claude-adaptation/03_adr/001-licence-and-provenance-precondition.md",
|
|
6
6
|
"note": "SATISFIED hold (ADR-001 AM-2, grant recorded 2026-08-12 — see grant-record-2026-08-12.md). The field deliberately STAYS: the dz guard `licence-hold` rule passes a satisfied hold with the trigger in place and keeps verifying LICENSE (no PENDING placeholder, Grant-Confirmation URL), THIRD_PARTY_NOTICES and the SPDX license field on every publish. test/pack-holds.test.mjs goes RED if this field is dropped or the LICENSE grant record is degraded."
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
},
|
|
52
52
|
"repository": {
|
|
53
53
|
"type": "git",
|
|
54
|
-
"url": "https://github.com/djd1m/dz-harness
|
|
54
|
+
"url": "git+https://github.com/djd1m/dz-harness.git",
|
|
55
55
|
"directory": "packages/@dzhechkov/cloudru-hub"
|
|
56
56
|
},
|
|
57
|
-
"homepage": "https://github.com/djd1m/dz-harness
|
|
57
|
+
"homepage": "https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/cloudru-hub#readme",
|
|
58
58
|
"bugs": {
|
|
59
|
-
"url": "https://github.com/djd1m/dz-harness
|
|
59
|
+
"url": "https://github.com/djd1m/dz-harness/issues"
|
|
60
60
|
},
|
|
61
61
|
"publishConfig": {
|
|
62
62
|
"access": "public"
|
package/sbom.json
CHANGED
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
"name": "dz:canonical-json-sha256-v2",
|
|
122
|
-
"value": "
|
|
122
|
+
"value": "c40ea35a6a994034e4643310bdd990367abcb033f49279f5349e95fe489b4e1a"
|
|
123
123
|
}
|
|
124
124
|
]
|
|
125
125
|
},
|
|
@@ -223,13 +223,23 @@
|
|
|
223
223
|
}
|
|
224
224
|
]
|
|
225
225
|
},
|
|
226
|
+
{
|
|
227
|
+
"type": "file",
|
|
228
|
+
"name": "test/mutation-registry-freshness.test.mjs",
|
|
229
|
+
"hashes": [
|
|
230
|
+
{
|
|
231
|
+
"alg": "SHA-256",
|
|
232
|
+
"content": "99cc5dd9f32ffbfbde09361940190f41b2efd682f687b3db67b5a3b943e66f47"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
226
236
|
{
|
|
227
237
|
"type": "file",
|
|
228
238
|
"name": "test/mutation-registry.json",
|
|
229
239
|
"hashes": [
|
|
230
240
|
{
|
|
231
241
|
"alg": "SHA-256",
|
|
232
|
-
"content": "
|
|
242
|
+
"content": "e56ee7b4ba160f28687423ca113d1bfbcbfdd351fe9d31ad5a19b4d0069dbe3a"
|
|
233
243
|
}
|
|
234
244
|
]
|
|
235
245
|
},
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import test from 'node:test';
|
|
4
|
+
|
|
5
|
+
const packageRoot = new URL('../', import.meta.url);
|
|
6
|
+
const registry = JSON.parse(
|
|
7
|
+
readFileSync(new URL('./mutation-registry.json', import.meta.url), 'utf8'),
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
test('mutation registry entries are complete', () => {
|
|
11
|
+
for (const entry of registry.entries) {
|
|
12
|
+
assert.ok(typeof entry.id === 'string' && entry.id.length > 0, 'entry has no id');
|
|
13
|
+
assert.ok(typeof entry.file === 'string' && entry.file.length > 0, `${entry.id}: no file`);
|
|
14
|
+
if (entry.uncoverable === true) {
|
|
15
|
+
assert.ok(typeof entry.reason === 'string' && entry.reason.trim().length > 0,
|
|
16
|
+
`${entry.id}: uncoverable entry has no reason`);
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
assert.ok(typeof entry.mutation?.find === 'string' && entry.mutation.find.length > 0,
|
|
20
|
+
`${entry.id}: ${entry.file}: no mutation.find`);
|
|
21
|
+
assert.equal(typeof entry.mutation?.replace, 'string',
|
|
22
|
+
`${entry.id}: ${entry.file}: mutation.replace is not a string`);
|
|
23
|
+
assert.notEqual(entry.mutation.replace, entry.mutation.find,
|
|
24
|
+
`${entry.id}: ${entry.file}: mutation.replace equals mutation.find`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('every mutation.find occurs exactly once in its source file', () => {
|
|
29
|
+
const stale = [];
|
|
30
|
+
for (const entry of registry.entries) {
|
|
31
|
+
if (entry.uncoverable === true) continue;
|
|
32
|
+
const source = readFileSync(new URL(entry.file, packageRoot), 'utf8');
|
|
33
|
+
const occurrences = source.split(entry.mutation.find).length - 1;
|
|
34
|
+
if (occurrences !== 1) {
|
|
35
|
+
stale.push(`${entry.id}: ${entry.file}: mutation.find occurs ${occurrences} time(s)`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
assert.deepEqual(stale, [], `stale or ambiguous mutation entries:\n${stale.join('\n')}`);
|
|
39
|
+
});
|
|
@@ -46,10 +46,12 @@
|
|
|
46
46
|
"property": "Post-grant (ADR-001 AM-2) the pack must REMAIN publishable — a stray private:true would silently kill every future publish while CI stays green, so the publishable-state assertion must go red on it. (The Grant-Confirmation URL protection itself lives in LICENSE, which the gate cannot mutate — extensionless file, no parser; its layer-1 coverage is the pack-holds LICENSE assertions plus the dz guard licence-hold rule, both reading LICENSE directly on every run/publish.)",
|
|
47
47
|
"file": "package.json",
|
|
48
48
|
"mutation": {
|
|
49
|
-
"find": " \"
|
|
50
|
-
"replace": " \"
|
|
49
|
+
"find": " \"publishConfig\": {",
|
|
50
|
+
"replace": " \"private\": true,\n \"publishConfig\": {"
|
|
51
51
|
},
|
|
52
|
-
"minFailing": 1
|
|
52
|
+
"minFailing": 1,
|
|
53
|
+
"observed": 1,
|
|
54
|
+
"maxFailing": 1
|
|
53
55
|
},
|
|
54
56
|
{
|
|
55
57
|
"id": "licence-block-guard-trigger-declared",
|