@codyswann/lisa 4.4.1 → 4.4.3

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.
Files changed (79) hide show
  1. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  2. package/dist/core/upstream-evidence-manifest.js +12 -29
  3. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  4. package/package.json +1 -1
  5. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa-agy/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  10. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  11. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-expo-agy/plugin.json +1 -1
  18. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  28. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  33. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  38. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-rails-agy/plugin.json +1 -1
  43. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  48. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  53. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  55. package/scripts/check-delivery-deletion-conflicts.mjs +2 -2
  56. package/scripts/check-derived-artifacts.mjs +24 -5
  57. package/scripts/check-orphan-test-processes.mjs +2 -2
  58. package/scripts/check-security-floors.mjs +20 -9
  59. package/scripts/check-template-workflow-refs.mjs +23 -8
  60. package/scripts/check-workflow-package-paths.mjs +12 -8
  61. package/scripts/generate-lisa-owned-hash-ledger.mjs +12 -4
  62. package/scripts/generate-upstream-evidence-manifest.mjs +4 -4
  63. package/scripts/verify-health-agentic-built.mjs +4 -3
  64. package/scripts/verify-health-consumer-built.mjs +3 -2
  65. package/scripts/verify-health-contract-built.mjs +3 -2
  66. package/scripts/verify-health-deterministic-built.mjs +5 -4
  67. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
  68. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +0 -4
  69. package/plugins/lisa/commands/parity-safety-net-rules.md +0 -6
  70. package/plugins/lisa/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
  71. package/plugins/lisa/skills/lisa-parity-safety-net-rules/agents/openai.yaml +0 -4
  72. package/plugins/lisa-agy/commands/lisa/parity-safety-net-rules.md +0 -6
  73. package/plugins/lisa-agy/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
  74. package/plugins/lisa-copilot/commands/lisa/parity-safety-net-rules.md +0 -6
  75. package/plugins/lisa-copilot/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
  76. package/plugins/lisa-cursor/commands/lisa/parity-safety-net-rules.md +0 -6
  77. package/plugins/lisa-cursor/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
  78. package/plugins/src/base/commands/parity-safety-net-rules.md +0 -6
  79. package/plugins/src/base/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
package/package.json CHANGED
@@ -145,7 +145,7 @@
145
145
  "zod-validation-error": "^4.0.0"
146
146
  },
147
147
  "name": "@codyswann/lisa",
148
- "version": "4.4.1",
148
+ "version": "4.4.3",
149
149
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
150
150
  "main": "dist/index.js",
151
151
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -82,12 +82,12 @@
82
82
  *
83
83
  * @module scripts/check-delivery-deletion-conflicts
84
84
  */
85
- import { execFileSync } from "node:child_process";
86
85
  import fs from "node:fs";
87
86
  import path from "node:path";
88
87
  import process from "node:process";
89
88
  import { fileURLToPath } from "node:url";
90
89
 
90
+ import { boundedExecFileSync } from "./lib/bounded-spawn.mjs";
91
91
  import { invokedAsScript } from "./lib/invoked-as-script.mjs";
92
92
 
93
93
  const REPO_ROOT = path.resolve(
@@ -250,7 +250,7 @@ export function matchDeletion(delivered, deleted) {
250
250
  function listTrackedFiles(root) {
251
251
  let stdout;
252
252
  try {
253
- stdout = execFileSync("git", ["-C", root, "ls-files", "-z"], {
253
+ stdout = boundedExecFileSync("git", ["-C", root, "ls-files", "-z"], {
254
254
  encoding: "utf8",
255
255
  maxBuffer: MAX_GIT_OUTPUT_BYTES,
256
256
  stdio: ["ignore", "pipe", "ignore"],
@@ -44,10 +44,10 @@
44
44
  * on a commit that owed nothing, which is the safe direction to be wrong in.
45
45
  * @module scripts/check-derived-artifacts
46
46
  */
47
- import { execFileSync } from "node:child_process";
48
47
  import path from "node:path";
49
48
  import process from "node:process";
50
49
 
50
+ import { boundedExecFileSync, isChildTimeout } from "./lib/bounded-spawn.mjs";
51
51
  import { invokedAsScript } from "./lib/invoked-as-script.mjs";
52
52
 
53
53
  const repoRoot = path.resolve(import.meta.dirname, "..");
@@ -118,18 +118,26 @@ export function requiresManifestCheck(stagedPaths) {
118
118
  * Renames report their destination (`-M` plus `--diff-filter=R`), and deletions
119
119
  * are included because removing a template is also a way to move what the
120
120
  * artifacts describe.
121
- * @returns {string[]} Staged paths, empty when git cannot be consulted
121
+ *
122
+ * A KILLED child re-raises rather than returning empty. An empty list means
123
+ * "nothing staged touches the artifacts", which makes this guard SKIP — so a
124
+ * busy machine would let through the commit that moves a template without
125
+ * regenerating what describes it. "I could not ask" is not "there is nothing
126
+ * to check", and only one of those is safe to act on.
127
+ * @returns {string[]} Staged paths, empty when git said there were none
128
+ * @throws {Error} When the child was killed at its deadline
122
129
  */
123
130
  export function stagedPaths() {
124
131
  try {
125
- return execFileSync(
132
+ return boundedExecFileSync(
126
133
  "git",
127
134
  ["diff", "--cached", "--name-only", "--diff-filter=ACMRD"],
128
135
  { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }
129
136
  )
130
137
  .split("\n")
131
138
  .filter(Boolean);
132
- } catch {
139
+ } catch (error) {
140
+ if (isChildTimeout(error)) throw error;
133
141
  return [];
134
142
  }
135
143
  }
@@ -172,13 +180,24 @@ export function readableFailure(raw) {
172
180
  */
173
181
  function runCheck(script) {
174
182
  try {
175
- execFileSync(process.execPath, [script, "--check"], {
183
+ boundedExecFileSync(process.execPath, [script, "--check"], {
176
184
  cwd: repoRoot,
177
185
  encoding: "utf8",
178
186
  stdio: ["ignore", "pipe", "pipe"],
179
187
  });
180
188
  return { ok: true, output: "" };
181
189
  } catch (error) {
190
+ // Already fail-closed — `ok: false` fails the guard either way — so the
191
+ // catch stays. What it must NOT do is stay silent about a kill: a killed
192
+ // child hands back EMPTY streams, so a timeout would otherwise render as a
193
+ // generator that failed with no diagnostic, which reads as a content
194
+ // problem and sends the operator to the wrong place entirely.
195
+ if (isChildTimeout(error)) {
196
+ return {
197
+ ok: false,
198
+ output: `${script} was killed before it finished. This is a timeout, not a check failure — nothing about the artifact was measured.`,
199
+ };
200
+ }
182
201
  const stderr = error?.stderr ?? "";
183
202
  const stdout = error?.stdout ?? "";
184
203
  return { ok: false, output: readableFailure(`${stdout}${stderr}`) };
@@ -44,8 +44,8 @@
44
44
  *
45
45
  * @module scripts/check-orphan-test-processes
46
46
  */
47
- import { execFileSync } from "node:child_process";
48
47
  import process from "node:process";
48
+ import { boundedExecFileSync } from "./lib/bounded-spawn.mjs";
49
49
  import { invokedAsScript } from "./lib/invoked-as-script.mjs";
50
50
 
51
51
  /**
@@ -168,7 +168,7 @@ export function selectOrphans(rows, minAgeSeconds) {
168
168
  */
169
169
  function readProcessTable() {
170
170
  // eslint-disable-next-line sonarjs/no-os-command-from-path -- fixed executable and argv
171
- return execFileSync("ps", ["-eo", "pid,ppid,etime,command"], {
171
+ return boundedExecFileSync("ps", ["-eo", "pid,ppid,etime,command"], {
172
172
  encoding: "utf8",
173
173
  maxBuffer: 32 * 1024 * 1024,
174
174
  });