memento-mori-jester 0.1.45 → 0.1.47

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.47
8
+
9
+ - Reworked the README Start Here section into a clearer four-step path: try without writing files, add a recommended preset, connect an agent, then add hooks or CI.
10
+ - Updated Getting Started to mirror the same onboarding order and mention playground sample buttons.
11
+ - Kept this as a docs-only onboarding release; no CLI, MCP, config, review, playground runtime, or release workflow behavior changed.
12
+
13
+ ## 0.1.46
14
+
15
+ - Added one-click sample buttons to the local playground for command, plan, diff, and final-answer reviews.
16
+ - The sample buttons populate both subject and content, switch the active review kind, and preserve the existing local-only review API.
17
+ - Added playground tests for deterministic sample rendering and review-kind coverage.
18
+
7
19
  ## 0.1.45
8
20
 
9
21
  - Added eight focused preset review fixtures for `risky-domain`, `missing-verification-step`, `confidence-theater`, and `done-without-evidence`.
package/README.md CHANGED
@@ -16,7 +16,7 @@ See the full [demo transcript](docs/DEMO.md).
16
16
 
17
17
  ## Start Here
18
18
 
19
- No install needed:
19
+ ### 1. Try It Without Writing Files
20
20
 
21
21
  ```powershell
22
22
  npx -y memento-mori-jester@latest start
@@ -25,11 +25,13 @@ npx -y memento-mori-jester@latest command "git reset --hard"
25
25
  npx -y memento-mori-jester@latest playground
26
26
  ```
27
27
 
28
- Add it to a project:
28
+ `start` prints the guided checklist. `playground` opens the local browser UI with sample buttons for commands, plans, diffs, and final answers.
29
+
30
+ ### 2. Add It To A Project
29
31
 
30
32
  ```powershell
31
33
  npx -y memento-mori-jester@latest config recommend
32
- npx -y memento-mori-jester@latest bootstrap --preset node
34
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset>
33
35
  ```
34
36
 
35
37
  That writes:
@@ -38,6 +40,25 @@ That writes:
38
40
  - `memento-mori.mcp.json`
39
41
  - `MEMENTO_MORI.md`
40
42
 
43
+ Common presets are `node`, `python`, `web`, `api`, `infra`, `ai`, and `security`.
44
+
45
+ ### 3. Connect Your Agent
46
+
47
+ ```powershell
48
+ npx -y memento-mori-jester@latest setup
49
+ npx -y memento-mori-jester@latest setup --agent codex
50
+ npx -y memento-mori-jester@latest setup --agent claude
51
+ ```
52
+
53
+ Use the generated MCP snippet and agent instruction in Codex, Claude Code, or another MCP-capable client.
54
+
55
+ ### 4. Add Hooks Or CI When Ready
56
+
57
+ ```powershell
58
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset> --hook pre-commit
59
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset> --hook pre-commit --hook pre-push
60
+ ```
61
+
41
62
  Add it to GitHub code scanning:
42
63
 
43
64
  ```powershell
@@ -166,6 +187,8 @@ jester mcp-config --mode npx
166
187
  jester mcp-config --agent claude --mode npx
167
188
  ```
168
189
 
190
+ `jester playground` includes one-click samples for command, plan, diff, and final-answer reviews, so you can see a block, caution, or evidence check without inventing input first.
191
+
169
192
  The package-name binary works too:
170
193
 
171
194
  ```powershell
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
+ - README onboarding polish in v0.1.47 around the shortest path from `npx` to playground, agent setup, hooks, and CI.
10
+ - Playground sample buttons in v0.1.46 for trying command, plan, diff, and final-answer reviews from the first screen.
9
11
  - Fixture curation pass in v0.1.45 that moved all built-in and structural rule evidence to medium-or-better confidence.
10
12
  - Additional precision pass for fixture-driven tuning signals (scoped to high-signal rule families first).
11
13
  - Fixture-informed `jester tune` evidence from preset review cases, including matched fixture IDs and verdict buckets.
@@ -34,7 +36,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
34
36
 
35
37
  ## Product Ideas
36
38
 
37
- - Improve playground onboarding samples so users can try realistic command, plan, diff, and final-answer reviews without inventing input.
39
+ - Add first-run screenshots or a short hosted demo clip once the README path has had real-user feedback.
38
40
 
39
41
  ## Quality And Safety
40
42
 
@@ -1,5 +1,5 @@
1
1
  import { type Server } from "node:http";
2
- import { type UserJesterConfig } from "./types.js";
2
+ import { type ReviewKind, type UserJesterConfig } from "./types.js";
3
3
  export declare const playgroundHost = "127.0.0.1";
4
4
  export declare const playgroundPortDefault = 4818;
5
5
  export type PlaygroundServerOptions = {
@@ -13,6 +13,14 @@ export type StartedPlayground = {
13
13
  url: string;
14
14
  port: number;
15
15
  };
16
+ export type PlaygroundSample = {
17
+ id: string;
18
+ label: string;
19
+ kind: ReviewKind;
20
+ subject: string;
21
+ content: string;
22
+ };
23
+ export declare const playgroundSamples: PlaygroundSample[];
16
24
  export declare function createPlaygroundServer(options?: PlaygroundServerOptions): Server;
17
25
  export declare function startPlaygroundServer(options?: StartPlaygroundOptions): Promise<StartedPlayground>;
18
26
  export declare function renderPlaygroundHtml(): string;
@@ -10,16 +10,46 @@ class HttpError extends Error {
10
10
  this.status = status;
11
11
  }
12
12
  }
13
- const sampleInputs = {
14
- command: "git reset --hard",
15
- plan: "I will just refactor auth and ship it.",
16
- final: "Implemented the fix, but tests not run.",
17
- diff: `diff --git a/.env b/.env
13
+ export const playgroundSamples = [
14
+ {
15
+ id: "command-hard-reset",
16
+ label: "Hard reset",
17
+ kind: "command",
18
+ subject: "destructive git command",
19
+ content: "git reset --hard"
20
+ },
21
+ {
22
+ id: "plan-auth-ship",
23
+ label: "Overconfident plan",
24
+ kind: "plan",
25
+ subject: "auth refactor plan",
26
+ content: "I will just refactor auth and ship it."
27
+ },
28
+ {
29
+ id: "diff-public-token",
30
+ label: "Public token diff",
31
+ kind: "diff",
32
+ subject: "environment diff",
33
+ content: `diff --git a/.env b/.env
18
34
  index 1111111..2222222 100644
19
35
  --- a/.env
20
36
  +++ b/.env
21
37
  @@ -1 +1,2 @@
22
38
  +PUBLIC_TOKEN=redacted-demo-value`
39
+ },
40
+ {
41
+ id: "final-tests-not-run",
42
+ label: "Untested final",
43
+ kind: "final",
44
+ subject: "final answer",
45
+ content: "Implemented the fix, but tests not run."
46
+ }
47
+ ];
48
+ const defaultSampleByKind = {
49
+ command: playgroundSamples[0],
50
+ plan: playgroundSamples[1],
51
+ diff: playgroundSamples[2],
52
+ final: playgroundSamples[3]
23
53
  };
24
54
  export function createPlaygroundServer(options = {}) {
25
55
  return createServer(async (request, response) => {
@@ -332,6 +362,31 @@ export function renderPlaygroundHtml() {
332
362
  gap: 12px;
333
363
  }
334
364
 
365
+ .sample-grid {
366
+ display: grid;
367
+ grid-template-columns: repeat(4, minmax(0, 1fr));
368
+ gap: 8px;
369
+ }
370
+
371
+ .sample-button {
372
+ min-height: 38px;
373
+ padding: 0 10px;
374
+ border: 1px solid var(--line);
375
+ border-radius: 8px;
376
+ background: #fff;
377
+ color: var(--ink);
378
+ cursor: pointer;
379
+ font-size: 12px;
380
+ font-weight: 760;
381
+ white-space: normal;
382
+ }
383
+
384
+ .sample-button[aria-pressed="true"] {
385
+ border-color: var(--accent);
386
+ background: var(--accent-soft);
387
+ color: var(--accent);
388
+ }
389
+
335
390
  .actions {
336
391
  display: flex;
337
392
  align-items: center;
@@ -491,6 +546,10 @@ export function renderPlaygroundHtml() {
491
546
  grid-template-columns: 1fr;
492
547
  }
493
548
 
549
+ .sample-grid {
550
+ grid-template-columns: repeat(2, minmax(0, 1fr));
551
+ }
552
+
494
553
  .segmented {
495
554
  grid-template-columns: repeat(2, minmax(0, 1fr));
496
555
  }
@@ -541,6 +600,10 @@ export function renderPlaygroundHtml() {
541
600
  <textarea id="content" name="content" spellcheck="false"></textarea>
542
601
  </label>
543
602
 
603
+ <div class="sample-grid" aria-label="Sample inputs">
604
+ ${playgroundSamples.map((sample) => `<button class="sample-button" type="button" data-sample-id="${sample.id}" aria-pressed="false">${sample.label}</button>`).join("\n ")}
605
+ </div>
606
+
544
607
  <div class="row">
545
608
  <label>
546
609
  Tone
@@ -580,8 +643,10 @@ export function renderPlaygroundHtml() {
580
643
  </main>
581
644
 
582
645
  <script>
583
- const samples = ${JSON.stringify(sampleInputs, null, 6)};
646
+ const samples = ${JSON.stringify(playgroundSamples, null, 6)};
647
+ const defaultSamples = ${JSON.stringify(defaultSampleByKind, null, 6)};
584
648
  let activeKind = "command";
649
+ let activeSampleId = "";
585
650
 
586
651
  const content = document.querySelector("#content");
587
652
  const subject = document.querySelector("#subject");
@@ -589,6 +654,7 @@ export function renderPlaygroundHtml() {
589
654
  const risk = document.querySelector("#risk");
590
655
  const result = document.querySelector("#result");
591
656
  const kindButtons = Array.from(document.querySelectorAll("[data-kind]"));
657
+ const sampleButtons = Array.from(document.querySelectorAll("[data-sample-id]"));
592
658
 
593
659
  function escapeHtml(value) {
594
660
  return String(value)
@@ -598,14 +664,28 @@ export function renderPlaygroundHtml() {
598
664
  .replaceAll('"', "&quot;");
599
665
  }
600
666
 
601
- function setKind(kind) {
602
- activeKind = kind;
603
- content.value = samples[kind];
667
+ function syncButtons() {
604
668
  for (const button of kindButtons) {
605
- button.setAttribute("aria-pressed", String(button.dataset.kind === kind));
669
+ button.setAttribute("aria-pressed", String(button.dataset.kind === activeKind));
670
+ }
671
+ for (const button of sampleButtons) {
672
+ button.setAttribute("aria-pressed", String(button.dataset.sampleId === activeSampleId));
606
673
  }
607
674
  }
608
675
 
676
+ function loadSample(sample) {
677
+ activeKind = sample.kind;
678
+ activeSampleId = sample.id;
679
+ subject.value = sample.subject;
680
+ content.value = sample.content;
681
+ syncButtons();
682
+ }
683
+
684
+ function setKind(kind) {
685
+ activeKind = kind;
686
+ loadSample(defaultSamples[kind]);
687
+ }
688
+
609
689
  function issueList(issues) {
610
690
  if (!issues.length) {
611
691
  return "";
@@ -667,6 +747,15 @@ export function renderPlaygroundHtml() {
667
747
  button.addEventListener("click", () => setKind(button.dataset.kind));
668
748
  }
669
749
 
750
+ for (const button of sampleButtons) {
751
+ button.addEventListener("click", () => {
752
+ const sample = samples.find((entry) => entry.id === button.dataset.sampleId);
753
+ if (sample) {
754
+ loadSample(sample);
755
+ }
756
+ });
757
+ }
758
+
670
759
  document.querySelector("#sample").addEventListener("click", () => setKind(activeKind));
671
760
  document.querySelector("#review-form").addEventListener("submit", (event) => {
672
761
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"playground.js","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playground.js","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":"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"}
package/docs/CLI.md CHANGED
@@ -49,6 +49,7 @@ jester playground --port 4919
49
49
  ```
50
50
 
51
51
  The playground listens on `127.0.0.1`, loads the same project config as the CLI, and reviews commands, plans, diffs, and final answers through the same rule engine.
52
+ It includes one-click samples for the four review kinds so you can try realistic inputs before wiring Jester into an agent or hook.
52
53
 
53
54
  ## Start
54
55
 
package/docs/DEMO.md CHANGED
@@ -83,6 +83,13 @@ Config: built-in defaults
83
83
  Press Ctrl+C to stop.
84
84
  ```
85
85
 
86
+ The browser playground includes sample buttons for:
87
+
88
+ - `Hard reset`
89
+ - `Overconfident plan`
90
+ - `Public token diff`
91
+ - `Untested final`
92
+
86
93
  ## 5. Preset Recommendation And Preview
87
94
 
88
95
  Command:
@@ -2,7 +2,7 @@
2
2
 
3
3
  This is the shortest path for a normal project.
4
4
 
5
- ## 1. Check It Runs
5
+ ## 1. Try It Without Writing Files
6
6
 
7
7
  For a guided checklist:
8
8
 
@@ -18,8 +18,6 @@ npx -y memento-mori-jester@latest doctor
18
18
 
19
19
  You should see four `PASS` lines.
20
20
 
21
- ## 2. See The Point
22
-
23
21
  ```powershell
24
22
  npx -y memento-mori-jester@latest command "git reset --hard"
25
23
  ```
@@ -38,19 +36,21 @@ For the local browser version:
38
36
  npx -y memento-mori-jester@latest playground
39
37
  ```
40
38
 
39
+ The playground starts on `127.0.0.1` and includes sample buttons for command, plan, diff, and final-answer reviews.
40
+
41
41
  If a rule feels noisy, ask for tuning advice before disabling it:
42
42
 
43
43
  ```powershell
44
44
  npx -y memento-mori-jester@latest tune risky-domain
45
45
  ```
46
46
 
47
- ## 3. Add It To A Project
47
+ ## 2. Add It To A Project
48
48
 
49
49
  Run this from the folder of the project you want protected:
50
50
 
51
51
  ```powershell
52
52
  npx -y memento-mori-jester@latest config recommend
53
- npx -y memento-mori-jester@latest bootstrap --preset node
53
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset>
54
54
  ```
55
55
 
56
56
  Use `--preset ai` for LLM, MCP, and agent apps, `--preset api` for backend APIs, `--preset web` for frontend/browser apps, `--preset infra` for deployment or cloud infrastructure repos, or `--preset security` for a stricter general policy.
@@ -65,32 +65,34 @@ That creates:
65
65
 
66
66
  Existing files are kept. Add `--force` only when you want to overwrite the starter files.
67
67
 
68
- ## 4. Optional Git Hooks
68
+ ## 3. Agent Instruction
69
69
 
70
- To make git call the Jester before commits:
70
+ For exact Codex, Claude Code, or generic MCP snippets:
71
71
 
72
72
  ```powershell
73
- npx -y memento-mori-jester@latest bootstrap --preset node --hook pre-commit
73
+ npx -y memento-mori-jester@latest setup
74
+ npx -y memento-mori-jester@latest setup --agent codex
75
+ npx -y memento-mori-jester@latest setup --agent claude
74
76
  ```
75
77
 
76
- To also check before pushing:
78
+ Put this in your agent rules or custom instructions:
77
79
 
78
- ```powershell
79
- npx -y memento-mori-jester@latest bootstrap --preset node --hook pre-commit --hook pre-push
80
+ ```text
81
+ Before risky commands, final answers, commits, or large edits, call the Memento Mori Jester. Treat BLOCK as requiring a changed plan, and CAUTION as requiring at least one concrete verification step.
80
82
  ```
81
83
 
82
- ## 5. Agent Instruction
84
+ ## 4. Optional Git Hooks
83
85
 
84
- For exact Codex, Claude Code, or generic MCP snippets:
86
+ To make git call the Jester before commits:
85
87
 
86
88
  ```powershell
87
- npx -y memento-mori-jester@latest setup
89
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset> --hook pre-commit
88
90
  ```
89
91
 
90
- Put this in your agent rules or custom instructions:
92
+ To also check before pushing:
91
93
 
92
- ```text
93
- Before risky commands, final answers, commits, or large edits, call the Memento Mori Jester. Treat BLOCK as requiring a changed plan, and CAUTION as requiring at least one concrete verification step.
94
+ ```powershell
95
+ npx -y memento-mori-jester@latest bootstrap --preset <recommended-preset> --hook pre-commit --hook pre-push
94
96
  ```
95
97
 
96
98
  ## What To Share With Someone Else
@@ -0,0 +1,24 @@
1
+ # v0.1.46 Release Notes
2
+
3
+ This release makes the local playground easier to try by adding one-click sample inputs for each review kind. It does not change review matching, scoring, verdicts, config, MCP tools, GitHub Action behavior, or release automation.
4
+
5
+ ## Changed
6
+
7
+ - Added playground sample buttons:
8
+ - `Hard reset`
9
+ - `Overconfident plan`
10
+ - `Public token diff`
11
+ - `Untested final`
12
+ - Sample buttons switch the active review kind and populate the subject/content fields.
13
+ - Added tests that the rendered playground exposes all sample buttons and keeps sample review-kind coverage deterministic.
14
+
15
+ ## Release Validation
16
+
17
+ ```powershell
18
+ npm.cmd test
19
+ npm.cmd run demo:svg:check
20
+ npm.cmd run pack:dry
21
+ git diff --check
22
+ node .\dist\cli.js playground
23
+ git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.46 playground sample buttons"
24
+ ```
@@ -0,0 +1,25 @@
1
+ # v0.1.47 Release Notes
2
+
3
+ This is a docs-only onboarding release. It makes the first README path clearer without changing CLI behavior, review behavior, MCP tools, config, playground runtime, GitHub Actions, or release automation.
4
+
5
+ ## Changed
6
+
7
+ - Reworked README Start Here into four steps:
8
+ - try Jester without writing files,
9
+ - add it to a project with the recommended preset,
10
+ - connect Codex, Claude Code, or a generic MCP client,
11
+ - add hooks or GitHub code scanning when ready.
12
+ - Updated Getting Started to follow the same order and mention the playground sample buttons.
13
+ - Updated the roadmap with the shipped README polish and the next demo/onboarding idea.
14
+
15
+ ## Release Validation
16
+
17
+ ```powershell
18
+ npm.cmd test
19
+ npm.cmd run demo:svg:check
20
+ npm.cmd run pack:dry
21
+ git diff --check
22
+ node .\dist\cli.js start
23
+ node .\dist\cli.js config recommend
24
+ git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.47 README onboarding polish"
25
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memento-mori-jester",
3
- "version": "0.1.45",
3
+ "version": "0.1.47",
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": {