memento-mori-jester 0.1.95 → 0.1.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +4 -2
- package/ROADMAP.md +4 -0
- package/docs/MAINTAINER_TRIAGE.md +2 -2
- package/docs/PRODUCTION_READINESS.md +3 -3
- package/docs/RELEASE_NOTES_v0.1.96.md +58 -0
- package/docs/RELEASE_NOTES_v0.1.97.md +58 -0
- package/examples/support/README.md +4 -3
- package/examples/support/backlog-review.json +90 -0
- package/examples/support/backlog-review.md +40 -0
- package/examples/support/support-lifecycle.json +54 -0
- package/examples/support/support-lifecycle.md +10 -7
- package/package.json +1 -1
- package/scripts/check-production-readiness.mjs +24 -1
- package/scripts/check-support-triage.mjs +177 -8
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.97
|
|
8
|
+
|
|
9
|
+
- Extended the checked support lifecycle overview so it now covers report, triage, response, closeout, prioritization, backlog record, and backlog review stages.
|
|
10
|
+
- Updated `support-lifecycle.json`, `npm run support:check`, and production-readiness checks so every support outcome points at the full checked artifact chain.
|
|
11
|
+
- Refreshed support docs, maintainer triage docs, production-readiness docs, roadmap, and release notes for the full lifecycle index.
|
|
12
|
+
|
|
13
|
+
## 0.1.96
|
|
14
|
+
|
|
15
|
+
- Added a checked public-safe support backlog review checklist for deciding whether backlog records remain docs clarifications, fixture backlog items, rule-review candidates, or close with no action.
|
|
16
|
+
- Extended `npm run support:check` and production-readiness checks so review decisions, source records, required checks, and privacy guidance stay aligned with support backlog records.
|
|
17
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and release notes for deterministic backlog aging review.
|
|
18
|
+
|
|
7
19
|
## 0.1.95
|
|
8
20
|
|
|
9
21
|
- Added checked public-safe support backlog records for turning closed/prioritized support outcomes into docs clarification, fixture backlog, or rule-review candidate artifacts.
|
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 lifecycle overview](examples/support/support-lifecycle.md), [outcome prioritization guide](examples/support/outcome-prioritization.md), [support backlog records](examples/support/backlog-records.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.
|
|
79
|
+
Maintainers can use the checked [support lifecycle overview](examples/support/support-lifecycle.md), [outcome prioritization guide](examples/support/outcome-prioritization.md), [support backlog records](examples/support/backlog-records.md), [support backlog review](examples/support/backlog-review.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
|
|
|
@@ -453,6 +453,7 @@ More setup examples:
|
|
|
453
453
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
454
454
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
455
455
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
456
|
+
- [Support Backlog Review](examples/support/backlog-review.md)
|
|
456
457
|
- [Support Triage Playbook](examples/support)
|
|
457
458
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
458
459
|
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
@@ -480,6 +481,7 @@ Framework CI examples:
|
|
|
480
481
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
481
482
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
482
483
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
484
|
+
- [Support Backlog Review](examples/support/backlog-review.md)
|
|
483
485
|
- [Support Triage Playbook](examples/support)
|
|
484
486
|
- [Maintainer Response Snippets](examples/support/response-snippets.md)
|
|
485
487
|
- [Support Closeout Checklist](examples/support/closeout-checklist.md)
|
|
@@ -539,7 +541,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
|
|
|
539
541
|
Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
|
|
540
542
|
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.
|
|
541
543
|
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.
|
|
542
|
-
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), [outcome prioritization guide](examples/support/outcome-prioritization.md), [support backlog records](examples/support/backlog-records.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.
|
|
544
|
+
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), [outcome prioritization guide](examples/support/outcome-prioritization.md), [support backlog records](examples/support/backlog-records.md), [support backlog review](examples/support/backlog-review.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.
|
|
543
545
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
544
546
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
545
547
|
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,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
|
+
- Full checked support lifecycle overview in v0.1.97, extending the index from report, triage, response, and closeout through prioritization, backlog records, and backlog review.
|
|
10
|
+
- Checked support backlog review in v0.1.96, helping maintainers revisit backlog records and keep them as docs, fixture, or rule-review work, or close them with no action when evidence goes stale.
|
|
9
11
|
- Checked support backlog records in v0.1.95, turning closed and prioritized support outcomes into public-safe docs clarification, fixture backlog, or rule-review candidate artifacts.
|
|
10
12
|
- Checked support outcome prioritization in v0.1.94, helping maintainers turn closed support reports into docs, fixture backlog, or rule-review work based on public-safe evidence thresholds.
|
|
11
13
|
- Checked support lifecycle overview in v0.1.93, tying report-gallery feedback, triage playbook entries, response snippets, and closeout records together by outcome.
|
|
@@ -85,6 +87,8 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
85
87
|
## Product Ideas
|
|
86
88
|
|
|
87
89
|
- Collect real-world reports and fold the strongest redacted cases into more framework tuning cookbook recipes.
|
|
90
|
+
- Add a small checked maintainer dashboard or report that summarizes open support backlog review states from public-safe JSON.
|
|
91
|
+
- Add a compact support lifecycle diagram or generated summary once the lifecycle JSON shape has settled.
|
|
88
92
|
- Use support backlog record counts to choose the next docs, fixture, report-gallery, or rule-guidance batch.
|
|
89
93
|
- Use repeated prioritized support outcomes to choose the next redacted fixture, report-gallery update, or rule-guidance review.
|
|
90
94
|
- Add a hosted-page option or GitHub Pages instructions once the static page has settled.
|
|
@@ -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, start with the checked [support lifecycle overview](../examples/support/support-lifecycle.md) to see the whole path from report to
|
|
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 backlog review. 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. Use [outcome-prioritization.md](../examples/support/outcome-prioritization.md) after closeout to decide whether the follow-up work is low-priority docs, medium-priority fixture backlog, or high-priority rule review. Use [backlog-records.md](../examples/support/backlog-records.md) when that prioritized follow-up needs a public-safe backlog artifact, then use [backlog-review.md](../examples/support/backlog-review.md) to revisit whether that artifact remains active or closes with no action.
|
|
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 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. If follow-up work remains, choose its priority from the outcome prioritization guide before opening a docs, fixture, or rule-review backlog item, then record that choice with the matching backlog record. Do not add private code, private paths, tokens, full logs, or exploitable details to the response, closeout, or backlog
|
|
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. If follow-up work remains, choose its priority from the outcome prioritization guide before opening a docs, fixture, or rule-review backlog item, then record that choice with the matching backlog record. During later reviews, keep the item as docs clarification, fixture backlog, or rule-review candidate only when the public-safe evidence still holds; otherwise close it as `closed-no-action`. Do not add private code, private paths, tokens, full logs, or exploitable details to the response, closeout, backlog item, or backlog review.
|
|
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 support lifecycle overview
|
|
50
|
+
- `examples/support` provides a checked support lifecycle overview covering report, triage, response, closeout, prioritization, backlog record, and backlog review, plus the supporting outcome prioritization guide, backlog records, backlog review checklist, maintainer triage playbook, response snippets, and closeout checklist.
|
|
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 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, record the closeout, prioritize follow-up work,
|
|
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, record the closeout, prioritize follow-up work, create a public-safe backlog record, and review aging records for keep-or-close decisions.
|
|
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 support lifecycle overview, outcome prioritization guide, backlog records, 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, outcome prioritization guide, backlog records, backlog review checklist, 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.96
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a checked public-safe support backlog review checklist. It helps maintainers revisit backlog records over time and decide whether each item remains a docs clarification, fixture backlog item, rule-review candidate, or closes with no action.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Added `examples/support/backlog-review.md`.
|
|
10
|
+
- Added `examples/support/backlog-review.json`.
|
|
11
|
+
- Extended `scripts/check-support-triage.mjs` to validate review decisions, source records, cadence, criteria, required checks, and privacy review guidance.
|
|
12
|
+
- Extended production-readiness checks for the backlog review 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 backlog aging review guidance.
|
|
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.96 checked support backlog review"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Expected:
|
|
44
|
+
|
|
45
|
+
- `support:check` verifies issue templates, feedback templates, the support lifecycle overview, outcome prioritization guide, backlog records, backlog review checklist, 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.96` 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
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.97
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release updates the checked support lifecycle overview so it reflects the full public-safe support chain: report, triage, response, closeout, prioritization, backlog record, and backlog review.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
- Extended `examples/support/support-lifecycle.md` to show the full seven-stage lifecycle.
|
|
10
|
+
- Extended `examples/support/support-lifecycle.json` so every support outcome links to prioritization, backlog record, and backlog review artifacts.
|
|
11
|
+
- Updated `scripts/check-support-triage.mjs` to validate the seven lifecycle stages and artifact references.
|
|
12
|
+
- Extended production-readiness checks for the full lifecycle index.
|
|
13
|
+
- Updated support docs, maintainer triage docs, 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 the full checked support 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.97 full support lifecycle overview"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Expected:
|
|
44
|
+
|
|
45
|
+
- `support:check` verifies issue templates, feedback templates, the full support lifecycle overview, outcome prioritization guide, backlog records, backlog review checklist, 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.97` 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,9 +2,9 @@
|
|
|
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). Use [outcome-prioritization.md](outcome-prioritization.md) after closeout to decide whether follow-up work should become docs, fixture backlog, or rule-review work. Use [backlog-records.md](backlog-records.md) to turn that decision into a public-safe backlog artifact.
|
|
5
|
+
Start with the checked [support lifecycle overview](support-lifecycle.md) when you need the whole path in one place: report, triage, response, closeout, prioritization, backlog record, and backlog review. The lifecycle source is [support-lifecycle.json](support-lifecycle.json). Use [outcome-prioritization.md](outcome-prioritization.md) after closeout to decide whether follow-up work should become docs, fixture backlog, or rule-review work. Use [backlog-records.md](backlog-records.md) to turn that decision into a public-safe backlog artifact, then use [backlog-review.md](backlog-review.md) to decide whether the item stays active or closes with no action.
|
|
6
6
|
|
|
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). The backlog source is [backlog-records.json](backlog-records.json).
|
|
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). The backlog source is [backlog-records.json](backlog-records.json). The review source is [backlog-review.json](backlog-review.json).
|
|
8
8
|
|
|
9
9
|
| ID | Source | Classification | Follow-up |
|
|
10
10
|
| --- | --- | --- | --- |
|
|
@@ -26,10 +26,11 @@ The checked source is [triage-playbook.json](triage-playbook.json). Use [respons
|
|
|
26
26
|
7. Use the matching response snippet so replies stay public-safe and consistent.
|
|
27
27
|
8. Record the closeout with the matching checklist entry: docs clarification shipped or queued, fixture backlog created, or rule-review candidate opened.
|
|
28
28
|
9. If follow-up work remains, create the matching backlog record: docs clarification, fixture backlog item, or rule-review candidate.
|
|
29
|
+
10. Review backlog records over time as `remains-docs-clarification`, `remains-fixture-backlog`, `remains-rule-review-candidate`, or `closed-no-action`.
|
|
29
30
|
|
|
30
31
|
## Checks
|
|
31
32
|
|
|
32
|
-
Run this after editing support docs, issue templates, the lifecycle overview, outcome prioritization, backlog records, the playbook, response snippets, or closeout checklist:
|
|
33
|
+
Run this after editing support docs, issue templates, the lifecycle overview, outcome prioritization, backlog records, backlog review, the playbook, response snippets, or closeout checklist:
|
|
33
34
|
|
|
34
35
|
```powershell
|
|
35
36
|
npm run support:check
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "docs-clarification-review",
|
|
4
|
+
"sourceRecord": "docs-clarification-backlog-record",
|
|
5
|
+
"reviewDecision": "remains-docs-clarification",
|
|
6
|
+
"outcome": "docs-example",
|
|
7
|
+
"cadence": "Review before a docs release or when the linked report-gallery example changes.",
|
|
8
|
+
"decisionCriteria": [
|
|
9
|
+
"The nearest checked report or docs page is still confusing for a fresh reader.",
|
|
10
|
+
"Observed output still matches current behavior and differs only in wording/context.",
|
|
11
|
+
"No rule behavior change is needed before clearer wording is tried."
|
|
12
|
+
],
|
|
13
|
+
"nextAction": "Keep the backlog item as a docs clarification and run the report/support checks after editing copy.",
|
|
14
|
+
"requiredChecks": [
|
|
15
|
+
"npm run reports:check",
|
|
16
|
+
"npm run support:check"
|
|
17
|
+
],
|
|
18
|
+
"privacyReview": [
|
|
19
|
+
"No secrets, private code, private paths, customer data, full logs, or unredacted SARIF are included.",
|
|
20
|
+
"Any stale private project names are replaced with placeholders before the review is recorded.",
|
|
21
|
+
"Sensitive reports are routed to SECURITY.md instead of public backlog review notes."
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "fixture-backlog-review",
|
|
26
|
+
"sourceRecord": "fixture-backlog-record",
|
|
27
|
+
"reviewDecision": "remains-fixture-backlog",
|
|
28
|
+
"outcome": "fixture-backlog",
|
|
29
|
+
"cadence": "Review before a fixture curation batch or when similar false-positive reports arrive.",
|
|
30
|
+
"decisionCriteria": [
|
|
31
|
+
"The smallest sanitized reproduction still describes a safe boundary worth preserving.",
|
|
32
|
+
"The rule id and redacted `jester tune <rule-id> --json` evidence still point at the same rule.",
|
|
33
|
+
"No existing pass or quiet-pass fixture now covers the same boundary."
|
|
34
|
+
],
|
|
35
|
+
"nextAction": "Keep the item as fixture backlog and add or update the redacted fixture before changing rule behavior.",
|
|
36
|
+
"requiredChecks": [
|
|
37
|
+
"npm run fixtures:check",
|
|
38
|
+
"npm run fixtures:report",
|
|
39
|
+
"npm run support:check"
|
|
40
|
+
],
|
|
41
|
+
"privacyReview": [
|
|
42
|
+
"No secrets, private code, private paths, customer data, full logs, or unredacted SARIF are included.",
|
|
43
|
+
"The reproduction still uses placeholders such as <repo>, <path>, or <redacted>.",
|
|
44
|
+
"Sensitive reports are routed to SECURITY.md instead of public backlog review notes."
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "rule-review-candidate-review",
|
|
49
|
+
"sourceRecord": "rule-review-candidate-backlog-record",
|
|
50
|
+
"reviewDecision": "remains-rule-review-candidate",
|
|
51
|
+
"outcome": "rule-review-candidate",
|
|
52
|
+
"cadence": "Review before changing guidance or matching, and whenever another sanitized report is linked.",
|
|
53
|
+
"decisionCriteria": [
|
|
54
|
+
"At least two sanitized reports or checked examples still point at the same rule boundary.",
|
|
55
|
+
"Fixture report or tune evidence still shows why docs clarification or a single fixture item is not enough.",
|
|
56
|
+
"The candidate still avoids changing matching without supporting fixtures around the boundary."
|
|
57
|
+
],
|
|
58
|
+
"nextAction": "Keep the item as a rule-review candidate and compare current fixture evidence before any behavior change.",
|
|
59
|
+
"requiredChecks": [
|
|
60
|
+
"npm run fixtures:report -- --markdown",
|
|
61
|
+
"npm run support:check"
|
|
62
|
+
],
|
|
63
|
+
"privacyReview": [
|
|
64
|
+
"No secrets, private code, private paths, customer data, full logs, or unredacted SARIF are included.",
|
|
65
|
+
"Repeated examples are summarized without exposing private project details.",
|
|
66
|
+
"Sensitive reports are routed to SECURITY.md instead of public backlog review notes."
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "closed-no-action-review",
|
|
71
|
+
"sourceRecord": "<backlog-record-id>",
|
|
72
|
+
"reviewDecision": "closed-no-action",
|
|
73
|
+
"outcome": "closed-no-action",
|
|
74
|
+
"cadence": "Review when evidence is stale, duplicated, no longer reproduces, or has already been resolved elsewhere.",
|
|
75
|
+
"decisionCriteria": [
|
|
76
|
+
"The report no longer reproduces on the current package or is already covered by a checked docs/fixture/rule-review artifact.",
|
|
77
|
+
"The remaining evidence is too thin, private, or security-sensitive for a public backlog item.",
|
|
78
|
+
"Closing the item will not hide a known regression because current checks still pass."
|
|
79
|
+
],
|
|
80
|
+
"nextAction": "Close the public backlog item with a short no-action note, link the replacement artifact if one exists, and keep sensitive details out of the thread.",
|
|
81
|
+
"requiredChecks": [
|
|
82
|
+
"npm run support:check"
|
|
83
|
+
],
|
|
84
|
+
"privacyReview": [
|
|
85
|
+
"No secrets, private code, private paths, customer data, full logs, or unredacted SARIF are included.",
|
|
86
|
+
"The closeout note uses placeholders instead of private project names or paths.",
|
|
87
|
+
"Sensitive reports are routed to SECURITY.md instead of public backlog review notes."
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Support Backlog Review
|
|
2
|
+
|
|
3
|
+
Use this when maintainers review public-safe backlog records over time. The checked source is [backlog-review.json](backlog-review.json). It pairs with [backlog-records.md](backlog-records.md), [outcome-prioritization.md](outcome-prioritization.md), and the [support lifecycle overview](support-lifecycle.md).
|
|
4
|
+
|
|
5
|
+
The review decision should keep each item in one of four states:
|
|
6
|
+
|
|
7
|
+
| Review decision | Source record | Keep when | Required checks |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| `remains-docs-clarification` | `docs-clarification-backlog-record` | wording or a checked report is still confusing | `npm run reports:check`, `npm run support:check` |
|
|
10
|
+
| `remains-fixture-backlog` | `fixture-backlog-record` | a minimized safe boundary still needs a pass or quiet-pass fixture | `npm run fixtures:check`, `npm run fixtures:report`, `npm run support:check` |
|
|
11
|
+
| `remains-rule-review-candidate` | `rule-review-candidate-backlog-record` | repeated sanitized reports still point at the same rule boundary | `npm run fixtures:report -- --markdown`, `npm run support:check` |
|
|
12
|
+
| `closed-no-action` | any backlog record | evidence is stale, duplicated, private, security-sensitive, or already resolved | `npm run support:check` |
|
|
13
|
+
|
|
14
|
+
## Review Flow
|
|
15
|
+
|
|
16
|
+
1. Re-read the original public-safe backlog record.
|
|
17
|
+
2. Confirm the linked docs, report-gallery example, fixture evidence, or rule guidance still exists.
|
|
18
|
+
3. Re-run the required checks for the current decision.
|
|
19
|
+
4. Choose one review decision: `remains-docs-clarification`, `remains-fixture-backlog`, `remains-rule-review-candidate`, or `closed-no-action`.
|
|
20
|
+
5. Record only the public-safe summary, next action, and check result.
|
|
21
|
+
|
|
22
|
+
## Decision Notes
|
|
23
|
+
|
|
24
|
+
Use `remains-docs-clarification` when current behavior is correct but the wording still makes a checked example hard to compare with local output.
|
|
25
|
+
|
|
26
|
+
Use `remains-fixture-backlog` when the smallest sanitized reproduction still describes a safe boundary worth preserving and no existing pass or quiet-pass fixture covers it.
|
|
27
|
+
|
|
28
|
+
Use `remains-rule-review-candidate` when at least two sanitized reports or checked examples still point at the same rule boundary and fixture evidence should be compared before any behavior change.
|
|
29
|
+
|
|
30
|
+
Use `closed-no-action` when the report no longer reproduces on the current package, has been resolved by another checked artifact, is too thin to act on, or should be routed through [SECURITY.md](../../SECURITY.md) instead of public backlog review.
|
|
31
|
+
|
|
32
|
+
## Privacy
|
|
33
|
+
|
|
34
|
+
Do not include secrets, private code, private paths, customer data, full CI logs, unredacted SARIF, credential-handling details, command-execution vulnerability details, package publishing compromise, or MCP data exposure in public backlog review notes. Use placeholders such as `<repo>`, `<path>`, or `<redacted>`, and route sensitive reports through [SECURITY.md](../../SECURITY.md).
|
|
35
|
+
|
|
36
|
+
Run this after editing support backlog review records:
|
|
37
|
+
|
|
38
|
+
```powershell
|
|
39
|
+
npm run support:check
|
|
40
|
+
```
|
|
@@ -26,6 +26,24 @@
|
|
|
26
26
|
"artifact": "examples/support/closeout-checklist.json",
|
|
27
27
|
"reference": "docs-clarification-closeout",
|
|
28
28
|
"purpose": "Record whether the docs clarification shipped or is queued, then link the public-safe follow-up."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "prioritization",
|
|
32
|
+
"artifact": "examples/support/outcome-prioritization.json",
|
|
33
|
+
"reference": "docs-example",
|
|
34
|
+
"purpose": "Confirm the follow-up is low-priority docs clarification before opening a backlog record."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "backlog-record",
|
|
38
|
+
"artifact": "examples/support/backlog-records.json",
|
|
39
|
+
"reference": "docs-clarification-backlog-record",
|
|
40
|
+
"purpose": "Record the public-safe docs backlog artifact and the checks needed after copy changes."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "backlog-review",
|
|
44
|
+
"artifact": "examples/support/backlog-review.json",
|
|
45
|
+
"reference": "docs-clarification-review",
|
|
46
|
+
"purpose": "Revisit whether the docs backlog item remains active or should close with no action."
|
|
29
47
|
}
|
|
30
48
|
],
|
|
31
49
|
"requiredChecks": ["npm run reports:check", "npm run support:check"]
|
|
@@ -57,6 +75,24 @@
|
|
|
57
75
|
"artifact": "examples/support/closeout-checklist.json",
|
|
58
76
|
"reference": "fixture-backlog-closeout",
|
|
59
77
|
"purpose": "Record that a redacted fixture backlog item exists and the rule remains unchanged."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "prioritization",
|
|
81
|
+
"artifact": "examples/support/outcome-prioritization.json",
|
|
82
|
+
"reference": "fixture-backlog",
|
|
83
|
+
"purpose": "Confirm the follow-up is medium-priority fixture backlog before changing any matcher."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "backlog-record",
|
|
87
|
+
"artifact": "examples/support/backlog-records.json",
|
|
88
|
+
"reference": "fixture-backlog-record",
|
|
89
|
+
"purpose": "Record the public-safe fixture backlog artifact and the expected pass or quiet-pass boundary."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "backlog-review",
|
|
93
|
+
"artifact": "examples/support/backlog-review.json",
|
|
94
|
+
"reference": "fixture-backlog-review",
|
|
95
|
+
"purpose": "Revisit whether the fixture backlog item remains active or is already covered elsewhere."
|
|
60
96
|
}
|
|
61
97
|
],
|
|
62
98
|
"requiredChecks": ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
@@ -88,6 +124,24 @@
|
|
|
88
124
|
"artifact": "examples/support/closeout-checklist.json",
|
|
89
125
|
"reference": "rule-review-closeout",
|
|
90
126
|
"purpose": "Record that a rule-review candidate was opened and fixture evidence will be compared."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "prioritization",
|
|
130
|
+
"artifact": "examples/support/outcome-prioritization.json",
|
|
131
|
+
"reference": "rule-review-candidate",
|
|
132
|
+
"purpose": "Confirm the follow-up is high-priority rule review backed by repeated sanitized reports."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "backlog-record",
|
|
136
|
+
"artifact": "examples/support/backlog-records.json",
|
|
137
|
+
"reference": "rule-review-candidate-backlog-record",
|
|
138
|
+
"purpose": "Record the public-safe rule-review backlog artifact and the fixture evidence to compare."
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "backlog-review",
|
|
142
|
+
"artifact": "examples/support/backlog-review.json",
|
|
143
|
+
"reference": "rule-review-candidate-review",
|
|
144
|
+
"purpose": "Revisit whether repeated evidence still warrants rule review before any behavior change."
|
|
91
145
|
}
|
|
92
146
|
],
|
|
93
147
|
"requiredChecks": ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
This index shows the public-safe support path at a glance:
|
|
4
4
|
|
|
5
5
|
```text
|
|
6
|
-
report -> triage -> response -> closeout
|
|
6
|
+
report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review
|
|
7
7
|
```
|
|
8
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),
|
|
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), [closeout checklist](closeout-checklist.md), [outcome prioritization guide](outcome-prioritization.md), [backlog records](backlog-records.md), and [backlog review checklist](backlog-review.md).
|
|
10
10
|
|
|
11
11
|
## Outcomes
|
|
12
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` |
|
|
13
|
+
| Outcome | Report | Triage | Response | Closeout | Prioritization | Backlog Record | Backlog Review |
|
|
14
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
15
|
+
| `docs-example` | `report-gallery-feedback` | `gallery-expected-block-docs` | `docs-example-response` | `docs-clarification-closeout` | `docs-example` | `docs-clarification-backlog-record` | `docs-clarification-review` |
|
|
16
|
+
| `fixture-backlog` | `false-positive` | `false-positive-fixture-backlog` | `fixture-backlog-response` | `fixture-backlog-closeout` | `fixture-backlog` | `fixture-backlog-record` | `fixture-backlog-review` |
|
|
17
|
+
| `rule-review-candidate` | `false-positive` | `repeated-risky-domain-rule-review` | `rule-review-candidate-response` | `rule-review-closeout` | `rule-review-candidate` | `rule-review-candidate-backlog-record` | `rule-review-candidate-review` |
|
|
18
18
|
|
|
19
19
|
## Audit Checklist
|
|
20
20
|
|
|
@@ -24,6 +24,9 @@ For each public support issue, confirm:
|
|
|
24
24
|
- the triage outcome is one of `docs-example`, `fixture-backlog`, or `rule-review-candidate`,
|
|
25
25
|
- the response snippet matches the chosen outcome,
|
|
26
26
|
- the closeout record says whether the docs clarification shipped or queued, fixture backlog was created, or rule-review candidate was opened,
|
|
27
|
+
- the prioritization record says whether follow-up is low-priority docs, medium-priority fixture backlog, or high-priority rule review,
|
|
28
|
+
- the backlog record captures the public-safe follow-up artifact without changing rule behavior first,
|
|
29
|
+
- the backlog review keeps the item active as docs, fixture, or rule-review work only while evidence still holds, otherwise it closes as `closed-no-action`,
|
|
27
30
|
- no secrets, private code, private paths, customer data, full logs, unredacted SARIF, or exploitable security details appear in the public record.
|
|
28
31
|
|
|
29
32
|
## Checks
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.97",
|
|
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/backlog-review.md",
|
|
98
|
+
"examples/support/backlog-review.json",
|
|
97
99
|
"examples/support/backlog-records.md",
|
|
98
100
|
"examples/support/backlog-records.json",
|
|
99
101
|
"examples/support/closeout-checklist.md",
|
|
@@ -138,6 +140,7 @@ requireText("README.md", /response-snippets\.md/, "support response snippets lin
|
|
|
138
140
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
139
141
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
140
142
|
requireText("README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
143
|
+
requireText("README.md", /backlog-review\.md/, "support backlog review link");
|
|
141
144
|
requireText("README.md", /backlog-records\.md/, "support backlog records link");
|
|
142
145
|
requireText("README.md", /report gallery feedback/i, "report gallery feedback guidance");
|
|
143
146
|
requireText("README.md", /License: PolyForm Noncommercial/, "the noncommercial license badge");
|
|
@@ -164,6 +167,7 @@ requireText("docs/PRODUCTION_READINESS.md", /response snippets/i, "support respo
|
|
|
164
167
|
requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support closeout checklist readiness");
|
|
165
168
|
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle overview/i, "support lifecycle overview readiness");
|
|
166
169
|
requireText("docs/PRODUCTION_READINESS.md", /outcome prioritization guide/i, "support outcome prioritization readiness");
|
|
170
|
+
requireText("docs/PRODUCTION_READINESS.md", /backlog review/i, "support backlog review readiness");
|
|
167
171
|
requireText("docs/PRODUCTION_READINESS.md", /backlog records/i, "support backlog records readiness");
|
|
168
172
|
requireText("docs/PRODUCTION_READINESS.md", /quiet-pass/, "quiet-pass fixture readiness");
|
|
169
173
|
requireText("docs/CLI.md", /jester doctor --json/, "doctor JSON CLI docs");
|
|
@@ -193,6 +197,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support respo
|
|
|
193
197
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
194
198
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
195
199
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
200
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review link");
|
|
196
201
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-records\.md/, "support backlog records link");
|
|
197
202
|
requireText("docs/MAINTAINER_TRIAGE.md", /docs-example/, "docs example triage outcome");
|
|
198
203
|
requireText("docs/MAINTAINER_TRIAGE.md", /fixture-backlog/, "fixture backlog triage outcome");
|
|
@@ -230,6 +235,7 @@ requireText("examples/support/README.md", /response-snippets\.md/, "support resp
|
|
|
230
235
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
231
236
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
232
237
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
238
|
+
requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
|
|
233
239
|
requireText("examples/support/README.md", /backlog-records\.md/, "support backlog records link");
|
|
234
240
|
requireText("examples/support/README.md", /docs-example/, "support triage docs outcome");
|
|
235
241
|
requireText("examples/support/README.md", /fixture-backlog/, "support triage fixture outcome");
|
|
@@ -252,13 +258,18 @@ requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeou
|
|
|
252
258
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "support rule-review closeout record");
|
|
253
259
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
254
260
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
255
|
-
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout/, "support lifecycle flow");
|
|
261
|
+
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
256
262
|
requireText("examples/support/support-lifecycle.md", /docs-example/, "support lifecycle docs outcome");
|
|
257
263
|
requireText("examples/support/support-lifecycle.md", /fixture-backlog/, "support lifecycle fixture outcome");
|
|
258
264
|
requireText("examples/support/support-lifecycle.md", /rule-review-candidate/, "support lifecycle rule-review outcome");
|
|
265
|
+
requireText("examples/support/support-lifecycle.md", /backlog records/, "support lifecycle backlog records stage");
|
|
266
|
+
requireText("examples/support/support-lifecycle.md", /backlog review checklist/, "support lifecycle backlog review stage");
|
|
259
267
|
requireText("examples/support/support-lifecycle.json", /docs-example-response/, "support lifecycle docs response");
|
|
260
268
|
requireText("examples/support/support-lifecycle.json", /fixture-backlog-response/, "support lifecycle fixture response");
|
|
261
269
|
requireText("examples/support/support-lifecycle.json", /rule-review-candidate-response/, "support lifecycle rule-review response");
|
|
270
|
+
requireText("examples/support/support-lifecycle.json", /outcome-prioritization\.json/, "support lifecycle prioritization artifact");
|
|
271
|
+
requireText("examples/support/support-lifecycle.json", /backlog-records\.json/, "support lifecycle backlog records artifact");
|
|
272
|
+
requireText("examples/support/support-lifecycle.json", /backlog-review\.json/, "support lifecycle backlog review artifact");
|
|
262
273
|
requireText("examples/support/outcome-prioritization.md", /Support Outcome Prioritization/, "support outcome prioritization heading");
|
|
263
274
|
requireText("examples/support/outcome-prioritization.md", /outcome-prioritization\.json/, "support outcome prioritization JSON link");
|
|
264
275
|
requireText("examples/support/outcome-prioritization.md", /docs-example/, "support outcome prioritization docs outcome");
|
|
@@ -278,6 +289,17 @@ requireText("examples/support/backlog-records.md", /SECURITY\.md/, "support back
|
|
|
278
289
|
requireText("examples/support/backlog-records.json", /docs-clarification-backlog-record/, "support docs backlog record JSON");
|
|
279
290
|
requireText("examples/support/backlog-records.json", /fixture-backlog-record/, "support fixture backlog record JSON");
|
|
280
291
|
requireText("examples/support/backlog-records.json", /rule-review-candidate-backlog-record/, "support rule-review backlog record JSON");
|
|
292
|
+
requireText("examples/support/backlog-review.md", /Support Backlog Review/, "support backlog review heading");
|
|
293
|
+
requireText("examples/support/backlog-review.md", /backlog-review\.json/, "support backlog review JSON link");
|
|
294
|
+
requireText("examples/support/backlog-review.md", /remains-docs-clarification/, "support docs backlog review decision");
|
|
295
|
+
requireText("examples/support/backlog-review.md", /remains-fixture-backlog/, "support fixture backlog review decision");
|
|
296
|
+
requireText("examples/support/backlog-review.md", /remains-rule-review-candidate/, "support rule-review backlog review decision");
|
|
297
|
+
requireText("examples/support/backlog-review.md", /closed-no-action/, "support closed no-action review decision");
|
|
298
|
+
requireText("examples/support/backlog-review.md", /SECURITY\.md/, "support backlog review security redirect");
|
|
299
|
+
requireText("examples/support/backlog-review.json", /docs-clarification-review/, "support docs backlog review JSON");
|
|
300
|
+
requireText("examples/support/backlog-review.json", /fixture-backlog-review/, "support fixture backlog review JSON");
|
|
301
|
+
requireText("examples/support/backlog-review.json", /rule-review-candidate-review/, "support rule-review backlog review JSON");
|
|
302
|
+
requireText("examples/support/backlog-review.json", /closed-no-action-review/, "support closed no-action review JSON");
|
|
281
303
|
requireText("examples/tuning/README.md", /framework-tuning-cookbook\.json/, "framework tuning cookbook JSON link");
|
|
282
304
|
requireText("examples/tuning/README.md", /framework:tuning:doctor/, "framework tuning doctor guidance");
|
|
283
305
|
requireText("examples/tuning/README.md", /jester tune <rule-id> --json|jester tune [a-z0-9-]+ --json/, "framework tuning command guidance");
|
|
@@ -316,6 +338,7 @@ requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "sup
|
|
|
316
338
|
requireText("scripts/check-support-triage.mjs", /support-lifecycle\.json/, "support lifecycle overview guard");
|
|
317
339
|
requireText("scripts/check-support-triage.mjs", /outcome-prioritization\.json/, "support outcome prioritization guard");
|
|
318
340
|
requireText("scripts/check-support-triage.mjs", /backlog-records\.json/, "support backlog records guard");
|
|
341
|
+
requireText("scripts/check-support-triage.mjs", /backlog-review\.json/, "support backlog review guard");
|
|
319
342
|
requireText("scripts/check-support-triage.mjs", /unsafeContentPatterns/, "support triage unsafe content checks");
|
|
320
343
|
requireText("package.json", /"fixtures:check": "node scripts\/check-fixtures\.mjs"/, "fixture authoring check script");
|
|
321
344
|
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/backlog-review.md",
|
|
29
|
+
"examples/support/backlog-review.json",
|
|
28
30
|
"examples/support/backlog-records.md",
|
|
29
31
|
"examples/support/backlog-records.json",
|
|
30
32
|
"examples/support/closeout-checklist.md",
|
|
@@ -86,6 +88,7 @@ requireText("examples/reports/README.md", /npm run support:check/, "support chec
|
|
|
86
88
|
requireText("examples/reports/README.md", /examples\/support|Maintainer Triage Playbook/i, "maintainer triage playbook link");
|
|
87
89
|
|
|
88
90
|
requireText("examples/support/README.md", /Maintainer Triage Playbook/, "maintainer playbook heading");
|
|
91
|
+
requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
|
|
89
92
|
requireText("examples/support/README.md", /backlog-records\.md/, "support backlog records link");
|
|
90
93
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
91
94
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
@@ -117,19 +120,26 @@ requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeou
|
|
|
117
120
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "rule-review closeout record");
|
|
118
121
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
119
122
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
120
|
-
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout/, "support lifecycle flow");
|
|
123
|
+
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
121
124
|
requireText("examples/support/support-lifecycle.md", /report gallery feedback template/, "report feedback lifecycle link");
|
|
122
125
|
requireText("examples/support/support-lifecycle.md", /triage playbook/, "triage lifecycle link");
|
|
123
126
|
requireText("examples/support/support-lifecycle.md", /response snippets/, "response lifecycle link");
|
|
124
127
|
requireText("examples/support/support-lifecycle.md", /closeout checklist/, "closeout lifecycle link");
|
|
128
|
+
requireText("examples/support/support-lifecycle.md", /outcome prioritization guide/, "prioritization lifecycle link");
|
|
129
|
+
requireText("examples/support/support-lifecycle.md", /backlog records/, "backlog records lifecycle link");
|
|
130
|
+
requireText("examples/support/support-lifecycle.md", /backlog review checklist/, "backlog review lifecycle link");
|
|
125
131
|
requireText("examples/support/support-lifecycle.md", /docs-example/, "docs lifecycle outcome");
|
|
126
132
|
requireText("examples/support/support-lifecycle.md", /fixture-backlog/, "fixture lifecycle outcome");
|
|
127
133
|
requireText("examples/support/support-lifecycle.md", /rule-review-candidate/, "rule-review lifecycle outcome");
|
|
134
|
+
requireText("examples/support/support-lifecycle.md", /closed-no-action/, "closed no-action lifecycle review");
|
|
128
135
|
requireText("examples/support/support-lifecycle.md", /doctor --json/, "doctor JSON lifecycle prompt");
|
|
129
136
|
requireText("examples/support/support-lifecycle.md", /SECURITY\.md/, "lifecycle security redirect");
|
|
130
137
|
requireText("examples/support/support-lifecycle.json", /docs-example-response/, "docs lifecycle response");
|
|
131
138
|
requireText("examples/support/support-lifecycle.json", /fixture-backlog-response/, "fixture lifecycle response");
|
|
132
139
|
requireText("examples/support/support-lifecycle.json", /rule-review-candidate-response/, "rule-review lifecycle response");
|
|
140
|
+
requireText("examples/support/support-lifecycle.json", /outcome-prioritization\.json/, "lifecycle prioritization artifact");
|
|
141
|
+
requireText("examples/support/support-lifecycle.json", /backlog-records\.json/, "lifecycle backlog records artifact");
|
|
142
|
+
requireText("examples/support/support-lifecycle.json", /backlog-review\.json/, "lifecycle backlog review artifact");
|
|
133
143
|
requireText("examples/support/outcome-prioritization.md", /Support Outcome Prioritization/, "support outcome prioritization heading");
|
|
134
144
|
requireText("examples/support/outcome-prioritization.md", /outcome-prioritization\.json/, "support prioritization JSON link");
|
|
135
145
|
requireText("examples/support/outcome-prioritization.md", /support lifecycle overview/, "support lifecycle prioritization link");
|
|
@@ -159,6 +169,22 @@ requireText("examples/support/backlog-records.md", /npm run support:check/, "sup
|
|
|
159
169
|
requireText("examples/support/backlog-records.json", /docs-clarification-backlog-record/, "docs backlog record JSON");
|
|
160
170
|
requireText("examples/support/backlog-records.json", /fixture-backlog-record/, "fixture backlog record JSON");
|
|
161
171
|
requireText("examples/support/backlog-records.json", /rule-review-candidate-backlog-record/, "rule-review backlog record JSON");
|
|
172
|
+
requireText("examples/support/backlog-review.md", /Support Backlog Review/, "support backlog review heading");
|
|
173
|
+
requireText("examples/support/backlog-review.md", /backlog-review\.json/, "support backlog review JSON link");
|
|
174
|
+
requireText("examples/support/backlog-review.md", /backlog-records\.md/, "support backlog records review link");
|
|
175
|
+
requireText("examples/support/backlog-review.md", /outcome-prioritization\.md/, "support prioritization review link");
|
|
176
|
+
requireText("examples/support/backlog-review.md", /support lifecycle overview/, "support lifecycle review link");
|
|
177
|
+
requireText("examples/support/backlog-review.md", /remains-docs-clarification/, "docs clarification review decision");
|
|
178
|
+
requireText("examples/support/backlog-review.md", /remains-fixture-backlog/, "fixture backlog review decision");
|
|
179
|
+
requireText("examples/support/backlog-review.md", /remains-rule-review-candidate/, "rule-review review decision");
|
|
180
|
+
requireText("examples/support/backlog-review.md", /closed-no-action/, "closed no-action review decision");
|
|
181
|
+
requireText("examples/support/backlog-review.md", /jester tune <rule-id> --json|fixture evidence|quiet-pass fixture/, "review fixture evidence guidance");
|
|
182
|
+
requireText("examples/support/backlog-review.md", /SECURITY\.md/, "review security redirect");
|
|
183
|
+
requireText("examples/support/backlog-review.md", /npm run support:check/, "support checker review command");
|
|
184
|
+
requireText("examples/support/backlog-review.json", /docs-clarification-review/, "docs review record JSON");
|
|
185
|
+
requireText("examples/support/backlog-review.json", /fixture-backlog-review/, "fixture review record JSON");
|
|
186
|
+
requireText("examples/support/backlog-review.json", /rule-review-candidate-review/, "rule-review review record JSON");
|
|
187
|
+
requireText("examples/support/backlog-review.json", /closed-no-action-review/, "closed no-action review record JSON");
|
|
162
188
|
requireText("examples/support/response-snippets.md", /Maintainer Response Snippets/, "response snippets heading");
|
|
163
189
|
requireText("examples/support/response-snippets.md", /response-snippets\.json/, "response snippets JSON link");
|
|
164
190
|
requireText("examples/support/response-snippets.md", /docs-example/, "docs response outcome");
|
|
@@ -176,6 +202,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report
|
|
|
176
202
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "maintainer playbook triage link");
|
|
177
203
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle triage link");
|
|
178
204
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support prioritization triage link");
|
|
205
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review triage link");
|
|
179
206
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-records\.md/, "support backlog records triage link");
|
|
180
207
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist triage link");
|
|
181
208
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "maintainer response snippets triage link");
|
|
@@ -187,6 +214,7 @@ requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support checker re
|
|
|
187
214
|
requireText("README.md", /feedback-template\.md/, "feedback template README link");
|
|
188
215
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle README link");
|
|
189
216
|
requireText("README.md", /outcome-prioritization\.md/, "support prioritization README link");
|
|
217
|
+
requireText("README.md", /backlog-review\.md/, "support backlog review README link");
|
|
190
218
|
requireText("README.md", /backlog-records\.md/, "support backlog records README link");
|
|
191
219
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist README link");
|
|
192
220
|
requireText("README.md", /examples\/support/, "maintainer triage playbook README link");
|
|
@@ -202,6 +230,7 @@ checkCloseoutChecklist();
|
|
|
202
230
|
checkSupportLifecycle();
|
|
203
231
|
checkOutcomePrioritization();
|
|
204
232
|
checkBacklogRecords();
|
|
233
|
+
checkBacklogReview();
|
|
205
234
|
|
|
206
235
|
if (failures.length > 0) {
|
|
207
236
|
console.error("Support triage check failed:");
|
|
@@ -512,26 +541,53 @@ function checkSupportLifecycle() {
|
|
|
512
541
|
const expected = [
|
|
513
542
|
{
|
|
514
543
|
outcome: "docs-example",
|
|
515
|
-
stageReferences: [
|
|
544
|
+
stageReferences: [
|
|
545
|
+
"report-gallery-feedback",
|
|
546
|
+
"gallery-expected-block-docs",
|
|
547
|
+
"docs-example-response",
|
|
548
|
+
"docs-clarification-closeout",
|
|
549
|
+
"docs-example",
|
|
550
|
+
"docs-clarification-backlog-record",
|
|
551
|
+
"docs-clarification-review"
|
|
552
|
+
],
|
|
516
553
|
checks: ["npm run reports:check", "npm run support:check"]
|
|
517
554
|
},
|
|
518
555
|
{
|
|
519
556
|
outcome: "fixture-backlog",
|
|
520
|
-
stageReferences: [
|
|
557
|
+
stageReferences: [
|
|
558
|
+
"false-positive",
|
|
559
|
+
"false-positive-fixture-backlog",
|
|
560
|
+
"fixture-backlog-response",
|
|
561
|
+
"fixture-backlog-closeout",
|
|
562
|
+
"fixture-backlog",
|
|
563
|
+
"fixture-backlog-record",
|
|
564
|
+
"fixture-backlog-review"
|
|
565
|
+
],
|
|
521
566
|
checks: ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"]
|
|
522
567
|
},
|
|
523
568
|
{
|
|
524
569
|
outcome: "rule-review-candidate",
|
|
525
|
-
stageReferences: [
|
|
570
|
+
stageReferences: [
|
|
571
|
+
"false-positive",
|
|
572
|
+
"repeated-risky-domain-rule-review",
|
|
573
|
+
"rule-review-candidate-response",
|
|
574
|
+
"rule-review-closeout",
|
|
575
|
+
"rule-review-candidate",
|
|
576
|
+
"rule-review-candidate-backlog-record",
|
|
577
|
+
"rule-review-candidate-review"
|
|
578
|
+
],
|
|
526
579
|
checks: ["npm run fixtures:report -- --markdown", "npm run support:check"]
|
|
527
580
|
}
|
|
528
581
|
];
|
|
529
|
-
const expectedStageIds = ["report", "triage", "response", "closeout"];
|
|
582
|
+
const expectedStageIds = ["report", "triage", "response", "closeout", "prioritization", "backlog-record", "backlog-review"];
|
|
530
583
|
const expectedArtifacts = [
|
|
531
584
|
"examples/reports/feedback-template.md",
|
|
532
585
|
"examples/support/triage-playbook.json",
|
|
533
586
|
"examples/support/response-snippets.json",
|
|
534
|
-
"examples/support/closeout-checklist.json"
|
|
587
|
+
"examples/support/closeout-checklist.json",
|
|
588
|
+
"examples/support/outcome-prioritization.json",
|
|
589
|
+
"examples/support/backlog-records.json",
|
|
590
|
+
"examples/support/backlog-review.json"
|
|
535
591
|
];
|
|
536
592
|
const seenOutcomes = new Set();
|
|
537
593
|
|
|
@@ -551,8 +607,8 @@ function checkSupportLifecycle() {
|
|
|
551
607
|
failures.push(`${entry.outcome}.title should explain the lifecycle outcome.`);
|
|
552
608
|
}
|
|
553
609
|
|
|
554
|
-
if (!Array.isArray(entry.stages) || entry.stages.length !==
|
|
555
|
-
failures.push(`${entry.outcome}.stages should contain report, triage, response, and
|
|
610
|
+
if (!Array.isArray(entry.stages) || entry.stages.length !== 7) {
|
|
611
|
+
failures.push(`${entry.outcome}.stages should contain report, triage, response, closeout, prioritization, backlog-record, and backlog-review.`);
|
|
556
612
|
continue;
|
|
557
613
|
}
|
|
558
614
|
|
|
@@ -808,3 +864,116 @@ function checkBacklogRecords() {
|
|
|
808
864
|
}
|
|
809
865
|
}
|
|
810
866
|
}
|
|
867
|
+
|
|
868
|
+
function checkBacklogReview() {
|
|
869
|
+
const path = "examples/support/backlog-review.json";
|
|
870
|
+
const reviews = readJson(path);
|
|
871
|
+
if (!reviews) {
|
|
872
|
+
return;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
if (!Array.isArray(reviews) || reviews.length !== 4) {
|
|
876
|
+
failures.push(`${path} should contain exactly four support backlog review decisions.`);
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
const expected = [
|
|
881
|
+
{
|
|
882
|
+
id: "docs-clarification-review",
|
|
883
|
+
sourceRecord: "docs-clarification-backlog-record",
|
|
884
|
+
reviewDecision: "remains-docs-clarification",
|
|
885
|
+
outcome: "docs-example",
|
|
886
|
+
checks: ["npm run reports:check", "npm run support:check"],
|
|
887
|
+
criteria: ["nearest checked report", "Observed output", "No rule behavior change"]
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
id: "fixture-backlog-review",
|
|
891
|
+
sourceRecord: "fixture-backlog-record",
|
|
892
|
+
reviewDecision: "remains-fixture-backlog",
|
|
893
|
+
outcome: "fixture-backlog",
|
|
894
|
+
checks: ["npm run fixtures:check", "npm run fixtures:report", "npm run support:check"],
|
|
895
|
+
criteria: ["smallest sanitized reproduction", "jester tune <rule-id> --json", "pass or quiet-pass fixture"]
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
id: "rule-review-candidate-review",
|
|
899
|
+
sourceRecord: "rule-review-candidate-backlog-record",
|
|
900
|
+
reviewDecision: "remains-rule-review-candidate",
|
|
901
|
+
outcome: "rule-review-candidate",
|
|
902
|
+
checks: ["npm run fixtures:report -- --markdown", "npm run support:check"],
|
|
903
|
+
criteria: ["At least two sanitized", "Fixture report or tune evidence", "supporting fixtures"]
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
id: "closed-no-action-review",
|
|
907
|
+
sourceRecord: "<backlog-record-id>",
|
|
908
|
+
reviewDecision: "closed-no-action",
|
|
909
|
+
outcome: "closed-no-action",
|
|
910
|
+
checks: ["npm run support:check"],
|
|
911
|
+
criteria: ["no longer reproduces", "private, or security-sensitive", "current checks still pass"]
|
|
912
|
+
}
|
|
913
|
+
];
|
|
914
|
+
const seenIds = new Set();
|
|
915
|
+
|
|
916
|
+
for (const [index, review] of reviews.entries()) {
|
|
917
|
+
const expectedReview = expected[index];
|
|
918
|
+
if (review?.id !== expectedReview.id) {
|
|
919
|
+
failures.push(`${path} entry ${index + 1} should have id ${expectedReview.id}.`);
|
|
920
|
+
continue;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
if (seenIds.has(review.id)) {
|
|
924
|
+
failures.push(`${path} has duplicate id ${review.id}.`);
|
|
925
|
+
}
|
|
926
|
+
seenIds.add(review.id);
|
|
927
|
+
|
|
928
|
+
if (review.sourceRecord !== expectedReview.sourceRecord) {
|
|
929
|
+
failures.push(`${review.id}.sourceRecord should be ${expectedReview.sourceRecord}.`);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
if (review.reviewDecision !== expectedReview.reviewDecision) {
|
|
933
|
+
failures.push(`${review.id}.reviewDecision should be ${expectedReview.reviewDecision}.`);
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
if (review.outcome !== expectedReview.outcome) {
|
|
937
|
+
failures.push(`${review.id}.outcome should be ${expectedReview.outcome}.`);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
if (typeof review.cadence !== "string" || review.cadence.length < 40) {
|
|
941
|
+
failures.push(`${review.id}.cadence should explain when to review the backlog item.`);
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
if (typeof review.nextAction !== "string" || review.nextAction.length < 50) {
|
|
945
|
+
failures.push(`${review.id}.nextAction should describe the maintainer action.`);
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
if (!Array.isArray(review.decisionCriteria) || review.decisionCriteria.length !== 3) {
|
|
949
|
+
failures.push(`${review.id}.decisionCriteria should contain exactly three criteria.`);
|
|
950
|
+
} else {
|
|
951
|
+
const criteriaText = review.decisionCriteria.join("\n");
|
|
952
|
+
for (const expectedCriterion of expectedReview.criteria) {
|
|
953
|
+
if (!criteriaText.includes(expectedCriterion)) {
|
|
954
|
+
failures.push(`${review.id}.decisionCriteria should include ${expectedCriterion}.`);
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
if (!Array.isArray(review.privacyReview) || review.privacyReview.length !== 3) {
|
|
960
|
+
failures.push(`${review.id}.privacyReview should contain exactly three privacy checks.`);
|
|
961
|
+
} else {
|
|
962
|
+
const privacyText = review.privacyReview.join("\n");
|
|
963
|
+
if (!/secret|private|SECURITY\.md|redacted|placeholder/i.test(privacyText)) {
|
|
964
|
+
failures.push(`${review.id}.privacyReview should include privacy and security routing guidance.`);
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
if (!Array.isArray(review.requiredChecks)) {
|
|
969
|
+
failures.push(`${review.id}.requiredChecks should be an array.`);
|
|
970
|
+
continue;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
for (const check of expectedReview.checks) {
|
|
974
|
+
if (!review.requiredChecks.includes(check)) {
|
|
975
|
+
failures.push(`${review.id}.requiredChecks should include ${check}.`);
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|