memento-mori-jester 0.1.80 → 0.1.82
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 +12 -0
- package/README.md +5 -0
- package/ROADMAP.md +4 -2
- package/docs/CLI.md +2 -0
- package/docs/DEMO.md +8 -8
- package/docs/FRAMEWORK_TUNING.md +27 -0
- package/docs/GETTING_STARTED.md +1 -1
- package/docs/PRODUCTION_READINESS.md +5 -0
- package/docs/RELEASE.md +1 -0
- package/docs/RELEASE_NOTES_v0.1.81.md +41 -0
- package/docs/RELEASE_NOTES_v0.1.82.md +54 -0
- package/examples/fixtures/README.md +1 -0
- package/examples/fixtures/preset-review-cases.json +91 -0
- package/package.json +3 -2
- package/scripts/check-production-readiness.mjs +15 -1
- package/scripts/check-site.mjs +56 -0
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.82
|
|
8
|
+
|
|
9
|
+
- Added six real-world quiet-pass fixtures for FastAPI dependency injection, frozen `uv` syncs, docs-only Terraform and Helm guidance, redacted Gitleaks scans, and Next.js workspace linting.
|
|
10
|
+
- Added `docs/FRAMEWORK_TUNING.md` to map common framework-specific false-positive reports to useful `jester tune <rule>` commands and fixture IDs.
|
|
11
|
+
- Refreshed demo, fixture docs, roadmap, and release notes for the 222-fixture corpus.
|
|
12
|
+
|
|
13
|
+
## 0.1.81
|
|
14
|
+
|
|
15
|
+
- Added a lightweight repo-local landing page under `site/index.html` that reuses the social card, demo video, start command, and public project links.
|
|
16
|
+
- Added `npm run site:check` and wired it into `npm test` and production-readiness checks.
|
|
17
|
+
- Updated README, promo docs, release docs, roadmap, and release notes for the new share page.
|
|
18
|
+
|
|
7
19
|
## 0.1.80
|
|
8
20
|
|
|
9
21
|
- Added a deterministic `promo/share-kit/social-card.svg` for GitHub, X, and project-update link previews.
|
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ It roasts the reasoning, not the human.
|
|
|
13
13
|
[](docs/DEMO.md)
|
|
14
14
|
|
|
15
15
|
See the full [demo transcript](docs/DEMO.md), or use the [promo/share kit](promo) for X post copy, stills, and a 30-second demo script.
|
|
16
|
+
There is also a lightweight repo-local [landing page](site/index.html) for sharing the project in one screen.
|
|
16
17
|
|
|
17
18
|
## Start Here
|
|
18
19
|
|
|
@@ -314,6 +315,8 @@ jester tune coverage --json
|
|
|
314
315
|
|
|
315
316
|
`jester tune coverage` shows the fixture support and confidence signal for every rule, including suggested next actions such as adding coverage, reviewing surprise matches, checking quiet-pass boundaries, or leaving a healthy signal alone.
|
|
316
317
|
|
|
318
|
+
For stack-shaped noise, see [Framework Tuning Examples](docs/FRAMEWORK_TUNING.md). It maps common Next.js, Vite React, FastAPI, Terraform/Kubernetes, security-scan, and AI/MCP false-positive reports to the `jester tune <rule>` command and fixture IDs worth checking first.
|
|
319
|
+
|
|
317
320
|
Disable a noisy rule by adding its id to `disabledRules` in `jester.config.json`:
|
|
318
321
|
|
|
319
322
|
```json
|
|
@@ -425,6 +428,7 @@ More setup examples:
|
|
|
425
428
|
- [Agent Setup](docs/AGENTS.md)
|
|
426
429
|
- [MCP Tool Reference](docs/MCP_TOOLS.md)
|
|
427
430
|
- [GitHub Actions](docs/GITHUB_ACTIONS.md)
|
|
431
|
+
- [Framework Tuning Examples](docs/FRAMEWORK_TUNING.md)
|
|
428
432
|
- [Demo Script](docs/DEMO.md)
|
|
429
433
|
- [Promo Share Kit](promo)
|
|
430
434
|
- [Examples](examples)
|
|
@@ -505,6 +509,7 @@ Run `npm run fixtures:check` before merging fixture changes; it catches duplicat
|
|
|
505
509
|
Run `npm run fixtures:report` to see fixture coverage by rule, rule family, preset slice, kind, verdict, quiet-pass boundaries, feasible pass-case gaps, and curation-next guidance before choosing the next fixture. Use `npm run fixtures:report -- --markdown` when you want a paste-ready summary for release notes or GitHub issues.
|
|
506
510
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
507
511
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
512
|
+
Run `npm run site:check` after editing the repo-local landing page; it verifies the start command, demo links, social card, repo, release, and npm links.
|
|
508
513
|
|
|
509
514
|
For vulnerabilities, private code exposure, or credential-handling concerns, follow [SECURITY.md](SECURITY.md) instead of opening a public issue with sensitive details.
|
|
510
515
|
|
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
|
+
- Framework tuning examples and quiet-pass fixture curation in v0.1.82, adding six safe real-world examples plus a guide for framework-shaped noisy-rule reports.
|
|
10
|
+
- Repo-local landing page in v0.1.81, adding a static one-page share surface plus deterministic link checks.
|
|
9
11
|
- Social preview card in v0.1.80, adding a deterministic 1200x630 promo card plus generation and freshness checks.
|
|
10
12
|
- Promo freshness check in v0.1.79, verifying the current demo video, share-kit stills, docs, and fixture evidence numbers before public posting.
|
|
11
13
|
- Fresh demo render in v0.1.78, updating the repo-local X video and share-kit stills to current version and fixture totals.
|
|
@@ -70,8 +72,8 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
70
72
|
## Product Ideas
|
|
71
73
|
|
|
72
74
|
- Collect real-world reports for the next lowest-count preset slices now highlighted by `fixtures:report`.
|
|
73
|
-
- Add
|
|
74
|
-
- Add a
|
|
75
|
+
- Add a small fixture issue template checklist that asks for the nearest framework tuning example and redacted `jester tune <rule-id> --json` output.
|
|
76
|
+
- Add a hosted-page option or GitHub Pages instructions once the static page has settled.
|
|
75
77
|
|
|
76
78
|
## Quality And Safety
|
|
77
79
|
|
package/docs/CLI.md
CHANGED
|
@@ -158,6 +158,8 @@ Use `jester tune <id>` when the question is practical: should this noisy rule be
|
|
|
158
158
|
|
|
159
159
|
When filing a false-positive issue, include redacted `jester summary` output and `jester tune <rule-id> --json` output when possible.
|
|
160
160
|
|
|
161
|
+
For stack-shaped reports, see [Framework Tuning Examples](FRAMEWORK_TUNING.md). It points common Next.js, Vite React, FastAPI, Terraform/Kubernetes, security-scan, and AI/MCP noisy-rule reports at the relevant `jester tune <rule-id>` command and fixture IDs.
|
|
162
|
+
|
|
161
163
|
Use `jester tune coverage` when maintaining the rule set. It ranks every rule by fixture support and confidence, shows expected vs unexpected fixture weight, and suggests the next maintenance action for each rule.
|
|
162
164
|
|
|
163
165
|
`jester tune` now also includes fixture evidence:
|
package/docs/DEMO.md
CHANGED
|
@@ -209,17 +209,17 @@ Before muting:
|
|
|
209
209
|
Fixture tuning evidence:
|
|
210
210
|
Support: limited
|
|
211
211
|
Confidence: medium
|
|
212
|
-
Total fixtures checked:
|
|
213
|
-
Weighted fixtures checked:
|
|
212
|
+
Total fixtures checked: 222
|
|
213
|
+
Weighted fixtures checked: 421.8
|
|
214
214
|
Matching fixtures: 11
|
|
215
215
|
Weighted matches: 23
|
|
216
216
|
Expected-match weight: 18
|
|
217
217
|
Unexpected-match weight: 5
|
|
218
218
|
Edge-case matches: 0
|
|
219
|
-
Quiet-pass fixtures:
|
|
220
|
-
Quiet-pass weight:
|
|
219
|
+
Quiet-pass fixtures: 8
|
|
220
|
+
Quiet-pass weight: 5.55
|
|
221
221
|
By kind: command 0, plan 5, diff 5, final 1
|
|
222
|
-
Fixture coverage: 11/
|
|
222
|
+
Fixture coverage: 11/222 (5.5% weighted)
|
|
223
223
|
By verdict: pass 0, caution 3, block 8
|
|
224
224
|
Matched fixture samples:
|
|
225
225
|
infra-public-ingress-block: Public ingress should block in low-risk-tolerance infra repos.
|
|
@@ -230,9 +230,9 @@ Matched fixture samples:
|
|
|
230
230
|
Quiet-pass fixture samples:
|
|
231
231
|
ai-docs-only-transcript-pass: Docs-only AI setup notes should stay quiet when they do not include concrete dangerous patterns.
|
|
232
232
|
api-docs-only-auth-pass: Docs-only API setup notes should not warn just because they mention auth and production.
|
|
233
|
+
infra-helm-values-docs-pass: Docs-only Helm values guidance should stay quiet around infra sensitive-domain warnings.
|
|
234
|
+
infra-terraform-plan-docs-pass: Docs-only Terraform plan review guidance should not trip infra sensitive-domain warnings.
|
|
233
235
|
sec-final-dependency-notes-pass: A verified dependency-note final answer should give the security preset a quiet final case.
|
|
234
|
-
universal-risky-domain-docs-pass: Documentation-only sensitive-domain vocabulary should stay quiet when no code behavior changes.
|
|
235
|
-
web-docs-only-browser-storage-pass: Docs-only web guidance should not warn just because it mentions browser storage or redirects.
|
|
236
236
|
|
|
237
237
|
Commands:
|
|
238
238
|
jester rule risky-domain
|
|
@@ -367,7 +367,7 @@ Preset packs:
|
|
|
367
367
|
|
|
368
368
|
## 13. Review Fixtures
|
|
369
369
|
|
|
370
|
-
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, public-IP hardening changes, npm audit/outdated/ci, development-mode Node commands, package export maps, workspace test scripts, Bandit, pip-audit, coverage/pytest, Trivy filesystem scans, npm audit, TLS verification-enabled diffs, safe text rendering, allowlisted target paths, public analytics IDs, model-check commands, tool allowlist checks, public model-name config, API schema parsing, query-builder filters, enabled rate limiting, read-only Prisma migration diffs, signed-webhook docs, OpenAPI schema docs, Pydantic parsing, Pyright checks, SBOM generation, vulnerability-report docs, escaped React rendering, session-cookie docs, model regression checks,
|
|
370
|
+
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, public-IP hardening changes, npm audit/outdated/ci, development-mode Node commands, package export maps, workspace test scripts, Bandit, pip-audit, coverage/pytest, Trivy filesystem scans, npm audit, TLS verification-enabled diffs, safe text rendering, allowlisted target paths, public analytics IDs, model-check commands, tool allowlist checks, public model-name config, API schema parsing, query-builder filters, enabled rate limiting, read-only Prisma migration diffs, signed-webhook docs, OpenAPI schema docs, Pydantic parsing, Pyright checks, SBOM generation, vulnerability-report docs, escaped React rendering, session-cookie docs, model regression checks, static action allowlists, FastAPI dependency injection, frozen `uv` syncs, docs-only Terraform and Helm guidance, redacted Gitleaks scans, and Next.js workspace linting. These examples are run by `npm test`, so preset tuning changes stay visible.
|
|
371
371
|
|
|
372
372
|
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. Use `npm run fixtures:report -- --markdown` for a paste-ready version of the same snapshot.
|
|
373
373
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Framework Tuning Examples
|
|
2
|
+
|
|
3
|
+
Use this when a rule is noisy in a real project and you want the smallest evidence-backed next step before muting it.
|
|
4
|
+
|
|
5
|
+
Start with the rule that actually fired:
|
|
6
|
+
|
|
7
|
+
```powershell
|
|
8
|
+
jester summary --kind <command|plan|diff|final> "<redacted minimal input>"
|
|
9
|
+
jester tune <rule-id> --json
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Then compare the output with the nearest fixture-backed examples below. If your case is closer to the safe examples than the risky examples, add a redacted fixture before changing a rule.
|
|
13
|
+
|
|
14
|
+
| Stack | Common noisy rule | Useful tune command | Safe fixture examples |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| Next.js / Vite React | Public but non-secret frontend names or harmless workspace commands | `jester tune custom-web-public-secret-name --json` or `jester tune custom-node-install-script-change --json` | `web-public-analytics-env-command-pass`, `node-next-lint-command-pass` |
|
|
17
|
+
| FastAPI / Python | Typed dependency injection, schema parsing, or locked dependency sync being confused with dynamic execution | `jester tune custom-python-eval-exec --json` or `jester tune custom-python-pickle-load --json` | `python-fastapi-dependency-diff-pass`, `python-pydantic-parse-diff-pass`, `python-uv-sync-frozen-command-pass` |
|
|
18
|
+
| Terraform / Kubernetes / Helm | Docs-only infrastructure guidance mentioning sensitive tool names | `jester tune risky-domain --json` or `jester tune configured-sensitive-domain-terraform --json` | `infra-terraform-plan-docs-pass`, `infra-helm-values-docs-pass`, `infra-kubectl-describe-command-pass` |
|
|
19
|
+
| Security scanning | Redacted scanner output or SBOM/report generation being confused with secret material | `jester tune secret-material --json` or `jester tune custom-insecure-tls-disabled --json` | `sec-gitleaks-redacted-command-pass`, `sec-sbom-command-pass`, `sec-vulnerability-report-docs-pass` |
|
|
20
|
+
| AI / MCP tools | Static allowlists, model checks, or public model names being confused with unsafe tool dispatch or provider keys | `jester tune custom-ai-user-controlled-tool-dispatch --json` or `jester tune custom-ai-public-provider-key --json` | `ai-tool-registry-allowlist-diff-pass`, `ai-model-regression-command-pass`, `ai-public-model-env-diff-pass` |
|
|
21
|
+
|
|
22
|
+
## What To Do With The Result
|
|
23
|
+
|
|
24
|
+
- If `fixtureEvidence.quietPassFixtures` already contains a close match, prefer a local config mute over changing global rules.
|
|
25
|
+
- If the safe case is missing but the report is minimal and redacted, add a new pass fixture with `absentRuleIds`.
|
|
26
|
+
- If the rule fired on a genuinely dangerous command, secret, broad permission, production-impacting change, or user-controlled execution path, fix the underlying change instead of muting it.
|
|
27
|
+
- If the example depends on private code, customer data, credentials, or internal URLs, redact it before adding a fixture or opening a public issue.
|
package/docs/GETTING_STARTED.md
CHANGED
|
@@ -106,7 +106,7 @@ npx -y memento-mori-jester@latest bootstrap --preset node
|
|
|
106
106
|
|
|
107
107
|
Then tell them to open `MEMENTO_MORI.md`.
|
|
108
108
|
|
|
109
|
-
For copy-paste agent and hook examples, see [examples](../examples). For stack-specific config examples, see [preset example packs](../examples/presets) for Next.js, Vite React, Express API, FastAPI, Terraform/Kubernetes, and AI MCP repos. For copy-paste CI workflows, see [framework CI examples](../examples/ci). For concrete pass, caution, and block cases, see [review fixtures](../examples/fixtures).
|
|
109
|
+
For copy-paste agent and hook examples, see [examples](../examples). For stack-specific config examples, see [preset example packs](../examples/presets) for Next.js, Vite React, Express API, FastAPI, Terraform/Kubernetes, and AI MCP repos. For copy-paste CI workflows, see [framework CI examples](../examples/ci). For concrete pass, caution, and block cases, see [review fixtures](../examples/fixtures). For stack-shaped noisy-rule reports, see [framework tuning examples](FRAMEWORK_TUNING.md).
|
|
110
110
|
|
|
111
111
|
## Need Help?
|
|
112
112
|
|
|
@@ -10,6 +10,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
10
10
|
- CI runs tests and a package dry run on every push to `main` and pull request.
|
|
11
11
|
- The local playground, GitHub Action, MCP setup snippets, preset examples, fixtures, and release notes ship in the npm package.
|
|
12
12
|
- Repo-local promo assets stay outside the npm package, but `npm run promo:check` keeps the current demo video, stills, social card, docs, and fixture evidence numbers aligned.
|
|
13
|
+
- The repo-local landing page stays outside the npm package, but `npm run site:check` keeps its start command and public links aligned.
|
|
13
14
|
|
|
14
15
|
## npm Package
|
|
15
16
|
|
|
@@ -43,6 +44,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
43
44
|
|
|
44
45
|
- `README.md` leads with a no-write first run, project bootstrap, agent setup, and optional hooks/CI.
|
|
45
46
|
- `docs/GETTING_STARTED.md`, `docs/CLI.md`, `docs/RELEASE.md`, and `docs/TRUSTED_PUBLISHING.md` cover the core adoption and release paths.
|
|
47
|
+
- `site/index.html` gives maintainers a static one-page share surface that reuses the demo, social card, start command, and public links.
|
|
46
48
|
- Every public release has matching `CHANGELOG.md` notes and `docs/RELEASE_NOTES_vX.Y.Z.md`.
|
|
47
49
|
|
|
48
50
|
## Support And Recovery
|
|
@@ -50,12 +52,14 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
50
52
|
- Package metadata points bug reports at the GitHub issues page.
|
|
51
53
|
- `jester doctor --json`, `jester config validate`, and `jester rules` are the first troubleshooting commands.
|
|
52
54
|
- `jester tune`, `jester tune coverage`, and the fixture suite give maintainers a way to inspect noisy rules before changing defaults.
|
|
55
|
+
- [FRAMEWORK_TUNING.md](FRAMEWORK_TUNING.md) maps common stack-specific false-positive reports to the relevant `jester tune <rule-id>` evidence and fixture IDs.
|
|
53
56
|
- GitHub issue templates collect bug reports, false-positive reports, and feature requests with the diagnostic context maintainers need.
|
|
54
57
|
- `SECURITY.md` routes vulnerability reports away from public issues and asks for redacted diagnostics.
|
|
55
58
|
- `docs/MAINTAINER_TRIAGE.md` explains how to turn useful false-positive reports into fixture coverage before changing rule logic.
|
|
56
59
|
- `npm run fixtures:check` validates fixture IDs, metadata, unsafe-looking content, duplicate content, and explicit expected/absent rule intent.
|
|
57
60
|
- `npm run fixtures:report` shows fixture coverage by rule, rule family, preset slice, kind, verdict, quiet-pass rule boundaries, and feasible pass-case gaps so maintainers can pick the next fixture target; `npm run fixtures:report -- --markdown` produces a paste-ready maintainer snapshot.
|
|
58
61
|
- `npm run promo:card` regenerates the deterministic social preview card, and `npm run promo:check` verifies current repo-local promo assets against the current fixture evidence before maintainers post or refresh the demo.
|
|
62
|
+
- `npm run site:check` verifies the static landing page before maintainers post or host it.
|
|
59
63
|
- npm publish has a manual workflow fallback, but the normal release path is tag-driven trusted publishing.
|
|
60
64
|
|
|
61
65
|
## Static Guard
|
|
@@ -72,6 +76,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
72
76
|
- fixture authoring checks are wired into `npm test`.
|
|
73
77
|
- fixture coverage reports are wired into `npm test`.
|
|
74
78
|
- promo freshness checks are wired into `npm test`.
|
|
79
|
+
- site checks are wired into `npm test`.
|
|
75
80
|
|
|
76
81
|
`npm test` runs this check after the TypeScript build and unit tests.
|
|
77
82
|
|
package/docs/RELEASE.md
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.81
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a lightweight repo-local landing page that reuses the existing demo video, social card, install command, and public project links. It gives maintainers a one-page share surface without adding a framework or hosting dependency.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Added `site/index.html`.
|
|
10
|
+
- Added `scripts/check-site.mjs`.
|
|
11
|
+
- Added `npm run site:check`.
|
|
12
|
+
- Wired `site:check` into `npm test` and production-readiness checks.
|
|
13
|
+
- Updated README, promo docs, release docs, production-readiness docs, roadmap, changelog, and release notes.
|
|
14
|
+
|
|
15
|
+
## Public Interface
|
|
16
|
+
|
|
17
|
+
- No CLI command changes.
|
|
18
|
+
- No MCP tool changes.
|
|
19
|
+
- No config schema changes.
|
|
20
|
+
- No review rule, scoring, or verdict behavior changes.
|
|
21
|
+
- No GitHub Action behavior changes.
|
|
22
|
+
- `site/` and `promo/` remain outside the npm package `files` list.
|
|
23
|
+
|
|
24
|
+
## Release Validation
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
npm.cmd test
|
|
28
|
+
npm.cmd run demo:svg:check
|
|
29
|
+
npm.cmd run promo:card:check
|
|
30
|
+
npm.cmd run promo:check
|
|
31
|
+
npm.cmd run site:check
|
|
32
|
+
npm.cmd run pack:dry
|
|
33
|
+
git diff --check
|
|
34
|
+
git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.81 landing page"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Expected:
|
|
38
|
+
|
|
39
|
+
- `site/index.html` opens as a static page with the current start command, demo video, social card, repo, release, and npm links,
|
|
40
|
+
- `site/` remains repo-local and is not included in the npm tarball,
|
|
41
|
+
- GitHub Release and npm Publish complete from the `v0.1.81` tag.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.82
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release continues the core quality track after the landing-page release. It adds a small fixture-backed false-positive batch and a framework tuning guide so maintainers can compare real noisy reports with safe examples before muting or changing rules.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Added six quiet-pass fixtures, growing the corpus from 216 to 222 cases:
|
|
10
|
+
- `python-fastapi-dependency-diff-pass`
|
|
11
|
+
- `python-uv-sync-frozen-command-pass`
|
|
12
|
+
- `infra-terraform-plan-docs-pass`
|
|
13
|
+
- `infra-helm-values-docs-pass`
|
|
14
|
+
- `sec-gitleaks-redacted-command-pass`
|
|
15
|
+
- `node-next-lint-command-pass`
|
|
16
|
+
- Added `docs/FRAMEWORK_TUNING.md`.
|
|
17
|
+
- Linked framework tuning guidance from README, CLI docs, and getting-started docs.
|
|
18
|
+
- Refreshed demo, promo-source evidence counts, site proof count, fixture docs, changelog, and roadmap.
|
|
19
|
+
|
|
20
|
+
## Public Interface
|
|
21
|
+
|
|
22
|
+
- No CLI command changes.
|
|
23
|
+
- No MCP tool changes.
|
|
24
|
+
- No config schema changes.
|
|
25
|
+
- No review rule, scoring, matching, or verdict behavior changes.
|
|
26
|
+
- No GitHub Action or release workflow changes.
|
|
27
|
+
- Fixture/tuning evidence changes only because the corpus is larger.
|
|
28
|
+
|
|
29
|
+
## Release Validation
|
|
30
|
+
|
|
31
|
+
```powershell
|
|
32
|
+
npm.cmd test
|
|
33
|
+
npm.cmd run demo:svg:check
|
|
34
|
+
npm.cmd run promo:card:check
|
|
35
|
+
npm.cmd run promo:check
|
|
36
|
+
npm.cmd run fixtures:report
|
|
37
|
+
npm.cmd run fixtures:report -- --json
|
|
38
|
+
npm.cmd run fixtures:report -- --markdown
|
|
39
|
+
npm.cmd run site:check
|
|
40
|
+
npm.cmd run pack:dry
|
|
41
|
+
git diff --check
|
|
42
|
+
node .\dist\cli.js tune risky-domain --json --no-config
|
|
43
|
+
node .\dist\cli.js tune coverage --no-config
|
|
44
|
+
git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.82 framework tuning fixtures"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Expected:
|
|
48
|
+
|
|
49
|
+
- fixture report shows `Fixtures: 222`,
|
|
50
|
+
- no thin rule coverage,
|
|
51
|
+
- no preset/kind gaps,
|
|
52
|
+
- no rules without quiet-pass coverage,
|
|
53
|
+
- `promo:check` passes with 222 fixtures and 8 risky-domain quiet-pass examples,
|
|
54
|
+
- GitHub Release and npm Publish complete from the `v0.1.82` tag.
|
|
@@ -30,6 +30,7 @@ Maintainer triage guidance lives in [docs/MAINTAINER_TRIAGE.md](../../docs/MAINT
|
|
|
30
30
|
- Quiet-pass examples for safe text rendering, allowlisted target paths, public analytics IDs, model-check commands, tool allowlist checks, and public model-name config.
|
|
31
31
|
- Quiet-pass examples for API schema parsing, query-builder filters, enabled rate limiting, read-only Prisma migration diffs, signed-webhook docs, and OpenAPI schema docs.
|
|
32
32
|
- Quiet-pass examples for Pydantic parsing, Pyright checks, SBOM generation, vulnerability-report docs, escaped React rendering, session-cookie docs, model regression checks, and static action allowlists.
|
|
33
|
+
- Quiet-pass examples for FastAPI dependency injection, frozen `uv` syncs, docs-only Terraform and Helm guidance, redacted Gitleaks scans, and Next.js workspace linting.
|
|
33
34
|
- Fixture metadata like `weight` and `edgeCase` to support precision-weighted tuning evidence.
|
|
34
35
|
|
|
35
36
|
## Local Check
|
|
@@ -2859,5 +2859,96 @@
|
|
|
2859
2859
|
"custom-ai-user-controlled-tool-dispatch",
|
|
2860
2860
|
"custom-ai-model-output-execution"
|
|
2861
2861
|
]
|
|
2862
|
+
},
|
|
2863
|
+
{
|
|
2864
|
+
"id": "python-fastapi-dependency-diff-pass",
|
|
2865
|
+
"preset": "python",
|
|
2866
|
+
"kind": "diff",
|
|
2867
|
+
"description": "FastAPI dependency injection should not look like Python dynamic execution or pickle loading.",
|
|
2868
|
+
"content": "diff --git a/app/dependencies.py b/app/dependencies.py\n--- a/app/dependencies.py\n+++ b/app/dependencies.py\n@@ -1 +1,2 @@\n+current_user: User = Depends(get_current_user)\n",
|
|
2869
|
+
"expectedVerdict": "pass",
|
|
2870
|
+
"weight": 2,
|
|
2871
|
+
"expectedRuleIds": [],
|
|
2872
|
+
"absentRuleIds": [
|
|
2873
|
+
"custom-python-eval-exec",
|
|
2874
|
+
"custom-python-pickle-load"
|
|
2875
|
+
]
|
|
2876
|
+
},
|
|
2877
|
+
{
|
|
2878
|
+
"id": "python-uv-sync-frozen-command-pass",
|
|
2879
|
+
"preset": "python",
|
|
2880
|
+
"kind": "command",
|
|
2881
|
+
"description": "Frozen uv dependency sync for tests should not trip unsafe pip install or dynamic execution rules.",
|
|
2882
|
+
"content": "uv sync --frozen --group test",
|
|
2883
|
+
"expectedVerdict": "pass",
|
|
2884
|
+
"weight": 2,
|
|
2885
|
+
"expectedRuleIds": [],
|
|
2886
|
+
"absentRuleIds": [
|
|
2887
|
+
"blocked-command-pip-install-break-system-packages",
|
|
2888
|
+
"custom-python-eval-exec",
|
|
2889
|
+
"custom-python-pickle-load"
|
|
2890
|
+
]
|
|
2891
|
+
},
|
|
2892
|
+
{
|
|
2893
|
+
"id": "infra-terraform-plan-docs-pass",
|
|
2894
|
+
"preset": "infra",
|
|
2895
|
+
"kind": "diff",
|
|
2896
|
+
"description": "Docs-only Terraform plan review guidance should not trip infra sensitive-domain warnings.",
|
|
2897
|
+
"content": "diff --git a/docs/TERRAFORM_PLAN.md b/docs/TERRAFORM_PLAN.md\n--- a/docs/TERRAFORM_PLAN.md\n+++ b/docs/TERRAFORM_PLAN.md\n@@ -1 +1,2 @@\n+Document how to review terraform plan output and attach rollback notes before apply.\n",
|
|
2898
|
+
"expectedVerdict": "pass",
|
|
2899
|
+
"edgeCase": true,
|
|
2900
|
+
"weight": 1,
|
|
2901
|
+
"expectedRuleIds": [],
|
|
2902
|
+
"absentRuleIds": [
|
|
2903
|
+
"configured-sensitive-domain-terraform",
|
|
2904
|
+
"custom-infra-production-change",
|
|
2905
|
+
"risky-domain"
|
|
2906
|
+
]
|
|
2907
|
+
},
|
|
2908
|
+
{
|
|
2909
|
+
"id": "infra-helm-values-docs-pass",
|
|
2910
|
+
"preset": "infra",
|
|
2911
|
+
"kind": "diff",
|
|
2912
|
+
"description": "Docs-only Helm values guidance should stay quiet around infra sensitive-domain warnings.",
|
|
2913
|
+
"content": "diff --git a/docs/HELM_VALUES.md b/docs/HELM_VALUES.md\n--- a/docs/HELM_VALUES.md\n+++ b/docs/HELM_VALUES.md\n@@ -1 +1,2 @@\n+Record which helm values are environment labels and which require change approval.\n",
|
|
2914
|
+
"expectedVerdict": "pass",
|
|
2915
|
+
"edgeCase": true,
|
|
2916
|
+
"weight": 1,
|
|
2917
|
+
"expectedRuleIds": [],
|
|
2918
|
+
"absentRuleIds": [
|
|
2919
|
+
"configured-sensitive-domain-helm",
|
|
2920
|
+
"custom-infra-production-change",
|
|
2921
|
+
"risky-domain"
|
|
2922
|
+
]
|
|
2923
|
+
},
|
|
2924
|
+
{
|
|
2925
|
+
"id": "sec-gitleaks-redacted-command-pass",
|
|
2926
|
+
"preset": "security",
|
|
2927
|
+
"kind": "command",
|
|
2928
|
+
"description": "Redacted gitleaks scans should not be mistaken for leaked secret material.",
|
|
2929
|
+
"content": "gitleaks detect --redact --no-git -r reports/gitleaks.json",
|
|
2930
|
+
"expectedVerdict": "pass",
|
|
2931
|
+
"weight": 2,
|
|
2932
|
+
"expectedRuleIds": [],
|
|
2933
|
+
"absentRuleIds": [
|
|
2934
|
+
"secret-material",
|
|
2935
|
+
"blocked-command-chmod-r-777",
|
|
2936
|
+
"custom-insecure-tls-disabled"
|
|
2937
|
+
]
|
|
2938
|
+
},
|
|
2939
|
+
{
|
|
2940
|
+
"id": "node-next-lint-command-pass",
|
|
2941
|
+
"preset": "node",
|
|
2942
|
+
"kind": "command",
|
|
2943
|
+
"description": "Next.js workspace lint commands should stay quiet around node publish and install-script checks.",
|
|
2944
|
+
"content": "npm run lint --workspace apps/next-web -- --max-warnings=0",
|
|
2945
|
+
"expectedVerdict": "pass",
|
|
2946
|
+
"weight": 2,
|
|
2947
|
+
"expectedRuleIds": [],
|
|
2948
|
+
"absentRuleIds": [
|
|
2949
|
+
"blocked-command-npm-publish-force",
|
|
2950
|
+
"custom-node-install-script-change",
|
|
2951
|
+
"custom-node-env-production-change"
|
|
2952
|
+
]
|
|
2862
2953
|
}
|
|
2863
2954
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.82",
|
|
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": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"build": "tsc -p tsconfig.json",
|
|
41
41
|
"start": "node dist/server.js",
|
|
42
42
|
"start:mcp": "node dist/server.js",
|
|
43
|
-
"test": "npm run build && node scripts/run-tests.mjs && npm run fixtures:check && npm run fixtures:report && npm run promo:check && npm run production:check",
|
|
43
|
+
"test": "npm run build && node scripts/run-tests.mjs && npm run fixtures:check && npm run fixtures:report && npm run promo:check && npm run site:check && npm run production:check",
|
|
44
44
|
"doctor": "node dist/cli.js doctor",
|
|
45
45
|
"demo:svg": "node scripts/render-demo-svg.mjs",
|
|
46
46
|
"demo:svg:check": "node scripts/render-demo-svg.mjs --check",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"promo:card": "node scripts/render-social-card.mjs",
|
|
50
50
|
"promo:card:check": "node scripts/render-social-card.mjs --check",
|
|
51
51
|
"promo:check": "node scripts/check-promo-freshness.mjs",
|
|
52
|
+
"site:check": "node scripts/check-site.mjs",
|
|
52
53
|
"production:check": "node scripts/check-production-readiness.mjs",
|
|
53
54
|
"pack:dry": "npm pack --dry-run",
|
|
54
55
|
"prepare": "npm run build",
|
|
@@ -61,11 +61,13 @@ for (const path of [
|
|
|
61
61
|
"docs/RELEASE.md",
|
|
62
62
|
"docs/TRUSTED_PUBLISHING.md",
|
|
63
63
|
"docs/PRODUCTION_READINESS.md",
|
|
64
|
+
"docs/FRAMEWORK_TUNING.md",
|
|
64
65
|
"docs/MAINTAINER_TRIAGE.md",
|
|
65
66
|
`docs/RELEASE_NOTES_${tag}.md`,
|
|
66
67
|
"action.yml",
|
|
67
68
|
"scripts/check-promo-freshness.mjs",
|
|
68
69
|
"scripts/render-social-card.mjs",
|
|
70
|
+
"scripts/check-site.mjs",
|
|
69
71
|
"scripts/check-fixtures.mjs",
|
|
70
72
|
"scripts/report-fixtures.mjs",
|
|
71
73
|
".github/ISSUE_TEMPLATE/bug_report.yml",
|
|
@@ -79,7 +81,8 @@ for (const path of [
|
|
|
79
81
|
"examples/github-code-scanning.yml",
|
|
80
82
|
"examples/ci/README.md",
|
|
81
83
|
"examples/presets/README.md",
|
|
82
|
-
"examples/fixtures/preset-review-cases.json"
|
|
84
|
+
"examples/fixtures/preset-review-cases.json",
|
|
85
|
+
"site/index.html"
|
|
83
86
|
]) {
|
|
84
87
|
requireFile(path);
|
|
85
88
|
}
|
|
@@ -97,6 +100,7 @@ requireText("README.md", /MAINTAINER_TRIAGE\.md/, "maintainer triage guide link"
|
|
|
97
100
|
requireText("README.md", /fixtures:check/, "fixture authoring check guidance");
|
|
98
101
|
requireText("README.md", /fixtures:report/, "fixture coverage report guidance");
|
|
99
102
|
requireText("README.md", /fixtures:report -- --markdown/, "Markdown fixture report guidance");
|
|
103
|
+
requireText("README.md", /FRAMEWORK_TUNING\.md/, "framework tuning guide link");
|
|
100
104
|
requireText("README.md", /License: PolyForm Noncommercial/, "the noncommercial license badge");
|
|
101
105
|
requireText("docs/PRODUCTION_READINESS.md", /npm package/i, "npm package readiness");
|
|
102
106
|
requireText("docs/PRODUCTION_READINESS.md", /GitHub Action/i, "GitHub Action readiness");
|
|
@@ -113,6 +117,11 @@ requireText("docs/PRODUCTION_READINESS.md", /fixtures:report -- --markdown/, "Ma
|
|
|
113
117
|
requireText("docs/PRODUCTION_READINESS.md", /quiet-pass/, "quiet-pass fixture readiness");
|
|
114
118
|
requireText("docs/CLI.md", /jester doctor --json/, "doctor JSON CLI docs");
|
|
115
119
|
requireText("docs/CLI.md", /quiet-pass fixture/, "quiet-pass fixture CLI docs");
|
|
120
|
+
requireText("docs/CLI.md", /FRAMEWORK_TUNING\.md/, "framework tuning CLI link");
|
|
121
|
+
requireText("docs/FRAMEWORK_TUNING.md", /Next\.js/, "Next.js framework tuning example");
|
|
122
|
+
requireText("docs/FRAMEWORK_TUNING.md", /FastAPI/, "FastAPI framework tuning example");
|
|
123
|
+
requireText("docs/FRAMEWORK_TUNING.md", /Terraform/, "Terraform framework tuning example");
|
|
124
|
+
requireText("docs/FRAMEWORK_TUNING.md", /jester tune <rule-id> --json/, "framework tuning command guidance");
|
|
116
125
|
requireText("docs/MAINTAINER_TRIAGE.md", /doctor --json/, "doctor JSON triage prompt");
|
|
117
126
|
requireText("docs/MAINTAINER_TRIAGE.md", /tune <rule-id> --json/, "tune JSON triage prompt");
|
|
118
127
|
requireText("docs/MAINTAINER_TRIAGE.md", /preset-review-cases\.json/, "fixture suite link");
|
|
@@ -137,11 +146,16 @@ requireText("package.json", /"fixtures:report": "node scripts\/report-fixtures\.
|
|
|
137
146
|
requireText("package.json", /"promo:card": "node scripts\/render-social-card\.mjs"/, "social card render script");
|
|
138
147
|
requireText("package.json", /"promo:card:check": "node scripts\/render-social-card\.mjs --check"/, "social card stale check script");
|
|
139
148
|
requireText("package.json", /"promo:check": "node scripts\/check-promo-freshness\.mjs"/, "promo freshness check script");
|
|
149
|
+
requireText("package.json", /"site:check": "node scripts\/check-site\.mjs"/, "site check script");
|
|
140
150
|
requireText("package.json", /npm run fixtures:check/, "fixture authoring check in npm test");
|
|
141
151
|
requireText("package.json", /npm run fixtures:report/, "fixture coverage report in npm test");
|
|
142
152
|
requireText("package.json", /npm run promo:check/, "promo freshness check in npm test");
|
|
153
|
+
requireText("package.json", /npm run site:check/, "site check in npm test");
|
|
143
154
|
requireText("scripts/check-promo-freshness.mjs", /--require-package-version/, "optional strict package-version promo check");
|
|
144
155
|
requireText("scripts/check-promo-freshness.mjs", /social-card\.svg/, "social-card freshness check");
|
|
156
|
+
requireText("scripts/check-site.mjs", /site\/index\.html/, "site index check");
|
|
157
|
+
requireText("site/index.html", /npx -y memento-mori-jester@latest start/, "site start command");
|
|
158
|
+
requireText("site/index.html", /promo\/share-kit\/social-card\.svg/, "site social card");
|
|
145
159
|
requireText("SECURITY.md", /doctor --json/, "doctor JSON redaction guidance");
|
|
146
160
|
requireText("SECURITY.md", /security\/advisories\/new/, "private vulnerability report link");
|
|
147
161
|
requireText(".github/ISSUE_TEMPLATE/bug_report.yml", /doctor --json/, "doctor JSON support prompt");
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
|
|
5
|
+
const root = process.cwd();
|
|
6
|
+
const failures = [];
|
|
7
|
+
|
|
8
|
+
function read(path) {
|
|
9
|
+
return readFileSync(join(root, path), "utf8");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function requireFile(path) {
|
|
13
|
+
if (!existsSync(join(root, path))) {
|
|
14
|
+
failures.push(`${path} is missing.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function requireText(path, pattern, description) {
|
|
19
|
+
const content = read(path);
|
|
20
|
+
if (!pattern.test(content)) {
|
|
21
|
+
failures.push(`${path} should include ${description}.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
requireFile("site/index.html");
|
|
26
|
+
|
|
27
|
+
const promoReadme = read("promo/README.md");
|
|
28
|
+
const currentVideo = promoReadme.match(/Final vertical demo video:\s*\[([^\]]+)\]\(([^)]+)\)/);
|
|
29
|
+
const videoPath = currentVideo?.[2] ?? "";
|
|
30
|
+
|
|
31
|
+
if (!videoPath) {
|
|
32
|
+
failures.push("promo/README.md should expose the current final vertical demo video.");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
requireText("site/index.html", /<h1 id="hero-title">Memento Mori Jester<\/h1>/, "the product name as the hero heading");
|
|
36
|
+
requireText("site/index.html", /npx -y memento-mori-jester@latest start/, "the current start command");
|
|
37
|
+
requireText("site/index.html", /\.\.\/promo\/share-kit\/social-card\.svg/, "the social preview card");
|
|
38
|
+
requireText("site/index.html", /\.\.\/docs\/DEMO\.md/, "the demo transcript link");
|
|
39
|
+
requireText("site/index.html", /https:\/\/github\.com\/Martin123132\/Memento-Mori/, "the GitHub repository link");
|
|
40
|
+
requireText("site/index.html", /https:\/\/github\.com\/Martin123132\/Memento-Mori\/releases\/latest/, "the latest release link");
|
|
41
|
+
requireText("site/index.html", /https:\/\/www\.npmjs\.com\/package\/memento-mori-jester/, "the npm package link");
|
|
42
|
+
requireText("site/index.html", /Codex, Claude Code, generic MCP clients, hooks, and CI/, "agent compatibility copy");
|
|
43
|
+
|
|
44
|
+
if (videoPath) {
|
|
45
|
+
requireText("site/index.html", new RegExp(`\\.\\./promo/${videoPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`), "the current promo video");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (failures.length > 0) {
|
|
49
|
+
process.stderr.write("Site check failed:\n");
|
|
50
|
+
for (const failure of failures) {
|
|
51
|
+
process.stderr.write(`- ${failure}\n`);
|
|
52
|
+
}
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
process.stdout.write("Site check passed for site/index.html.\n");
|