qa360 1.2.0 → 1.2.2
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/README.md
CHANGED
|
@@ -7,16 +7,40 @@
|
|
|
7
7
|
|
|
8
8
|
## Installation
|
|
9
9
|
|
|
10
|
+
### Option 1: Global installation (recommended for regular use)
|
|
11
|
+
|
|
10
12
|
```bash
|
|
13
|
+
# macOS: use sudo if you get EACCES permission errors
|
|
14
|
+
sudo npm install -g qa360
|
|
15
|
+
|
|
16
|
+
# Or configure npm prefix (one-time setup)
|
|
17
|
+
mkdir -p ~/.npm-global
|
|
18
|
+
npm config set prefix '~/.npm-global'
|
|
19
|
+
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
|
|
20
|
+
source ~/.zshrc
|
|
11
21
|
npm install -g qa360
|
|
12
22
|
```
|
|
13
23
|
|
|
24
|
+
### Option 2: Direct usage with npx (no installation needed)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Run directly without installing
|
|
28
|
+
npx qa360@latest run test.yml
|
|
29
|
+
npx qa360@latest verify proof.json
|
|
30
|
+
npx qa360@latest doctor
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Note**: On first run, Playwright browsers will be automatically downloaded (~100MB). This happens only once.
|
|
34
|
+
|
|
14
35
|
## Usage
|
|
15
36
|
|
|
16
37
|
```bash
|
|
17
38
|
# System health check
|
|
18
39
|
qa360 doctor
|
|
19
40
|
|
|
41
|
+
# Run test pack
|
|
42
|
+
qa360 run test.yml
|
|
43
|
+
|
|
20
44
|
# Verify proof bundle
|
|
21
45
|
qa360 verify proof.json
|
|
22
46
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../src/core/proof/verifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,QAAQ,IAAI;IACZ,iBAAiB,IAAI;IACrB,oBAAoB,IAAI;IACxB,uBAAuB,IAAI;IAC3B,iBAAiB,IAAI;IACrB,eAAe,IAAI;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3F;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,kBAAkB,CAAC,CAkD7B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,2BAAgC,EACzC,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAyB7B;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,2BAAgC,EACzC,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../src/core/proof/verifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,QAAQ,IAAI;IACZ,iBAAiB,IAAI;IACrB,oBAAoB,IAAI;IACxB,uBAAuB,IAAI;IAC3B,iBAAiB,IAAI;IACrB,eAAe,IAAI;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAmF7B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3F;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,kBAAkB,CAAC,CAkD7B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,2BAAgC,EACzC,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAyB7B;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,2BAAgC,EACzC,SAAS,CAAC,EAAE,UAAU,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0ErF"}
|
|
@@ -266,6 +266,8 @@ export async function verifyPhase3Proof(filePath) {
|
|
|
266
266
|
// Canonicalize payload (same way it was signed)
|
|
267
267
|
const { canonicalize } = await import('./canonicalize.js');
|
|
268
268
|
const canonical = canonicalize(payload) + '\n';
|
|
269
|
+
// Compute hash for details
|
|
270
|
+
const hash = createHash('sha256').update(canonical, 'utf-8').digest();
|
|
269
271
|
// Verify signature
|
|
270
272
|
const isValid = verify(canonical, signature.value, publicKey);
|
|
271
273
|
if (!isValid) {
|
|
@@ -285,10 +287,14 @@ export async function verifyPhase3Proof(filePath) {
|
|
|
285
287
|
code: VerificationCode.PROOF_OK,
|
|
286
288
|
message: 'Proof verified successfully',
|
|
287
289
|
details: {
|
|
290
|
+
signerId: 'local@qa360',
|
|
291
|
+
hash: `sha256-${hash.toString('hex').substring(0, 16)}...`,
|
|
288
292
|
runId: proof.runId,
|
|
289
293
|
trustScore: proof.execution?.trustScore,
|
|
290
294
|
startedAt: proof.timestamp,
|
|
291
|
-
|
|
295
|
+
finishedAt: proof.timestamp,
|
|
296
|
+
artifactsTotal: 0,
|
|
297
|
+
artifactsVerified: 0,
|
|
292
298
|
},
|
|
293
299
|
};
|
|
294
300
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qa360",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "QA360 Proof CLI - Quality as Cryptographic Proof",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"prepublishOnly": "npm run build:bundle && sed -i.bak 's/\"qa360-core\": \"workspace:\\*\",//g' package.json && rm -f package.json.bak",
|
|
28
28
|
"postpublish": "git checkout package.json 2>/dev/null || true",
|
|
29
29
|
"publish:dry": "npm run build:bundle && sed -i.bak 's/\"qa360-core\": \"workspace:\\*\",//g' package.json && npm publish --dry-run; git checkout package.json",
|
|
30
|
-
"publish:real": "npm run build:bundle && npm publish --access public
|
|
30
|
+
"publish:real": "npm run build:bundle && npm publish --access public",
|
|
31
|
+
"postinstall": "npx playwright install chromium --with-deps 2>/dev/null || echo 'Playwright browsers will be installed on first run'"
|
|
31
32
|
},
|
|
32
33
|
"dependencies": {
|
|
33
34
|
"@playwright/test": "^1.49.0",
|