memento-mori-jester 0.1.91 → 0.1.92
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 +4 -2
- package/ROADMAP.md +2 -1
- package/docs/MAINTAINER_TRIAGE.md +2 -2
- package/docs/PRODUCTION_READINESS.md +3 -3
- package/docs/RELEASE_NOTES_v0.1.92.md +58 -0
- package/examples/support/README.md +3 -2
- package/examples/support/closeout-checklist.json +53 -0
- package/examples/support/closeout-checklist.md +74 -0
- package/package.json +1 -1
- package/scripts/check-production-readiness.mjs +15 -0
- package/scripts/check-support-triage.mjs +111 -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.92
|
|
8
|
+
|
|
9
|
+
- Added a checked public-safe support closeout checklist for docs clarification, fixture backlog, and rule-review candidate outcomes.
|
|
10
|
+
- Extended `npm run support:check` and production-readiness checks so closeout records stay aligned with the maintainer triage playbook and response snippets.
|
|
11
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and release notes for deterministic support decision recording.
|
|
12
|
+
|
|
7
13
|
## 0.1.91
|
|
8
14
|
|
|
9
15
|
- Added checked public-safe maintainer response snippets for `docs-example`, `fixture-backlog`, and `rule-review-candidate` support outcomes.
|
package/README.md
CHANGED
|
@@ -76,7 +76,7 @@ For trust-building output examples, see [examples/reports](examples/reports). `n
|
|
|
76
76
|
|
|
77
77
|
If one of those reports is confusing or stale, use the public-safe [report gallery feedback template](examples/reports/feedback-template.md). It asks for version, nearest gallery example, sanitized command/output summaries, and redacted diagnostics without private repo code or secrets.
|
|
78
78
|
|
|
79
|
-
Maintainers can use the checked [support triage playbook](examples/support)
|
|
79
|
+
Maintainers can use the checked [support triage playbook](examples/support), [response snippets](examples/support/response-snippets.md), and [support closeout checklist](examples/support/closeout-checklist.md) to turn sanitized reports into a docs example, fixture backlog item, or rule-review candidate without changing behavior first.
|
|
80
80
|
|
|
81
81
|
Expected vibe:
|
|
82
82
|
|
|
@@ -452,6 +452,7 @@ More setup examples:
|
|
|
452
452
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
453
453
|
- [Support Triage Playbook](examples/support)
|
|
454
454
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
455
|
+
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
455
456
|
- [Security Policy](SECURITY.md)
|
|
456
457
|
- [Maintainer Triage](docs/MAINTAINER_TRIAGE.md)
|
|
457
458
|
- [Changelog](CHANGELOG.md)
|
|
@@ -475,6 +476,7 @@ Framework CI examples:
|
|
|
475
476
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
476
477
|
- [Support Triage Playbook](examples/support)
|
|
477
478
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
479
|
+
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
478
480
|
- [Next.js CI](examples/ci/nextjs.yml)
|
|
479
481
|
- [Vite React CI](examples/ci/vite-react.yml)
|
|
480
482
|
- [Express API CI](examples/ci/express-api.yml)
|
|
@@ -531,7 +533,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
|
|
|
531
533
|
Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
|
|
532
534
|
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.
|
|
533
535
|
Run `npm run reports:check` after editing [examples/reports](examples/reports); it verifies the public report gallery against an installed package in a temporary consumer project.
|
|
534
|
-
Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support triage playbook](examples/support),
|
|
536
|
+
Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support triage playbook](examples/support), [response snippets](examples/support/response-snippets.md), or [support closeout checklist](examples/support/closeout-checklist.md); it verifies the public templates ask for useful redacted context without inviting secrets or private code.
|
|
535
537
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
536
538
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
537
539
|
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.
|
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
|
+
- Checked support closeout checklist in v0.1.92, recording whether docs clarifications shipped or queued, fixture backlogs were created, or rule-review candidates were opened.
|
|
9
10
|
- Checked maintainer response snippets in v0.1.91, adding public-safe reply templates for docs examples, fixture backlog items, and rule-review candidates.
|
|
10
11
|
- Checked maintainer triage playbook in v0.1.90, showing how sanitized reports become docs examples, fixture backlog items, or rule-review candidates.
|
|
11
12
|
- Checked adopter feedback path in v0.1.89, adding a report-gallery issue template, package-shipped feedback template, and support triage guard.
|
|
@@ -81,7 +82,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
81
82
|
## Product Ideas
|
|
82
83
|
|
|
83
84
|
- Collect real-world reports and fold the strongest redacted cases into more framework tuning cookbook recipes.
|
|
84
|
-
- Use repeated playbook outcomes
|
|
85
|
+
- Use repeated playbook outcomes, response snippets, and closeout records to prioritize the next redacted fixture or report-gallery update.
|
|
85
86
|
- Add a hosted-page option or GitHub Pages instructions once the static page has settled.
|
|
86
87
|
|
|
87
88
|
## Quality And Safety
|
|
@@ -21,7 +21,7 @@ For users who just need to understand what a healthy report looks like, point th
|
|
|
21
21
|
|
|
22
22
|
For users who say a gallery report is confusing, stale, or hard to compare with their local output, point them at [examples/reports/feedback-template.md](../examples/reports/feedback-template.md) or the GitHub [report gallery feedback issue template](../.github/ISSUE_TEMPLATE/report_gallery_feedback.yml). It asks for the nearest checked example, sanitized command and output summaries, version, and redacted diagnostics without asking for private code.
|
|
23
23
|
|
|
24
|
-
When a report has enough public-safe detail to triage, compare it with the checked [support triage playbook](../examples/support). The playbook walks sanitized report-gallery and false-positive reports through first response, classification, and a follow-up outcome. Use [response-snippets.md](../examples/support/response-snippets.md) to reply consistently after choosing the outcome.
|
|
24
|
+
When a report has enough public-safe detail to triage, compare it with the checked [support triage playbook](../examples/support). The playbook walks sanitized report-gallery and false-positive reports through first response, classification, and a follow-up outcome. Use [response-snippets.md](../examples/support/response-snippets.md) to reply consistently after choosing the outcome, then use [closeout-checklist.md](../examples/support/closeout-checklist.md) to record whether the docs clarification shipped or queued, fixture backlog was created, or rule-review candidate was opened.
|
|
25
25
|
|
|
26
26
|
Do not ask users to paste secrets, private code, customer data, live credentials, complete CI logs, or unredacted SARIF. If the report involves credential exposure, command execution, unexpected network access, private code disclosure, package publishing, or MCP data exposure, route it through [SECURITY.md](../SECURITY.md).
|
|
27
27
|
|
|
@@ -65,7 +65,7 @@ Use the playbook outcomes consistently:
|
|
|
65
65
|
- `fixture-backlog`: the reduced report looks safe and should become a pass or quiet-pass fixture.
|
|
66
66
|
- `rule-review-candidate`: repeated sanitized reports suggest guidance or matching may need review, but not from a single report.
|
|
67
67
|
|
|
68
|
-
Use the matching response snippet for the first public reply, then adapt only the project-neutral parts: the rule id, minimal command summary, fixture id, and next command. Do not add private code, private paths, tokens, full logs, or exploitable details to the response.
|
|
68
|
+
Use the matching response snippet for the first public reply, then adapt only the project-neutral parts: the rule id, minimal command summary, fixture id, and next command. After the reply, record the closeout with the matching checklist entry so the issue has a public-safe decision record. Do not add private code, private paths, tokens, full logs, or exploitable details to the response or closeout.
|
|
69
69
|
|
|
70
70
|
After editing report support docs or issue templates, run:
|
|
71
71
|
|
|
@@ -47,7 +47,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
47
47
|
- `README.md` leads with a no-write first run, project bootstrap, agent setup, and optional hooks/CI.
|
|
48
48
|
- `docs/GETTING_STARTED.md`, `docs/CLI.md`, `docs/RELEASE.md`, and `docs/TRUSTED_PUBLISHING.md` cover the core adoption and release paths.
|
|
49
49
|
- `examples/reports` provides checked, public-safe report examples for fresh install diagnostics, summary output, blocked command reviews, and report-gallery feedback.
|
|
50
|
-
- `examples/support` provides a checked maintainer triage playbook
|
|
50
|
+
- `examples/support` provides a checked maintainer triage playbook, response snippets, and closeout checklist for first response, classification, follow-up outcomes, and public-safe decision records from sanitized support reports.
|
|
51
51
|
- `site/index.html` gives maintainers a static one-page share surface that reuses the demo, social card, start command, and public links.
|
|
52
52
|
- Every public release has matching `CHANGELOG.md` notes and `docs/RELEASE_NOTES_vX.Y.Z.md`.
|
|
53
53
|
|
|
@@ -60,14 +60,14 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
|
|
|
60
60
|
- GitHub issue templates collect bug reports, false-positive reports, report-gallery feedback, and feature requests with the diagnostic context maintainers need.
|
|
61
61
|
- `SECURITY.md` routes vulnerability reports away from public issues and asks for redacted diagnostics.
|
|
62
62
|
- `docs/MAINTAINER_TRIAGE.md` explains how to turn useful false-positive reports into fixture coverage before changing rule logic.
|
|
63
|
-
- `examples/support` shows maintainers how to classify sanitized reports as a docs example, fixture backlog item, or rule-review candidate before changing behavior, then reply with public-safe response snippets.
|
|
63
|
+
- `examples/support` shows maintainers how to classify sanitized reports as a docs example, fixture backlog item, or rule-review candidate before changing behavior, then reply with public-safe response snippets and record the closeout.
|
|
64
64
|
- `npm run fixtures:check` validates fixture IDs, metadata, unsafe-looking content, duplicate content, and explicit expected/absent rule intent.
|
|
65
65
|
- `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.
|
|
66
66
|
- `npm run framework:tuning:check` keeps the framework tuning guide, cookbook JSON, cookbook README, and fixture IDs aligned.
|
|
67
67
|
- `npm run framework:tuning:doctor` runs the cookbook tune commands through the built CLI with temporary preset configs, so package consumers do not inherit stale recipes.
|
|
68
68
|
- `npm run consumer:quickstart:check` installs the package into a temporary minimal project and runs `doctor`, `summary`, and packaged framework tuning checks from that consumer side.
|
|
69
69
|
- `npm run reports:check` installs the package into a temporary minimal project and runs the report gallery's `doctor`, `summary`, and blocked-command examples through that consumer side.
|
|
70
|
-
- `npm run support:check` verifies issue templates, support docs, the report gallery feedback template, the maintainer triage playbook,
|
|
70
|
+
- `npm run support:check` verifies issue templates, support docs, the report gallery feedback template, the maintainer triage playbook, response snippets, and closeout checklist stay public-safe and ask for useful redacted context.
|
|
71
71
|
- `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.
|
|
72
72
|
- `npm run site:check` verifies the static landing page before maintainers post or host it.
|
|
73
73
|
- npm publish has a manual workflow fallback, but the normal release path is tag-driven trusted publishing.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.92
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a checked support closeout checklist for the three maintainer support outcomes: docs clarification, fixture backlog, and rule-review candidate. The goal is to make the final decision record as deterministic and public-safe as the first response.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Added `examples/support/closeout-checklist.md`.
|
|
10
|
+
- Added `examples/support/closeout-checklist.json`.
|
|
11
|
+
- Extended `scripts/check-support-triage.mjs` to validate closeout records.
|
|
12
|
+
- Extended production-readiness checks for the closeout checklist.
|
|
13
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and changelog.
|
|
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, matching, or verdict behavior changes.
|
|
21
|
+
- No GitHub Action input changes.
|
|
22
|
+
- Support docs and package examples now include checked support closeout records.
|
|
23
|
+
|
|
24
|
+
## Release Validation
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
npm.cmd test
|
|
28
|
+
npm.cmd run support:check
|
|
29
|
+
npm.cmd run reports:check
|
|
30
|
+
npm.cmd run demo:svg:check
|
|
31
|
+
npm.cmd run promo:card:check
|
|
32
|
+
npm.cmd run promo:check
|
|
33
|
+
npm.cmd run fixtures:report
|
|
34
|
+
npm.cmd run fixtures:report -- --json
|
|
35
|
+
npm.cmd run fixtures:report -- --markdown
|
|
36
|
+
npm.cmd run pack:dry
|
|
37
|
+
git diff --check
|
|
38
|
+
node .\dist\cli.js doctor
|
|
39
|
+
node .\dist\cli.js summary --kind command "git reset --hard"
|
|
40
|
+
git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.92 checked support closeout checklist"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Expected:
|
|
44
|
+
|
|
45
|
+
- `support:check` verifies issue templates, feedback templates, the maintainer triage playbook, response snippets, and closeout checklist.
|
|
46
|
+
- `reports:check` still verifies the installed-package report gallery.
|
|
47
|
+
- fixture report still shows `Fixtures: 222`.
|
|
48
|
+
- GitHub Release and npm Publish complete from the `v0.1.92` tag.
|
|
49
|
+
|
|
50
|
+
After publish:
|
|
51
|
+
|
|
52
|
+
```powershell
|
|
53
|
+
npm.cmd view memento-mori-jester version --silent
|
|
54
|
+
npx.cmd -y memento-mori-jester@latest doctor
|
|
55
|
+
npx.cmd -y memento-mori-jester@latest summary --kind command "git reset --hard"
|
|
56
|
+
npm.cmd run support:check
|
|
57
|
+
npm.cmd run reports:check -- --package memento-mori-jester@latest
|
|
58
|
+
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This playbook shows how to handle sanitized adopter reports without turning every surprise into an immediate rule change. It pairs with [docs/MAINTAINER_TRIAGE.md](../../docs/MAINTAINER_TRIAGE.md), the [report gallery feedback template](../reports/feedback-template.md), and the GitHub issue templates.
|
|
4
4
|
|
|
5
|
-
The checked source is [triage-playbook.json](triage-playbook.json). Use [response-snippets.md](response-snippets.md) for copy-paste replies after a report is classified. The snippet source is [response-snippets.json](response-snippets.json).
|
|
5
|
+
The checked source is [triage-playbook.json](triage-playbook.json). Use [response-snippets.md](response-snippets.md) for copy-paste replies after a report is classified. The snippet source is [response-snippets.json](response-snippets.json). Use [closeout-checklist.md](closeout-checklist.md) to record what happened after the response. The closeout source is [closeout-checklist.json](closeout-checklist.json).
|
|
6
6
|
|
|
7
7
|
| ID | Source | Classification | Follow-up |
|
|
8
8
|
| --- | --- | --- | --- |
|
|
@@ -22,10 +22,11 @@ The checked source is [triage-playbook.json](triage-playbook.json). Use [respons
|
|
|
22
22
|
- `rule-review-candidate`: collect repeated sanitized reports before changing guidance or matching.
|
|
23
23
|
6. Close with the next command the user can run.
|
|
24
24
|
7. Use the matching response snippet so replies stay public-safe and consistent.
|
|
25
|
+
8. Record the closeout with the matching checklist entry: docs clarification shipped or queued, fixture backlog created, or rule-review candidate opened.
|
|
25
26
|
|
|
26
27
|
## Checks
|
|
27
28
|
|
|
28
|
-
Run this after editing support docs, issue templates, the playbook, or
|
|
29
|
+
Run this after editing support docs, issue templates, the playbook, response snippets, or closeout checklist:
|
|
29
30
|
|
|
30
31
|
```powershell
|
|
31
32
|
npm run support:check
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "docs-clarification-closeout",
|
|
4
|
+
"outcome": "docs-example",
|
|
5
|
+
"decisionRecord": {
|
|
6
|
+
"status": "shipped-or-queued",
|
|
7
|
+
"publicSummary": "Clarified the checked report-gallery wording so the expected block verdict is easier to understand.",
|
|
8
|
+
"userReply": "Thanks again. I have linked the docs clarification, and the checked gallery still passes.",
|
|
9
|
+
"followUpLinkPlaceholder": "<docs-pr-or-commit>",
|
|
10
|
+
"nextCommand": "npm run reports:check"
|
|
11
|
+
},
|
|
12
|
+
"requiredEvidence": [
|
|
13
|
+
"No private code, paths, tokens, full logs, or customer data are included.",
|
|
14
|
+
"The related report-gallery example still passes.",
|
|
15
|
+
"The issue links to the docs change or backlog item."
|
|
16
|
+
],
|
|
17
|
+
"requiredChecks": ["npm run reports:check", "npm run support:check"]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "fixture-backlog-closeout",
|
|
21
|
+
"outcome": "fixture-backlog",
|
|
22
|
+
"decisionRecord": {
|
|
23
|
+
"status": "backlog-created",
|
|
24
|
+
"publicSummary": "Created a redacted fixture backlog item for a plausible quiet-pass boundary.",
|
|
25
|
+
"userReply": "Thanks. This is now tracked as a fixture backlog item; behavior stays unchanged until a checked fixture proves the boundary.",
|
|
26
|
+
"followUpLinkPlaceholder": "<fixture-backlog-issue>",
|
|
27
|
+
"nextCommand": "npm run fixtures:report"
|
|
28
|
+
},
|
|
29
|
+
"requiredEvidence": [
|
|
30
|
+
"The reduced example is public-safe and minimal.",
|
|
31
|
+
"The backlog item names the candidate rule id and expected quiet-pass or pass boundary.",
|
|
32
|
+
"The report does not request a rule change before fixture coverage exists."
|
|
33
|
+
],
|
|
34
|
+
"requiredChecks": ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "rule-review-closeout",
|
|
38
|
+
"outcome": "rule-review-candidate",
|
|
39
|
+
"decisionRecord": {
|
|
40
|
+
"status": "candidate-opened",
|
|
41
|
+
"publicSummary": "Opened a rule-review candidate after repeated sanitized reports suggested a possible guidance or matching boundary.",
|
|
42
|
+
"userReply": "Thanks. I have linked this to a rule-review candidate. The rule remains unchanged while maintainers compare fixture evidence.",
|
|
43
|
+
"followUpLinkPlaceholder": "<rule-review-issue>",
|
|
44
|
+
"nextCommand": "node .\\dist\\cli.js tune <rule-id> --json"
|
|
45
|
+
},
|
|
46
|
+
"requiredEvidence": [
|
|
47
|
+
"At least two sanitized reports are linked or summarized.",
|
|
48
|
+
"Fixture evidence or `jester tune <rule-id> --json` output is referenced.",
|
|
49
|
+
"The public record avoids secrets, private project details, full logs, and exploitable security details."
|
|
50
|
+
],
|
|
51
|
+
"requiredChecks": ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
52
|
+
}
|
|
53
|
+
]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Support Closeout Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist after a maintainer has classified a sanitized support report and sent a response snippet. It records what happened next without changing rule behavior or exposing private project details.
|
|
4
|
+
|
|
5
|
+
The checked source is [closeout-checklist.json](closeout-checklist.json). Keep closeout outcomes aligned with the [triage playbook](triage-playbook.json) and [response snippets](response-snippets.md):
|
|
6
|
+
|
|
7
|
+
- `docs-example`
|
|
8
|
+
- `fixture-backlog`
|
|
9
|
+
- `rule-review-candidate`
|
|
10
|
+
|
|
11
|
+
## Closeout Record
|
|
12
|
+
|
|
13
|
+
Every public closeout should include:
|
|
14
|
+
|
|
15
|
+
- outcome,
|
|
16
|
+
- public-safe summary,
|
|
17
|
+
- shipped or queued status,
|
|
18
|
+
- link placeholder for the docs change, fixture backlog item, or rule-review issue,
|
|
19
|
+
- next command for the user or maintainer,
|
|
20
|
+
- evidence that secrets, private code, private paths, customer data, full logs, and exploitable details were not included.
|
|
21
|
+
|
|
22
|
+
## Docs Clarification
|
|
23
|
+
|
|
24
|
+
Use when behavior was expected and the right follow-up is clearer wording.
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
Outcome: docs-example
|
|
28
|
+
Status: shipped-or-queued
|
|
29
|
+
Public summary: Clarified the checked report-gallery wording so the expected block verdict is easier to understand.
|
|
30
|
+
Follow-up: <docs-pr-or-commit>
|
|
31
|
+
Next command: npm run reports:check
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Fixture Backlog
|
|
35
|
+
|
|
36
|
+
Use when the report describes a plausible safe boundary but behavior should not change until fixture evidence exists.
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
Outcome: fixture-backlog
|
|
40
|
+
Status: backlog-created
|
|
41
|
+
Public summary: Created a redacted fixture backlog item for a plausible quiet-pass boundary.
|
|
42
|
+
Follow-up: <fixture-backlog-issue>
|
|
43
|
+
Next command: npm run fixtures:report
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Rule Review Candidate
|
|
47
|
+
|
|
48
|
+
Use when repeated sanitized reports suggest guidance or matching may need review.
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
Outcome: rule-review-candidate
|
|
52
|
+
Status: candidate-opened
|
|
53
|
+
Public summary: Opened a rule-review candidate after repeated sanitized reports suggested a possible guidance or matching boundary.
|
|
54
|
+
Follow-up: <rule-review-issue>
|
|
55
|
+
Next command: node .\dist\cli.js tune <rule-id> --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Checks
|
|
59
|
+
|
|
60
|
+
Run this after editing closeout records or support docs:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
npm run support:check
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Run fixture checks before closing a fixture-backed issue:
|
|
67
|
+
|
|
68
|
+
```powershell
|
|
69
|
+
npm run fixtures:check
|
|
70
|
+
npm run fixtures:report
|
|
71
|
+
npm run fixtures:report -- --markdown
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Do not include secrets, tokens, private repository code, private paths, customer data, full CI logs, unredacted SARIF, or exploitable security details in a public closeout. Use [SECURITY.md](../../SECURITY.md) for sensitive reports.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.92",
|
|
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": {
|
|
@@ -94,6 +94,8 @@ for (const path of [
|
|
|
94
94
|
"examples/reports/feedback-template.md",
|
|
95
95
|
"examples/reports/report-gallery.json",
|
|
96
96
|
"examples/support/README.md",
|
|
97
|
+
"examples/support/closeout-checklist.md",
|
|
98
|
+
"examples/support/closeout-checklist.json",
|
|
97
99
|
"examples/support/response-snippets.md",
|
|
98
100
|
"examples/support/response-snippets.json",
|
|
99
101
|
"examples/support/triage-playbook.json",
|
|
@@ -127,6 +129,7 @@ requireText("README.md", /examples\/reports/, "report gallery link");
|
|
|
127
129
|
requireText("README.md", /feedback-template\.md/, "report gallery feedback template link");
|
|
128
130
|
requireText("README.md", /examples\/support/, "support triage playbook link");
|
|
129
131
|
requireText("README.md", /response-snippets\.md/, "support response snippets link");
|
|
132
|
+
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
130
133
|
requireText("README.md", /report gallery feedback/i, "report gallery feedback guidance");
|
|
131
134
|
requireText("README.md", /License: PolyForm Noncommercial/, "the noncommercial license badge");
|
|
132
135
|
requireText("docs/PRODUCTION_READINESS.md", /npm package/i, "npm package readiness");
|
|
@@ -149,6 +152,7 @@ requireText("docs/PRODUCTION_READINESS.md", /reports:check/, "report gallery rea
|
|
|
149
152
|
requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support triage readiness");
|
|
150
153
|
requireText("docs/PRODUCTION_READINESS.md", /examples\/support/, "support triage playbook readiness");
|
|
151
154
|
requireText("docs/PRODUCTION_READINESS.md", /response snippets/i, "support response snippets readiness");
|
|
155
|
+
requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support closeout checklist readiness");
|
|
152
156
|
requireText("docs/PRODUCTION_READINESS.md", /quiet-pass/, "quiet-pass fixture readiness");
|
|
153
157
|
requireText("docs/CLI.md", /jester doctor --json/, "doctor JSON CLI docs");
|
|
154
158
|
requireText("docs/CLI.md", /quiet-pass fixture/, "quiet-pass fixture CLI docs");
|
|
@@ -174,6 +178,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /feedback-template\.md/, "report galler
|
|
|
174
178
|
requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report gallery issue template link");
|
|
175
179
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "support triage playbook link");
|
|
176
180
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support response snippets link");
|
|
181
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
177
182
|
requireText("docs/MAINTAINER_TRIAGE.md", /docs-example/, "docs example triage outcome");
|
|
178
183
|
requireText("docs/MAINTAINER_TRIAGE.md", /fixture-backlog/, "fixture backlog triage outcome");
|
|
179
184
|
requireText("docs/MAINTAINER_TRIAGE.md", /rule-review-candidate/, "rule review triage outcome");
|
|
@@ -207,6 +212,7 @@ requireText("examples/reports/feedback-template.md", /Privacy Checklist/, "feedb
|
|
|
207
212
|
requireText("examples/reports/feedback-template.md", /SECURITY\.md/, "feedback template security redirect");
|
|
208
213
|
requireText("examples/support/README.md", /triage-playbook\.json/, "support triage playbook JSON link");
|
|
209
214
|
requireText("examples/support/README.md", /response-snippets\.md/, "support response snippets link");
|
|
215
|
+
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
210
216
|
requireText("examples/support/README.md", /docs-example/, "support triage docs outcome");
|
|
211
217
|
requireText("examples/support/README.md", /fixture-backlog/, "support triage fixture outcome");
|
|
212
218
|
requireText("examples/support/README.md", /rule-review-candidate/, "support triage rule-review outcome");
|
|
@@ -218,6 +224,14 @@ requireText("examples/support/response-snippets.md", /response-snippets\.json/,
|
|
|
218
224
|
requireText("examples/support/response-snippets.json", /docs-example-response/, "support docs response snippet");
|
|
219
225
|
requireText("examples/support/response-snippets.json", /fixture-backlog-response/, "support fixture response snippet");
|
|
220
226
|
requireText("examples/support/response-snippets.json", /rule-review-candidate-response/, "support rule-review response snippet");
|
|
227
|
+
requireText("examples/support/closeout-checklist.md", /Support Closeout Checklist/, "support closeout checklist heading");
|
|
228
|
+
requireText("examples/support/closeout-checklist.md", /closeout-checklist\.json/, "support closeout checklist JSON link");
|
|
229
|
+
requireText("examples/support/closeout-checklist.md", /shipped-or-queued/, "support docs closeout status");
|
|
230
|
+
requireText("examples/support/closeout-checklist.md", /backlog-created/, "support fixture closeout status");
|
|
231
|
+
requireText("examples/support/closeout-checklist.md", /candidate-opened/, "support rule-review closeout status");
|
|
232
|
+
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "support docs closeout record");
|
|
233
|
+
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "support fixture closeout record");
|
|
234
|
+
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "support rule-review closeout record");
|
|
221
235
|
requireText("examples/tuning/README.md", /framework-tuning-cookbook\.json/, "framework tuning cookbook JSON link");
|
|
222
236
|
requireText("examples/tuning/README.md", /framework:tuning:doctor/, "framework tuning doctor guidance");
|
|
223
237
|
requireText("examples/tuning/README.md", /jester tune <rule-id> --json|jester tune [a-z0-9-]+ --json/, "framework tuning command guidance");
|
|
@@ -252,6 +266,7 @@ requireText("scripts/check-support-triage.mjs", /report_gallery_feedback\.yml/,
|
|
|
252
266
|
requireText("scripts/check-support-triage.mjs", /feedback-template\.md/, "support triage feedback template guard");
|
|
253
267
|
requireText("scripts/check-support-triage.mjs", /triage-playbook\.json/, "support triage playbook guard");
|
|
254
268
|
requireText("scripts/check-support-triage.mjs", /response-snippets\.json/, "support response snippets guard");
|
|
269
|
+
requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "support closeout checklist guard");
|
|
255
270
|
requireText("scripts/check-support-triage.mjs", /unsafeContentPatterns/, "support triage unsafe content checks");
|
|
256
271
|
requireText("package.json", /"fixtures:check": "node scripts\/check-fixtures\.mjs"/, "fixture authoring check script");
|
|
257
272
|
requireText("package.json", /"fixtures:report": "node scripts\/report-fixtures\.mjs"/, "fixture coverage report script");
|
|
@@ -25,6 +25,8 @@ const supportFiles = [
|
|
|
25
25
|
".github/ISSUE_TEMPLATE/config.yml",
|
|
26
26
|
"examples/reports/feedback-template.md",
|
|
27
27
|
"examples/reports/README.md",
|
|
28
|
+
"examples/support/closeout-checklist.md",
|
|
29
|
+
"examples/support/closeout-checklist.json",
|
|
28
30
|
"examples/support/README.md",
|
|
29
31
|
"examples/support/response-snippets.md",
|
|
30
32
|
"examples/support/response-snippets.json",
|
|
@@ -78,6 +80,7 @@ requireText("examples/reports/README.md", /npm run support:check/, "support chec
|
|
|
78
80
|
requireText("examples/reports/README.md", /examples\/support|Maintainer Triage Playbook/i, "maintainer triage playbook link");
|
|
79
81
|
|
|
80
82
|
requireText("examples/support/README.md", /Maintainer Triage Playbook/, "maintainer playbook heading");
|
|
83
|
+
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
81
84
|
requireText("examples/support/README.md", /triage-playbook\.json/, "maintainer playbook JSON link");
|
|
82
85
|
requireText("examples/support/README.md", /response-snippets\.md/, "maintainer response snippets link");
|
|
83
86
|
requireText("examples/support/README.md", /gallery-expected-block-docs/, "docs example playbook case");
|
|
@@ -90,6 +93,19 @@ requireText("examples/support/README.md", /fixture-backlog/, "fixture backlog ou
|
|
|
90
93
|
requireText("examples/support/README.md", /rule-review-candidate/, "rule review outcome");
|
|
91
94
|
requireText("examples/support/README.md", /SECURITY\.md/, "security redirect");
|
|
92
95
|
requireText("examples/support/README.md", /npm run support:check/, "support checker command");
|
|
96
|
+
requireText("examples/support/closeout-checklist.md", /Support Closeout Checklist/, "closeout checklist heading");
|
|
97
|
+
requireText("examples/support/closeout-checklist.md", /closeout-checklist\.json/, "closeout checklist JSON link");
|
|
98
|
+
requireText("examples/support/closeout-checklist.md", /docs-example/, "docs closeout outcome");
|
|
99
|
+
requireText("examples/support/closeout-checklist.md", /fixture-backlog/, "fixture closeout outcome");
|
|
100
|
+
requireText("examples/support/closeout-checklist.md", /rule-review-candidate/, "rule-review closeout outcome");
|
|
101
|
+
requireText("examples/support/closeout-checklist.md", /shipped-or-queued/, "docs closeout status");
|
|
102
|
+
requireText("examples/support/closeout-checklist.md", /backlog-created/, "fixture closeout status");
|
|
103
|
+
requireText("examples/support/closeout-checklist.md", /candidate-opened/, "rule-review closeout status");
|
|
104
|
+
requireText("examples/support/closeout-checklist.md", /npm run support:check/, "support checker closeout command");
|
|
105
|
+
requireText("examples/support/closeout-checklist.md", /SECURITY\.md/, "closeout security redirect");
|
|
106
|
+
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "docs closeout record");
|
|
107
|
+
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "fixture closeout record");
|
|
108
|
+
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "rule-review closeout record");
|
|
93
109
|
requireText("examples/support/response-snippets.md", /Maintainer Response Snippets/, "response snippets heading");
|
|
94
110
|
requireText("examples/support/response-snippets.md", /response-snippets\.json/, "response snippets JSON link");
|
|
95
111
|
requireText("examples/support/response-snippets.md", /docs-example/, "docs response outcome");
|
|
@@ -105,6 +121,7 @@ requireText("examples/support/response-snippets.json", /rule-review-candidate-re
|
|
|
105
121
|
requireText("docs/MAINTAINER_TRIAGE.md", /feedback-template\.md/, "feedback template triage link");
|
|
106
122
|
requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report gallery issue template triage link");
|
|
107
123
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "maintainer playbook triage link");
|
|
124
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist triage link");
|
|
108
125
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "maintainer response snippets triage link");
|
|
109
126
|
requireText("docs/MAINTAINER_TRIAGE.md", /docs-example/, "docs example triage outcome");
|
|
110
127
|
requireText("docs/MAINTAINER_TRIAGE.md", /fixture-backlog/, "fixture backlog triage outcome");
|
|
@@ -112,6 +129,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /rule-review-candidate/, "rule review t
|
|
|
112
129
|
requireText("docs/MAINTAINER_TRIAGE.md", /npm(?:\.cmd)? run support:check/, "support checker triage command");
|
|
113
130
|
requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support checker readiness");
|
|
114
131
|
requireText("README.md", /feedback-template\.md/, "feedback template README link");
|
|
132
|
+
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist README link");
|
|
115
133
|
requireText("README.md", /examples\/support/, "maintainer triage playbook README link");
|
|
116
134
|
requireText("README.md", /response-snippets\.md/, "maintainer response snippets README link");
|
|
117
135
|
requireText("README.md", /report gallery feedback/i, "report gallery feedback guidance");
|
|
@@ -121,6 +139,7 @@ requireText("package.json", /npm run support:check/, "support checker in npm tes
|
|
|
121
139
|
|
|
122
140
|
checkTriagePlaybook();
|
|
123
141
|
checkResponseSnippets();
|
|
142
|
+
checkCloseoutChecklist();
|
|
124
143
|
|
|
125
144
|
if (failures.length > 0) {
|
|
126
145
|
console.error("Support triage check failed:");
|
|
@@ -323,3 +342,95 @@ function checkResponseSnippets() {
|
|
|
323
342
|
}
|
|
324
343
|
}
|
|
325
344
|
}
|
|
345
|
+
|
|
346
|
+
function checkCloseoutChecklist() {
|
|
347
|
+
const path = "examples/support/closeout-checklist.json";
|
|
348
|
+
const closeouts = readJson(path);
|
|
349
|
+
if (!closeouts) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (!Array.isArray(closeouts) || closeouts.length !== 3) {
|
|
354
|
+
failures.push(`${path} should contain exactly three support closeout records.`);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const expected = [
|
|
359
|
+
{
|
|
360
|
+
id: "docs-clarification-closeout",
|
|
361
|
+
outcome: "docs-example",
|
|
362
|
+
status: "shipped-or-queued",
|
|
363
|
+
checks: ["npm run reports:check", "npm run support:check"]
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
id: "fixture-backlog-closeout",
|
|
367
|
+
outcome: "fixture-backlog",
|
|
368
|
+
status: "backlog-created",
|
|
369
|
+
checks: ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
id: "rule-review-closeout",
|
|
373
|
+
outcome: "rule-review-candidate",
|
|
374
|
+
status: "candidate-opened",
|
|
375
|
+
checks: ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
376
|
+
}
|
|
377
|
+
];
|
|
378
|
+
const seenIds = new Set();
|
|
379
|
+
|
|
380
|
+
for (const [index, closeout] of closeouts.entries()) {
|
|
381
|
+
const expectedCloseout = expected[index];
|
|
382
|
+
if (closeout?.id !== expectedCloseout.id) {
|
|
383
|
+
failures.push(`${path} entry ${index + 1} should have id ${expectedCloseout.id}.`);
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
if (seenIds.has(closeout.id)) {
|
|
388
|
+
failures.push(`${path} has duplicate id ${closeout.id}.`);
|
|
389
|
+
}
|
|
390
|
+
seenIds.add(closeout.id);
|
|
391
|
+
|
|
392
|
+
if (closeout.outcome !== expectedCloseout.outcome) {
|
|
393
|
+
failures.push(`${closeout.id}.outcome should be ${expectedCloseout.outcome}.`);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (closeout.decisionRecord?.status !== expectedCloseout.status) {
|
|
397
|
+
failures.push(`${closeout.id}.decisionRecord.status should be ${expectedCloseout.status}.`);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
if (typeof closeout.decisionRecord?.publicSummary !== "string" || closeout.decisionRecord.publicSummary.length < 30) {
|
|
401
|
+
failures.push(`${closeout.id}.decisionRecord.publicSummary should be a useful public summary.`);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (typeof closeout.decisionRecord?.userReply !== "string" || closeout.decisionRecord.userReply.length < 30) {
|
|
405
|
+
failures.push(`${closeout.id}.decisionRecord.userReply should be a useful closeout reply.`);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (typeof closeout.decisionRecord?.followUpLinkPlaceholder !== "string" || !closeout.decisionRecord.followUpLinkPlaceholder.startsWith("<")) {
|
|
409
|
+
failures.push(`${closeout.id}.decisionRecord.followUpLinkPlaceholder should be a placeholder.`);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (typeof closeout.decisionRecord?.nextCommand !== "string" || closeout.decisionRecord.nextCommand.length < 8) {
|
|
413
|
+
failures.push(`${closeout.id}.decisionRecord.nextCommand should include a next command.`);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (!Array.isArray(closeout.requiredEvidence) || closeout.requiredEvidence.length < 3) {
|
|
417
|
+
failures.push(`${closeout.id}.requiredEvidence should contain at least three evidence checks.`);
|
|
418
|
+
} else {
|
|
419
|
+
const evidenceText = closeout.requiredEvidence.join("\n");
|
|
420
|
+
if (!/secret|private|redacted|public-safe/i.test(evidenceText)) {
|
|
421
|
+
failures.push(`${closeout.id}.requiredEvidence should include privacy or redaction evidence.`);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
if (!Array.isArray(closeout.requiredChecks)) {
|
|
426
|
+
failures.push(`${closeout.id}.requiredChecks should be an array.`);
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
for (const check of expectedCloseout.checks) {
|
|
431
|
+
if (!closeout.requiredChecks.includes(check)) {
|
|
432
|
+
failures.push(`${closeout.id}.requiredChecks should include ${check}.`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|