memento-mori-jester 0.1.80 → 0.1.81
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/README.md +2 -0
- package/ROADMAP.md +2 -1
- package/docs/PRODUCTION_READINESS.md +4 -0
- package/docs/RELEASE.md +1 -0
- package/docs/RELEASE_NOTES_v0.1.81.md +41 -0
- package/package.json +3 -2
- package/scripts/check-production-readiness.mjs +8 -1
- package/scripts/check-site.mjs +56 -0
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.81
|
|
8
|
+
|
|
9
|
+
- Added a lightweight repo-local landing page under `site/index.html` that reuses the social card, demo video, start command, and public project links.
|
|
10
|
+
- Added `npm run site:check` and wired it into `npm test` and production-readiness checks.
|
|
11
|
+
- Updated README, promo docs, release docs, roadmap, and release notes for the new share page.
|
|
12
|
+
|
|
7
13
|
## 0.1.80
|
|
8
14
|
|
|
9
15
|
- 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
|
|
|
@@ -505,6 +506,7 @@ Run `npm run fixtures:check` before merging fixture changes; it catches duplicat
|
|
|
505
506
|
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
507
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
507
508
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
509
|
+
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
510
|
|
|
509
511
|
For vulnerabilities, private code exposure, or credential-handling concerns, follow [SECURITY.md](SECURITY.md) instead of opening a public issue with sensitive details.
|
|
510
512
|
|
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
|
+
- Repo-local landing page in v0.1.81, adding a static one-page share surface plus deterministic link checks.
|
|
9
10
|
- Social preview card in v0.1.80, adding a deterministic 1200x630 promo card plus generation and freshness checks.
|
|
10
11
|
- Promo freshness check in v0.1.79, verifying the current demo video, share-kit stills, docs, and fixture evidence numbers before public posting.
|
|
11
12
|
- Fresh demo render in v0.1.78, updating the repo-local X video and share-kit stills to current version and fixture totals.
|
|
@@ -71,7 +72,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
71
72
|
|
|
72
73
|
- Collect real-world reports for the next lowest-count preset slices now highlighted by `fixtures:report`.
|
|
73
74
|
- Add more framework-specific false-positive examples from real reports so tuning guidance keeps getting sharper.
|
|
74
|
-
- Add a
|
|
75
|
+
- Add a hosted-page option or GitHub Pages instructions once the static page has settled.
|
|
75
76
|
|
|
76
77
|
## Quality And Safety
|
|
77
78
|
|
|
@@ -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
|
|
@@ -56,6 +58,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
56
58
|
- `npm run fixtures:check` validates fixture IDs, metadata, unsafe-looking content, duplicate content, and explicit expected/absent rule intent.
|
|
57
59
|
- `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
60
|
- `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.
|
|
61
|
+
- `npm run site:check` verifies the static landing page before maintainers post or host it.
|
|
59
62
|
- npm publish has a manual workflow fallback, but the normal release path is tag-driven trusted publishing.
|
|
60
63
|
|
|
61
64
|
## Static Guard
|
|
@@ -72,6 +75,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
72
75
|
- fixture authoring checks are wired into `npm test`.
|
|
73
76
|
- fixture coverage reports are wired into `npm test`.
|
|
74
77
|
- promo freshness checks are wired into `npm test`.
|
|
78
|
+
- site checks are wired into `npm test`.
|
|
75
79
|
|
|
76
80
|
`npm test` runs this check after the TypeScript build and unit tests.
|
|
77
81
|
|
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.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.81",
|
|
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",
|
|
@@ -66,6 +66,7 @@ for (const path of [
|
|
|
66
66
|
"action.yml",
|
|
67
67
|
"scripts/check-promo-freshness.mjs",
|
|
68
68
|
"scripts/render-social-card.mjs",
|
|
69
|
+
"scripts/check-site.mjs",
|
|
69
70
|
"scripts/check-fixtures.mjs",
|
|
70
71
|
"scripts/report-fixtures.mjs",
|
|
71
72
|
".github/ISSUE_TEMPLATE/bug_report.yml",
|
|
@@ -79,7 +80,8 @@ for (const path of [
|
|
|
79
80
|
"examples/github-code-scanning.yml",
|
|
80
81
|
"examples/ci/README.md",
|
|
81
82
|
"examples/presets/README.md",
|
|
82
|
-
"examples/fixtures/preset-review-cases.json"
|
|
83
|
+
"examples/fixtures/preset-review-cases.json",
|
|
84
|
+
"site/index.html"
|
|
83
85
|
]) {
|
|
84
86
|
requireFile(path);
|
|
85
87
|
}
|
|
@@ -137,11 +139,16 @@ requireText("package.json", /"fixtures:report": "node scripts\/report-fixtures\.
|
|
|
137
139
|
requireText("package.json", /"promo:card": "node scripts\/render-social-card\.mjs"/, "social card render script");
|
|
138
140
|
requireText("package.json", /"promo:card:check": "node scripts\/render-social-card\.mjs --check"/, "social card stale check script");
|
|
139
141
|
requireText("package.json", /"promo:check": "node scripts\/check-promo-freshness\.mjs"/, "promo freshness check script");
|
|
142
|
+
requireText("package.json", /"site:check": "node scripts\/check-site\.mjs"/, "site check script");
|
|
140
143
|
requireText("package.json", /npm run fixtures:check/, "fixture authoring check in npm test");
|
|
141
144
|
requireText("package.json", /npm run fixtures:report/, "fixture coverage report in npm test");
|
|
142
145
|
requireText("package.json", /npm run promo:check/, "promo freshness check in npm test");
|
|
146
|
+
requireText("package.json", /npm run site:check/, "site check in npm test");
|
|
143
147
|
requireText("scripts/check-promo-freshness.mjs", /--require-package-version/, "optional strict package-version promo check");
|
|
144
148
|
requireText("scripts/check-promo-freshness.mjs", /social-card\.svg/, "social-card freshness check");
|
|
149
|
+
requireText("scripts/check-site.mjs", /site\/index\.html/, "site index check");
|
|
150
|
+
requireText("site/index.html", /npx -y memento-mori-jester@latest start/, "site start command");
|
|
151
|
+
requireText("site/index.html", /promo\/share-kit\/social-card\.svg/, "site social card");
|
|
145
152
|
requireText("SECURITY.md", /doctor --json/, "doctor JSON redaction guidance");
|
|
146
153
|
requireText("SECURITY.md", /security\/advisories\/new/, "private vulnerability report link");
|
|
147
154
|
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");
|