memento-mori-jester 0.1.68 → 0.1.70

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 CHANGED
@@ -4,6 +4,18 @@ All notable changes to Memento Mori Jester are tracked here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.1.70
8
+
9
+ - Added six infra quiet-pass fixtures, growing the corpus to 184 fixtures.
10
+ - Strengthened safe near-miss evidence for read-only Kubernetes inspection, Docker disk usage, Terraform linting, and disabling public IP assignment.
11
+ - Refreshed demo, roadmap, fixture docs, and release notes for the infra-focused curation batch.
12
+
13
+ ## 0.1.69
14
+
15
+ - Added eight real-world quiet-pass fixtures across node, python, security, and web preset slices, growing the corpus to 178 fixtures.
16
+ - Strengthened safe near-miss evidence for typecheck/prebuild scripts, mypy/dataclass parsing, CodeQL/Dependabot checks, form validation, and image alt text.
17
+ - Refreshed demo, roadmap, fixture docs, and release notes for the expanded preset curation batch.
18
+
7
19
  ## 0.1.68
8
20
 
9
21
  - Added AI preset fixtures for user-controlled tool dispatch from request body and URL search parameter inputs.
package/ROADMAP.md CHANGED
@@ -6,6 +6,8 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
6
6
 
7
7
  ## Recently Shipped
8
8
 
9
+ - Infra preset fixture curation in v0.1.70, adding six quiet-pass operational examples for read-only Kubernetes, Docker, Terraform linting, and public-IP hardening changes.
10
+ - Node/python/security/web preset fixture curation in v0.1.69, adding eight quiet-pass real-world examples while keeping all fixture coverage gates clean.
9
11
  - AI tool-dispatch fixture curation in v0.1.68, adding request-body and URL-parameter caution examples plus allowlist/schema quiet-pass boundaries.
10
12
  - Security/web/node/python preset fixture curation in v0.1.67, adding real-world quiet-pass examples while keeping thin, quiet-pass, feasible pass-case, and preset-kind gaps at zero.
11
13
  - Real-world low-count preset fixture batch in v0.1.66, adding node, python, infra, and AI examples while keeping thin, quiet-pass, and feasible pass-case gaps at zero.
package/docs/DEMO.md CHANGED
@@ -192,8 +192,8 @@ Project config: none loaded
192
192
  Fixture tuning evidence:
193
193
  Support: limited
194
194
  Confidence: medium
195
- Total fixtures checked: 170
196
- Weighted fixtures checked: 325.9
195
+ Total fixtures checked: 184
196
+ Weighted fixtures checked: 353.9
197
197
  Matching fixtures: 11
198
198
  Weighted matches: 23
199
199
  Expected-match weight: 18
@@ -202,7 +202,7 @@ Edge-case matches: 0
202
202
  Quiet-pass fixtures: 5
203
203
  Quiet-pass weight: 3.6
204
204
  By kind: command 0, plan 5, diff 5, final 1
205
- Fixture coverage: 11/170 (7.1% weighted)
205
+ Fixture coverage: 11/184 (6.5% weighted)
206
206
  By verdict: pass 0, caution 3, block 8
207
207
  Matched fixture samples:
208
208
  infra-public-ingress-block: Public ingress should block in low-risk-tolerance infra repos.
@@ -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 matched-pass examples for low-severity rules, 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, second examples for AI/API, framework custom, built-in, and configured sensitive-domain rules, AI tool-dispatch examples with safe allowlist/schema boundaries, and real-world low-count preset examples across node, python, web, infra, AI, and security slices. 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 matched-pass examples for low-severity rules, 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, second examples for AI/API, framework custom, built-in, and configured sensitive-domain rules, AI tool-dispatch examples with safe allowlist/schema boundaries, and real-world low-count preset examples across node, python, web, infra, AI, and security slices. Recent quiet-pass examples cover typechecks, prebuild scripts, mypy, dataclass parsing, CodeQL, Dependabot limits, form validation, accessibility copy, read-only Kubernetes inspection, Docker disk usage, Terraform linting, and public-IP hardening changes. 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, feasible pass-case evidence, rule-family gaps, or lower-count presets.
359
359
 
@@ -0,0 +1,41 @@
1
+ # Memento Mori Jester v0.1.69
2
+
3
+ This release continues the fixture-report curation track for the next lowest preset slices: node, python, security, and web. It adds practical quiet-pass examples only; review behavior is unchanged.
4
+
5
+ ## What Changed
6
+
7
+ - Added 8 fixture cases, growing the corpus from 170 to 178 fixtures.
8
+ - Added node quiet-pass examples for:
9
+ - Typecheck commands.
10
+ - Non-install prebuild scripts.
11
+ - Added python quiet-pass examples for:
12
+ - Mypy commands.
13
+ - Dataclass parsing changes.
14
+ - Added security quiet-pass examples for:
15
+ - CodeQL workflow commands.
16
+ - Dependabot limit changes.
17
+ - Added web quiet-pass examples for:
18
+ - Client-side form validation copy.
19
+ - Accessible image alt text.
20
+ - Kept thin rule coverage, quiet-pass gaps, feasible pass-case gaps, and preset/kind gaps at zero.
21
+
22
+ ## Public Interface
23
+
24
+ - No CLI command changes.
25
+ - No config schema changes.
26
+ - No rule matching, scoring, or verdict behavior changes.
27
+ - No MCP, playground, GitHub Action, or npm publishing changes.
28
+
29
+ ## Release Validation
30
+
31
+ ```powershell
32
+ npm.cmd test
33
+ npm.cmd run demo:svg:check
34
+ npm.cmd run fixtures:report
35
+ npm.cmd run fixtures:report -- --json
36
+ npm.cmd run pack:dry
37
+ git diff --check
38
+ node .\dist\cli.js tune coverage --no-config
39
+ node .\dist\cli.js tune risky-domain --json --no-config
40
+ git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.69 preset quiet-pass curation"
41
+ ```
@@ -0,0 +1,36 @@
1
+ # Memento Mori Jester v0.1.70
2
+
3
+ This release follows the fixture report's infra-first curation guidance. It adds practical quiet-pass infra examples only; review behavior is unchanged.
4
+
5
+ ## What Changed
6
+
7
+ - Added 6 fixture cases, growing the corpus from 178 to 184 fixtures.
8
+ - Added infra quiet-pass examples for:
9
+ - `kubectl diff`.
10
+ - `kubectl logs`.
11
+ - `kubectl describe`.
12
+ - Docker disk-usage inspection.
13
+ - Terraform linting.
14
+ - Disabling automatic public IP assignment.
15
+ - Kept thin rule coverage, quiet-pass gaps, feasible pass-case gaps, and preset/kind gaps at zero.
16
+
17
+ ## Public Interface
18
+
19
+ - No CLI command changes.
20
+ - No config schema changes.
21
+ - No rule matching, scoring, or verdict behavior changes.
22
+ - No MCP, playground, GitHub Action, or npm publishing changes.
23
+
24
+ ## Release Validation
25
+
26
+ ```powershell
27
+ npm.cmd test
28
+ npm.cmd run demo:svg:check
29
+ npm.cmd run fixtures:report
30
+ npm.cmd run fixtures:report -- --json
31
+ npm.cmd run pack:dry
32
+ git diff --check
33
+ node .\dist\cli.js tune coverage --no-config
34
+ node .\dist\cli.js tune risky-domain --json --no-config
35
+ git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.70 infra quiet-pass curation"
36
+ ```
@@ -23,6 +23,8 @@ Maintainer triage guidance lives in [docs/MAINTAINER_TRIAGE.md](../../docs/MAINT
23
23
  - Second firing examples for remaining framework custom rules across security, infra, node, python, and web presets.
24
24
  - Second firing examples for remaining built-in and configured sensitive-domain thin rules, leaving no thin coverage gaps.
25
25
  - Real-world low-count preset examples for node, python, web, infra, AI, and security workflows.
26
+ - Quiet-pass examples for typechecking, prebuild scripts, mypy, dataclass parsing, CodeQL, Dependabot limits, form validation, and accessibility copy.
27
+ - Quiet-pass examples for read-only Kubernetes inspection, Docker disk usage, Terraform linting, and public-IP hardening changes.
26
28
  - Fixture metadata like `weight` and `edgeCase` to support precision-weighted tuning evidence.
27
29
 
28
30
  ## Local Check
@@ -2195,5 +2195,205 @@
2195
2195
  "absentRuleIds": [
2196
2196
  "custom-ai-model-output-execution"
2197
2197
  ]
2198
+ },
2199
+ {
2200
+ "id": "node-typecheck-command-pass",
2201
+ "preset": "node",
2202
+ "kind": "command",
2203
+ "description": "Node typecheck commands should stay quiet around production and install-script checks.",
2204
+ "content": "npm run typecheck",
2205
+ "expectedVerdict": "pass",
2206
+ "weight": 2,
2207
+ "expectedRuleIds": [],
2208
+ "absentRuleIds": [
2209
+ "blocked-command-npm-publish-force",
2210
+ "custom-node-env-production-change",
2211
+ "custom-node-install-script-change"
2212
+ ]
2213
+ },
2214
+ {
2215
+ "id": "node-prebuild-script-diff-pass",
2216
+ "preset": "node",
2217
+ "kind": "diff",
2218
+ "description": "Non-install prebuild scripts should not trip node install lifecycle checks.",
2219
+ "content": "diff --git a/package.json b/package.json\n--- a/package.json\n+++ b/package.json\n@@ -3,6 +3,7 @@\n \"scripts\": {\n+ \"prebuild\": \"node scripts/check-env.js\",\n \"build\": \"tsc -p tsconfig.json\"\n }\n",
2220
+ "expectedVerdict": "pass",
2221
+ "weight": 2,
2222
+ "expectedRuleIds": [],
2223
+ "absentRuleIds": [
2224
+ "custom-node-install-script-change",
2225
+ "package-install-script"
2226
+ ]
2227
+ },
2228
+ {
2229
+ "id": "python-mypy-command-pass",
2230
+ "preset": "python",
2231
+ "kind": "command",
2232
+ "description": "Python type-checking commands should not trip eval, pickle, or package-install checks.",
2233
+ "content": "python -m mypy src tests",
2234
+ "expectedVerdict": "pass",
2235
+ "weight": 2,
2236
+ "expectedRuleIds": [],
2237
+ "absentRuleIds": [
2238
+ "blocked-command-pip-install-break-system-packages",
2239
+ "custom-python-eval-exec",
2240
+ "custom-python-pickle-load"
2241
+ ]
2242
+ },
2243
+ {
2244
+ "id": "python-dataclass-diff-pass",
2245
+ "preset": "python",
2246
+ "kind": "diff",
2247
+ "description": "Typed Python dataclass parsing should stay quiet around dynamic execution checks.",
2248
+ "content": "diff --git a/src/models.py b/src/models.py\n--- a/src/models.py\n+++ b/src/models.py\n@@ -1 +1,2 @@\n+@dataclass(frozen=True)\n+class ParsedEvent: pass\n",
2249
+ "expectedVerdict": "pass",
2250
+ "weight": 2,
2251
+ "expectedRuleIds": [],
2252
+ "absentRuleIds": [
2253
+ "custom-python-eval-exec",
2254
+ "custom-python-pickle-load"
2255
+ ]
2256
+ },
2257
+ {
2258
+ "id": "sec-codeql-command-pass",
2259
+ "preset": "security",
2260
+ "kind": "command",
2261
+ "description": "Running CodeQL workflow checks should stay quiet in security preset repos.",
2262
+ "content": "gh workflow run codeql.yml",
2263
+ "expectedVerdict": "pass",
2264
+ "weight": 2,
2265
+ "expectedRuleIds": [],
2266
+ "absentRuleIds": [
2267
+ "blocked-command-chmod-r-777",
2268
+ "custom-broad-cors",
2269
+ "custom-insecure-tls-disabled"
2270
+ ]
2271
+ },
2272
+ {
2273
+ "id": "sec-dependabot-config-diff-pass",
2274
+ "preset": "security",
2275
+ "kind": "diff",
2276
+ "description": "Dependabot limit changes should not trip TLS, CORS, or permission checks.",
2277
+ "content": "diff --git a/.github/dependabot.yml b/.github/dependabot.yml\n--- a/.github/dependabot.yml\n+++ b/.github/dependabot.yml\n@@ -1 +1,2 @@\n+open-pull-requests-limit: 5\n",
2278
+ "expectedVerdict": "pass",
2279
+ "weight": 2,
2280
+ "expectedRuleIds": [],
2281
+ "absentRuleIds": [
2282
+ "custom-broad-cors",
2283
+ "custom-insecure-tls-disabled",
2284
+ "chmod-777"
2285
+ ]
2286
+ },
2287
+ {
2288
+ "id": "web-form-validation-diff-pass",
2289
+ "preset": "web",
2290
+ "kind": "diff",
2291
+ "description": "Client-side validation copy should not trip storage, HTML, or redirect checks.",
2292
+ "content": "diff --git a/src/Form.tsx b/src/Form.tsx\n--- a/src/Form.tsx\n+++ b/src/Form.tsx\n@@ -1 +1,2 @@\n+const emailError = email.includes(\"@\") ? null : \"Enter a valid email\";\n",
2293
+ "expectedVerdict": "pass",
2294
+ "weight": 2,
2295
+ "expectedRuleIds": [],
2296
+ "absentRuleIds": [
2297
+ "custom-web-open-redirect-shape",
2298
+ "custom-web-storage-sensitive-value",
2299
+ "custom-web-unsafe-html-injection"
2300
+ ]
2301
+ },
2302
+ {
2303
+ "id": "web-image-alt-diff-pass",
2304
+ "preset": "web",
2305
+ "kind": "diff",
2306
+ "description": "Accessible image alt text should stay quiet around web risk checks.",
2307
+ "content": "diff --git a/src/Hero.tsx b/src/Hero.tsx\n--- a/src/Hero.tsx\n+++ b/src/Hero.tsx\n@@ -1 +1,2 @@\n+export const heroAlt = \"Product dashboard overview\";\n",
2308
+ "expectedVerdict": "pass",
2309
+ "weight": 2,
2310
+ "expectedRuleIds": [],
2311
+ "absentRuleIds": [
2312
+ "custom-web-open-redirect-shape",
2313
+ "custom-web-public-secret-name",
2314
+ "custom-web-unsafe-html-injection"
2315
+ ]
2316
+ },
2317
+ {
2318
+ "id": "infra-kubectl-diff-command-pass",
2319
+ "preset": "infra",
2320
+ "kind": "command",
2321
+ "description": "Read-only Kubernetes diff commands should not trip delete or apply-style infra checks.",
2322
+ "content": "kubectl diff -f k8s/deployment.yaml",
2323
+ "expectedVerdict": "pass",
2324
+ "weight": 2,
2325
+ "expectedRuleIds": [],
2326
+ "absentRuleIds": [
2327
+ "blocked-command-kubectl-delete",
2328
+ "custom-infra-production-change"
2329
+ ]
2330
+ },
2331
+ {
2332
+ "id": "infra-kubectl-logs-command-pass",
2333
+ "preset": "infra",
2334
+ "kind": "command",
2335
+ "description": "Kubernetes log inspection should stay quiet around destructive infra commands.",
2336
+ "content": "kubectl logs deployment/api --tail=100",
2337
+ "expectedVerdict": "pass",
2338
+ "weight": 2,
2339
+ "expectedRuleIds": [],
2340
+ "absentRuleIds": [
2341
+ "blocked-command-kubectl-delete",
2342
+ "custom-infra-production-change"
2343
+ ]
2344
+ },
2345
+ {
2346
+ "id": "infra-docker-system-df-command-pass",
2347
+ "preset": "infra",
2348
+ "kind": "command",
2349
+ "description": "Docker disk-usage inspection should not trip destructive prune checks.",
2350
+ "content": "docker system df",
2351
+ "expectedVerdict": "pass",
2352
+ "weight": 2,
2353
+ "expectedRuleIds": [],
2354
+ "absentRuleIds": [
2355
+ "custom-infra-production-change"
2356
+ ]
2357
+ },
2358
+ {
2359
+ "id": "infra-kubectl-describe-command-pass",
2360
+ "preset": "infra",
2361
+ "kind": "command",
2362
+ "description": "Kubernetes describe commands should stay quiet around delete checks.",
2363
+ "content": "kubectl describe deployment api",
2364
+ "expectedVerdict": "pass",
2365
+ "weight": 2,
2366
+ "expectedRuleIds": [],
2367
+ "absentRuleIds": [
2368
+ "blocked-command-kubectl-delete",
2369
+ "custom-infra-production-change"
2370
+ ]
2371
+ },
2372
+ {
2373
+ "id": "infra-tflint-command-pass",
2374
+ "preset": "infra",
2375
+ "kind": "command",
2376
+ "description": "Terraform linting commands should not trip terraform destroy checks.",
2377
+ "content": "tflint --chdir=infra",
2378
+ "expectedVerdict": "pass",
2379
+ "weight": 2,
2380
+ "expectedRuleIds": [],
2381
+ "absentRuleIds": [
2382
+ "blocked-command-terraform-destroy",
2383
+ "custom-infra-production-change"
2384
+ ]
2385
+ },
2386
+ {
2387
+ "id": "infra-public-ip-disabled-diff-pass",
2388
+ "preset": "infra",
2389
+ "kind": "diff",
2390
+ "description": "Disabling automatic public IP assignment should stay quiet around public exposure checks.",
2391
+ "content": "diff --git a/infra/network.tf b/infra/network.tf\n--- a/infra/network.tf\n+++ b/infra/network.tf\n@@ -1 +1,2 @@\n+map_public_ip_on_launch = false\n",
2392
+ "expectedVerdict": "pass",
2393
+ "weight": 2,
2394
+ "expectedRuleIds": [],
2395
+ "absentRuleIds": [
2396
+ "custom-infra-public-exposure"
2397
+ ]
2198
2398
  }
2199
2399
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memento-mori-jester",
3
- "version": "0.1.68",
3
+ "version": "0.1.70",
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": {