memento-mori-jester 0.1.103 → 0.1.104

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 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.104
8
+
9
+ - Added checked `installed-package-support.md/json` notes so maintainers can verify and use support examples from the npm package rather than a repo checkout.
10
+ - Extended the support examples index, `npm run support:check`, and `npm run pack:contents:check` so package-relative support paths and repo-only path exclusions stay aligned.
11
+ - Updated README, maintainer triage docs, production-readiness docs, roadmap, and release notes for installed-package support provenance.
12
+
7
13
  ## 0.1.103
8
14
 
9
15
  - Added `npm run pack:contents:check` to verify dry-run package contents include the support examples index, quickstart, lifecycle map, blank worksheet, and filled synthetic example.
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 examples quickstart](examples/support/support-examples-quickstart.md), [support examples index](examples/support/support-examples-index.md), [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.
79
+ Maintainers can use the checked [support examples quickstart](examples/support/support-examples-quickstart.md), [support examples index](examples/support/support-examples-index.md), [installed-package support note](examples/support/installed-package-support.md), [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 Examples Quickstart](examples/support/support-examples-quickstart.md)
454
454
  - [Support Examples Index](examples/support/support-examples-index.md)
455
+ - [Installed Package Support Examples](examples/support/installed-package-support.md)
455
456
  - [Support Lifecycle Map](examples/support/support-lifecycle-map.md)
456
457
  - [Support Lifecycle Worksheet](examples/support/support-lifecycle-worksheet.md)
457
458
  - [Filled Support Lifecycle Worksheet Example](examples/support/support-lifecycle-filled-example.md)
@@ -485,6 +486,7 @@ Framework CI examples:
485
486
  - [Report Gallery Feedback Template](examples/reports/feedback-template.md)
486
487
  - [Support Examples Quickstart](examples/support/support-examples-quickstart.md)
487
488
  - [Support Examples Index](examples/support/support-examples-index.md)
489
+ - [Installed Package Support Examples](examples/support/installed-package-support.md)
488
490
  - [Support Lifecycle Map](examples/support/support-lifecycle-map.md)
489
491
  - [Support Lifecycle Worksheet](examples/support/support-lifecycle-worksheet.md)
490
492
  - [Filled Support Lifecycle Worksheet Example](examples/support/support-lifecycle-filled-example.md)
@@ -551,7 +553,7 @@ Maintainers can use [docs/MAINTAINER_TRIAGE.md](docs/MAINTAINER_TRIAGE.md) to tu
551
553
  Run `npm run fixtures:check` before merging fixture changes; it catches duplicate IDs, missing rule metadata, weak descriptions, unsafe-looking content, and duplicate content.
552
554
  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.
553
555
  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.
554
- Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support examples quickstart](examples/support/support-examples-quickstart.md), [support examples index](examples/support/support-examples-index.md), [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.
556
+ Run `npm run support:check` after editing issue templates, support docs, the report gallery feedback path, the [support examples quickstart](examples/support/support-examples-quickstart.md), [support examples index](examples/support/support-examples-index.md), [installed-package support note](examples/support/installed-package-support.md), [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.
555
557
  Run `npm run promo:card` to regenerate the repo-local social preview card after changing its copy or design.
556
558
  Run `npm run promo:check` after editing promo assets; it checks the current demo video, stills, docs, and fixture evidence numbers stay in sync.
557
559
  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 installed-package support provenance in v0.1.104, showing maintainers how to verify and use support examples from the npm package with package-relative paths.
9
10
  - Checked package contents support manifest smoke in v0.1.103, proving dry-run packages include the support examples index, quickstart, lifecycle map, blank worksheet, and filled synthetic example while excluding repo-local/private-ish files.
10
11
  - Checked support examples quickstart in v0.1.102, giving maintainers a 60-second handoff path from incoming report to map, worksheet, synthetic example, backlog record, and backlog review.
11
12
  - Checked support examples index in v0.1.101, telling maintainers when to use the lifecycle map, blank worksheet, and filled synthetic example.
@@ -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 examples quickstart](../examples/support/support-examples-quickstart.md) for a 60-second handoff path, or use the checked [support examples index](../examples/support/support-examples-index.md) to choose the right support artifact. Use 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.
24
+ When a report has enough public-safe detail to triage, start with the checked [support examples quickstart](../examples/support/support-examples-quickstart.md) for a 60-second handoff path, or use the checked [support examples index](../examples/support/support-examples-index.md) to choose the right support artifact. If you are working from an installed npm package instead of a repo checkout, use [installed-package-support.md](../examples/support/installed-package-support.md) to verify package-relative support paths with `npm explore memento-mori-jester -- npm run pack:contents:check`. Use 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
 
@@ -9,7 +9,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
9
9
  - GitHub Releases and npm publishing are automated from annotated `v*` tags through GitHub Actions trusted publishing.
10
10
  - CI runs tests and a package dry run on every push to `main` and pull request.
11
11
  - The local playground, GitHub Action, MCP setup snippets, preset examples, fixtures, and release notes ship in the npm package.
12
- - Package dry runs include a support examples manifest smoke so the index, quickstart, lifecycle map, blank worksheet, and filled synthetic example keep shipping from the tarball.
12
+ - Package dry runs include a support examples manifest smoke so the installed-package support note, index, quickstart, lifecycle map, blank worksheet, and filled synthetic example keep shipping from the tarball.
13
13
  - Repo-local promo assets stay outside the npm package, but `npm run promo:check` keeps the current demo video, stills, social card, docs, and fixture evidence numbers aligned.
14
14
  - The repo-local landing page stays outside the npm package, but `npm run site:check` keeps its start command and public links aligned.
15
15
 
@@ -18,7 +18,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
18
18
  - `package.json` includes repository, homepage, bugs, binaries, exports, public package files, and public publish access.
19
19
  - `package-lock.json` version matches `package.json`.
20
20
  - `npm run pack:dry` confirms the package includes `dist`, `docs`, `examples`, `scripts`, `README.md`, `CHANGELOG.md`, `ROADMAP.md`, and `LICENSE`, then runs `npm run pack:contents:check`.
21
- - `npm run pack:contents:check` verifies the dry-run package includes the support examples index, quickstart, lifecycle map, blank worksheet, and filled synthetic example, and excludes repo-local promo, site, private, cache, GitHub workflow, and credential-shaped files.
21
+ - `npm run pack:contents:check` verifies the dry-run package includes the installed-package support note, support examples index, quickstart, lifecycle map, blank worksheet, and filled synthetic example, and excludes repo-local promo, site, private, cache, GitHub workflow, and credential-shaped files.
22
22
  - `SECURITY.md` ships with the package so vulnerability reporting guidance is visible from the repository and npm tarball.
23
23
  - `prepublishOnly` runs tests and a package dry run for local publish attempts.
24
24
 
@@ -49,7 +49,7 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
49
49
  - `README.md` leads with a no-write first run, project bootstrap, agent setup, and optional hooks/CI.
50
50
  - `docs/GETTING_STARTED.md`, `docs/CLI.md`, `docs/RELEASE.md`, and `docs/TRUSTED_PUBLISHING.md` cover the core adoption and release paths.
51
51
  - `examples/reports` provides checked, public-safe report examples for fresh install diagnostics, summary output, blocked command reviews, and report-gallery feedback.
52
- - `examples/support` provides a checked support examples quickstart, support examples index, compact support lifecycle map, active-review worksheet, synthetic filled worksheet example, and 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.
52
+ - `examples/support` provides a checked support examples quickstart, support examples index, installed-package support note, compact support lifecycle map, active-review worksheet, synthetic filled worksheet example, and 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.
53
53
  - `site/index.html` gives maintainers a static one-page share surface that reuses the demo, social card, start command, and public links.
54
54
  - Every public release has matching `CHANGELOG.md` notes and `docs/RELEASE_NOTES_vX.Y.Z.md`.
55
55
 
@@ -62,17 +62,17 @@ This checklist defines what "production grade" means for Memento Mori Jester rig
62
62
  - GitHub issue templates collect bug reports, false-positive reports, report-gallery feedback, and feature requests with the diagnostic context maintainers need.
63
63
  - `SECURITY.md` routes vulnerability reports away from public issues and asks for redacted diagnostics.
64
64
  - `docs/MAINTAINER_TRIAGE.md` explains how to turn useful false-positive reports into fixture coverage before changing rule logic.
65
- - `examples/support` shows maintainers how to use the quickstart for a live 60-second handoff, choose the right support artifact from the examples index, 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.
65
+ - `examples/support` shows maintainers how to use the quickstart for a live 60-second handoff, choose the right support artifact from the examples index, verify the same package-relative support artifacts from an installed npm package, 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.
66
66
  - `npm run fixtures:check` validates fixture IDs, metadata, unsafe-looking content, duplicate content, and explicit expected/absent rule intent.
67
67
  - `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.
68
68
  - `npm run framework:tuning:check` keeps the framework tuning guide, cookbook JSON, cookbook README, and fixture IDs aligned.
69
69
  - `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.
70
70
  - `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.
71
71
  - `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.
72
- - `npm run support:check` verifies issue templates, support docs, the report gallery feedback template, support examples quickstart, support examples index, 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.
72
+ - `npm run support:check` verifies issue templates, support docs, the report gallery feedback template, support examples quickstart, support examples index, installed-package support note, 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.
73
73
  - `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.
74
74
  - `npm run site:check` verifies the static landing page before maintainers post or host it.
75
- - `npm run pack:contents:check` verifies the npm package surface keeps the support examples manifest files available while excluding repo-only or private-ish paths.
75
+ - `npm run pack:contents:check` verifies the npm package surface keeps the support examples manifest files and installed-package provenance note available while excluding repo-only or private-ish paths.
76
76
  - npm publish has a manual workflow fallback, but the normal release path is tag-driven trusted publishing.
77
77
 
78
78
  ## Static Guard
@@ -0,0 +1,47 @@
1
+ # Memento Mori Jester v0.1.104
2
+
3
+ ## Summary
4
+
5
+ This release adds checked installed-package support provenance so maintainers can verify and use the support examples from the npm package, not only from a repo checkout.
6
+
7
+ ## Changes
8
+
9
+ - Added `examples/support/installed-package-support.md`.
10
+ - Added `examples/support/installed-package-support.json`.
11
+ - Linked the installed-package support note from the support examples index and support README.
12
+ - Extended `npm run support:check` to validate the installed-package note, package-relative artifacts, `npm explore` verification command, and repo-only path exclusions.
13
+ - Extended `npm run pack:contents:check` so dry-run package contents prove the installed-package note and referenced support artifacts are included.
14
+ - Updated README, maintainer triage docs, production-readiness docs, roadmap, and changelog.
15
+
16
+ ## Public Interface Changes
17
+
18
+ - No CLI, MCP, config schema, rule, scoring, GitHub Action, or release automation changes.
19
+ - New package docs/examples only:
20
+ - `examples/support/installed-package-support.md`
21
+ - `examples/support/installed-package-support.json`
22
+
23
+ ## Release Validation
24
+
25
+ ```powershell
26
+ npm.cmd test
27
+ npm.cmd run demo:svg:check
28
+ npm.cmd run promo:card:check
29
+ npm.cmd run promo:check
30
+ npm.cmd run support:check
31
+ npm.cmd run pack:contents:check
32
+ npm.cmd run production:check
33
+ npm.cmd run pack:dry
34
+ git diff --check
35
+ node .\dist\cli.js doctor
36
+ node .\dist\cli.js summary --kind command "git reset --hard"
37
+ git diff | node .\dist\cli.js diff --fail-on block --subject "v0.1.104 installed-package support provenance"
38
+ ```
39
+
40
+ ## Post-Publish Smoke
41
+
42
+ ```powershell
43
+ npm.cmd view memento-mori-jester version --silent
44
+ npx.cmd -y memento-mori-jester@latest doctor
45
+ npx.cmd -y memento-mori-jester@latest summary --kind command "git reset --hard"
46
+ npm.cmd run pack:contents:check
47
+ ```
@@ -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 examples quickstart](support-examples-quickstart.md) during a live maintainer handoff, or the checked [support examples index](support-examples-index.md) when you need to choose the right artifact. Use 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-examples-quickstart.json](support-examples-quickstart.json), [support-examples-index.json](support-examples-index.json), [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.
5
+ Start with the checked [support examples quickstart](support-examples-quickstart.md) during a live maintainer handoff, or the checked [support examples index](support-examples-index.md) when you need to choose the right artifact. Use [installed-package-support.md](installed-package-support.md) when proving those support examples from an installed npm package rather than a repo checkout. Use 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 [installed-package-support.json](installed-package-support.json), [support-examples-quickstart.json](support-examples-quickstart.json), [support-examples-index.json](support-examples-index.json), [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,51 @@
1
+ {
2
+ "title": "Installed Package Support Examples",
3
+ "packageName": "memento-mori-jester",
4
+ "verifyCommand": "npm explore memento-mori-jester -- npm run pack:contents:check",
5
+ "packageRelativeRoot": "examples/support",
6
+ "packageRelativeArtifacts": [
7
+ "examples/support/support-examples-index.md",
8
+ "examples/support/support-examples-quickstart.md",
9
+ "examples/support/support-lifecycle-map.md",
10
+ "examples/support/support-lifecycle-worksheet.md",
11
+ "examples/support/support-lifecycle-filled-example.md"
12
+ ],
13
+ "useWhen": "Use when a maintainer needs to verify or open the support examples from an installed npm package instead of a repository checkout.",
14
+ "steps": [
15
+ {
16
+ "id": "install-package",
17
+ "command": "npm install --save-dev memento-mori-jester",
18
+ "purpose": "Install the public package into a local maintainer or consumer project without requiring a source checkout."
19
+ },
20
+ {
21
+ "id": "verify-package-contents",
22
+ "command": "npm explore memento-mori-jester -- npm run pack:contents:check",
23
+ "purpose": "Run the package's own contents smoke from inside the installed package."
24
+ },
25
+ {
26
+ "id": "open-support-index",
27
+ "artifact": "examples/support/support-examples-index.md",
28
+ "purpose": "Choose between the quickstart, map, blank worksheet, and filled synthetic example using package-relative paths."
29
+ }
30
+ ],
31
+ "repoOnlyPathsNotRequired": [
32
+ "promo/",
33
+ "site/",
34
+ ".github/",
35
+ "private/",
36
+ "secrets/",
37
+ "internal/",
38
+ "node_modules/",
39
+ "coverage/",
40
+ "tmp/",
41
+ "temp/",
42
+ ".env",
43
+ ".npmrc"
44
+ ],
45
+ "requiredChecks": [
46
+ "npm run support:check",
47
+ "npm run pack:contents:check",
48
+ "npm run production:check"
49
+ ],
50
+ "privacyGuardrail": "Installed-package support examples must stay public-safe: use package-relative paths, avoid secrets and private details, and route credential exposure, package publishing compromise, MCP data exposure, command execution risk, or exploitable security details through SECURITY.md."
51
+ }
@@ -0,0 +1,39 @@
1
+ # Installed Package Support Examples
2
+
3
+ This public-safe note shows maintainers how to use the checked support examples from an installed npm package instead of a repository checkout.
4
+
5
+ The checked source is [installed-package-support.json](installed-package-support.json). Use it with the [support examples index](support-examples-index.md), [support examples quickstart](support-examples-quickstart.md), [support lifecycle map](support-lifecycle-map.md), [support lifecycle worksheet](support-lifecycle-worksheet.md), and [filled synthetic example](support-lifecycle-filled-example.md).
6
+
7
+ ## Verify From npm
8
+
9
+ ```powershell
10
+ npm install --save-dev memento-mori-jester
11
+ npm explore memento-mori-jester -- npm run pack:contents:check
12
+ ```
13
+
14
+ ## Open The Package-Relative Artifacts
15
+
16
+ The support examples are package-relative paths under `examples/support/`:
17
+
18
+ - `examples/support/support-examples-index.md`
19
+ - `examples/support/support-examples-quickstart.md`
20
+ - `examples/support/support-lifecycle-map.md`
21
+ - `examples/support/support-lifecycle-worksheet.md`
22
+ - `examples/support/support-lifecycle-filled-example.md`
23
+
24
+ When using an installed package, stay inside the package directory through `npm explore memento-mori-jester -- <command>` or your editor's package viewer. The support examples do not require repo-only `promo/`, `site/`, `.github/`, private, secret, internal, cache, or credential-shaped paths.
25
+
26
+ ## Maintainer Path
27
+
28
+ 1. Run the package contents check from the installed package.
29
+ 2. Open the support examples index to choose the right artifact.
30
+ 3. Use the quickstart for a 60-second route from incoming report to map, worksheet, filled synthetic example, backlog record, and backlog review.
31
+ 4. Keep report details redacted and route secrets, private code, private paths, customer data, package publishing compromise, MCP exposure, command execution risk, or exploitable security details through `SECURITY.md`.
32
+
33
+ ## Checks
34
+
35
+ ```powershell
36
+ npm run support:check
37
+ npm run pack:contents:check
38
+ npm run production:check
39
+ ```
@@ -17,6 +17,35 @@
17
17
  "publicSafe": true,
18
18
  "synthetic": true
19
19
  },
20
+ "installedPackageProvenance": {
21
+ "label": "Installed Package Support Examples",
22
+ "file": "examples/support/installed-package-support.md",
23
+ "source": "examples/support/installed-package-support.json",
24
+ "useWhen": "Use when a maintainer needs to verify or open the support examples from an installed npm package instead of a repository checkout.",
25
+ "verifyCommand": "npm explore memento-mori-jester -- npm run pack:contents:check",
26
+ "packageRelativeArtifacts": [
27
+ "examples/support/support-examples-index.md",
28
+ "examples/support/support-examples-quickstart.md",
29
+ "examples/support/support-lifecycle-map.md",
30
+ "examples/support/support-lifecycle-worksheet.md",
31
+ "examples/support/support-lifecycle-filled-example.md"
32
+ ],
33
+ "repoOnlyPathsNotRequired": [
34
+ "promo/",
35
+ "site/",
36
+ ".github/",
37
+ "private/",
38
+ "secrets/",
39
+ "internal/",
40
+ "node_modules/",
41
+ "coverage/",
42
+ "tmp/",
43
+ "temp/",
44
+ ".env",
45
+ ".npmrc"
46
+ ],
47
+ "publicSafe": true
48
+ },
20
49
  "artifacts": [
21
50
  {
22
51
  "id": "lifecycle-map",
@@ -2,12 +2,16 @@
2
2
 
3
3
  This public-safe index tells maintainers which checked support artifact to use during a report review. It keeps the compact map, blank worksheet, and filled synthetic example together so a support issue can move from first report to backlog review without guessing.
4
4
 
5
- The checked source is [support-examples-index.json](support-examples-index.json). For live handoffs, use the checked [support examples quickstart](support-examples-quickstart.md). This index points at the [support lifecycle map](support-lifecycle-map.md), [support lifecycle worksheet](support-lifecycle-worksheet.md), and [filled lifecycle worksheet example](support-lifecycle-filled-example.md).
5
+ The checked source is [support-examples-index.json](support-examples-index.json). For live handoffs, use the checked [support examples quickstart](support-examples-quickstart.md). For installed-package provenance, use [installed-package-support.md](installed-package-support.md). This index points at the [support lifecycle map](support-lifecycle-map.md), [support lifecycle worksheet](support-lifecycle-worksheet.md), and [filled lifecycle worksheet example](support-lifecycle-filled-example.md).
6
6
 
7
7
  ## 60-Second Handoff
8
8
 
9
9
  Use [support-examples-quickstart.md](support-examples-quickstart.md) when an incoming report needs a fast maintainer route from public-safety check to lifecycle map, blank worksheet, filled synthetic example, backlog record, and backlog review.
10
10
 
11
+ ## Installed Package Provenance
12
+
13
+ Use [installed-package-support.md](installed-package-support.md) when proving these examples from the npm package. It uses `npm explore memento-mori-jester -- npm run pack:contents:check`, package-relative `examples/support/` paths, and no repo-only `promo/`, `site/`, `.github/`, private, secret, internal, cache, or credential-shaped paths.
14
+
11
15
  ## Which Artifact To Use
12
16
 
13
17
  | Artifact | Use when | Required public-safe markers |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memento-mori-jester",
3
- "version": "0.1.103",
3
+ "version": "0.1.104",
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": {
@@ -16,6 +16,8 @@ const requiredPackageFiles = [
16
16
  "dist/core.js",
17
17
  "docs/RELEASE.md",
18
18
  `docs/RELEASE_NOTES_v${packageJson.version}.md`,
19
+ "examples/support/installed-package-support.md",
20
+ "examples/support/installed-package-support.json",
19
21
  "examples/support/support-examples-index.md",
20
22
  "examples/support/support-examples-index.json",
21
23
  "examples/support/support-examples-quickstart.md",
@@ -34,6 +36,8 @@ const requiredPackageFiles = [
34
36
  ];
35
37
 
36
38
  const requiredSupportFiles = [
39
+ "examples/support/installed-package-support.md",
40
+ "examples/support/installed-package-support.json",
37
41
  "examples/support/support-examples-index.md",
38
42
  "examples/support/support-examples-index.json",
39
43
  "examples/support/support-examples-quickstart.md",
@@ -107,6 +111,8 @@ for (const path of requiredSupportFiles) {
107
111
  }
108
112
  }
109
113
 
114
+ checkInstalledPackageSupport();
115
+
110
116
  if (failures.length > 0) {
111
117
  console.error("Package contents check failed:");
112
118
  for (const failure of failures) {
@@ -120,6 +126,57 @@ console.log(`PASS package ${pack.name}@${pack.version}`);
120
126
  console.log(`PASS support examples included: ${requiredSupportFiles.length} files`);
121
127
  console.log("PASS promo, site, GitHub workflow, cache, private, and credential-shaped files excluded");
122
128
 
129
+ function checkInstalledPackageSupport() {
130
+ const path = "examples/support/installed-package-support.json";
131
+ if (!existsSync(join(root, path))) {
132
+ return;
133
+ }
134
+
135
+ const note = readJson(path);
136
+ const expectedArtifacts = [
137
+ "examples/support/support-examples-index.md",
138
+ "examples/support/support-examples-quickstart.md",
139
+ "examples/support/support-lifecycle-map.md",
140
+ "examples/support/support-lifecycle-worksheet.md",
141
+ "examples/support/support-lifecycle-filled-example.md"
142
+ ];
143
+ const expectedRepoOnlyPaths = ["promo/", "site/", ".github/", "private/", "secrets/", "internal/"];
144
+
145
+ if (note.packageName !== packageJson.name) {
146
+ failures.push(`${path}.packageName should be ${packageJson.name}.`);
147
+ }
148
+
149
+ if (note.verifyCommand !== "npm explore memento-mori-jester -- npm run pack:contents:check") {
150
+ failures.push(`${path}.verifyCommand should run the package contents check through npm explore.`);
151
+ }
152
+
153
+ if (!Array.isArray(note.packageRelativeArtifacts) || note.packageRelativeArtifacts.join("|") !== expectedArtifacts.join("|")) {
154
+ failures.push(`${path}.packageRelativeArtifacts should list the checked package support artifacts in order.`);
155
+ } else {
156
+ for (const artifact of note.packageRelativeArtifacts) {
157
+ if (!files.has(artifact)) {
158
+ failures.push(`${path}.packageRelativeArtifacts references ${artifact}, but it is not in the package dry run.`);
159
+ }
160
+ }
161
+ }
162
+
163
+ if (!Array.isArray(note.repoOnlyPathsNotRequired)) {
164
+ failures.push(`${path}.repoOnlyPathsNotRequired should be an array.`);
165
+ } else {
166
+ for (const repoOnlyPath of expectedRepoOnlyPaths) {
167
+ if (!note.repoOnlyPathsNotRequired.includes(repoOnlyPath)) {
168
+ failures.push(`${path}.repoOnlyPathsNotRequired should include ${repoOnlyPath}.`);
169
+ }
170
+
171
+ for (const file of files) {
172
+ if (file.startsWith(repoOnlyPath)) {
173
+ failures.push(`${path}.repoOnlyPathsNotRequired lists ${repoOnlyPath}, but ${file} is present in the package dry run.`);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
123
180
  function dryRunPack() {
124
181
  const output = runNpm(["pack", "--dry-run", "--json", "--ignore-scripts"]);
125
182
  const parsed = parsePackJson(output);
@@ -101,6 +101,8 @@ for (const path of [
101
101
  "examples/support/backlog-records.json",
102
102
  "examples/support/closeout-checklist.md",
103
103
  "examples/support/closeout-checklist.json",
104
+ "examples/support/installed-package-support.md",
105
+ "examples/support/installed-package-support.json",
104
106
  "examples/support/outcome-prioritization.md",
105
107
  "examples/support/outcome-prioritization.json",
106
108
  "examples/support/response-snippets.md",
@@ -149,6 +151,7 @@ requireText("README.md", /feedback-template\.md/, "report gallery feedback templ
149
151
  requireText("README.md", /examples\/support/, "support triage playbook link");
150
152
  requireText("README.md", /support-examples-quickstart\.md/, "support examples quickstart link");
151
153
  requireText("README.md", /support-examples-index\.md/, "support examples index link");
154
+ requireText("README.md", /installed-package-support\.md/, "installed package support link");
152
155
  requireText("README.md", /response-snippets\.md/, "support response snippets link");
153
156
  requireText("README.md", /closeout-checklist\.md/, "support closeout checklist link");
154
157
  requireText("README.md", /support-lifecycle-map\.md/, "support lifecycle map link");
@@ -182,6 +185,7 @@ requireText("docs/PRODUCTION_READINESS.md", /support:check/, "support triage rea
182
185
  requireText("docs/PRODUCTION_READINESS.md", /examples\/support/, "support triage playbook readiness");
183
186
  requireText("docs/PRODUCTION_READINESS.md", /support examples quickstart/i, "support examples quickstart readiness");
184
187
  requireText("docs/PRODUCTION_READINESS.md", /support examples index/i, "support examples index readiness");
188
+ requireText("docs/PRODUCTION_READINESS.md", /installed-package support/i, "installed package support readiness");
185
189
  requireText("docs/PRODUCTION_READINESS.md", /response snippets/i, "support response snippets readiness");
186
190
  requireText("docs/PRODUCTION_READINESS.md", /closeout checklist/i, "support closeout checklist readiness");
187
191
  requireText("docs/PRODUCTION_READINESS.md", /support lifecycle overview/i, "support lifecycle overview readiness");
@@ -219,6 +223,7 @@ requireText("docs/MAINTAINER_TRIAGE.md", /report_gallery_feedback\.yml/, "report
219
223
  requireText("docs/MAINTAINER_TRIAGE.md", /examples\/support/, "support triage playbook link");
220
224
  requireText("docs/MAINTAINER_TRIAGE.md", /support-examples-quickstart\.md/, "support examples quickstart link");
221
225
  requireText("docs/MAINTAINER_TRIAGE.md", /support-examples-index\.md/, "support examples index link");
226
+ requireText("docs/MAINTAINER_TRIAGE.md", /installed-package-support\.md/, "installed package support link");
222
227
  requireText("docs/MAINTAINER_TRIAGE.md", /response-snippets\.md/, "support response snippets link");
223
228
  requireText("docs/MAINTAINER_TRIAGE.md", /closeout-checklist\.md/, "support closeout checklist link");
224
229
  requireText("docs/MAINTAINER_TRIAGE.md", /support-lifecycle-map\.md/, "support lifecycle map link");
@@ -262,6 +267,8 @@ requireText("examples/reports/feedback-template.md", /SECURITY\.md/, "feedback t
262
267
  requireText("examples/support/README.md", /triage-playbook\.json/, "support triage playbook JSON link");
263
268
  requireText("examples/support/README.md", /response-snippets\.md/, "support response snippets link");
264
269
  requireText("examples/support/README.md", /closeout-checklist\.md/, "support closeout checklist link");
270
+ requireText("examples/support/README.md", /installed-package-support\.md/, "installed package support link");
271
+ requireText("examples/support/README.md", /installed-package-support\.json/, "installed package support JSON link");
265
272
  requireText("examples/support/README.md", /support-examples-quickstart\.md/, "support examples quickstart link");
266
273
  requireText("examples/support/README.md", /support-examples-quickstart\.json/, "support examples quickstart JSON link");
267
274
  requireText("examples/support/README.md", /support-examples-index\.md/, "support examples index link");
@@ -295,6 +302,13 @@ requireText("examples/support/closeout-checklist.md", /candidate-opened/, "suppo
295
302
  requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "support docs closeout record");
296
303
  requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "support fixture closeout record");
297
304
  requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "support rule-review closeout record");
305
+ requireText("examples/support/installed-package-support.md", /Installed Package Support Examples/, "installed package support heading");
306
+ requireText("examples/support/installed-package-support.md", /npm explore memento-mori-jester -- npm run pack:contents:check/, "installed package support verify command");
307
+ requireText("examples/support/installed-package-support.md", /support-examples-index\.md/, "installed package support index path");
308
+ requireText("examples/support/installed-package-support.md", /repo-only `promo\/`, `site\/`, `\.github\/`/, "installed package support repo-only exclusions");
309
+ requireText("examples/support/installed-package-support.json", /Installed Package Support Examples/, "installed package support JSON title");
310
+ requireText("examples/support/installed-package-support.json", /packageRelativeArtifacts/, "installed package support package-relative artifacts");
311
+ requireText("examples/support/installed-package-support.json", /repoOnlyPathsNotRequired/, "installed package support repo-only exclusions JSON");
298
312
  requireText("examples/support/support-examples-quickstart.md", /Support Examples Quickstart/, "support examples quickstart heading");
299
313
  requireText("examples/support/support-examples-quickstart.md", /support-examples-quickstart\.json/, "support examples quickstart JSON link");
300
314
  requireText("examples/support/support-examples-quickstart.md", /60-Second Path/, "support examples quickstart path");
@@ -313,6 +327,8 @@ requireText("examples/support/support-examples-quickstart.json", /npm run produc
313
327
  requireText("examples/support/support-examples-index.md", /Support Examples Index/, "support examples index heading");
314
328
  requireText("examples/support/support-examples-index.md", /support-examples-index\.json/, "support examples index JSON link");
315
329
  requireText("examples/support/support-examples-index.md", /support-examples-quickstart\.md/, "support examples quickstart link");
330
+ requireText("examples/support/support-examples-index.md", /installed-package-support\.md/, "installed package support index link");
331
+ requireText("examples/support/support-examples-index.md", /Installed Package Provenance/, "installed package support provenance section");
316
332
  requireText("examples/support/support-examples-index.md", /support-lifecycle-map\.md/, "support examples index map link");
317
333
  requireText("examples/support/support-examples-index.md", /support-lifecycle-worksheet\.md/, "support examples index worksheet link");
318
334
  requireText("examples/support/support-examples-index.md", /support-lifecycle-filled-example\.md/, "support examples index filled example link");
@@ -322,6 +338,8 @@ requireText("examples/support/support-examples-index.md", /SECURITY\.md/, "suppo
322
338
  requireText("examples/support/support-examples-index.json", /Support Examples Index/, "support examples index JSON title");
323
339
  requireText("examples/support/support-examples-index.json", /support-examples-quickstart\.md/, "support examples index JSON quickstart link");
324
340
  requireText("examples/support/support-examples-index.json", /support-examples-quickstart\.json/, "support examples index JSON quickstart source");
341
+ requireText("examples/support/support-examples-index.json", /installedPackageProvenance/, "installed package support provenance JSON");
342
+ requireText("examples/support/support-examples-index.json", /installed-package-support\.md/, "installed package support JSON link");
325
343
  requireText("examples/support/support-examples-index.json", /support-lifecycle-map\.md/, "support examples index JSON map link");
326
344
  requireText("examples/support/support-examples-index.json", /support-lifecycle-worksheet\.md/, "support examples index JSON worksheet link");
327
345
  requireText("examples/support/support-examples-index.json", /support-lifecycle-filled-example\.md/, "support examples index JSON filled example link");
@@ -439,6 +457,8 @@ requireText("scripts/check-consumer-quickstart.mjs", /consumer-quickstart/, "con
439
457
  requireText("scripts/check-consumer-quickstart.mjs", /memento-mori-jester@latest/, "consumer quickstart registry verification option");
440
458
  requireText("scripts/check-consumer-quickstart.mjs", /framework:tuning:doctor/, "consumer quickstart tuning doctor guard");
441
459
  requireText("scripts/check-package-contents.mjs", /support-examples-index\.md/, "package contents support examples index guard");
460
+ requireText("scripts/check-package-contents.mjs", /installed-package-support\.md/, "package contents installed package support guard");
461
+ requireText("scripts/check-package-contents.mjs", /npm explore memento-mori-jester -- npm run pack:contents:check/, "package contents installed package verify command");
442
462
  requireText("scripts/check-package-contents.mjs", /support-examples-quickstart\.md/, "package contents support examples quickstart guard");
443
463
  requireText("scripts/check-package-contents.mjs", /support-lifecycle-map\.md/, "package contents support lifecycle map guard");
444
464
  requireText("scripts/check-package-contents.mjs", /support-lifecycle-worksheet\.md/, "package contents support lifecycle worksheet guard");
@@ -452,6 +472,7 @@ requireText("scripts/check-support-triage.mjs", /feedback-template\.md/, "suppor
452
472
  requireText("scripts/check-support-triage.mjs", /triage-playbook\.json/, "support triage playbook guard");
453
473
  requireText("scripts/check-support-triage.mjs", /response-snippets\.json/, "support response snippets guard");
454
474
  requireText("scripts/check-support-triage.mjs", /closeout-checklist\.json/, "support closeout checklist guard");
475
+ requireText("scripts/check-support-triage.mjs", /installed-package-support\.json/, "installed package support guard");
455
476
  requireText("scripts/check-support-triage.mjs", /support-examples-quickstart\.json/, "support examples quickstart guard");
456
477
  requireText("scripts/check-support-triage.mjs", /support-examples-index\.json/, "support examples index guard");
457
478
  requireText("scripts/check-support-triage.mjs", /support-lifecycle\.json/, "support lifecycle overview guard");
@@ -31,6 +31,8 @@ const supportFiles = [
31
31
  "examples/support/backlog-records.json",
32
32
  "examples/support/closeout-checklist.md",
33
33
  "examples/support/closeout-checklist.json",
34
+ "examples/support/installed-package-support.md",
35
+ "examples/support/installed-package-support.json",
34
36
  "examples/support/outcome-prioritization.md",
35
37
  "examples/support/outcome-prioritization.json",
36
38
  "examples/support/README.md",
@@ -100,6 +102,8 @@ requireText("examples/reports/README.md", /examples\/support|Maintainer Triage P
100
102
  requireText("examples/support/README.md", /Maintainer Triage Playbook/, "maintainer playbook heading");
101
103
  requireText("examples/support/README.md", /backlog-review\.md/, "support backlog review link");
102
104
  requireText("examples/support/README.md", /backlog-records\.md/, "support backlog records link");
105
+ requireText("examples/support/README.md", /installed-package-support\.md/, "installed package support link");
106
+ requireText("examples/support/README.md", /installed-package-support\.json/, "installed package support JSON link");
103
107
  requireText("examples/support/README.md", /support-examples-quickstart\.md/, "support examples quickstart link");
104
108
  requireText("examples/support/README.md", /support-examples-quickstart\.json/, "support examples quickstart JSON link");
105
109
  requireText("examples/support/README.md", /support-examples-index\.md/, "support examples index link");
@@ -138,6 +142,20 @@ requireText("examples/support/closeout-checklist.md", /SECURITY\.md/, "closeout
138
142
  requireText("examples/support/closeout-checklist.json", /docs-clarification-closeout/, "docs closeout record");
139
143
  requireText("examples/support/closeout-checklist.json", /fixture-backlog-closeout/, "fixture closeout record");
140
144
  requireText("examples/support/closeout-checklist.json", /rule-review-closeout/, "rule-review closeout record");
145
+ requireText("examples/support/installed-package-support.md", /Installed Package Support Examples/, "installed package support heading");
146
+ requireText("examples/support/installed-package-support.md", /installed-package-support\.json/, "installed package support JSON link");
147
+ requireText("examples/support/installed-package-support.md", /npm explore memento-mori-jester -- npm run pack:contents:check/, "installed package verify command");
148
+ requireText("examples/support/installed-package-support.md", /examples\/support\/support-examples-index\.md/, "installed package support index path");
149
+ requireText("examples/support/installed-package-support.md", /examples\/support\/support-examples-quickstart\.md/, "installed package support quickstart path");
150
+ requireText("examples/support/installed-package-support.md", /examples\/support\/support-lifecycle-map\.md/, "installed package support map path");
151
+ requireText("examples/support/installed-package-support.md", /examples\/support\/support-lifecycle-worksheet\.md/, "installed package support worksheet path");
152
+ requireText("examples/support/installed-package-support.md", /examples\/support\/support-lifecycle-filled-example\.md/, "installed package filled example path");
153
+ requireText("examples/support/installed-package-support.md", /promo\/|site\/|\.github\/|private|secret|credential-shaped/, "installed package repo-only exclusions");
154
+ requireText("examples/support/installed-package-support.md", /SECURITY\.md/, "installed package security redirect");
155
+ requireText("examples/support/installed-package-support.json", /Installed Package Support Examples/, "installed package support JSON title");
156
+ requireText("examples/support/installed-package-support.json", /memento-mori-jester/, "installed package support package name");
157
+ requireText("examples/support/installed-package-support.json", /pack:contents:check/, "installed package contents check");
158
+ requireText("examples/support/installed-package-support.json", /support-examples-index\.md/, "installed package JSON support index path");
141
159
  requireText("examples/support/support-examples-quickstart.md", /Support Examples Quickstart/, "support examples quickstart heading");
142
160
  requireText("examples/support/support-examples-quickstart.md", /support-examples-quickstart\.json/, "support examples quickstart JSON link");
143
161
  requireText("examples/support/support-examples-quickstart.md", /60-Second Path/, "support examples quickstart path");
@@ -160,6 +178,8 @@ requireText("examples/support/support-examples-quickstart.json", /closed-no-acti
160
178
  requireText("examples/support/support-examples-index.md", /Support Examples Index/, "support examples index heading");
161
179
  requireText("examples/support/support-examples-index.md", /support-examples-index\.json/, "support examples index JSON link");
162
180
  requireText("examples/support/support-examples-index.md", /support-examples-quickstart\.md/, "support examples quickstart link");
181
+ requireText("examples/support/support-examples-index.md", /installed-package-support\.md/, "installed package support link");
182
+ requireText("examples/support/support-examples-index.md", /Installed Package Provenance/, "installed package provenance section");
163
183
  requireText("examples/support/support-examples-index.md", /60-Second Handoff/, "support examples index handoff section");
164
184
  requireText("examples/support/support-examples-index.md", /support-lifecycle-map\.md/, "support examples index map link");
165
185
  requireText("examples/support/support-examples-index.md", /support-lifecycle-worksheet\.md/, "support examples index worksheet link");
@@ -173,6 +193,8 @@ requireText("examples/support/support-examples-index.md", /npm run support:check
173
193
  requireText("examples/support/support-examples-index.json", /Support Examples Index/, "support examples index JSON title");
174
194
  requireText("examples/support/support-examples-index.json", /support-examples-quickstart\.md/, "support examples index JSON quickstart link");
175
195
  requireText("examples/support/support-examples-index.json", /support-examples-quickstart\.json/, "support examples index JSON quickstart source");
196
+ requireText("examples/support/support-examples-index.json", /installed-package-support\.md/, "installed package support JSON link");
197
+ requireText("examples/support/support-examples-index.json", /pack:contents:check/, "installed package support JSON verify command");
176
198
  requireText("examples/support/support-examples-index.json", /support-lifecycle-map\.md/, "support examples index JSON map link");
177
199
  requireText("examples/support/support-examples-index.json", /support-lifecycle-worksheet\.md/, "support examples index JSON worksheet link");
178
200
  requireText("examples/support/support-examples-index.json", /support-lifecycle-filled-example\.md/, "support examples index JSON filled example link");
@@ -360,6 +382,7 @@ requireText("package.json", /npm run support:check/, "support checker in npm tes
360
382
  checkTriagePlaybook();
361
383
  checkResponseSnippets();
362
384
  checkCloseoutChecklist();
385
+ checkInstalledPackageSupport();
363
386
  checkSupportExamplesQuickstart();
364
387
  checkSupportExamplesIndex();
365
388
  checkSupportLifecycleWorksheet();
@@ -971,6 +994,27 @@ function checkSupportExamplesIndex() {
971
994
  return;
972
995
  }
973
996
 
997
+ const expectedPackageArtifacts = [
998
+ "examples/support/support-examples-index.md",
999
+ "examples/support/support-examples-quickstart.md",
1000
+ "examples/support/support-lifecycle-map.md",
1001
+ "examples/support/support-lifecycle-worksheet.md",
1002
+ "examples/support/support-lifecycle-filled-example.md"
1003
+ ];
1004
+ const expectedRepoOnlyPaths = [
1005
+ "promo/",
1006
+ "site/",
1007
+ ".github/",
1008
+ "private/",
1009
+ "secrets/",
1010
+ "internal/",
1011
+ "node_modules/",
1012
+ "coverage/",
1013
+ "tmp/",
1014
+ "temp/",
1015
+ ".env",
1016
+ ".npmrc"
1017
+ ];
974
1018
  const expectedArtifacts = [
975
1019
  {
976
1020
  id: "lifecycle-map",
@@ -1045,6 +1089,40 @@ function checkSupportExamplesIndex() {
1045
1089
  }
1046
1090
  }
1047
1091
 
1092
+ if (index.installedPackageProvenance?.file !== "examples/support/installed-package-support.md") {
1093
+ failures.push(`${path}.installedPackageProvenance.file should point at examples/support/installed-package-support.md.`);
1094
+ }
1095
+
1096
+ if (index.installedPackageProvenance?.source !== "examples/support/installed-package-support.json") {
1097
+ failures.push(`${path}.installedPackageProvenance.source should point at examples/support/installed-package-support.json.`);
1098
+ }
1099
+
1100
+ if (index.installedPackageProvenance?.verifyCommand !== "npm explore memento-mori-jester -- npm run pack:contents:check") {
1101
+ failures.push(`${path}.installedPackageProvenance.verifyCommand should run the package contents check through npm explore.`);
1102
+ }
1103
+
1104
+ if (index.installedPackageProvenance?.publicSafe !== true) {
1105
+ failures.push(`${path}.installedPackageProvenance should be publicSafe.`);
1106
+ }
1107
+
1108
+ if (typeof index.installedPackageProvenance?.useWhen !== "string" || index.installedPackageProvenance.useWhen.length < 60) {
1109
+ failures.push(`${path}.installedPackageProvenance.useWhen should explain installed-package use.`);
1110
+ }
1111
+
1112
+ if (!Array.isArray(index.installedPackageProvenance?.packageRelativeArtifacts) || index.installedPackageProvenance.packageRelativeArtifacts.join("|") !== expectedPackageArtifacts.join("|")) {
1113
+ failures.push(`${path}.installedPackageProvenance.packageRelativeArtifacts should list the package support artifacts in order.`);
1114
+ }
1115
+
1116
+ if (!Array.isArray(index.installedPackageProvenance?.repoOnlyPathsNotRequired)) {
1117
+ failures.push(`${path}.installedPackageProvenance.repoOnlyPathsNotRequired should be an array.`);
1118
+ } else {
1119
+ for (const repoOnlyPath of expectedRepoOnlyPaths) {
1120
+ if (!index.installedPackageProvenance.repoOnlyPathsNotRequired.includes(repoOnlyPath)) {
1121
+ failures.push(`${path}.installedPackageProvenance.repoOnlyPathsNotRequired should include ${repoOnlyPath}.`);
1122
+ }
1123
+ }
1124
+ }
1125
+
1048
1126
  if (!Array.isArray(index.artifacts) || index.artifacts.length !== expectedArtifacts.length) {
1049
1127
  failures.push(`${path}.artifacts should contain exactly three indexed support artifacts.`);
1050
1128
  } else {
@@ -1136,6 +1214,128 @@ function checkSupportExamplesIndex() {
1136
1214
  }
1137
1215
  }
1138
1216
 
1217
+ function checkInstalledPackageSupport() {
1218
+ const path = "examples/support/installed-package-support.json";
1219
+ const note = readJson(path);
1220
+ if (!note) {
1221
+ return;
1222
+ }
1223
+
1224
+ const expectedArtifacts = [
1225
+ "examples/support/support-examples-index.md",
1226
+ "examples/support/support-examples-quickstart.md",
1227
+ "examples/support/support-lifecycle-map.md",
1228
+ "examples/support/support-lifecycle-worksheet.md",
1229
+ "examples/support/support-lifecycle-filled-example.md"
1230
+ ];
1231
+ const expectedRepoOnlyPaths = [
1232
+ "promo/",
1233
+ "site/",
1234
+ ".github/",
1235
+ "private/",
1236
+ "secrets/",
1237
+ "internal/",
1238
+ "node_modules/",
1239
+ "coverage/",
1240
+ "tmp/",
1241
+ "temp/",
1242
+ ".env",
1243
+ ".npmrc"
1244
+ ];
1245
+ const expectedSteps = [
1246
+ {
1247
+ id: "install-package",
1248
+ command: "npm install --save-dev memento-mori-jester"
1249
+ },
1250
+ {
1251
+ id: "verify-package-contents",
1252
+ command: "npm explore memento-mori-jester -- npm run pack:contents:check"
1253
+ },
1254
+ {
1255
+ id: "open-support-index",
1256
+ artifact: "examples/support/support-examples-index.md"
1257
+ }
1258
+ ];
1259
+
1260
+ if (note.title !== "Installed Package Support Examples") {
1261
+ failures.push(`${path}.title should be Installed Package Support Examples.`);
1262
+ }
1263
+
1264
+ if (note.packageName !== "memento-mori-jester") {
1265
+ failures.push(`${path}.packageName should be memento-mori-jester.`);
1266
+ }
1267
+
1268
+ if (note.verifyCommand !== "npm explore memento-mori-jester -- npm run pack:contents:check") {
1269
+ failures.push(`${path}.verifyCommand should run the package contents check through npm explore.`);
1270
+ }
1271
+
1272
+ if (note.packageRelativeRoot !== "examples/support") {
1273
+ failures.push(`${path}.packageRelativeRoot should be examples/support.`);
1274
+ }
1275
+
1276
+ if (typeof note.useWhen !== "string" || note.useWhen.length < 75) {
1277
+ failures.push(`${path}.useWhen should explain installed-package support usage.`);
1278
+ }
1279
+
1280
+ if (!Array.isArray(note.packageRelativeArtifacts) || note.packageRelativeArtifacts.join("|") !== expectedArtifacts.join("|")) {
1281
+ failures.push(`${path}.packageRelativeArtifacts should list the checked package support artifacts in order.`);
1282
+ } else {
1283
+ for (const artifact of note.packageRelativeArtifacts) {
1284
+ if (/^(?:promo|site|\.github|private|secrets?|internal)\//i.test(artifact)) {
1285
+ failures.push(`${path}.packageRelativeArtifacts should not reference repo-only path ${artifact}.`);
1286
+ }
1287
+ }
1288
+ }
1289
+
1290
+ if (!Array.isArray(note.steps) || note.steps.length !== expectedSteps.length) {
1291
+ failures.push(`${path}.steps should contain exactly three installed-package steps.`);
1292
+ } else {
1293
+ for (const [index, step] of note.steps.entries()) {
1294
+ const expected = expectedSteps[index];
1295
+ if (step?.id !== expected.id) {
1296
+ failures.push(`${path}.steps[${index}].id should be ${expected.id}.`);
1297
+ }
1298
+
1299
+ if (expected.command && step?.command !== expected.command) {
1300
+ failures.push(`${path}.steps[${index}].command should be ${expected.command}.`);
1301
+ }
1302
+
1303
+ if (expected.artifact && step?.artifact !== expected.artifact) {
1304
+ failures.push(`${path}.steps[${index}].artifact should be ${expected.artifact}.`);
1305
+ }
1306
+
1307
+ if (typeof step?.purpose !== "string" || step.purpose.length < 50) {
1308
+ failures.push(`${path}.steps[${index}].purpose should explain the installed-package step.`);
1309
+ }
1310
+ }
1311
+ }
1312
+
1313
+ if (!Array.isArray(note.repoOnlyPathsNotRequired)) {
1314
+ failures.push(`${path}.repoOnlyPathsNotRequired should be an array.`);
1315
+ } else {
1316
+ for (const repoOnlyPath of expectedRepoOnlyPaths) {
1317
+ if (!note.repoOnlyPathsNotRequired.includes(repoOnlyPath)) {
1318
+ failures.push(`${path}.repoOnlyPathsNotRequired should include ${repoOnlyPath}.`);
1319
+ }
1320
+ }
1321
+ }
1322
+
1323
+ const requiredChecks = ["npm run support:check", "npm run pack:contents:check", "npm run production:check"];
1324
+ if (!Array.isArray(note.requiredChecks)) {
1325
+ failures.push(`${path}.requiredChecks should be an array.`);
1326
+ } else {
1327
+ for (const check of requiredChecks) {
1328
+ if (!note.requiredChecks.includes(check)) {
1329
+ failures.push(`${path}.requiredChecks should include ${check}.`);
1330
+ }
1331
+ }
1332
+ }
1333
+
1334
+ if (typeof note.privacyGuardrail !== "string" || !/package-relative|secrets|private|SECURITY\.md|MCP|exploitable/i.test(note.privacyGuardrail)) {
1335
+ failures.push(`${path}.privacyGuardrail should include installed-package public-safe guidance.`);
1336
+ }
1337
+ }
1338
+
1139
1339
  function checkSupportExamplesQuickstart() {
1140
1340
  const path = "examples/support/support-examples-quickstart.json";
1141
1341
  const quickstart = readJson(path);