memento-mori-jester 0.1.97 → 0.1.98
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 +1 -1
- package/docs/PRODUCTION_READINESS.md +3 -3
- package/docs/RELEASE_NOTES_v0.1.98.md +45 -0
- package/examples/support/README.md +1 -1
- package/examples/support/support-lifecycle-map.json +74 -0
- package/examples/support/support-lifecycle-map.md +46 -0
- package/examples/support/support-lifecycle.md +1 -1
- package/package.json +1 -1
- package/scripts/check-production-readiness.mjs +20 -0
- package/scripts/check-support-triage.mjs +122 -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.98
|
|
8
|
+
|
|
9
|
+
- Added a compact checked support lifecycle map for scanning report, triage, response, closeout, prioritization, backlog record, and backlog review stages at a glance.
|
|
10
|
+
- Added `support-lifecycle-map.json` plus `npm run support:check` and production-readiness coverage so stage order, outcome summaries, and privacy guardrails stay aligned.
|
|
11
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and release notes for the compact lifecycle map.
|
|
12
|
+
|
|
7
13
|
## 0.1.97
|
|
8
14
|
|
|
9
15
|
- Extended the checked support lifecycle overview so it now covers report, triage, response, closeout, prioritization, backlog record, and backlog review stages.
|
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 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.
|
|
79
|
+
Maintainers can use the checked [support lifecycle map](examples/support/support-lifecycle-map.md), [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
|
|
|
@@ -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 Map](examples/support/support-lifecycle-map.md)
|
|
453
454
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
454
455
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
455
456
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
@@ -478,6 +479,7 @@ Framework CI examples:
|
|
|
478
479
|
- [Consumer Quickstart Smoke](examples/consumer-quickstart)
|
|
479
480
|
- [Real-World Report Gallery](examples/reports)
|
|
480
481
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
482
|
+
- [Support Lifecycle Map](examples/support/support-lifecycle-map.md)
|
|
481
483
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
482
484
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
483
485
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
@@ -541,7 +543,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
|
|
|
541
543
|
Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
|
|
542
544
|
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.
|
|
543
545
|
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.
|
|
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.
|
|
546
|
+
Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support lifecycle map](examples/support/support-lifecycle-map.md), [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.
|
|
545
547
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
546
548
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
547
549
|
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
|
+
- Compact checked support lifecycle map in v0.1.98, giving maintainers a quick scan of report, triage, response, closeout, prioritization, backlog record, and backlog review.
|
|
9
10
|
- 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
11
|
- 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.
|
|
11
12
|
- 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.
|
|
@@ -88,7 +89,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
88
89
|
|
|
89
90
|
- Collect real-world reports and fold the strongest redacted cases into more framework tuning cookbook recipes.
|
|
90
91
|
- Add a small checked maintainer dashboard or report that summarizes open support backlog review states from public-safe JSON.
|
|
91
|
-
- Add a
|
|
92
|
+
- Add a generated support lifecycle status summary if backlog review records grow beyond the compact map.
|
|
92
93
|
- Use support backlog record counts to choose the next docs, fixture, report-gallery, or rule-guidance batch.
|
|
93
94
|
- Use repeated prioritized support outcomes to choose the next redacted fixture, report-gallery update, or rule-guidance review.
|
|
94
95
|
- 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 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.
|
|
24
|
+
When a report has enough public-safe detail to triage, start with the checked [support lifecycle map](../examples/support/support-lifecycle-map.md) for a quick scan of the path, or the full [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
|
|
|
@@ -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 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.
|
|
50
|
+
- `examples/support` provides a compact checked support lifecycle map plus a full 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
|
|
63
|
+
- `examples/support` shows maintainers how to scan the support lifecycle map, audit the full lifecycle overview, 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, backlog review checklist, 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 map, 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,45 @@
|
|
|
1
|
+
# Memento Mori Jester v0.1.98
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a compact checked support lifecycle map so maintainers can scan the full public-safe support path without reading every support artifact first.
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Added `examples/support/support-lifecycle-map.md` for the at-a-glance support chain:
|
|
10
|
+
`report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review`.
|
|
11
|
+
- Added `examples/support/support-lifecycle-map.json` as the deterministic source for stage order, stage artifacts, outcome summaries, and privacy guardrails.
|
|
12
|
+
- Extended `npm run support:check` and `npm run production:check` so the compact map stays aligned with the full lifecycle overview.
|
|
13
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and changelog.
|
|
14
|
+
|
|
15
|
+
## Public Interface Changes
|
|
16
|
+
|
|
17
|
+
- No CLI, MCP, config schema, rule, scoring, GitHub Action, or release automation changes.
|
|
18
|
+
- New package docs/examples only:
|
|
19
|
+
- `examples/support/support-lifecycle-map.md`
|
|
20
|
+
- `examples/support/support-lifecycle-map.json`
|
|
21
|
+
|
|
22
|
+
## Release Validation
|
|
23
|
+
|
|
24
|
+
```powershell
|
|
25
|
+
npm.cmd test
|
|
26
|
+
npm.cmd run demo:svg:check
|
|
27
|
+
npm.cmd run promo:card:check
|
|
28
|
+
npm.cmd run promo:check
|
|
29
|
+
npm.cmd run support:check
|
|
30
|
+
npm.cmd run production:check
|
|
31
|
+
npm.cmd run pack:dry
|
|
32
|
+
git diff --check
|
|
33
|
+
node .\dist\cli.js doctor
|
|
34
|
+
node .\dist\cli.js summary --kind command "git reset --hard"
|
|
35
|
+
git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.98 support lifecycle map"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Post-Publish Smoke
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
npm.cmd view memento-mori-jester version --silent
|
|
42
|
+
npx.cmd -y memento-mori-jester@latest doctor
|
|
43
|
+
npx.cmd -y memento-mori-jester@latest summary --kind command "git reset --hard"
|
|
44
|
+
npm.cmd run support:check
|
|
45
|
+
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This playbook shows how to handle sanitized adopter reports without turning every surprise into an immediate rule change. It pairs with [docs/MAINTAINER_TRIAGE.md](../../docs/MAINTAINER_TRIAGE.md), the [report gallery feedback template](../reports/feedback-template.md), and the GitHub issue templates.
|
|
4
4
|
|
|
5
|
-
Start with the checked [support lifecycle
|
|
5
|
+
Start with the compact checked [support lifecycle map](support-lifecycle-map.md) when you need a quick scan of the path: report, triage, response, closeout, prioritization, backlog record, and backlog review. Use the full checked [support lifecycle overview](support-lifecycle.md) when you need the outcome table in one place. The lifecycle sources are [support-lifecycle-map.json](support-lifecycle-map.json) and [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
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
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Support Lifecycle Map",
|
|
3
|
+
"flow": [
|
|
4
|
+
"report",
|
|
5
|
+
"triage",
|
|
6
|
+
"response",
|
|
7
|
+
"closeout",
|
|
8
|
+
"prioritization",
|
|
9
|
+
"backlog-record",
|
|
10
|
+
"backlog-review"
|
|
11
|
+
],
|
|
12
|
+
"stages": [
|
|
13
|
+
{
|
|
14
|
+
"id": "report",
|
|
15
|
+
"artifact": "examples/reports/feedback-template.md",
|
|
16
|
+
"question": "Is the report redacted, minimal, and safe to discuss publicly?"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "triage",
|
|
20
|
+
"artifact": "examples/support/triage-playbook.json",
|
|
21
|
+
"question": "Is this a docs example, fixture backlog item, or rule-review candidate?"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "response",
|
|
25
|
+
"artifact": "examples/support/response-snippets.json",
|
|
26
|
+
"question": "Which public-safe reply should go back to the reporter?"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "closeout",
|
|
30
|
+
"artifact": "examples/support/closeout-checklist.json",
|
|
31
|
+
"question": "Was the immediate support decision recorded with a safe next link?"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "prioritization",
|
|
35
|
+
"artifact": "examples/support/outcome-prioritization.json",
|
|
36
|
+
"question": "Is the follow-up low-priority docs, medium-priority fixture work, or high-priority rule review?"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "backlog-record",
|
|
40
|
+
"artifact": "examples/support/backlog-records.json",
|
|
41
|
+
"question": "Is there a sanitized backlog artifact with evidence and checks?"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "backlog-review",
|
|
45
|
+
"artifact": "examples/support/backlog-review.json",
|
|
46
|
+
"question": "Does the item remain active, or should it close as closed-no-action?"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"outcomes": [
|
|
50
|
+
{
|
|
51
|
+
"outcome": "docs-example",
|
|
52
|
+
"backlogRecord": "docs-clarification-backlog-record",
|
|
53
|
+
"reviewDecision": "remains-docs-clarification",
|
|
54
|
+
"fallbackReviewDecision": "closed-no-action"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"outcome": "fixture-backlog",
|
|
58
|
+
"backlogRecord": "fixture-backlog-record",
|
|
59
|
+
"reviewDecision": "remains-fixture-backlog",
|
|
60
|
+
"fallbackReviewDecision": "closed-no-action"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"outcome": "rule-review-candidate",
|
|
64
|
+
"backlogRecord": "rule-review-candidate-backlog-record",
|
|
65
|
+
"reviewDecision": "remains-rule-review-candidate",
|
|
66
|
+
"fallbackReviewDecision": "closed-no-action"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"privacyGuardrail": "Route secrets, private code, private paths, customer data, full logs, unredacted SARIF, package publishing credentials, MCP data exposure, or exploitable security details through SECURITY.md instead of the public lifecycle.",
|
|
70
|
+
"requiredChecks": [
|
|
71
|
+
"npm run support:check",
|
|
72
|
+
"npm run production:check"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Support Lifecycle Map
|
|
2
|
+
|
|
3
|
+
This is the compact public-safe map for maintainers who need the whole support chain without reading every checklist first.
|
|
4
|
+
|
|
5
|
+
The checked source is [support-lifecycle-map.json](support-lifecycle-map.json). Use the full [support lifecycle overview](support-lifecycle.md) when you need the outcome table and per-stage artifact references.
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
report
|
|
9
|
+
-> triage
|
|
10
|
+
-> response
|
|
11
|
+
-> closeout
|
|
12
|
+
-> prioritization
|
|
13
|
+
-> backlog-record
|
|
14
|
+
-> backlog-review
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Stage Scan
|
|
18
|
+
|
|
19
|
+
| Stage | Artifact | Maintainer question |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| `report` | [feedback-template.md](../reports/feedback-template.md) | Is the report redacted, minimal, and safe to discuss publicly? |
|
|
22
|
+
| `triage` | [triage-playbook.json](triage-playbook.json) | Is this a docs example, fixture backlog item, or rule-review candidate? |
|
|
23
|
+
| `response` | [response-snippets.md](response-snippets.md) | Which public-safe reply should go back to the reporter? |
|
|
24
|
+
| `closeout` | [closeout-checklist.md](closeout-checklist.md) | Was the immediate support decision recorded with a safe next link? |
|
|
25
|
+
| `prioritization` | [outcome-prioritization.md](outcome-prioritization.md) | Is the follow-up low-priority docs, medium-priority fixture work, or high-priority rule review? |
|
|
26
|
+
| `backlog-record` | [backlog-records.md](backlog-records.md) | Is there a sanitized backlog artifact with evidence and checks? |
|
|
27
|
+
| `backlog-review` | [backlog-review.md](backlog-review.md) | Does the item remain active, or should it close as `closed-no-action`? |
|
|
28
|
+
|
|
29
|
+
## Outcome Scan
|
|
30
|
+
|
|
31
|
+
| Outcome | Backlog record | Review decision |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `docs-example` | `docs-clarification-backlog-record` | `remains-docs-clarification` or `closed-no-action` |
|
|
34
|
+
| `fixture-backlog` | `fixture-backlog-record` | `remains-fixture-backlog` or `closed-no-action` |
|
|
35
|
+
| `rule-review-candidate` | `rule-review-candidate-backlog-record` | `remains-rule-review-candidate` or `closed-no-action` |
|
|
36
|
+
|
|
37
|
+
## Guardrail
|
|
38
|
+
|
|
39
|
+
If the report includes secrets, private code, private paths, customer data, full logs, unredacted SARIF, package publishing credentials, MCP data exposure, or exploitable security details, stop using the public lifecycle and route through [SECURITY.md](../../SECURITY.md).
|
|
40
|
+
|
|
41
|
+
Run after editing this map:
|
|
42
|
+
|
|
43
|
+
```powershell
|
|
44
|
+
npm run support:check
|
|
45
|
+
npm run production:check
|
|
46
|
+
```
|
|
@@ -6,7 +6,7 @@ This index shows the public-safe support path at a glance:
|
|
|
6
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), [closeout checklist](closeout-checklist.md), [outcome prioritization guide](outcome-prioritization.md), [backlog records](backlog-records.md), and [backlog review checklist](backlog-review.md).
|
|
9
|
+
The compact map is [support-lifecycle-map.md](support-lifecycle-map.md), backed by [support-lifecycle-map.json](support-lifecycle-map.json). The checked source for the full outcome table 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
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memento-mori-jester",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.98",
|
|
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": {
|
|
@@ -104,6 +104,8 @@ for (const path of [
|
|
|
104
104
|
"examples/support/outcome-prioritization.json",
|
|
105
105
|
"examples/support/response-snippets.md",
|
|
106
106
|
"examples/support/response-snippets.json",
|
|
107
|
+
"examples/support/support-lifecycle-map.md",
|
|
108
|
+
"examples/support/support-lifecycle-map.json",
|
|
107
109
|
"examples/support/support-lifecycle.md",
|
|
108
110
|
"examples/support/support-lifecycle.json",
|
|
109
111
|
"examples/support/triage-playbook.json",
|
|
@@ -138,6 +140,7 @@ requireText("README.md", /feedback-template\.md/, "report gallery feedback templ
|
|
|
138
140
|
requireText("README.md", /examples\/support/, "support triage playbook link");
|
|
139
141
|
requireText("README.md", /response-snippets\.md/, "support response snippets link");
|
|
140
142
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
143
|
+
requireText("README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
141
144
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
142
145
|
requireText("README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
143
146
|
requireText("README.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -166,6 +169,7 @@ requireText("docs/PRODUCTION_READINESS.md", /examples\/support/, "support triage
|
|
|
166
169
|
requireText("docs/PRODUCTION_READINESS.md", /response snippets/i, "support response snippets readiness");
|
|
167
170
|
requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support closeout checklist readiness");
|
|
168
171
|
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle overview/i, "support lifecycle overview readiness");
|
|
172
|
+
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle map/i, "support lifecycle map readiness");
|
|
169
173
|
requireText("docs/PRODUCTION_READINESS.md", /outcome prioritization guide/i, "support outcome prioritization readiness");
|
|
170
174
|
requireText("docs/PRODUCTION_READINESS.md", /backlog review/i, "support backlog review readiness");
|
|
171
175
|
requireText("docs/PRODUCTION_READINESS.md", /backlog records/i, "support backlog records readiness");
|
|
@@ -195,6 +199,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report
|
|
|
195
199
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "support triage playbook link");
|
|
196
200
|
requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support response snippets link");
|
|
197
201
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
202
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
198
203
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
199
204
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
200
205
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -233,6 +238,8 @@ requireText("examples/reports/feedback-template.md", /SECURITY\.md/, "feedback t
|
|
|
233
238
|
requireText("examples/support/README.md", /triage-playbook\.json/, "support triage playbook JSON link");
|
|
234
239
|
requireText("examples/support/README.md", /response-snippets\.md/, "support response snippets link");
|
|
235
240
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
241
|
+
requireText("examples/support/README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
242
|
+
requireText("examples/support/README.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
236
243
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
237
244
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
238
245
|
requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -256,7 +263,19 @@ requireText("examples/support/closeout-checklist.md", /candidate-opened/, "suppo
|
|
|
256
263
|
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "support docs closeout record");
|
|
257
264
|
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "support fixture closeout record");
|
|
258
265
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "support rule-review closeout record");
|
|
266
|
+
requireText("examples/support/support-lifecycle-map.md", /Support Lifecycle Map/, "support lifecycle map heading");
|
|
267
|
+
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
268
|
+
requireText("examples/support/support-lifecycle-map.md", /report\s*\n\s*-> triage\s*\n\s*-> response\s*\n\s*-> closeout\s*\n\s*-> prioritization\s*\n\s*-> backlog-record\s*\n\s*-> backlog-review/, "support lifecycle map compact flow");
|
|
269
|
+
requireText("examples/support/support-lifecycle-map.md", /docs-clarification-backlog-record/, "support lifecycle map docs backlog record");
|
|
270
|
+
requireText("examples/support/support-lifecycle-map.md", /fixture-backlog-record/, "support lifecycle map fixture backlog record");
|
|
271
|
+
requireText("examples/support/support-lifecycle-map.md", /rule-review-candidate-backlog-record/, "support lifecycle map rule-review backlog record");
|
|
272
|
+
requireText("examples/support/support-lifecycle-map.md", /closed-no-action/, "support lifecycle map closed no-action decision");
|
|
273
|
+
requireText("examples/support/support-lifecycle-map.md", /SECURITY\.md/, "support lifecycle map security redirect");
|
|
274
|
+
requireText("examples/support/support-lifecycle-map.json", /Support Lifecycle Map/, "support lifecycle map JSON title");
|
|
275
|
+
requireText("examples/support/support-lifecycle-map.json", /backlog-record/, "support lifecycle map backlog-record stage");
|
|
276
|
+
requireText("examples/support/support-lifecycle-map.json", /backlog-review/, "support lifecycle map backlog-review stage");
|
|
259
277
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
278
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
260
279
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
261
280
|
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
262
281
|
requireText("examples/support/support-lifecycle.md", /docs-example/, "support lifecycle docs outcome");
|
|
@@ -336,6 +355,7 @@ requireText("scripts/check-support-triage.mjs", /triage-playbook\.json/, "suppor
|
|
|
336
355
|
requireText("scripts/check-support-triage.mjs", /response-snippets\.json/, "support response snippets guard");
|
|
337
356
|
requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "support closeout checklist guard");
|
|
338
357
|
requireText("scripts/check-support-triage.mjs", /support-lifecycle\.json/, "support lifecycle overview guard");
|
|
358
|
+
requireText("scripts/check-support-triage.mjs", /support-lifecycle-map\.json/, "support lifecycle map guard");
|
|
339
359
|
requireText("scripts/check-support-triage.mjs", /outcome-prioritization\.json/, "support outcome prioritization guard");
|
|
340
360
|
requireText("scripts/check-support-triage.mjs", /backlog-records\.json/, "support backlog records guard");
|
|
341
361
|
requireText("scripts/check-support-triage.mjs", /backlog-review\.json/, "support backlog review guard");
|
|
@@ -36,6 +36,8 @@ const supportFiles = [
|
|
|
36
36
|
"examples/support/README.md",
|
|
37
37
|
"examples/support/response-snippets.md",
|
|
38
38
|
"examples/support/response-snippets.json",
|
|
39
|
+
"examples/support/support-lifecycle-map.md",
|
|
40
|
+
"examples/support/support-lifecycle-map.json",
|
|
39
41
|
"examples/support/support-lifecycle.md",
|
|
40
42
|
"examples/support/support-lifecycle.json",
|
|
41
43
|
"examples/support/triage-playbook.json",
|
|
@@ -90,7 +92,9 @@ requireText("examples/reports/README.md", /examples\/support|Maintainer Triage P
|
|
|
90
92
|
requireText("examples/support/README.md", /Maintainer Triage Playbook/, "maintainer playbook heading");
|
|
91
93
|
requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
|
|
92
94
|
requireText("examples/support/README.md", /backlog-records\.md/, "support backlog records link");
|
|
95
|
+
requireText("examples/support/README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
93
96
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
97
|
+
requireText("examples/support/README.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
94
98
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
95
99
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
96
100
|
requireText("examples/support/README.md", /triage-playbook\.json/, "maintainer playbook JSON link");
|
|
@@ -118,7 +122,22 @@ requireText("examples/support/closeout-checklist.md", /SECURITY\.md/, "closeout
|
|
|
118
122
|
requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "docs closeout record");
|
|
119
123
|
requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "fixture closeout record");
|
|
120
124
|
requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "rule-review closeout record");
|
|
125
|
+
requireText("examples/support/support-lifecycle-map.md", /Support Lifecycle Map/, "support lifecycle map heading");
|
|
126
|
+
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
127
|
+
requireText("examples/support/support-lifecycle-map.md", /report\s*\n\s*-> triage\s*\n\s*-> response\s*\n\s*-> closeout\s*\n\s*-> prioritization\s*\n\s*-> backlog-record\s*\n\s*-> backlog-review/, "support lifecycle compact flow");
|
|
128
|
+
requireText("examples/support/support-lifecycle-map.md", /Maintainer question/, "support lifecycle map scan questions");
|
|
129
|
+
requireText("examples/support/support-lifecycle-map.md", /docs-clarification-backlog-record/, "docs backlog map record");
|
|
130
|
+
requireText("examples/support/support-lifecycle-map.md", /fixture-backlog-record/, "fixture backlog map record");
|
|
131
|
+
requireText("examples/support/support-lifecycle-map.md", /rule-review-candidate-backlog-record/, "rule-review backlog map record");
|
|
132
|
+
requireText("examples/support/support-lifecycle-map.md", /closed-no-action/, "closed no-action map review");
|
|
133
|
+
requireText("examples/support/support-lifecycle-map.md", /SECURITY\.md/, "map security redirect");
|
|
134
|
+
requireText("examples/support/support-lifecycle-map.md", /npm run support:check/, "support checker map command");
|
|
135
|
+
requireText("examples/support/support-lifecycle-map.json", /Support Lifecycle Map/, "support lifecycle map JSON title");
|
|
136
|
+
requireText("examples/support/support-lifecycle-map.json", /backlog-record/, "support lifecycle map backlog-record stage");
|
|
137
|
+
requireText("examples/support/support-lifecycle-map.json", /backlog-review/, "support lifecycle map backlog-review stage");
|
|
138
|
+
requireText("examples/support/support-lifecycle-map.json", /closed-no-action/, "support lifecycle map closed no-action fallback");
|
|
121
139
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
140
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
122
141
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
123
142
|
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
124
143
|
requireText("examples/support/support-lifecycle.md", /report gallery feedback template/, "report feedback lifecycle link");
|
|
@@ -200,6 +219,7 @@ requireText("examples/support/response-snippets.json", /rule-review-candidate-re
|
|
|
200
219
|
requireText("docs/MAINTAINER_TRIAGE.md", /feedback-template\.md/, "feedback template triage link");
|
|
201
220
|
requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report gallery issue template triage link");
|
|
202
221
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "maintainer playbook triage link");
|
|
222
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-map\.md/, "support lifecycle map triage link");
|
|
203
223
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle triage link");
|
|
204
224
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support prioritization triage link");
|
|
205
225
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review triage link");
|
|
@@ -212,6 +232,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /rule-review-candidate/, "rule review t
|
|
|
212
232
|
requireText("docs/MAINTAINER_TRIAGE.md", /npm(?:\.cmd)? run support:check/, "support checker triage command");
|
|
213
233
|
requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support checker readiness");
|
|
214
234
|
requireText("README.md", /feedback-template\.md/, "feedback template README link");
|
|
235
|
+
requireText("README.md", /support-lifecycle-map\.md/, "support lifecycle map README link");
|
|
215
236
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle README link");
|
|
216
237
|
requireText("README.md", /outcome-prioritization\.md/, "support prioritization README link");
|
|
217
238
|
requireText("README.md", /backlog-review\.md/, "support backlog review README link");
|
|
@@ -227,6 +248,7 @@ requireText("package.json", /npm run support:check/, "support checker in npm tes
|
|
|
227
248
|
checkTriagePlaybook();
|
|
228
249
|
checkResponseSnippets();
|
|
229
250
|
checkCloseoutChecklist();
|
|
251
|
+
checkSupportLifecycleMap();
|
|
230
252
|
checkSupportLifecycle();
|
|
231
253
|
checkOutcomePrioritization();
|
|
232
254
|
checkBacklogRecords();
|
|
@@ -643,6 +665,106 @@ function checkSupportLifecycle() {
|
|
|
643
665
|
}
|
|
644
666
|
}
|
|
645
667
|
|
|
668
|
+
function checkSupportLifecycleMap() {
|
|
669
|
+
const path = "examples/support/support-lifecycle-map.json";
|
|
670
|
+
const map = readJson(path);
|
|
671
|
+
if (!map) {
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
const expectedStageIds = ["report", "triage", "response", "closeout", "prioritization", "backlog-record", "backlog-review"];
|
|
676
|
+
const expectedArtifacts = [
|
|
677
|
+
"examples/reports/feedback-template.md",
|
|
678
|
+
"examples/support/triage-playbook.json",
|
|
679
|
+
"examples/support/response-snippets.json",
|
|
680
|
+
"examples/support/closeout-checklist.json",
|
|
681
|
+
"examples/support/outcome-prioritization.json",
|
|
682
|
+
"examples/support/backlog-records.json",
|
|
683
|
+
"examples/support/backlog-review.json"
|
|
684
|
+
];
|
|
685
|
+
const expectedOutcomes = [
|
|
686
|
+
{
|
|
687
|
+
outcome: "docs-example",
|
|
688
|
+
backlogRecord: "docs-clarification-backlog-record",
|
|
689
|
+
reviewDecision: "remains-docs-clarification"
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
outcome: "fixture-backlog",
|
|
693
|
+
backlogRecord: "fixture-backlog-record",
|
|
694
|
+
reviewDecision: "remains-fixture-backlog"
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
outcome: "rule-review-candidate",
|
|
698
|
+
backlogRecord: "rule-review-candidate-backlog-record",
|
|
699
|
+
reviewDecision: "remains-rule-review-candidate"
|
|
700
|
+
}
|
|
701
|
+
];
|
|
702
|
+
|
|
703
|
+
if (map.title !== "Support Lifecycle Map") {
|
|
704
|
+
failures.push(`${path}.title should be Support Lifecycle Map.`);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
if (!Array.isArray(map.flow) || map.flow.join("|") !== expectedStageIds.join("|")) {
|
|
708
|
+
failures.push(`${path}.flow should contain the compact support lifecycle order.`);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
if (!Array.isArray(map.stages) || map.stages.length !== expectedStageIds.length) {
|
|
712
|
+
failures.push(`${path}.stages should contain seven lifecycle stages.`);
|
|
713
|
+
} else {
|
|
714
|
+
for (const [index, stage] of map.stages.entries()) {
|
|
715
|
+
if (stage?.id !== expectedStageIds[index]) {
|
|
716
|
+
failures.push(`${path}.stages[${index}].id should be ${expectedStageIds[index]}.`);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
if (stage?.artifact !== expectedArtifacts[index]) {
|
|
720
|
+
failures.push(`${path}.stages[${index}].artifact should be ${expectedArtifacts[index]}.`);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
if (typeof stage?.question !== "string" || stage.question.length < 40) {
|
|
724
|
+
failures.push(`${path}.stages[${index}].question should be a useful maintainer scan question.`);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
if (!Array.isArray(map.outcomes) || map.outcomes.length !== expectedOutcomes.length) {
|
|
730
|
+
failures.push(`${path}.outcomes should contain three lifecycle outcome summaries.`);
|
|
731
|
+
} else {
|
|
732
|
+
for (const [index, outcome] of map.outcomes.entries()) {
|
|
733
|
+
const expectedOutcome = expectedOutcomes[index];
|
|
734
|
+
if (outcome?.outcome !== expectedOutcome.outcome) {
|
|
735
|
+
failures.push(`${path}.outcomes[${index}].outcome should be ${expectedOutcome.outcome}.`);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if (outcome?.backlogRecord !== expectedOutcome.backlogRecord) {
|
|
739
|
+
failures.push(`${path}.outcomes[${index}].backlogRecord should be ${expectedOutcome.backlogRecord}.`);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
if (outcome?.reviewDecision !== expectedOutcome.reviewDecision) {
|
|
743
|
+
failures.push(`${path}.outcomes[${index}].reviewDecision should be ${expectedOutcome.reviewDecision}.`);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
if (outcome?.fallbackReviewDecision !== "closed-no-action") {
|
|
747
|
+
failures.push(`${path}.outcomes[${index}].fallbackReviewDecision should be closed-no-action.`);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
if (typeof map.privacyGuardrail !== "string" || !/SECURITY\.md|secrets|private|customer data/i.test(map.privacyGuardrail)) {
|
|
753
|
+
failures.push(`${path}.privacyGuardrail should include public-safe support routing guidance.`);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
const requiredChecks = ["npm run support:check", "npm run production:check"];
|
|
757
|
+
if (!Array.isArray(map.requiredChecks)) {
|
|
758
|
+
failures.push(`${path}.requiredChecks should be an array.`);
|
|
759
|
+
} else {
|
|
760
|
+
for (const check of requiredChecks) {
|
|
761
|
+
if (!map.requiredChecks.includes(check)) {
|
|
762
|
+
failures.push(`${path}.requiredChecks should include ${check}.`);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
|
|
646
768
|
function checkOutcomePrioritization() {
|
|
647
769
|
const path = "examples/support/outcome-prioritization.json";
|
|
648
770
|
const priorities = readJson(path);
|