memento-mori-jester 0.1.99 → 0.1.100
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.100.md +45 -0
- package/examples/support/README.md +1 -1
- package/examples/support/support-lifecycle-filled-example.json +160 -0
- package/examples/support/support-lifecycle-filled-example.md +146 -0
- package/examples/support/support-lifecycle-map.md +1 -1
- package/examples/support/support-lifecycle-worksheet.md +1 -1
- package/examples/support/support-lifecycle.md +1 -1
- package/package.json +1 -1
- package/scripts/check-production-readiness.mjs +21 -0
- package/scripts/check-support-triage.mjs +126 -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.100
|
|
8
|
+
|
|
9
|
+
- Added a checked synthetic filled support lifecycle worksheet example showing one `docs-example` report through report, triage, response, closeout, prioritization, backlog record, and backlog review.
|
|
10
|
+
- Added `support-lifecycle-filled-example.json` plus `npm run support:check` and production-readiness coverage so the completed example stays public-safe, deterministic, and aligned with the blank worksheet.
|
|
11
|
+
- Updated README, maintainer triage docs, support examples, production-readiness docs, roadmap, and release notes for the filled worksheet example.
|
|
12
|
+
|
|
7
13
|
## 0.1.99
|
|
8
14
|
|
|
9
15
|
- Added a checked public-safe support lifecycle worksheet for reviewing one report across 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 map](examples/support/support-lifecycle-map.md), [support lifecycle worksheet](examples/support/support-lifecycle-worksheet.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.
|
|
79
|
+
Maintainers can use the checked [support lifecycle map](examples/support/support-lifecycle-map.md), [support lifecycle worksheet](examples/support/support-lifecycle-worksheet.md), synthetic [filled worksheet example](examples/support/support-lifecycle-filled-example.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
|
|
|
@@ -452,6 +452,7 @@ More setup examples:
|
|
|
452
452
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
453
453
|
- [Support Lifecycle Map](examples/support/support-lifecycle-map.md)
|
|
454
454
|
- [Support Lifecycle Worksheet](examples/support/support-lifecycle-worksheet.md)
|
|
455
|
+
- [Filled Support Lifecycle Worksheet Example](examples/support/support-lifecycle-filled-example.md)
|
|
455
456
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
456
457
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
457
458
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
@@ -482,6 +483,7 @@ Framework CI examples:
|
|
|
482
483
|
- [Report Gallery Feedback Template](examples/reports/feedback-template.md)
|
|
483
484
|
- [Support Lifecycle Map](examples/support/support-lifecycle-map.md)
|
|
484
485
|
- [Support Lifecycle Worksheet](examples/support/support-lifecycle-worksheet.md)
|
|
486
|
+
- [Filled Support Lifecycle Worksheet Example](examples/support/support-lifecycle-filled-example.md)
|
|
485
487
|
- [Support Lifecycle Overview](examples/support/support-lifecycle.md)
|
|
486
488
|
- [Support Outcome Prioritization](examples/support/outcome-prioritization.md)
|
|
487
489
|
- [Support Backlog Records](examples/support/backlog-records.md)
|
|
@@ -545,7 +547,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
|
|
|
545
547
|
Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
|
|
546
548
|
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.
|
|
547
549
|
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.
|
|
548
|
-
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 worksheet](examples/support/support-lifecycle-worksheet.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.
|
|
550
|
+
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 worksheet](examples/support/support-lifecycle-worksheet.md), [filled worksheet example](examples/support/support-lifecycle-filled-example.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.
|
|
549
551
|
Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
|
|
550
552
|
Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
|
|
551
553
|
Run `npm run site:check` after editing the repo-local landing page; it verifies the start command, demo links, social card, repo, release, and npm links.
|
package/ROADMAP.md
CHANGED
|
@@ -6,6 +6,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
6
6
|
|
|
7
7
|
## Recently Shipped
|
|
8
8
|
|
|
9
|
+
- Checked filled support lifecycle worksheet example in v0.1.100, showing a synthetic `docs-example` report through report, triage, response, closeout, prioritization, backlog record, and backlog review.
|
|
9
10
|
- Checked support lifecycle worksheet in v0.1.99, turning the compact map into an active-review checklist with stage checks, record fields, and stop conditions.
|
|
10
11
|
- 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.
|
|
11
12
|
- 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.
|
|
@@ -91,7 +92,7 @@ Memento Mori Jester is usable today as a CLI, MCP server, GitHub Action, and git
|
|
|
91
92
|
- Collect real-world reports and fold the strongest redacted cases into more framework tuning cookbook recipes.
|
|
92
93
|
- Add a small checked maintainer dashboard or report that summarizes open support backlog review states from public-safe JSON.
|
|
93
94
|
- Add a generated support lifecycle status summary if backlog review records grow beyond the compact map.
|
|
94
|
-
- Add
|
|
95
|
+
- Add synthetic filled worksheet examples for `fixture-backlog` and `rule-review-candidate` if maintainers need more public-safe training cases.
|
|
95
96
|
- Use support backlog record counts to choose the next docs, fixture, report-gallery, or rule-guidance batch.
|
|
96
97
|
- Use repeated prioritized support outcomes to choose the next redacted fixture, report-gallery update, or rule-guidance review.
|
|
97
98
|
- 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 map](../examples/support/support-lifecycle-map.md) for a quick scan of the path, then use the checked [support lifecycle worksheet](../examples/support/support-lifecycle-worksheet.md) to record each stage during active review. Use 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.
|
|
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, then use the checked [support lifecycle worksheet](../examples/support/support-lifecycle-worksheet.md) to record each stage during active review. Use the synthetic [filled lifecycle worksheet example](../examples/support/support-lifecycle-filled-example.md) when you need to compare a real public-safe report against one completed `docs-example` path. Use 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 compact checked support lifecycle map, an active-review worksheet, and 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.
|
|
50
|
+
- `examples/support` provides a compact checked support lifecycle map, an active-review worksheet, a synthetic filled worksheet example, and 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 scan the support lifecycle map, use the support lifecycle worksheet during active review, 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.
|
|
63
|
+
- `examples/support` shows maintainers how to scan the support lifecycle map, use the support lifecycle worksheet during active review, compare against a synthetic filled worksheet example, 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 map, support lifecycle worksheet, 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, support lifecycle worksheet, filled worksheet example, 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.100
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
This release adds a checked synthetic filled support lifecycle worksheet example so maintainers can see one public-safe `docs-example` report move through the whole support chain.
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Added `examples/support/support-lifecycle-filled-example.md` with a completed synthetic support case for:
|
|
10
|
+
`report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review`.
|
|
11
|
+
- Added `examples/support/support-lifecycle-filled-example.json` as the deterministic source for the filled example fields, stage checks, privacy review notes, required checks, and synthetic guardrail.
|
|
12
|
+
- Extended `npm run support:check` and `npm run production:check` so the filled example stays aligned with the support lifecycle worksheet, map, and 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-filled-example.md`
|
|
20
|
+
- `examples/support/support-lifecycle-filled-example.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.100 filled support lifecycle worksheet"
|
|
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 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 checked [support lifecycle worksheet](support-lifecycle-worksheet.md) during an active review so every stage has concrete checks and record fields. 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), [support-lifecycle-worksheet.json](support-lifecycle-worksheet.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.
|
|
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 checked [support lifecycle worksheet](support-lifecycle-worksheet.md) during an active review so every stage has concrete checks and record fields, and compare against the synthetic [filled worksheet example](support-lifecycle-filled-example.md) when you need to see one completed `docs-example` path. 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), [support-lifecycle-worksheet.json](support-lifecycle-worksheet.json), [support-lifecycle-filled-example.json](support-lifecycle-filled-example.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,160 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Filled Support Lifecycle Worksheet Example",
|
|
3
|
+
"sourceWorksheet": "examples/support/support-lifecycle-worksheet.json",
|
|
4
|
+
"synthetic": true,
|
|
5
|
+
"caseId": "synthetic-report-gallery-docs-example",
|
|
6
|
+
"outcome": "docs-example",
|
|
7
|
+
"flow": [
|
|
8
|
+
"report",
|
|
9
|
+
"triage",
|
|
10
|
+
"response",
|
|
11
|
+
"closeout",
|
|
12
|
+
"prioritization",
|
|
13
|
+
"backlog-record",
|
|
14
|
+
"backlog-review"
|
|
15
|
+
],
|
|
16
|
+
"stages": [
|
|
17
|
+
{
|
|
18
|
+
"id": "report",
|
|
19
|
+
"artifact": "examples/reports/feedback-template.md",
|
|
20
|
+
"fields": {
|
|
21
|
+
"sourceIssue": "<public-issue-url>",
|
|
22
|
+
"packageVersion": "0.1.100",
|
|
23
|
+
"sanitizedSummary": "A reporter says the checked destructive-command-summary gallery item is useful but unclear about whether the block is expected.",
|
|
24
|
+
"safeToDiscussPublicly": true
|
|
25
|
+
},
|
|
26
|
+
"checks": [
|
|
27
|
+
"Confirmed the report references the checked destructive-command-summary gallery item instead of a private repository command.",
|
|
28
|
+
"Confirmed the report includes only a sanitized command summary and redacted doctor --json fragments.",
|
|
29
|
+
"Confirmed there are no secrets, private code, private paths, customer data, full logs, unredacted SARIF, or exploitable details."
|
|
30
|
+
],
|
|
31
|
+
"privacyReview": [
|
|
32
|
+
"The issue link is a placeholder rather than a real user report.",
|
|
33
|
+
"The command is a public demo command already used in docs.",
|
|
34
|
+
"Security-sensitive details would be redirected to SECURITY.md."
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "triage",
|
|
39
|
+
"artifact": "examples/support/triage-playbook.json",
|
|
40
|
+
"fields": {
|
|
41
|
+
"selectedOutcome": "docs-example",
|
|
42
|
+
"ruleIdOrReportId": "destructive-command-summary",
|
|
43
|
+
"whyOutcomeFits": "The block is expected behavior for destructive git history changes, but the report-gallery wording can be clearer."
|
|
44
|
+
},
|
|
45
|
+
"checks": [
|
|
46
|
+
"Reproduced the checked report-gallery summary with the published command shape.",
|
|
47
|
+
"Compared the output to the existing report-gallery expected fragments.",
|
|
48
|
+
"Chose docs-example because no rule behavior, fixture boundary, or scoring change is needed."
|
|
49
|
+
],
|
|
50
|
+
"privacyReview": [
|
|
51
|
+
"The reproduction uses only the public demo command.",
|
|
52
|
+
"The triage note does not include private repository output.",
|
|
53
|
+
"No secret material or exploit detail is needed to classify the report."
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "response",
|
|
58
|
+
"artifact": "examples/support/response-snippets.json",
|
|
59
|
+
"fields": {
|
|
60
|
+
"snippetId": "docs-example-response",
|
|
61
|
+
"nextCommand": "npx -y memento-mori-jester@latest summary --kind command \"git reset --hard\"",
|
|
62
|
+
"publicSafeFollowUpLink": "<docs-follow-up-url>"
|
|
63
|
+
},
|
|
64
|
+
"checks": [
|
|
65
|
+
"Used the checked docs-example response snippet rather than writing a one-off reply.",
|
|
66
|
+
"Asked only for redacted diagnostics if local output still differs from the gallery.",
|
|
67
|
+
"Gave the reporter one command to compare with the checked report."
|
|
68
|
+
],
|
|
69
|
+
"privacyReview": [
|
|
70
|
+
"The response asks for redacted diagnostics only.",
|
|
71
|
+
"The follow-up link is a placeholder until a public docs issue or pull request exists.",
|
|
72
|
+
"Any credential exposure, private code, or command execution concern belongs in SECURITY.md."
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "closeout",
|
|
77
|
+
"artifact": "examples/support/closeout-checklist.json",
|
|
78
|
+
"fields": {
|
|
79
|
+
"closeoutId": "docs-clarification-closeout",
|
|
80
|
+
"decisionStatus": "shipped-or-queued",
|
|
81
|
+
"followUpLinkPlaceholder": "<docs-pr-url-or-issue>"
|
|
82
|
+
},
|
|
83
|
+
"checks": [
|
|
84
|
+
"Recorded that the immediate support decision is a docs clarification.",
|
|
85
|
+
"Linked only a placeholder public follow-up artifact.",
|
|
86
|
+
"Kept rule behavior, matching, scoring, and CLI policy unchanged."
|
|
87
|
+
],
|
|
88
|
+
"privacyReview": [
|
|
89
|
+
"The closeout can be explained using only public docs and report-gallery context.",
|
|
90
|
+
"No private code or user-specific terminal output is required.",
|
|
91
|
+
"Security-sensitive follow-up is explicitly out of scope for the public closeout."
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "prioritization",
|
|
96
|
+
"artifact": "examples/support/outcome-prioritization.json",
|
|
97
|
+
"fields": {
|
|
98
|
+
"priority": "low",
|
|
99
|
+
"minimumEvidence": "Nearest checked report, observed output, and no rule behavior change.",
|
|
100
|
+
"notEnoughEvidenceGuardrail": "Do not open fixture or rule-review work from a docs-only confusion report."
|
|
101
|
+
},
|
|
102
|
+
"checks": [
|
|
103
|
+
"Used the outcome prioritization guide for the docs-example path.",
|
|
104
|
+
"Confirmed the minimum evidence threshold is met by the existing checked gallery item.",
|
|
105
|
+
"Confirmed there is enough public-safe evidence to queue a docs clarification."
|
|
106
|
+
],
|
|
107
|
+
"privacyReview": [
|
|
108
|
+
"The priority does not depend on private reports.",
|
|
109
|
+
"The evidence is already public and synthetic.",
|
|
110
|
+
"No secrets, private paths, or full logs are needed."
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "backlog-record",
|
|
115
|
+
"artifact": "examples/support/backlog-records.json",
|
|
116
|
+
"fields": {
|
|
117
|
+
"backlogRecordId": "docs-clarification-backlog-record",
|
|
118
|
+
"backlogType": "docs clarification",
|
|
119
|
+
"nextAction": "Update the report-gallery wording so the destructive command summary clearly says the block is expected and shows the next comparison command.",
|
|
120
|
+
"requiredChecks": ["npm run reports:check", "npm run support:check"]
|
|
121
|
+
},
|
|
122
|
+
"checks": [
|
|
123
|
+
"Created a public-safe backlog record from the closeout and prioritization decision.",
|
|
124
|
+
"Included a public title, public summary, next action, and required checks.",
|
|
125
|
+
"Verified the backlog item does not ask for rule behavior changes."
|
|
126
|
+
],
|
|
127
|
+
"privacyReview": [
|
|
128
|
+
"The backlog item references only checked docs and placeholder links.",
|
|
129
|
+
"The public summary is redacted and synthetic.",
|
|
130
|
+
"Any real private report detail would be removed before publishing."
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "backlog-review",
|
|
135
|
+
"artifact": "examples/support/backlog-review.json",
|
|
136
|
+
"fields": {
|
|
137
|
+
"reviewDecision": "remains-docs-clarification",
|
|
138
|
+
"reviewCadence": "next monthly support review",
|
|
139
|
+
"nextAction": "Keep the docs clarification open until the gallery wording or docs example lands.",
|
|
140
|
+
"checksRun": ["npm run reports:check", "npm run support:check"]
|
|
141
|
+
},
|
|
142
|
+
"checks": [
|
|
143
|
+
"Revisited whether the item still belongs in the docs clarification lane.",
|
|
144
|
+
"Confirmed the report has not become a fixture backlog or rule-review candidate.",
|
|
145
|
+
"Confirmed the current public checks still pass before keeping it active."
|
|
146
|
+
],
|
|
147
|
+
"privacyReview": [
|
|
148
|
+
"The review does not include private user names, repositories, paths, or logs.",
|
|
149
|
+
"The review can close as closed-no-action later if evidence becomes stale or duplicated.",
|
|
150
|
+
"Security-sensitive evidence would be removed from the public lifecycle and routed through SECURITY.md."
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"requiredChecks": [
|
|
155
|
+
"npm run reports:check",
|
|
156
|
+
"npm run support:check",
|
|
157
|
+
"npm run production:check"
|
|
158
|
+
],
|
|
159
|
+
"privacyGuardrail": "This filled worksheet is synthetic. Do not add secrets, private code, private paths, customer data, full logs, unredacted SARIF, package publishing credentials, MCP data exposure, or exploitable security details; route those through SECURITY.md."
|
|
160
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Filled Support Lifecycle Worksheet Example
|
|
2
|
+
|
|
3
|
+
This is a synthetic, public-safe example of one completed support lifecycle worksheet. It demonstrates how a report-gallery surprise can move through report, triage, response, closeout, prioritization, backlog record, and backlog review without exposing user data, private repository paths, secrets, or full logs.
|
|
4
|
+
|
|
5
|
+
The checked source is [support-lifecycle-filled-example.json](support-lifecycle-filled-example.json). Use it with the blank [support lifecycle worksheet](support-lifecycle-worksheet.md), compact [support lifecycle map](support-lifecycle-map.md), and full [support lifecycle overview](support-lifecycle.md).
|
|
6
|
+
|
|
7
|
+
Case ID: `synthetic-report-gallery-docs-example`
|
|
8
|
+
|
|
9
|
+
Selected outcome: `docs-example`
|
|
10
|
+
|
|
11
|
+
## Report
|
|
12
|
+
|
|
13
|
+
- Source issue: `<public-issue-url>`
|
|
14
|
+
- Package version: `0.1.100`
|
|
15
|
+
- Sanitized summary: A reporter says the checked report-gallery example for `summary --kind command "git reset --hard"` is useful, but they cannot tell whether the block is expected or whether their local setup is misconfigured.
|
|
16
|
+
- Safe to discuss publicly: `true`
|
|
17
|
+
|
|
18
|
+
Checks completed:
|
|
19
|
+
|
|
20
|
+
- Confirmed the report references the checked `destructive-command-summary` gallery item instead of a private repository command.
|
|
21
|
+
- Confirmed the report includes only a sanitized command summary and redacted `doctor --json` fragments.
|
|
22
|
+
- Confirmed there are no secrets, private code, private paths, customer data, full logs, unredacted SARIF, or exploitable details.
|
|
23
|
+
|
|
24
|
+
Privacy review:
|
|
25
|
+
|
|
26
|
+
- The issue link is a placeholder, not a real user report.
|
|
27
|
+
- The command is a public demo command already used in docs.
|
|
28
|
+
- Security-sensitive details would be redirected to [SECURITY.md](../../SECURITY.md).
|
|
29
|
+
|
|
30
|
+
## Triage
|
|
31
|
+
|
|
32
|
+
- Selected outcome: `docs-example`
|
|
33
|
+
- Rule id or report id: `destructive-command-summary`
|
|
34
|
+
- Why the outcome fits: The block is expected behavior for destructive git history changes, but the report-gallery wording can be clearer about why the example is intentionally blocked.
|
|
35
|
+
|
|
36
|
+
Checks completed:
|
|
37
|
+
|
|
38
|
+
- Reproduced the checked report-gallery summary with the published command shape.
|
|
39
|
+
- Compared the output to the existing report-gallery expected fragments.
|
|
40
|
+
- Chose `docs-example` because no rule behavior, fixture boundary, or scoring change is needed.
|
|
41
|
+
|
|
42
|
+
Privacy review:
|
|
43
|
+
|
|
44
|
+
- The reproduction uses only the public demo command.
|
|
45
|
+
- The triage note does not include private repository output.
|
|
46
|
+
- No secret material or exploit detail is needed to classify the report.
|
|
47
|
+
|
|
48
|
+
## Response
|
|
49
|
+
|
|
50
|
+
- Snippet id: `docs-example-response`
|
|
51
|
+
- Next command: `npx -y memento-mori-jester@latest summary --kind command "git reset --hard"`
|
|
52
|
+
- Public-safe follow-up link: `<docs-follow-up-url>`
|
|
53
|
+
|
|
54
|
+
Checks completed:
|
|
55
|
+
|
|
56
|
+
- Used the checked docs-example response snippet rather than writing a one-off reply.
|
|
57
|
+
- Asked only for redacted diagnostics if local output still differs from the gallery.
|
|
58
|
+
- Gave the reporter one command to compare with the checked report.
|
|
59
|
+
|
|
60
|
+
Privacy review:
|
|
61
|
+
|
|
62
|
+
- The response asks for redacted diagnostics only.
|
|
63
|
+
- The follow-up link is a placeholder until a public docs issue or pull request exists.
|
|
64
|
+
- Any credential exposure, private code, or command execution concern belongs in [SECURITY.md](../../SECURITY.md).
|
|
65
|
+
|
|
66
|
+
## Closeout
|
|
67
|
+
|
|
68
|
+
- Closeout id: `docs-clarification-closeout`
|
|
69
|
+
- Decision status: `shipped-or-queued`
|
|
70
|
+
- Follow-up link placeholder: `<docs-pr-url-or-issue>`
|
|
71
|
+
|
|
72
|
+
Checks completed:
|
|
73
|
+
|
|
74
|
+
- Recorded that the immediate support decision is a docs clarification.
|
|
75
|
+
- Linked only a placeholder public follow-up artifact.
|
|
76
|
+
- Kept rule behavior, matching, scoring, and CLI policy unchanged.
|
|
77
|
+
|
|
78
|
+
Privacy review:
|
|
79
|
+
|
|
80
|
+
- The closeout can be explained using only public docs and report-gallery context.
|
|
81
|
+
- No private code or user-specific terminal output is required.
|
|
82
|
+
- Security-sensitive follow-up is explicitly out of scope for the public closeout.
|
|
83
|
+
|
|
84
|
+
## Prioritization
|
|
85
|
+
|
|
86
|
+
- Priority: `low`
|
|
87
|
+
- Minimum evidence: Nearest checked report, observed output, and no rule behavior change.
|
|
88
|
+
- Not enough evidence guardrail: Do not open fixture or rule-review work from a docs-only confusion report.
|
|
89
|
+
|
|
90
|
+
Checks completed:
|
|
91
|
+
|
|
92
|
+
- Used the outcome prioritization guide for the `docs-example` path.
|
|
93
|
+
- Confirmed the minimum evidence threshold is met by the existing checked gallery item.
|
|
94
|
+
- Confirmed there is enough public-safe evidence to queue a docs clarification.
|
|
95
|
+
|
|
96
|
+
Privacy review:
|
|
97
|
+
|
|
98
|
+
- The priority does not depend on private reports.
|
|
99
|
+
- The evidence is already public and synthetic.
|
|
100
|
+
- No secrets, private paths, or full logs are needed.
|
|
101
|
+
|
|
102
|
+
## Backlog Record
|
|
103
|
+
|
|
104
|
+
- Backlog record id: `docs-clarification-backlog-record`
|
|
105
|
+
- Backlog type: `docs clarification`
|
|
106
|
+
- Next action: Update the report-gallery wording so the destructive command summary clearly says the block is expected and shows the next comparison command.
|
|
107
|
+
- Required checks: `npm run reports:check`, `npm run support:check`
|
|
108
|
+
|
|
109
|
+
Checks completed:
|
|
110
|
+
|
|
111
|
+
- Created a public-safe backlog record from the closeout and prioritization decision.
|
|
112
|
+
- Included a public title, public summary, next action, and required checks.
|
|
113
|
+
- Verified the backlog item does not ask for rule behavior changes.
|
|
114
|
+
|
|
115
|
+
Privacy review:
|
|
116
|
+
|
|
117
|
+
- The backlog item references only checked docs and placeholder links.
|
|
118
|
+
- The public summary is redacted and synthetic.
|
|
119
|
+
- Any real private report detail would be removed before publishing.
|
|
120
|
+
|
|
121
|
+
## Backlog Review
|
|
122
|
+
|
|
123
|
+
- Review decision: `remains-docs-clarification`
|
|
124
|
+
- Review cadence: next monthly support review
|
|
125
|
+
- Next action: Keep the docs clarification open until the gallery wording or docs example lands.
|
|
126
|
+
- Checks run: `npm run reports:check`, `npm run support:check`
|
|
127
|
+
|
|
128
|
+
Checks completed:
|
|
129
|
+
|
|
130
|
+
- Revisited whether the item still belongs in the docs clarification lane.
|
|
131
|
+
- Confirmed the report has not become a fixture backlog or rule-review candidate.
|
|
132
|
+
- Confirmed the current public checks still pass before keeping it active.
|
|
133
|
+
|
|
134
|
+
Privacy review:
|
|
135
|
+
|
|
136
|
+
- The review does not include private user names, repositories, paths, or logs.
|
|
137
|
+
- The review can close as `closed-no-action` later if evidence becomes stale or duplicated.
|
|
138
|
+
- Security-sensitive evidence would be removed from the public lifecycle and routed through [SECURITY.md](../../SECURITY.md).
|
|
139
|
+
|
|
140
|
+
## Required Checks
|
|
141
|
+
|
|
142
|
+
```powershell
|
|
143
|
+
npm run reports:check
|
|
144
|
+
npm run support:check
|
|
145
|
+
npm run production:check
|
|
146
|
+
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This is the compact public-safe map for maintainers who need the whole support chain without reading every checklist first.
|
|
4
4
|
|
|
5
|
-
The checked source is [support-lifecycle-map.json](support-lifecycle-map.json). Use the [support lifecycle worksheet](support-lifecycle-worksheet.md) during an active review, and use the full [support lifecycle overview](support-lifecycle.md) when you need the outcome table and per-stage artifact references.
|
|
5
|
+
The checked source is [support-lifecycle-map.json](support-lifecycle-map.json). Use the [support lifecycle worksheet](support-lifecycle-worksheet.md) during an active review, compare against the synthetic [filled worksheet example](support-lifecycle-filled-example.md), and use the full [support lifecycle overview](support-lifecycle.md) when you need the outcome table and per-stage artifact references.
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
8
|
report
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use this public-safe worksheet while reviewing one support report. It turns the [support lifecycle map](support-lifecycle-map.md) into a stage-by-stage checklist.
|
|
4
4
|
|
|
5
|
-
The checked source is [support-lifecycle-worksheet.json](support-lifecycle-worksheet.json). Use [support-lifecycle.md](support-lifecycle.md) for the outcome table after the worksheet identifies the right path.
|
|
5
|
+
The checked source is [support-lifecycle-worksheet.json](support-lifecycle-worksheet.json). Use [support-lifecycle-filled-example.md](support-lifecycle-filled-example.md) for a synthetic completed example, and use [support-lifecycle.md](support-lifecycle.md) for the outcome table after the worksheet identifies the right path.
|
|
6
6
|
|
|
7
7
|
## Report
|
|
8
8
|
|
|
@@ -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 compact map is [support-lifecycle-map.md](support-lifecycle-map.md), backed by [support-lifecycle-map.json](support-lifecycle-map.json). The active review worksheet is [support-lifecycle-worksheet.md](support-lifecycle-worksheet.md), backed by [support-lifecycle-worksheet.json](support-lifecycle-worksheet.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).
|
|
9
|
+
The compact map is [support-lifecycle-map.md](support-lifecycle-map.md), backed by [support-lifecycle-map.json](support-lifecycle-map.json). The active review worksheet is [support-lifecycle-worksheet.md](support-lifecycle-worksheet.md), backed by [support-lifecycle-worksheet.json](support-lifecycle-worksheet.json), with a synthetic completed example in [support-lifecycle-filled-example.md](support-lifecycle-filled-example.md) and [support-lifecycle-filled-example.json](support-lifecycle-filled-example.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.100",
|
|
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": {
|
|
@@ -108,6 +108,8 @@ for (const path of [
|
|
|
108
108
|
"examples/support/support-lifecycle-map.json",
|
|
109
109
|
"examples/support/support-lifecycle-worksheet.md",
|
|
110
110
|
"examples/support/support-lifecycle-worksheet.json",
|
|
111
|
+
"examples/support/support-lifecycle-filled-example.md",
|
|
112
|
+
"examples/support/support-lifecycle-filled-example.json",
|
|
111
113
|
"examples/support/support-lifecycle.md",
|
|
112
114
|
"examples/support/support-lifecycle.json",
|
|
113
115
|
"examples/support/triage-playbook.json",
|
|
@@ -144,6 +146,7 @@ requireText("README.md", /response-snippets\.md/, "support response snippets lin
|
|
|
144
146
|
requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
145
147
|
requireText("README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
146
148
|
requireText("README.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
149
|
+
requireText("README.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
147
150
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
148
151
|
requireText("README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
149
152
|
requireText("README.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -174,6 +177,7 @@ requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support clos
|
|
|
174
177
|
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle overview/i, "support lifecycle overview readiness");
|
|
175
178
|
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle map/i, "support lifecycle map readiness");
|
|
176
179
|
requireText("docs/PRODUCTION_READINESS.md", /support lifecycle worksheet/i, "support lifecycle worksheet readiness");
|
|
180
|
+
requireText("docs/PRODUCTION_READINESS.md", /filled worksheet example/i, "filled lifecycle worksheet example readiness");
|
|
177
181
|
requireText("docs/PRODUCTION_READINESS.md", /outcome prioritization guide/i, "support outcome prioritization readiness");
|
|
178
182
|
requireText("docs/PRODUCTION_READINESS.md", /backlog review/i, "support backlog review readiness");
|
|
179
183
|
requireText("docs/PRODUCTION_READINESS.md", /backlog records/i, "support backlog records readiness");
|
|
@@ -205,6 +209,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support respo
|
|
|
205
209
|
requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
206
210
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
207
211
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
212
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
208
213
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
209
214
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
210
215
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -247,6 +252,8 @@ requireText("examples/support/README.md", /support-lifecycle-map\.md/, "support
|
|
|
247
252
|
requireText("examples/support/README.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
248
253
|
requireText("examples/support/README.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
249
254
|
requireText("examples/support/README.md", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet JSON link");
|
|
255
|
+
requireText("examples/support/README.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
256
|
+
requireText("examples/support/README.md", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet example JSON link");
|
|
250
257
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
251
258
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
252
259
|
requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
|
|
@@ -273,6 +280,7 @@ requireText("examples/support/closeout-checklist.json", /rule-review-closeout/,
|
|
|
273
280
|
requireText("examples/support/support-lifecycle-map.md", /Support Lifecycle Map/, "support lifecycle map heading");
|
|
274
281
|
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
275
282
|
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
283
|
+
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
276
284
|
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");
|
|
277
285
|
requireText("examples/support/support-lifecycle-map.md", /docs-clarification-backlog-record/, "support lifecycle map docs backlog record");
|
|
278
286
|
requireText("examples/support/support-lifecycle-map.md", /fixture-backlog-record/, "support lifecycle map fixture backlog record");
|
|
@@ -284,6 +292,7 @@ requireText("examples/support/support-lifecycle-map.json", /backlog-record/, "su
|
|
|
284
292
|
requireText("examples/support/support-lifecycle-map.json", /backlog-review/, "support lifecycle map backlog-review stage");
|
|
285
293
|
requireText("examples/support/support-lifecycle-worksheet.md", /Support Lifecycle Worksheet/, "support lifecycle worksheet heading");
|
|
286
294
|
requireText("examples/support/support-lifecycle-worksheet.md", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet JSON link");
|
|
295
|
+
requireText("examples/support/support-lifecycle-worksheet.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
287
296
|
requireText("examples/support/support-lifecycle-worksheet.md", /support lifecycle map/, "support lifecycle worksheet map link");
|
|
288
297
|
requireText("examples/support/support-lifecycle-worksheet.md", /## Report/, "support lifecycle worksheet report stage");
|
|
289
298
|
requireText("examples/support/support-lifecycle-worksheet.md", /## Backlog Review/, "support lifecycle worksheet backlog review stage");
|
|
@@ -292,9 +301,20 @@ requireText("examples/support/support-lifecycle-worksheet.md", /SECURITY\.md/, "
|
|
|
292
301
|
requireText("examples/support/support-lifecycle-worksheet.json", /Support Lifecycle Worksheet/, "support lifecycle worksheet JSON title");
|
|
293
302
|
requireText("examples/support/support-lifecycle-worksheet.json", /support-lifecycle-map\.json/, "support lifecycle worksheet source map");
|
|
294
303
|
requireText("examples/support/support-lifecycle-worksheet.json", /closed-no-action/, "support lifecycle worksheet closed no-action outcome");
|
|
304
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /Filled Support Lifecycle Worksheet Example/, "filled lifecycle worksheet example heading");
|
|
305
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet example JSON link");
|
|
306
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /synthetic-report-gallery-docs-example/, "filled lifecycle worksheet example synthetic case");
|
|
307
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /docs-clarification-backlog-record/, "filled lifecycle worksheet docs backlog record");
|
|
308
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /remains-docs-clarification/, "filled lifecycle worksheet docs review decision");
|
|
309
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /SECURITY\.md/, "filled lifecycle worksheet security redirect");
|
|
310
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /Filled Support Lifecycle Worksheet Example/, "filled lifecycle worksheet example JSON title");
|
|
311
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /support-lifecycle-worksheet\.json/, "filled lifecycle worksheet source worksheet");
|
|
312
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /synthetic-report-gallery-docs-example/, "filled lifecycle worksheet synthetic case");
|
|
313
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /npm run production:check/, "filled lifecycle worksheet production check");
|
|
295
314
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
296
315
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
297
316
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
317
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
298
318
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
299
319
|
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
300
320
|
requireText("examples/support/support-lifecycle.md", /docs-example/, "support lifecycle docs outcome");
|
|
@@ -376,6 +396,7 @@ requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "sup
|
|
|
376
396
|
requireText("scripts/check-support-triage.mjs", /support-lifecycle\.json/, "support lifecycle overview guard");
|
|
377
397
|
requireText("scripts/check-support-triage.mjs", /support-lifecycle-map\.json/, "support lifecycle map guard");
|
|
378
398
|
requireText("scripts/check-support-triage.mjs", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet guard");
|
|
399
|
+
requireText("scripts/check-support-triage.mjs", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet example guard");
|
|
379
400
|
requireText("scripts/check-support-triage.mjs", /outcome-prioritization\.json/, "support outcome prioritization guard");
|
|
380
401
|
requireText("scripts/check-support-triage.mjs", /backlog-records\.json/, "support backlog records guard");
|
|
381
402
|
requireText("scripts/check-support-triage.mjs", /backlog-review\.json/, "support backlog review guard");
|
|
@@ -40,6 +40,8 @@ const supportFiles = [
|
|
|
40
40
|
"examples/support/support-lifecycle-map.json",
|
|
41
41
|
"examples/support/support-lifecycle-worksheet.md",
|
|
42
42
|
"examples/support/support-lifecycle-worksheet.json",
|
|
43
|
+
"examples/support/support-lifecycle-filled-example.md",
|
|
44
|
+
"examples/support/support-lifecycle-filled-example.json",
|
|
43
45
|
"examples/support/support-lifecycle.md",
|
|
44
46
|
"examples/support/support-lifecycle.json",
|
|
45
47
|
"examples/support/triage-playbook.json",
|
|
@@ -96,9 +98,11 @@ requireText("examples/support/README.md", /backlog-review\.md/, "support backlog
|
|
|
96
98
|
requireText("examples/support/README.md", /backlog-records\.md/, "support backlog records link");
|
|
97
99
|
requireText("examples/support/README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
98
100
|
requireText("examples/support/README.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
101
|
+
requireText("examples/support/README.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
99
102
|
requireText("examples/support/README.md", /support-lifecycle\.md/, "support lifecycle overview link");
|
|
100
103
|
requireText("examples/support/README.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
101
104
|
requireText("examples/support/README.md", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet JSON link");
|
|
105
|
+
requireText("examples/support/README.md", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet example JSON link");
|
|
102
106
|
requireText("examples/support/README.md", /outcome-prioritization\.md/, "support outcome prioritization link");
|
|
103
107
|
requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
|
|
104
108
|
requireText("examples/support/README.md", /triage-playbook\.json/, "maintainer playbook JSON link");
|
|
@@ -129,6 +133,7 @@ requireText("examples/support/closeout-checklist.json", /rule-review-closeout/,
|
|
|
129
133
|
requireText("examples/support/support-lifecycle-map.md", /Support Lifecycle Map/, "support lifecycle map heading");
|
|
130
134
|
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-map\.json/, "support lifecycle map JSON link");
|
|
131
135
|
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
136
|
+
requireText("examples/support/support-lifecycle-map.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
132
137
|
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");
|
|
133
138
|
requireText("examples/support/support-lifecycle-map.md", /Maintainer question/, "support lifecycle map scan questions");
|
|
134
139
|
requireText("examples/support/support-lifecycle-map.md", /docs-clarification-backlog-record/, "docs backlog map record");
|
|
@@ -143,6 +148,7 @@ requireText("examples/support/support-lifecycle-map.json", /backlog-review/, "su
|
|
|
143
148
|
requireText("examples/support/support-lifecycle-map.json", /closed-no-action/, "support lifecycle map closed no-action fallback");
|
|
144
149
|
requireText("examples/support/support-lifecycle-worksheet.md", /Support Lifecycle Worksheet/, "support lifecycle worksheet heading");
|
|
145
150
|
requireText("examples/support/support-lifecycle-worksheet.md", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet JSON link");
|
|
151
|
+
requireText("examples/support/support-lifecycle-worksheet.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
146
152
|
requireText("examples/support/support-lifecycle-worksheet.md", /support lifecycle map/, "support lifecycle worksheet map link");
|
|
147
153
|
requireText("examples/support/support-lifecycle-worksheet.md", /## Report/, "worksheet report stage");
|
|
148
154
|
requireText("examples/support/support-lifecycle-worksheet.md", /## Triage/, "worksheet triage stage");
|
|
@@ -159,10 +165,32 @@ requireText("examples/support/support-lifecycle-worksheet.json", /Support Lifecy
|
|
|
159
165
|
requireText("examples/support/support-lifecycle-worksheet.json", /support-lifecycle-map\.json/, "worksheet source map");
|
|
160
166
|
requireText("examples/support/support-lifecycle-worksheet.json", /docs-example/, "worksheet docs outcome");
|
|
161
167
|
requireText("examples/support/support-lifecycle-worksheet.json", /closed-no-action/, "worksheet closed no-action outcome");
|
|
168
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /Filled Support Lifecycle Worksheet Example/, "filled lifecycle worksheet heading");
|
|
169
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet JSON link");
|
|
170
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /support-lifecycle-worksheet\.md/, "source worksheet link");
|
|
171
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /synthetic-report-gallery-docs-example/, "synthetic filled worksheet case id");
|
|
172
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Report/, "filled worksheet report stage");
|
|
173
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Triage/, "filled worksheet triage stage");
|
|
174
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Response/, "filled worksheet response stage");
|
|
175
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Closeout/, "filled worksheet closeout stage");
|
|
176
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Prioritization/, "filled worksheet prioritization stage");
|
|
177
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Backlog Record/, "filled worksheet backlog record stage");
|
|
178
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /## Backlog Review/, "filled worksheet backlog review stage");
|
|
179
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /docs-clarification-backlog-record/, "filled worksheet docs backlog record");
|
|
180
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /remains-docs-clarification/, "filled worksheet docs review decision");
|
|
181
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /npm run support:check/, "filled worksheet support check");
|
|
182
|
+
requireText("examples/support/support-lifecycle-filled-example.md", /SECURITY\.md/, "filled worksheet security redirect");
|
|
183
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /Filled Support Lifecycle Worksheet Example/, "filled lifecycle worksheet JSON title");
|
|
184
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /support-lifecycle-worksheet\.json/, "filled worksheet source worksheet");
|
|
185
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /synthetic-report-gallery-docs-example/, "filled worksheet synthetic case id");
|
|
186
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /docs-example/, "filled worksheet docs outcome");
|
|
187
|
+
requireText("examples/support/support-lifecycle-filled-example.json", /remains-docs-clarification/, "filled worksheet review decision");
|
|
162
188
|
requireText("examples/support/support-lifecycle.md", /Support Lifecycle Overview/, "support lifecycle heading");
|
|
163
189
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle-map\.md/, "support lifecycle map link");
|
|
164
190
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet link");
|
|
165
191
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle-worksheet\.json/, "support lifecycle worksheet JSON link");
|
|
192
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example link");
|
|
193
|
+
requireText("examples/support/support-lifecycle.md", /support-lifecycle-filled-example\.json/, "filled lifecycle worksheet example JSON link");
|
|
166
194
|
requireText("examples/support/support-lifecycle.md", /support-lifecycle\.json/, "support lifecycle JSON link");
|
|
167
195
|
requireText("examples/support/support-lifecycle.md", /report -> triage -> response -> closeout -> prioritization -> backlog-record -> backlog-review/, "support lifecycle flow");
|
|
168
196
|
requireText("examples/support/support-lifecycle.md", /report gallery feedback template/, "report feedback lifecycle link");
|
|
@@ -246,6 +274,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report
|
|
|
246
274
|
requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "maintainer playbook triage link");
|
|
247
275
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-map\.md/, "support lifecycle map triage link");
|
|
248
276
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet triage link");
|
|
277
|
+
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example triage link");
|
|
249
278
|
requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle\.md/, "support lifecycle triage link");
|
|
250
279
|
requireText("docs/MAINTAINER_TRIAGE.md", /outcome-prioritization\.md/, "support prioritization triage link");
|
|
251
280
|
requireText("docs/MAINTAINER_TRIAGE.md", /backlog-review\.md/, "support backlog review triage link");
|
|
@@ -260,6 +289,7 @@ requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support checker re
|
|
|
260
289
|
requireText("README.md", /feedback-template\.md/, "feedback template README link");
|
|
261
290
|
requireText("README.md", /support-lifecycle-map\.md/, "support lifecycle map README link");
|
|
262
291
|
requireText("README.md", /support-lifecycle-worksheet\.md/, "support lifecycle worksheet README link");
|
|
292
|
+
requireText("README.md", /support-lifecycle-filled-example\.md/, "filled lifecycle worksheet example README link");
|
|
263
293
|
requireText("README.md", /support-lifecycle\.md/, "support lifecycle README link");
|
|
264
294
|
requireText("README.md", /outcome-prioritization\.md/, "support prioritization README link");
|
|
265
295
|
requireText("README.md", /backlog-review\.md/, "support backlog review README link");
|
|
@@ -276,6 +306,7 @@ checkTriagePlaybook();
|
|
|
276
306
|
checkResponseSnippets();
|
|
277
307
|
checkCloseoutChecklist();
|
|
278
308
|
checkSupportLifecycleWorksheet();
|
|
309
|
+
checkSupportLifecycleFilledExample();
|
|
279
310
|
checkSupportLifecycleMap();
|
|
280
311
|
checkSupportLifecycle();
|
|
281
312
|
checkOutcomePrioritization();
|
|
@@ -876,6 +907,101 @@ function checkSupportLifecycleWorksheet() {
|
|
|
876
907
|
}
|
|
877
908
|
}
|
|
878
909
|
|
|
910
|
+
function checkSupportLifecycleFilledExample() {
|
|
911
|
+
const path = "examples/support/support-lifecycle-filled-example.json";
|
|
912
|
+
const example = readJson(path);
|
|
913
|
+
if (!example) {
|
|
914
|
+
return;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
const expectedStageIds = ["report", "triage", "response", "closeout", "prioritization", "backlog-record", "backlog-review"];
|
|
918
|
+
const expectedArtifacts = [
|
|
919
|
+
"examples/reports/feedback-template.md",
|
|
920
|
+
"examples/support/triage-playbook.json",
|
|
921
|
+
"examples/support/response-snippets.json",
|
|
922
|
+
"examples/support/closeout-checklist.json",
|
|
923
|
+
"examples/support/outcome-prioritization.json",
|
|
924
|
+
"examples/support/backlog-records.json",
|
|
925
|
+
"examples/support/backlog-review.json"
|
|
926
|
+
];
|
|
927
|
+
const requiredChecks = ["npm run reports:check", "npm run support:check", "npm run production:check"];
|
|
928
|
+
|
|
929
|
+
if (example.title !== "Filled Support Lifecycle Worksheet Example") {
|
|
930
|
+
failures.push(`${path}.title should be Filled Support Lifecycle Worksheet Example.`);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
if (example.sourceWorksheet !== "examples/support/support-lifecycle-worksheet.json") {
|
|
934
|
+
failures.push(`${path}.sourceWorksheet should point at examples/support/support-lifecycle-worksheet.json.`);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
if (example.synthetic !== true) {
|
|
938
|
+
failures.push(`${path}.synthetic should be true.`);
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
if (example.caseId !== "synthetic-report-gallery-docs-example") {
|
|
942
|
+
failures.push(`${path}.caseId should be synthetic-report-gallery-docs-example.`);
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
if (example.outcome !== "docs-example") {
|
|
946
|
+
failures.push(`${path}.outcome should be docs-example.`);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
if (!Array.isArray(example.flow) || example.flow.join("|") !== expectedStageIds.join("|")) {
|
|
950
|
+
failures.push(`${path}.flow should contain the support lifecycle order.`);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
if (!Array.isArray(example.stages) || example.stages.length !== expectedStageIds.length) {
|
|
954
|
+
failures.push(`${path}.stages should contain seven completed lifecycle stages.`);
|
|
955
|
+
} else {
|
|
956
|
+
for (const [index, stage] of example.stages.entries()) {
|
|
957
|
+
if (stage?.id !== expectedStageIds[index]) {
|
|
958
|
+
failures.push(`${path}.stages[${index}].id should be ${expectedStageIds[index]}.`);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
if (stage?.artifact !== expectedArtifacts[index]) {
|
|
962
|
+
failures.push(`${path}.stages[${index}].artifact should be ${expectedArtifacts[index]}.`);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
if (!stage?.fields || typeof stage.fields !== "object" || Array.isArray(stage.fields) || Object.keys(stage.fields).length < 3) {
|
|
966
|
+
failures.push(`${path}.stages[${index}].fields should record at least three completed fields.`);
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
if (!Array.isArray(stage?.checks) || stage.checks.length !== 3) {
|
|
970
|
+
failures.push(`${path}.stages[${index}].checks should contain exactly three completed checks.`);
|
|
971
|
+
} else {
|
|
972
|
+
for (const [itemIndex, item] of stage.checks.entries()) {
|
|
973
|
+
if (typeof item !== "string" || item.length < 35) {
|
|
974
|
+
failures.push(`${path}.stages[${index}].checks[${itemIndex}] should be a useful completed check.`);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
if (!Array.isArray(stage?.privacyReview) || stage.privacyReview.length !== 3) {
|
|
980
|
+
failures.push(`${path}.stages[${index}].privacyReview should contain exactly three privacy review notes.`);
|
|
981
|
+
} else {
|
|
982
|
+
const privacyText = stage.privacyReview.join("\n");
|
|
983
|
+
if (!/synthetic|placeholder|redacted|private|secret|SECURITY\.md|public/i.test(privacyText)) {
|
|
984
|
+
failures.push(`${path}.stages[${index}].privacyReview should include public-safe or security routing guidance.`);
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
if (!Array.isArray(example.requiredChecks)) {
|
|
991
|
+
failures.push(`${path}.requiredChecks should be an array.`);
|
|
992
|
+
} else {
|
|
993
|
+
for (const check of requiredChecks) {
|
|
994
|
+
if (!example.requiredChecks.includes(check)) {
|
|
995
|
+
failures.push(`${path}.requiredChecks should include ${check}.`);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
if (typeof example.privacyGuardrail !== "string" || !/synthetic|secrets|private|customer data|SECURITY\.md|exploitable/i.test(example.privacyGuardrail)) {
|
|
1001
|
+
failures.push(`${path}.privacyGuardrail should include synthetic, public-safe support guidance.`);
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
|
|
879
1005
|
function checkOutcomePrioritization() {
|
|
880
1006
|
const path = "examples/support/outcome-prioritization.json";
|
|
881
1007
|
const priorities = readJson(path);
|