memento-mori-jester 0.1.92 → 0.1.93
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.93.md +58 -0
- package/examples/support/README.md +3 -1
- package/examples/support/support-lifecycle.json +95 -0
- package/examples/support/support-lifecycle.md +46 -0
- package/package.json +1 -1
- package/scripts/check-production-readiness.mjs +16 -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.93
|
|
8
|
+
|
|
9
|
+
- Added a checked support lifecycle overview that ties report-gallery feedback, triage playbook entries, response snippets, and closeout records together by support outcome.
|
|
10
|
+
- Extended `npm run support:check` and production-readiness checks so the lifecycle index stays aligned with `docs-example`, `fixture-backlog`, and `rule-review-candidate`.
|
|
11
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and release notes for at-a-glance support auditing.
|
|
12
|
+
|
|
7
13
|
## 0.1.92
|
|
8
14
|
|
|
9
15
|
- Added a checked public-safe support closeout checklist for docs clarification, fixture backlog, and rule-review candidate 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), [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.
|
|
79
|
+
Maintainers can use the checked [support lifecycle overview](examples/support/support-lifecycle.md), [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
|
|
|
@@ -450,6 +450,7 @@ More setup examples:
|
|
|
450
450
|
- [Consumer Quickstart Smoke](examples/consumer-quickstart)
|
|
451
451
|
- [Real-World Report Gallery](examples/reports)
|
|
452
452
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
453
|
+
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
453
454
|
- [Support Triage Playbook](examples/support)
|
|
454
455
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
455
456
|
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
@@ -474,6 +475,7 @@ Framework CI examples:
|
|
|
474
475
|
- [Consumer Quickstart Smoke](examples/consumer-quickstart)
|
|
475
476
|
- [Real-World Report Gallery](examples/reports)
|
|
476
477
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
478
|
+
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
477
479
|
- [Support Triage Playbook](examples/support)
|
|
478
480
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
479
481
|
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
@@ -533,7 +535,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
|
|
|
533
535
|
Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
|
|
534
536
|
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.
|
|
535
537
|
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.
|
|
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.
|
|
538
|
+
Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support lifecycle overview](examples/support/support-lifecycle.md), [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.
|
|
537
539
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
538
540
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
539
541
|
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 lifecycle overview in v0.1.93, tying report-gallery feedback, triage playbook entries, response snippets, and closeout records together by outcome.
|
|
9
10
|
- 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.
|
|
10
11
|
- Checked maintainer response snippets in v0.1.91, adding public-safe reply templates for docs examples, fixture backlog items, and rule-review candidates.
|
|
11
12
|
- Checked maintainer triage playbook in v0.1.90, showing how sanitized reports become docs examples, fixture backlog items, or rule-review candidates.
|
|
@@ -82,7 +83,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
82
83
|
## Product Ideas
|
|
83
84
|
|
|
84
85
|
- Collect real-world reports and fold the strongest redacted cases into more framework tuning cookbook recipes.
|
|
85
|
-
- Use repeated
|
|
86
|
+
- Use repeated lifecycle outcomes, response snippets, and closeout records to prioritize the next redacted fixture or report-gallery update.
|
|
86
87
|
- Add a hosted-page option or GitHub Pages instructions once the static page has settled.
|
|
87
88
|
|
|
88
89
|
## 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, 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.
|
|
24
|
+
When a report has enough public-safe detail to triage, start with the checked [support lifecycle overview](../examples/support/support-lifecycle.md) to see the whole path from report to closeout. Then 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. 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.
|
|
68
|
+
Use the matching lifecycle row and 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, response snippets, and closeout checklist for first response, classification, follow-up outcomes, and public-safe decision records from sanitized support reports.
|
|
50
|
+
- `examples/support` provides a checked support lifecycle overview, 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 and record the closeout.
|
|
63
|
+
- `examples/support` shows maintainers how to audit the support lifecycle, 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, response snippets, and closeout checklist stay public-safe and ask for useful redacted context.
|
|
70
|
+
- `npm run support:check` verifies issue templates, support docs, the report gallery feedback template, the support lifecycle overview, 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.93
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a checked support lifecycle overview so maintainers can audit the whole public-safe support path at a glance: report, triage, response, and closeout. It keeps the three support outcomes aligned without changing rule behavior.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Added `examples/support/support-lifecycle.md`.
|
|
10
|
+
- Added `examples/support/support-lifecycle.json`.
|
|
11
|
+
- Extended `scripts/check-support-triage.mjs` to validate lifecycle outcomes and stage references.
|
|
12
|
+
- Extended production-readiness checks for the lifecycle overview.
|
|
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 a checked lifecycle index.
|
|
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.93 checked support lifecycle overview"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Expected:
|
|
44
|
+
|
|
45
|
+
- `support:check` verifies issue templates, feedback templates, the support lifecycle overview, 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.93` 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,6 +2,8 @@
|
|
|
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
|
+
Start with the checked [support lifecycle overview](support-lifecycle.md) when you need the whole path in one place. The lifecycle source is [support-lifecycle.json](support-lifecycle.json).
|
|
6
|
+
|
|
5
7
|
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
8
|
|
|
7
9
|
| ID | Source | Classification | Follow-up |
|
|
@@ -26,7 +28,7 @@ The checked source is [triage-playbook.json](triage-playbook.json). Use [respons
|
|
|
26
28
|
|
|
27
29
|
## Checks
|
|
28
30
|
|
|
29
|
-
Run this after editing support docs, issue templates, the playbook, response snippets, or closeout checklist:
|
|
31
|
+
Run this after editing support docs, issue templates, the lifecycle overview, the playbook, response snippets, or closeout checklist:
|
|
30
32
|
|
|
31
33
|
```powershell
|
|
32
34
|
npm run support:check
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"outcome": "docs-example",
|
|
4
|
+
"title": "Expected behavior needs clearer wording",
|
|
5
|
+
"stages": [
|
|
6
|
+
{
|
|
7
|
+
"id": "report",
|
|
8
|
+
"artifact": "examples/reports/feedback-template.md",
|
|
9
|
+
"reference": "report-gallery-feedback",
|
|
10
|
+
"purpose": "Collect the nearest checked report example, sanitized output summary, and redacted diagnostics."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "triage",
|
|
14
|
+
"artifact": "examples/support/triage-playbook.json",
|
|
15
|
+
"reference": "gallery-expected-block-docs",
|
|
16
|
+
"purpose": "Classify the report as expected behavior that can be clarified in docs or report examples."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "response",
|
|
20
|
+
"artifact": "examples/support/response-snippets.json",
|
|
21
|
+
"reference": "docs-example-response",
|
|
22
|
+
"purpose": "Reply with public-safe wording and ask for redacted diagnostics only if local output differs."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "closeout",
|
|
26
|
+
"artifact": "examples/support/closeout-checklist.json",
|
|
27
|
+
"reference": "docs-clarification-closeout",
|
|
28
|
+
"purpose": "Record whether the docs clarification shipped or is queued, then link the public-safe follow-up."
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"requiredChecks": ["npm run reports:check", "npm run support:check"]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"outcome": "fixture-backlog",
|
|
35
|
+
"title": "Plausible false-positive boundary needs fixture evidence",
|
|
36
|
+
"stages": [
|
|
37
|
+
{
|
|
38
|
+
"id": "report",
|
|
39
|
+
"artifact": "examples/reports/feedback-template.md",
|
|
40
|
+
"reference": "false-positive",
|
|
41
|
+
"purpose": "Collect the smallest sanitized reproduction, redacted doctor output, and tune evidence."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "triage",
|
|
45
|
+
"artifact": "examples/support/triage-playbook.json",
|
|
46
|
+
"reference": "false-positive-fixture-backlog",
|
|
47
|
+
"purpose": "Classify the report as a safe boundary candidate before changing rule behavior."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "response",
|
|
51
|
+
"artifact": "examples/support/response-snippets.json",
|
|
52
|
+
"reference": "fixture-backlog-response",
|
|
53
|
+
"purpose": "Tell the reporter that a pass or quiet-pass fixture should prove the boundary first."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "closeout",
|
|
57
|
+
"artifact": "examples/support/closeout-checklist.json",
|
|
58
|
+
"reference": "fixture-backlog-closeout",
|
|
59
|
+
"purpose": "Record that a redacted fixture backlog item exists and the rule remains unchanged."
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"requiredChecks": ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"outcome": "rule-review-candidate",
|
|
66
|
+
"title": "Repeated sanitized surprises need rule review",
|
|
67
|
+
"stages": [
|
|
68
|
+
{
|
|
69
|
+
"id": "report",
|
|
70
|
+
"artifact": "examples/reports/feedback-template.md",
|
|
71
|
+
"reference": "false-positive",
|
|
72
|
+
"purpose": "Collect repeated sanitized examples, redacted doctor output, and tune fixture evidence."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "triage",
|
|
76
|
+
"artifact": "examples/support/triage-playbook.json",
|
|
77
|
+
"reference": "repeated-risky-domain-rule-review",
|
|
78
|
+
"purpose": "Classify repeated reports as a candidate for guidance or matching review."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "response",
|
|
82
|
+
"artifact": "examples/support/response-snippets.json",
|
|
83
|
+
"reference": "rule-review-candidate-response",
|
|
84
|
+
"purpose": "Explain that maintainers need multiple sanitized examples before changing guidance or matching."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "closeout",
|
|
88
|
+
"artifact": "examples/support/closeout-checklist.json",
|
|
89
|
+
"reference": "rule-review-closeout",
|
|
90
|
+
"purpose": "Record that a rule-review candidate was opened and fixture evidence will be compared."
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"requiredChecks": ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
94
|
+
}
|
|
95
|
+
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Support Lifecycle Overview
|
|
2
|
+
|
|
3
|
+
This index shows the public-safe support path at a glance:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
report -> triage -> response -> closeout
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
The checked source is [support-lifecycle.json](support-lifecycle.json). It ties together the [report gallery feedback template](../reports/feedback-template.md), [triage playbook](triage-playbook.json), [response snippets](response-snippets.md), and [closeout checklist](closeout-checklist.md).
|
|
10
|
+
|
|
11
|
+
## Outcomes
|
|
12
|
+
|
|
13
|
+
| Outcome | Report | Triage | Response | Closeout |
|
|
14
|
+
| --- | --- | --- | --- | --- |
|
|
15
|
+
| `docs-example` | `report-gallery-feedback` | `gallery-expected-block-docs` | `docs-example-response` | `docs-clarification-closeout` |
|
|
16
|
+
| `fixture-backlog` | `false-positive` | `false-positive-fixture-backlog` | `fixture-backlog-response` | `fixture-backlog-closeout` |
|
|
17
|
+
| `rule-review-candidate` | `false-positive` | `repeated-risky-domain-rule-review` | `rule-review-candidate-response` | `rule-review-closeout` |
|
|
18
|
+
|
|
19
|
+
## Audit Checklist
|
|
20
|
+
|
|
21
|
+
For each public support issue, confirm:
|
|
22
|
+
|
|
23
|
+
- the report asks for redacted `doctor --json` output and the smallest sanitized reproduction,
|
|
24
|
+
- the triage outcome is one of `docs-example`, `fixture-backlog`, or `rule-review-candidate`,
|
|
25
|
+
- the response snippet matches the chosen outcome,
|
|
26
|
+
- the closeout record says whether the docs clarification shipped or queued, fixture backlog was created, or rule-review candidate was opened,
|
|
27
|
+
- no secrets, private code, private paths, customer data, full logs, unredacted SARIF, or exploitable security details appear in the public record.
|
|
28
|
+
|
|
29
|
+
## Checks
|
|
30
|
+
|
|
31
|
+
Run this after editing the lifecycle overview or any support artifact it links:
|
|
32
|
+
|
|
33
|
+
```powershell
|
|
34
|
+
npm run support:check
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Run report or fixture checks for the matching outcome:
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
npm run reports:check
|
|
41
|
+
npm run fixtures:check
|
|
42
|
+
npm run fixtures:report
|
|
43
|
+
npm run fixtures:report -- --markdown
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Use [SECURITY.md](../../SECURITY.md) instead of a public issue for credential exposure, private code disclosure, command execution risk, package publishing concerns, MCP data exposure, or exploitable vulnerability details.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.93",
|
|
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": {
|
|
@@ -98,6 +98,8 @@ for (const path of [
|
|
|
98
98
|
"examples/support/closeout-checklist.json",
|
|
99
99
|
"examples/support/response-snippets.md",
|
|
100
100
|
"examples/support/response-snippets.json",
|
|
101
|
+
"examples/support/support-lifecycle.md",
|
|
102
|
+
"examples/support/support-lifecycle.json",
|
|
101
103
|
"examples/support/triage-playbook.json",
|
|
102
104
|
"examples/presets/README.md",
|
|
103
105
|
"examples/tuning/README.md",
|
|
@@ -130,6 +132,7 @@ requireText("README.md", /feedback-template\.md/, "report gallery feedback templ
|
|
|
130
132
|
requireText("README.md", /examples\/support/, "support triage playbook link");
|
|
131
133
|
requireText("README.md", /response-snippets\.md/, "support response snippets link");
|
|
132
134
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
135
|
+
requireText("README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
133
136
|
requireText("README.md", /report gallery feedback/i, "report gallery feedback guidance");
|
|
134
137
|
requireText("README.md", /License: PolyForm Noncommercial/, "the noncommercial license badge");
|
|
135
138
|
requireText("docs/PRODUCTION_READINESS.md", /npm package/i, "npm package readiness");
|
|
@@ -153,6 +156,7 @@ requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support triage rea
|
|
|
153
156
|
requireText("docs/PRODUCTION_READINESS.md", /examples\/support/, "support triage playbook readiness");
|
|
154
157
|
requireText("docs/PRODUCTION_READINESS.md", /response snippets/i, "support response snippets readiness");
|
|
155
158
|
requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support closeout checklist readiness");
|
|
159
|
+
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle overview/i, "support lifecycle overview readiness");
|
|
156
160
|
requireText("docs/PRODUCTION_READINESS.md", /quiet-pass/, "quiet-pass fixture readiness");
|
|
157
161
|
requireText("docs/CLI.md", /jester doctor --json/, "doctor JSON CLI docs");
|
|
158
162
|
requireText("docs/CLI.md", /quiet-pass fixture/, "quiet-pass fixture CLI docs");
|
|
@@ -179,6 +183,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report
|
|
|
179
183
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "support triage playbook link");
|
|
180
184
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support response snippets link");
|
|
181
185
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
186
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
182
187
|
requireText("docs/MAINTAINER_TRIAGE.md", /docs-example/, "docs example triage outcome");
|
|
183
188
|
requireText("docs/MAINTAINER_TRIAGE.md", /fixture-backlog/, "fixture backlog triage outcome");
|
|
184
189
|
requireText("docs/MAINTAINER_TRIAGE.md", /rule-review-candidate/, "rule review triage outcome");
|
|
@@ -213,6 +218,7 @@ requireText("examples/reports/feedback-template.md", /SECURITY\.md/, "feedback t
|
|
|
213
218
|
requireText("examples/support/README.md", /triage-playbook\.json/, "support triage playbook JSON link");
|
|
214
219
|
requireText("examples/support/README.md", /response-snippets\.md/, "support response snippets link");
|
|
215
220
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
221
|
+
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
216
222
|
requireText("examples/support/README.md", /docs-example/, "support triage docs outcome");
|
|
217
223
|
requireText("examples/support/README.md", /fixture-backlog/, "support triage fixture outcome");
|
|
218
224
|
requireText("examples/support/README.md", /rule-review-candidate/, "support triage rule-review outcome");
|
|
@@ -232,6 +238,15 @@ requireText("examples/support/closeout-checklist.md", /candidate-opened/, "suppo
|
|
|
232
238
|
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "support docs closeout record");
|
|
233
239
|
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "support fixture closeout record");
|
|
234
240
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "support rule-review closeout record");
|
|
241
|
+
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
242
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
243
|
+
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout/, "support lifecycle flow");
|
|
244
|
+
requireText("examples/support/support-lifecycle.md", /docs-example/, "support lifecycle docs outcome");
|
|
245
|
+
requireText("examples/support/support-lifecycle.md", /fixture-backlog/, "support lifecycle fixture outcome");
|
|
246
|
+
requireText("examples/support/support-lifecycle.md", /rule-review-candidate/, "support lifecycle rule-review outcome");
|
|
247
|
+
requireText("examples/support/support-lifecycle.json", /docs-example-response/, "support lifecycle docs response");
|
|
248
|
+
requireText("examples/support/support-lifecycle.json", /fixture-backlog-response/, "support lifecycle fixture response");
|
|
249
|
+
requireText("examples/support/support-lifecycle.json", /rule-review-candidate-response/, "support lifecycle rule-review response");
|
|
235
250
|
requireText("examples/tuning/README.md", /framework-tuning-cookbook\.json/, "framework tuning cookbook JSON link");
|
|
236
251
|
requireText("examples/tuning/README.md", /framework:tuning:doctor/, "framework tuning doctor guidance");
|
|
237
252
|
requireText("examples/tuning/README.md", /jester tune <rule-id> --json|jester tune [a-z0-9-]+ --json/, "framework tuning command guidance");
|
|
@@ -267,6 +282,7 @@ requireText("scripts/check-support-triage.mjs", /feedback-template\.md/, "suppor
|
|
|
267
282
|
requireText("scripts/check-support-triage.mjs", /triage-playbook\.json/, "support triage playbook guard");
|
|
268
283
|
requireText("scripts/check-support-triage.mjs", /response-snippets\.json/, "support response snippets guard");
|
|
269
284
|
requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "support closeout checklist guard");
|
|
285
|
+
requireText("scripts/check-support-triage.mjs", /support-lifecycle\.json/, "support lifecycle overview guard");
|
|
270
286
|
requireText("scripts/check-support-triage.mjs", /unsafeContentPatterns/, "support triage unsafe content checks");
|
|
271
287
|
requireText("package.json", /"fixtures:check": "node scripts\/check-fixtures\.mjs"/, "fixture authoring check script");
|
|
272
288
|
requireText("package.json", /"fixtures:report": "node scripts\/report-fixtures\.mjs"/, "fixture coverage report script");
|
|
@@ -30,6 +30,8 @@ const supportFiles = [
|
|
|
30
30
|
"examples/support/README.md",
|
|
31
31
|
"examples/support/response-snippets.md",
|
|
32
32
|
"examples/support/response-snippets.json",
|
|
33
|
+
"examples/support/support-lifecycle.md",
|
|
34
|
+
"examples/support/support-lifecycle.json",
|
|
33
35
|
"examples/support/triage-playbook.json",
|
|
34
36
|
"docs/MAINTAINER_TRIAGE.md",
|
|
35
37
|
"docs/PRODUCTION_READINESS.md",
|
|
@@ -80,6 +82,7 @@ requireText("examples/reports/README.md", /npm run support:check/, "support chec
|
|
|
80
82
|
requireText("examples/reports/README.md", /examples\/support|Maintainer Triage Playbook/i, "maintainer triage playbook link");
|
|
81
83
|
|
|
82
84
|
requireText("examples/support/README.md", /Maintainer Triage Playbook/, "maintainer playbook heading");
|
|
85
|
+
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
83
86
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
84
87
|
requireText("examples/support/README.md", /triage-playbook\.json/, "maintainer playbook JSON link");
|
|
85
88
|
requireText("examples/support/README.md", /response-snippets\.md/, "maintainer response snippets link");
|
|
@@ -106,6 +109,21 @@ requireText("examples/support/closeout-checklist.md", /SECURITY\.md/, "closeout
|
|
|
106
109
|
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "docs closeout record");
|
|
107
110
|
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "fixture closeout record");
|
|
108
111
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "rule-review closeout record");
|
|
112
|
+
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
113
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
114
|
+
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout/, "support lifecycle flow");
|
|
115
|
+
requireText("examples/support/support-lifecycle.md", /report gallery feedback template/, "report feedback lifecycle link");
|
|
116
|
+
requireText("examples/support/support-lifecycle.md", /triage playbook/, "triage lifecycle link");
|
|
117
|
+
requireText("examples/support/support-lifecycle.md", /response snippets/, "response lifecycle link");
|
|
118
|
+
requireText("examples/support/support-lifecycle.md", /closeout checklist/, "closeout lifecycle link");
|
|
119
|
+
requireText("examples/support/support-lifecycle.md", /docs-example/, "docs lifecycle outcome");
|
|
120
|
+
requireText("examples/support/support-lifecycle.md", /fixture-backlog/, "fixture lifecycle outcome");
|
|
121
|
+
requireText("examples/support/support-lifecycle.md", /rule-review-candidate/, "rule-review lifecycle outcome");
|
|
122
|
+
requireText("examples/support/support-lifecycle.md", /doctor --json/, "doctor JSON lifecycle prompt");
|
|
123
|
+
requireText("examples/support/support-lifecycle.md", /SECURITY\.md/, "lifecycle security redirect");
|
|
124
|
+
requireText("examples/support/support-lifecycle.json", /docs-example-response/, "docs lifecycle response");
|
|
125
|
+
requireText("examples/support/support-lifecycle.json", /fixture-backlog-response/, "fixture lifecycle response");
|
|
126
|
+
requireText("examples/support/support-lifecycle.json", /rule-review-candidate-response/, "rule-review lifecycle response");
|
|
109
127
|
requireText("examples/support/response-snippets.md", /Maintainer Response Snippets/, "response snippets heading");
|
|
110
128
|
requireText("examples/support/response-snippets.md", /response-snippets\.json/, "response snippets JSON link");
|
|
111
129
|
requireText("examples/support/response-snippets.md", /docs-example/, "docs response outcome");
|
|
@@ -121,6 +139,7 @@ requireText("examples/support/response-snippets.json", /rule-review-candidate-re
|
|
|
121
139
|
requireText("docs/MAINTAINER_TRIAGE.md", /feedback-template\.md/, "feedback template triage link");
|
|
122
140
|
requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report gallery issue template triage link");
|
|
123
141
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "maintainer playbook triage link");
|
|
142
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle triage link");
|
|
124
143
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist triage link");
|
|
125
144
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "maintainer response snippets triage link");
|
|
126
145
|
requireText("docs/MAINTAINER_TRIAGE.md", /docs-example/, "docs example triage outcome");
|
|
@@ -129,6 +148,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /rule-review-candidate/, "rule review t
|
|
|
129
148
|
requireText("docs/MAINTAINER_TRIAGE.md", /npm(?:\.cmd)? run support:check/, "support checker triage command");
|
|
130
149
|
requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support checker readiness");
|
|
131
150
|
requireText("README.md", /feedback-template\.md/, "feedback template README link");
|
|
151
|
+
requireText("README.md", /support-lifecycle\.md/, "support lifecycle README link");
|
|
132
152
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist README link");
|
|
133
153
|
requireText("README.md", /examples\/support/, "maintainer triage playbook README link");
|
|
134
154
|
requireText("README.md", /response-snippets\.md/, "maintainer response snippets README link");
|
|
@@ -140,6 +160,7 @@ requireText("package.json", /npm run support:check/, "support checker in npm tes
|
|
|
140
160
|
checkTriagePlaybook();
|
|
141
161
|
checkResponseSnippets();
|
|
142
162
|
checkCloseoutChecklist();
|
|
163
|
+
checkSupportLifecycle();
|
|
143
164
|
|
|
144
165
|
if (failures.length > 0) {
|
|
145
166
|
console.error("Support triage check failed:");
|
|
@@ -434,3 +455,93 @@ function checkCloseoutChecklist() {
|
|
|
434
455
|
}
|
|
435
456
|
}
|
|
436
457
|
}
|
|
458
|
+
|
|
459
|
+
function checkSupportLifecycle() {
|
|
460
|
+
const path = "examples/support/support-lifecycle.json";
|
|
461
|
+
const lifecycle = readJson(path);
|
|
462
|
+
if (!lifecycle) {
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (!Array.isArray(lifecycle) || lifecycle.length !== 3) {
|
|
467
|
+
failures.push(`${path} should contain exactly three support lifecycle outcomes.`);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
const expected = [
|
|
472
|
+
{
|
|
473
|
+
outcome: "docs-example",
|
|
474
|
+
stageReferences: ["report-gallery-feedback", "gallery-expected-block-docs", "docs-example-response", "docs-clarification-closeout"],
|
|
475
|
+
checks: ["npm run reports:check", "npm run support:check"]
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
outcome: "fixture-backlog",
|
|
479
|
+
stageReferences: ["false-positive", "false-positive-fixture-backlog", "fixture-backlog-response", "fixture-backlog-closeout"],
|
|
480
|
+
checks: ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
outcome: "rule-review-candidate",
|
|
484
|
+
stageReferences: ["false-positive", "repeated-risky-domain-rule-review", "rule-review-candidate-response", "rule-review-closeout"],
|
|
485
|
+
checks: ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
486
|
+
}
|
|
487
|
+
];
|
|
488
|
+
const expectedStageIds = ["report", "triage", "response", "closeout"];
|
|
489
|
+
const expectedArtifacts = [
|
|
490
|
+
"examples/reports/feedback-template.md",
|
|
491
|
+
"examples/support/triage-playbook.json",
|
|
492
|
+
"examples/support/response-snippets.json",
|
|
493
|
+
"examples/support/closeout-checklist.json"
|
|
494
|
+
];
|
|
495
|
+
const seenOutcomes = new Set();
|
|
496
|
+
|
|
497
|
+
for (const [index, entry] of lifecycle.entries()) {
|
|
498
|
+
const expectedEntry = expected[index];
|
|
499
|
+
if (entry?.outcome !== expectedEntry.outcome) {
|
|
500
|
+
failures.push(`${path} entry ${index + 1} should have outcome ${expectedEntry.outcome}.`);
|
|
501
|
+
continue;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
if (seenOutcomes.has(entry.outcome)) {
|
|
505
|
+
failures.push(`${path} has duplicate outcome ${entry.outcome}.`);
|
|
506
|
+
}
|
|
507
|
+
seenOutcomes.add(entry.outcome);
|
|
508
|
+
|
|
509
|
+
if (typeof entry.title !== "string" || entry.title.length < 20) {
|
|
510
|
+
failures.push(`${entry.outcome}.title should explain the lifecycle outcome.`);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
if (!Array.isArray(entry.stages) || entry.stages.length !== 4) {
|
|
514
|
+
failures.push(`${entry.outcome}.stages should contain report, triage, response, and closeout.`);
|
|
515
|
+
continue;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
for (const [stageIndex, stage] of entry.stages.entries()) {
|
|
519
|
+
if (stage?.id !== expectedStageIds[stageIndex]) {
|
|
520
|
+
failures.push(`${entry.outcome}.stages[${stageIndex}].id should be ${expectedStageIds[stageIndex]}.`);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
if (stage?.artifact !== expectedArtifacts[stageIndex]) {
|
|
524
|
+
failures.push(`${entry.outcome}.stages[${stageIndex}].artifact should be ${expectedArtifacts[stageIndex]}.`);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if (stage?.reference !== expectedEntry.stageReferences[stageIndex]) {
|
|
528
|
+
failures.push(`${entry.outcome}.stages[${stageIndex}].reference should be ${expectedEntry.stageReferences[stageIndex]}.`);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
if (typeof stage?.purpose !== "string" || stage.purpose.length < 30) {
|
|
532
|
+
failures.push(`${entry.outcome}.stages[${stageIndex}].purpose should explain what the stage records.`);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if (!Array.isArray(entry.requiredChecks)) {
|
|
537
|
+
failures.push(`${entry.outcome}.requiredChecks should be an array.`);
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
for (const check of expectedEntry.checks) {
|
|
542
|
+
if (!entry.requiredChecks.includes(check)) {
|
|
543
|
+
failures.push(`${entry.outcome}.requiredChecks should include ${check}.`);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
}
|