memento-mori-jester 0.1.62 → 0.1.63
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/CHANGELOG.md +6 -0
- package/ROADMAP.md +2 -1
- package/docs/DEMO.md +9 -9
- package/docs/RELEASE_NOTES_v0.1.63.md +37 -0
- package/examples/fixtures/README.md +1 -0
- package/examples/fixtures/preset-review-cases.json +87 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to Memento Mori Jester are tracked here.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.1.63
|
|
8
|
+
|
|
9
|
+
- Added second firing fixtures for the remaining framework custom-rule thin examples across security, infra, node, python, and web presets.
|
|
10
|
+
- Cleared custom-rule thin coverage in `npm run fixtures:report`, reducing total thin fixture coverage from 16 rules to 7.
|
|
11
|
+
- Refreshed demo, roadmap, fixture docs, and release notes for the 145-fixture corpus.
|
|
12
|
+
|
|
7
13
|
## 0.1.62
|
|
8
14
|
|
|
9
15
|
- Added second firing fixtures for the remaining AI/API custom-rule thin examples: model-output execution, public AI provider keys, raw SQL from request input, and disabled webhook signature checks.
|
package/ROADMAP.md
CHANGED
|
@@ -6,6 +6,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
6
6
|
|
|
7
7
|
## Recently Shipped
|
|
8
8
|
|
|
9
|
+
- Framework custom-rule fixture precision pass in v0.1.63, clearing custom-rule thin coverage and reducing total thin fixture coverage from 16 rules to 7.
|
|
9
10
|
- AI/API custom-rule fixture precision pass in v0.1.62, reducing total thin fixture coverage from 21 rules to 16 while keeping review behavior unchanged.
|
|
10
11
|
- Curation-next fixture batch in v0.1.61 that removed blocked-command thin coverage, strengthened stack-specific sensitive-domain examples, and reduced total thin fixture coverage from 37 rules to 21.
|
|
11
12
|
- Fixture report rule-family slices, preset slices, and curation-next guidance in v0.1.60 so maintainers can see which fixture areas need real-world examples next.
|
|
@@ -52,7 +53,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
52
53
|
## Product Ideas
|
|
53
54
|
|
|
54
55
|
- Add more framework-specific false-positive examples from real reports so tuning guidance keeps getting sharper.
|
|
55
|
-
- Add
|
|
56
|
+
- Add the final fixture precision pass for the remaining built-in and configured-domain thin examples surfaced by `fixtures:report`.
|
|
56
57
|
- Add a Markdown export for fixture reports so maintainers can paste coverage snapshots into issues or release notes.
|
|
57
58
|
|
|
58
59
|
## Quality And Safety
|
package/docs/DEMO.md
CHANGED
|
@@ -192,18 +192,18 @@ Project config: none loaded
|
|
|
192
192
|
Fixture tuning evidence:
|
|
193
193
|
Support: limited
|
|
194
194
|
Confidence: medium
|
|
195
|
-
Total fixtures checked:
|
|
196
|
-
Weighted fixtures checked:
|
|
197
|
-
Matching fixtures:
|
|
198
|
-
Weighted matches:
|
|
195
|
+
Total fixtures checked: 145
|
|
196
|
+
Weighted fixtures checked: 276.9
|
|
197
|
+
Matching fixtures: 10
|
|
198
|
+
Weighted matches: 21
|
|
199
199
|
Expected-match weight: 16
|
|
200
|
-
Unexpected-match weight:
|
|
200
|
+
Unexpected-match weight: 5
|
|
201
201
|
Edge-case matches: 0
|
|
202
202
|
Quiet-pass fixtures: 5
|
|
203
203
|
Quiet-pass weight: 3.6
|
|
204
|
-
By kind: command 0, plan 4, diff
|
|
205
|
-
Fixture coverage:
|
|
206
|
-
By verdict: pass 0, caution 3, block
|
|
204
|
+
By kind: command 0, plan 4, diff 5, final 1
|
|
205
|
+
Fixture coverage: 10/145 (7.6% weighted)
|
|
206
|
+
By verdict: pass 0, caution 3, block 7
|
|
207
207
|
Matched fixture samples:
|
|
208
208
|
infra-public-ingress-block: Public ingress should block in low-risk-tolerance infra repos.
|
|
209
209
|
node-plan-production-mode-block: Node production-mode planning should cover node-specific and sensitive-domain signals.
|
|
@@ -353,7 +353,7 @@ Preset packs:
|
|
|
353
353
|
|
|
354
354
|
## 13. Review Fixtures
|
|
355
355
|
|
|
356
|
-
The fixture suite in `examples/fixtures/preset-review-cases.json` captures small real-usage examples with expected `pass`, `caution`, or `block` verdicts. It also includes quiet-pass `absentRuleIds` examples that prove noisy rules stay silent for safe near-misses, stack-specific coverage for every built-in preset, quiet-pass boundaries across built-in, structural, custom, and preset/config-derived rules, second firing examples for preset blocked-command rules, and second examples for AI/API custom rules. These examples are run by `npm test`, so preset tuning changes stay visible.
|
|
356
|
+
The fixture suite in `examples/fixtures/preset-review-cases.json` captures small real-usage examples with expected `pass`, `caution`, or `block` verdicts. It also includes quiet-pass `absentRuleIds` examples that prove noisy rules stay silent for safe near-misses, stack-specific coverage for every built-in preset, quiet-pass boundaries across built-in, structural, custom, and preset/config-derived rules, second firing examples for preset blocked-command rules, and second examples for AI/API and framework custom rules. These examples are run by `npm test`, so preset tuning changes stay visible.
|
|
357
357
|
|
|
358
358
|
Maintainers can run `npm run fixtures:report` to see coverage by verdict, kind, preset, rule family, and preset slice. The report also includes a `Curation next` section that points at the next useful fixture batch, such as thin rules, no-pass evidence, rule-family gaps, or lower-count presets.
|
|
359
359
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.63
|
|
2
|
+
|
|
3
|
+
This release completes the current custom-rule fixture precision pass. It adds second firing examples for the remaining framework custom-rule thin cases surfaced by `npm run fixtures:report`. It does not change review logic, scoring, matching, CLI output shape, MCP tools, GitHub Action behavior, or release automation.
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
- Added 7 fixture cases, growing the corpus from 138 to 145 fixtures.
|
|
8
|
+
- Added second firing examples for:
|
|
9
|
+
- `custom-broad-cors`
|
|
10
|
+
- `custom-infra-public-exposure`
|
|
11
|
+
- `custom-insecure-tls-disabled`
|
|
12
|
+
- `custom-node-env-production-change`
|
|
13
|
+
- `custom-python-eval-exec`
|
|
14
|
+
- `custom-python-pickle-load`
|
|
15
|
+
- `custom-web-storage-sensitive-value`
|
|
16
|
+
- Cleared custom-rule thin coverage entirely in `npm run fixtures:report`.
|
|
17
|
+
- Reduced total thin fixture coverage from 16 rules to 7.
|
|
18
|
+
|
|
19
|
+
## Public Interface
|
|
20
|
+
|
|
21
|
+
- No CLI command changes.
|
|
22
|
+
- No config schema changes.
|
|
23
|
+
- No rule matching, scoring, or verdict behavior changes.
|
|
24
|
+
- No MCP, playground, GitHub Action, or npm publishing changes.
|
|
25
|
+
|
|
26
|
+
## Release Validation
|
|
27
|
+
|
|
28
|
+
```powershell
|
|
29
|
+
npm.cmd test
|
|
30
|
+
npm.cmd run demo:svg:check
|
|
31
|
+
npm.cmd run fixtures:report
|
|
32
|
+
npm.cmd run fixtures:report -- --json
|
|
33
|
+
npm.cmd run pack:dry
|
|
34
|
+
git diff --check
|
|
35
|
+
node .\dist\cli.js tune coverage --no-config
|
|
36
|
+
git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.63 framework fixture precision"
|
|
37
|
+
```
|
|
@@ -18,6 +18,7 @@ Maintainer triage guidance lives in [docs/MAINTAINER_TRIAGE.md](../../docs/MAINT
|
|
|
18
18
|
- Quiet-pass boundaries for built-in and structural rules such as missing verification, TypeScript suppressions, large removals, wildcard operations, destructive commands, and untested finals.
|
|
19
19
|
- Second firing examples for preset blocked-command rules and high-value stack-specific sensitive-domain rules.
|
|
20
20
|
- Second firing examples for AI and API custom rules around provider keys, model-output execution, raw SQL, and webhook signature checks.
|
|
21
|
+
- Second firing examples for remaining framework custom rules across security, infra, node, python, and web presets.
|
|
21
22
|
- Fixture metadata like `weight` and `edgeCase` to support precision-weighted tuning evidence.
|
|
22
23
|
|
|
23
24
|
## Local Check
|
|
@@ -1321,6 +1321,93 @@
|
|
|
1321
1321
|
"configured-sensitive-domain-iam"
|
|
1322
1322
|
]
|
|
1323
1323
|
},
|
|
1324
|
+
{
|
|
1325
|
+
"id": "sec-broad-cors-plan-block",
|
|
1326
|
+
"preset": "security",
|
|
1327
|
+
"kind": "plan",
|
|
1328
|
+
"description": "Wildcard CORS planning should give the security preset broad-CORS rule a second firing example.",
|
|
1329
|
+
"content": "Set cors({ origin: \"*\" }) for the admin preview after running the browser smoke test.",
|
|
1330
|
+
"expectedVerdict": "block",
|
|
1331
|
+
"weight": 2,
|
|
1332
|
+
"expectedRuleIds": [
|
|
1333
|
+
"custom-broad-cors",
|
|
1334
|
+
"configured-sensitive-domain-cors"
|
|
1335
|
+
]
|
|
1336
|
+
},
|
|
1337
|
+
{
|
|
1338
|
+
"id": "infra-public-bucket-plan-block",
|
|
1339
|
+
"preset": "infra",
|
|
1340
|
+
"kind": "plan",
|
|
1341
|
+
"description": "Public bucket planning should give infra public-exposure coverage a second example.",
|
|
1342
|
+
"content": "Set public_access_block = false for the artifact bucket after checking the reviewed plan output.",
|
|
1343
|
+
"expectedVerdict": "block",
|
|
1344
|
+
"weight": 2,
|
|
1345
|
+
"expectedRuleIds": [
|
|
1346
|
+
"custom-infra-public-exposure"
|
|
1347
|
+
]
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"id": "sec-reject-unauthorized-diff-block",
|
|
1351
|
+
"preset": "security",
|
|
1352
|
+
"kind": "diff",
|
|
1353
|
+
"description": "Disabling TLS verification with rejectUnauthorized should give security TLS coverage a second example.",
|
|
1354
|
+
"content": "diff --git a/src/client.ts b/src/client.ts\n--- a/src/client.ts\n+++ b/src/client.ts\n@@ -1 +1,2 @@\n+const agent = new https.Agent({ rejectUnauthorized: false });\n",
|
|
1355
|
+
"expectedVerdict": "block",
|
|
1356
|
+
"weight": 2,
|
|
1357
|
+
"expectedRuleIds": [
|
|
1358
|
+
"custom-insecure-tls-disabled"
|
|
1359
|
+
]
|
|
1360
|
+
},
|
|
1361
|
+
{
|
|
1362
|
+
"id": "node-env-production-diff-block",
|
|
1363
|
+
"preset": "node",
|
|
1364
|
+
"kind": "diff",
|
|
1365
|
+
"description": "Production Node environment changes in diffs should give node env coverage a second example.",
|
|
1366
|
+
"content": "diff --git a/scripts/smoke.sh b/scripts/smoke.sh\n--- a/scripts/smoke.sh\n+++ b/scripts/smoke.sh\n@@ -1 +1,2 @@\n+NODE_ENV=production npm run smoke\n",
|
|
1367
|
+
"expectedVerdict": "block",
|
|
1368
|
+
"weight": 2,
|
|
1369
|
+
"expectedRuleIds": [
|
|
1370
|
+
"custom-node-env-production-change",
|
|
1371
|
+
"configured-sensitive-domain-production"
|
|
1372
|
+
]
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"id": "python-exec-plan-caution",
|
|
1376
|
+
"preset": "python",
|
|
1377
|
+
"kind": "plan",
|
|
1378
|
+
"description": "Python exec planning should give dynamic-execution coverage a second example.",
|
|
1379
|
+
"content": "Use exec(user_supplied_code) for the loader helper after adding pytest coverage.",
|
|
1380
|
+
"expectedVerdict": "caution",
|
|
1381
|
+
"weight": 2,
|
|
1382
|
+
"expectedRuleIds": [
|
|
1383
|
+
"custom-python-eval-exec"
|
|
1384
|
+
]
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"id": "python-pickle-loads-diff-caution",
|
|
1388
|
+
"preset": "python",
|
|
1389
|
+
"kind": "diff",
|
|
1390
|
+
"description": "Python pickle.loads in a diff should give pickle deserialization coverage a second example.",
|
|
1391
|
+
"content": "diff --git a/src/cache.py b/src/cache.py\n--- a/src/cache.py\n+++ b/src/cache.py\n@@ -1 +1,2 @@\n+payload = pickle.loads(request_body)\n",
|
|
1392
|
+
"expectedVerdict": "caution",
|
|
1393
|
+
"weight": 2,
|
|
1394
|
+
"expectedRuleIds": [
|
|
1395
|
+
"custom-python-pickle-load"
|
|
1396
|
+
]
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
"id": "web-session-password-storage-diff-block",
|
|
1400
|
+
"preset": "web",
|
|
1401
|
+
"kind": "diff",
|
|
1402
|
+
"description": "Password storage in sessionStorage should give web storage coverage a second example.",
|
|
1403
|
+
"content": "diff --git a/src/session.ts b/src/session.ts\n--- a/src/session.ts\n+++ b/src/session.ts\n@@ -1 +1,2 @@\n+sessionStorage.setItem(\"password\", password);\n",
|
|
1404
|
+
"expectedVerdict": "block",
|
|
1405
|
+
"weight": 2,
|
|
1406
|
+
"expectedRuleIds": [
|
|
1407
|
+
"custom-web-storage-sensitive-value",
|
|
1408
|
+
"configured-sensitive-domain-session"
|
|
1409
|
+
]
|
|
1410
|
+
},
|
|
1324
1411
|
{
|
|
1325
1412
|
"id": "node-pack-dry-run-command-pass",
|
|
1326
1413
|
"preset": "node",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.63",
|
|
4
4
|
"description": "A local court-jester sidecar for AI coding agents: review plans, commands, diffs, and final claims before they get too pleased with themselves.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|