@codyswann/lisa 4.84.6 → 4.84.8

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 (165) hide show
  1. package/all/copy-overwrite/scripts/lib/completion-authorization.mjs +282 -0
  2. package/all/copy-overwrite/scripts/lib/completion-proof-adapters.mjs +213 -0
  3. package/all/copy-overwrite/scripts/lib/completion-proof-conformance.mjs +115 -0
  4. package/all/copy-overwrite/scripts/lib/completion-proof-content.mjs +408 -0
  5. package/all/copy-overwrite/scripts/lib/completion-proof-errors.mjs +16 -0
  6. package/all/copy-overwrite/scripts/lib/completion-proof-github.mjs +233 -0
  7. package/all/copy-overwrite/scripts/lib/completion-proof-markdown.mjs +70 -0
  8. package/all/copy-overwrite/scripts/lib/completion-proof-projection.mjs +169 -0
  9. package/all/copy-overwrite/scripts/lib/completion-proof-publisher.mjs +238 -0
  10. package/all/copy-overwrite/scripts/lib/completion-proof-reader.mjs +175 -0
  11. package/all/copy-overwrite/scripts/lib/completion-proof-shape.mjs +374 -0
  12. package/all/copy-overwrite/scripts/lib/completion-proof-source.mjs +174 -0
  13. package/all/copy-overwrite/scripts/lib/history-secret-scanner.mjs +20 -5
  14. package/all/copy-overwrite/scripts/lib/npm-update-helper-inventory.mjs +15 -0
  15. package/all/copy-overwrite/scripts/lib/usage-effectiveness.d.mts +27 -0
  16. package/all/copy-overwrite/scripts/lib/usage-effectiveness.mjs +156 -0
  17. package/all/copy-overwrite/scripts/lib/usage-ledger-integrity.d.mts +8 -0
  18. package/all/copy-overwrite/scripts/lib/usage-ledger-integrity.mjs +141 -0
  19. package/all/copy-overwrite/scripts/lib/usage-ledger.d.mts +89 -0
  20. package/all/copy-overwrite/scripts/lib/usage-ledger.mjs +206 -0
  21. package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +3 -1
  22. package/all/copy-overwrite/scripts/lisa-work-item.mjs +255 -39
  23. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +141 -3
  24. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  25. package/dist/core/lisa-owned-hash-ledger.js +186 -0
  26. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  27. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  28. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  29. package/dist/core/upstream-evidence-manifest.js +108 -15
  30. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  31. package/dist/opencode/plugin-templates/parity-safety-net.sh +3 -1
  32. package/dist/utils/effectiveness.d.ts +4 -41
  33. package/dist/utils/effectiveness.d.ts.map +1 -1
  34. package/dist/utils/effectiveness.js +2 -126
  35. package/dist/utils/effectiveness.js.map +1 -1
  36. package/dist/utils/usage-accounting.d.ts +5 -100
  37. package/dist/utils/usage-accounting.d.ts.map +1 -1
  38. package/dist/utils/usage-accounting.js +4 -287
  39. package/dist/utils/usage-accounting.js.map +1 -1
  40. package/package.json +4 -4
  41. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  44. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +7 -1
  45. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  46. package/plugins/lisa/hooks/block-host-name-leak.mjs +25 -13
  47. package/plugins/lisa/hooks/host-name-command-context.mjs +16 -4
  48. package/plugins/lisa/hooks/parity-safety-net.sh +3 -1
  49. package/plugins/lisa/rules/eager/00-rule-index.md +1 -0
  50. package/plugins/lisa/rules/reference/completion-authorization.md +10 -0
  51. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  52. package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +7 -1
  53. package/plugins/lisa/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  54. package/plugins/lisa-agy/hooks/block-host-name-leak.mjs +25 -13
  55. package/plugins/lisa-agy/hooks/host-name-command-context.mjs +16 -4
  56. package/plugins/lisa-agy/hooks/parity-safety-net.sh +3 -1
  57. package/plugins/lisa-agy/plugin.json +1 -1
  58. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  59. package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +7 -1
  60. package/plugins/lisa-agy/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  61. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  64. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +1 -1
  68. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-copilot/hooks/block-host-name-leak.mjs +25 -13
  70. package/plugins/lisa-copilot/hooks/host-name-command-context.mjs +16 -4
  71. package/plugins/lisa-copilot/hooks/parity-safety-net.sh +3 -1
  72. package/plugins/lisa-copilot/rules/eager/00-rule-index.md +1 -0
  73. package/plugins/lisa-copilot/rules/reference/completion-authorization.md +10 -0
  74. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  75. package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +7 -1
  76. package/plugins/lisa-copilot/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  77. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-cursor/hooks/block-host-name-leak.mjs +25 -13
  79. package/plugins/lisa-cursor/hooks/host-name-command-context.mjs +16 -4
  80. package/plugins/lisa-cursor/hooks/parity-safety-net.sh +3 -1
  81. package/plugins/lisa-cursor/rules/00-rule-index.mdc +1 -0
  82. package/plugins/lisa-cursor/rules/completion-authorization-reference.mdc +15 -0
  83. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  84. package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +7 -1
  85. package/plugins/lisa-cursor/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  86. package/plugins/lisa-devin/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-devin/.devin-plugin/plugin.json +1 -1
  88. package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +25 -13
  89. package/plugins/lisa-devin/hooks/host-name-command-context.mjs +16 -4
  90. package/plugins/lisa-devin/hooks/parity-safety-net.sh +3 -1
  91. package/plugins/lisa-devin/rules/eager/00-rule-index.md +1 -0
  92. package/plugins/lisa-devin/rules/reference/completion-authorization.md +10 -0
  93. package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  94. package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +7 -1
  95. package/plugins/lisa-devin/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  96. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  98. package/plugins/lisa-expo-agy/plugin.json +1 -1
  99. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +1 -1
  103. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  105. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  106. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +1 -1
  110. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  112. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  113. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +1 -1
  117. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  118. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  119. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  120. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  122. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +1 -1
  123. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +1 -1
  124. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  126. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  127. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +1 -1
  131. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  132. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  133. package/plugins/lisa-rails-agy/plugin.json +1 -1
  134. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  135. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  136. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +1 -1
  137. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +1 -1
  138. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  140. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  141. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  142. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  143. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +1 -1
  144. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +1 -1
  145. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  146. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  147. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  148. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  149. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  150. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +1 -1
  151. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +1 -1
  152. package/plugins/src/base/hooks/block-host-name-leak.mjs +25 -13
  153. package/plugins/src/base/hooks/host-name-command-context.mjs +16 -4
  154. package/plugins/src/base/hooks/parity-safety-net.sh +3 -1
  155. package/plugins/src/base/rules/eager/00-rule-index.md +1 -0
  156. package/plugins/src/base/rules/reference/completion-authorization.md +10 -0
  157. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +15 -1
  158. package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +7 -1
  159. package/plugins/src/base/skills/lisa-tracker-evidence/references/completion-authorization.md +193 -0
  160. package/scripts/lib/host-name-expanded-command-cases.mjs +286 -0
  161. package/scripts/lib/host-name-field-occurrence-cases.mjs +60 -0
  162. package/scripts/two-channel-couplings.json +2 -2
  163. package/scripts/verify-host-name-target-scope.mjs +27 -1
  164. package/typescript/copy-overwrite/.prettierignore +15 -0
  165. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +32 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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.84.6",
3
+ "version": "4.84.8",
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"
@@ -287,8 +287,16 @@ export function publishableText(tokens, cwd, noun) {
287
287
  const value = valueAt(tokens, index);
288
288
  // On `gh api`, `-F` is `--field`: `key=@path` or `key=value`. Read as a
289
289
  // bare path, `body=@file` named no file and published unchecked (#4462).
290
- if (noun === "api" && /^[\w.[\]-]+=/u.test(value))
291
- return [fieldSource(value, cwd)];
290
+ if (
291
+ (noun === "api" || (noun === undefined && bare === "-F")) &&
292
+ /^[\w.[\]-]+=/u.test(value)
293
+ ) {
294
+ const field = fieldSource(value, cwd);
295
+ if (noun === "api") return [field];
296
+ // An unresolved noun may become api or issue/pr. Inspect both possible
297
+ // meanings of -F without evaluating the expansion or certifying routing.
298
+ return [field, { origin: value, text: readIfPresent(value, cwd) }];
299
+ }
292
300
  const file = value.replace(/^@/u, "");
293
301
  return [{ origin: file, text: readIfPresent(file, cwd) }];
294
302
  }
@@ -414,20 +422,24 @@ export async function evaluate(command, projectDir) {
414
422
  // protection, and name the unread input instead of claiming the text clean.
415
423
  if (
416
424
  context.cwd === undefined &&
417
- [...context.flags].some(([flag, item]) => {
425
+ [
426
+ ...context.flags,
427
+ ...(context.noun === "api" || context.noun === undefined
428
+ ? context.fieldOccurrences
429
+ : []),
430
+ ].some(([flag, item]) => {
418
431
  const field =
419
- context.noun === "api" && FIELD_FLAGS.has(flag)
432
+ (context.noun === "api" || context.noun === undefined) &&
433
+ FIELD_FLAGS.has(flag)
420
434
  ? /^([^=]+)=@(.+)$/u.exec(item.value)
421
435
  : null;
422
- const file =
423
- field !== null
424
- ? PROSE_FIELDS.has(field[1])
425
- ? field[2]
426
- : undefined
427
- : FILE_FLAGS.has(flag)
428
- ? item.value.replace(/^@/, "")
429
- : undefined;
430
- return file !== undefined && !path.isAbsolute(file);
436
+ const files = [
437
+ field !== null && PROSE_FIELDS.has(field[1]) ? field[2] : undefined,
438
+ FILE_FLAGS.has(flag) && (context.noun !== "api" || field === null)
439
+ ? item.value.replace(/^@/, "")
440
+ : undefined,
441
+ ];
442
+ return files.some(file => file !== undefined && !path.isAbsolute(file));
431
443
  })
432
444
  ) {
433
445
  return {
@@ -103,6 +103,7 @@ function words(command) {
103
103
  */
104
104
  function argumentsOf(input) {
105
105
  const flags = new Map(),
106
+ fieldOccurrences = [],
106
107
  positional = [],
107
108
  tokens = [];
108
109
  // Any expansion can add/replace routing arguments after shell word splitting.
@@ -139,23 +140,34 @@ function argumentsOf(input) {
139
140
  flag === "-R" ? "--repo" : flag === "-X" ? "--method" : flag,
140
141
  value
141
142
  );
143
+ // API fields are additive even though routing options use last values.
144
+ if (FIELD_FLAGS.has(flag)) fieldOccurrences.push([flag, value]);
142
145
  tokens.push(value.value);
143
146
  } else if (!word.value.startsWith("-")) positional.push(word);
144
147
  else if (!word.literal) certain = false;
145
148
  }
146
- const noun = positional[0]?.value,
147
- verb = positional[1]?.value;
149
+ const nounWord = positional[0],
150
+ verbWord = positional[1];
151
+ const noun = nounWord?.literal ? nounWord.value : undefined,
152
+ verb = verbWord?.value;
153
+ // Command-name expansions can supply several argv words. A following
154
+ // read-looking literal does not prove that the expanded command is a read.
155
+ const uncertainName =
156
+ nounWord?.literal === false ||
157
+ (["issue", "pr"].includes(noun) && verbWord?.literal === false);
148
158
  const method = flags.get("--method");
149
159
  const writes =
150
- noun === "api"
160
+ uncertainName ||
161
+ (noun === "api"
151
162
  ? method
152
163
  ? !method.literal || METHODS.has(method.value.toUpperCase())
153
164
  : [...FIELD_FLAGS].some(flag => flags.has(flag)) ||
154
165
  Boolean(flags.get("--input")?.value)
155
166
  : ["issue", "pr"].includes(noun) &&
156
- ["create", "comment", "edit"].includes(verb);
167
+ ["create", "comment", "edit"].includes(verb));
157
168
  return {
158
169
  flags,
170
+ fieldOccurrences,
159
171
  positional,
160
172
  tokens: ["gh", ...tokens],
161
173
  noun,
@@ -3472,8 +3472,10 @@ if [ -f "$rules_file" ]; then
3472
3472
  # here — before the remaining rules ran, and with an exit status that is
3473
3473
  # not a refusal. The `||` puts the pipeline in a condition context, where
3474
3474
  # a non-zero status is expected rather than fatal.
3475
+ # Consume the whole input: grep -q can close an early match while printf
3476
+ # is still writing, making pipefail report SIGPIPE instead of the match.
3475
3477
  rule_status=0
3476
- printf '%s' "$custom_command_str" | grep -Eiq -- "$rule" || rule_status=$?
3478
+ printf '%s' "$custom_command_str" | grep -Ei -- "$rule" >/dev/null || rule_status=$?
3477
3479
  case "$rule_status" in
3478
3480
  0) block "matched a project custom safety rule (${rules_file##*/}): $rule" ;;
3479
3481
  1) ;; # no match
@@ -46,6 +46,7 @@ Paths are relative to this file.
46
46
  | `bdd-e2e-coverage` | the work item adds or changes a user-observable surface | [../reference/bdd-e2e-coverage.md](../reference/bdd-e2e-coverage.md) |
47
47
  | `reset-seed-coverage` | the work item adds or changes persistent state | [../reference/reset-seed-coverage.md](../reference/reset-seed-coverage.md) |
48
48
  | `claim-evidence-mapping` | citing evidence for a claim, or reviewing evidence someone cited | [../reference/claim-evidence-mapping.md](../reference/claim-evidence-mapping.md) |
49
+ | `completion-authorization` | publishing proof or completing work items | [../reference/completion-authorization.md](../reference/completion-authorization.md) |
49
50
  | `observability-audit` | running the `lisa-monitor` audit-and-file arm | [../reference/observability-audit.md](../reference/observability-audit.md) |
50
51
  | `readiness-rubric` | judging whether an unattended fleet may run in a repository | [../reference/readiness-rubric.md](../reference/readiness-rubric.md) |
51
52
 
@@ -0,0 +1,10 @@
1
+ # Accepted completion proof
2
+
3
+ Read the single maintained contract at
4
+ `skills/lisa-tracker-evidence/references/completion-authorization.md`, relative
5
+ to the Lisa plugin root. The tracker-evidence skill resolves it as its own
6
+ `references/completion-authorization.md` companion.
7
+
8
+ The contract travels with skill resources on every supported agent, including
9
+ Antigravity, whose native plugin intentionally omits the rules tree. The shared
10
+ Node producer and completion guard enforce the same contract for every agent.
@@ -1353,7 +1353,8 @@ Four properties make the command safe to run unconditionally:
1353
1353
  above does, and for the same reason. A merged pull request is not evidence
1354
1354
  on its own: the writer resolves `<baseRefName>` through `.lisa.config.json`
1355
1355
  `deploy.branches` and applies only the role that base earned. A merge into
1356
- the production deploy branch is terminal and closes the item; a merge into a
1356
+ the production deploy branch becomes eligible for terminal completion only
1357
+ after canonical accepted-for-completion proof passes; a merge into a
1357
1358
  branch mapping to a lower env records that env's role and leaves the item
1358
1359
  open; a merge into a branch the project does not deploy at all — an
1359
1360
  integration/stack branch — records nothing, closes nothing, and reports the
@@ -1375,6 +1376,19 @@ If the command refuses, do not close by hand. A refusal means the evidence is
1375
1376
  not there, and a lifecycle step performed by hand is one nothing can verify
1376
1377
  happened.
1377
1378
 
1379
+ `work-item pending-proof` is a normal nonterminal outcome: the merge does not
1380
+ prove the configured whole delivery run, runtime behavior, typed attachments,
1381
+ CONFORMS, canonical Verify usage, exact linkage and acceptance. Keep the item
1382
+ owned/open, finish canonical Verify and `lisa-tracker-evidence`, and use its
1383
+ shipped `publish-completion-proof` producer after actual uploads/readbacks.
1384
+ Then retry canonical completion. Read the sibling skill companion
1385
+ `../lisa-tracker-evidence/references/completion-authorization.md` relative to this
1386
+ skill directory; it is the portable `completion-authorization` reference.
1387
+ Publish an immutable required pending-state journey artifact first; append the
1388
+ real native terminal readback/acceptedAt afterward. Never require the future
1389
+ close event as its own authorization. A configured bot publisher's still-running
1390
+ pinned attempt keeps completion pending until that exact attempt succeeds.
1391
+
1378
1392
  **The backstop, for the ones that still slip:** `lisa-work-item.mjs sweep`
1379
1393
  reports every open item — in the **ready** lane as well as the **claimed** one —
1380
1394
  that a commit on a deploy branch DECLARES via its `Work-Item:` trailer, and
@@ -14,6 +14,11 @@ Apply `lisa-tracker-sync` — **Agent attribution** when composing evidence comm
14
14
 
15
15
  ## Workflow
16
16
 
17
+ The portable accepted-completion contract is this skill's own
18
+ `references/completion-authorization.md` companion. Read that file when preparing
19
+ or publishing completion proof. It ships with the skill even on runtimes that
20
+ omit the plugin rules tree; do not assume a runtime-specific rules directory.
21
+
17
22
  1. Resolve tracker config (same logic as `lisa-tracker-write`).
18
23
  2. Missing / empty → stop and report `"No tracker configured in .lisa.config.json. Run /lisa:setup:jira, /lisa:setup:github, or /lisa:setup:linear first."`
19
24
  3. Before dispatching, update the generated evidence artifact through `lisa-usage-accounting` so the comment body / PR evidence section carries a direct `lisa-verify` usage entry in the canonical `## Lisa Usage` section. If the originating work item's parentage or child refs are already known, prefer `record_and_rollup` so ancestor totals refresh in the same write; otherwise still write the direct entry, and if trustworthy runtime usage is unavailable, write `source: unavailable` with nullable token/cost fields instead of skipping the row.
@@ -22,7 +27,8 @@ Apply `lisa-tracker-sync` — **Agent attribution** when composing evidence comm
22
27
  - `github` → invoke `lisa-github-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<ISSUE_REF> <EVIDENCE_DIR> <PR_NUMBER>` where `ISSUE_REF` is `org/repo#<number>` or a GitHub issue URL.
23
28
  - `linear` → invoke `lisa-linear-evidence` with `$ARGUMENTS` verbatim. Arg shape: `<IDENTIFIER> <EVIDENCE_DIR>` where `IDENTIFIER` is a Linear Issue identifier (e.g., `ENG-123`).
24
29
  - Anything else → stop and report `"Unknown tracker '<value>' in .lisa.config.json. Expected 'jira', 'github', or 'linear'."`
25
- 5. Pass through the vendor skill's output.
30
+ 5. For supported GitHub/Linear production completion, after actual uploads and exact native readbacks, prepare the accepted-for-completion input from the observed source/delivery, schema2 verdicts, actual typed attachment pointers, complete requirement conjunction map, structured CONFORMS report, canonical Verify usage, linkage and explicit acceptance. Apply the shipped `completion-authorization` reference; the executable validates the contract in every installed host. Run `node scripts/lisa-work-item.mjs publish-completion-proof --ref <exact-work-item> --record <evidence-dir>/completion-record.json`. It uploads immutable hash-named acceptance bytes to the implementation repository's `pr-assets`, reads them back and publishes the exact-item native locator. Never construct a locator manually or treat a narrative evidence comment as acceptance. Jira completion remains unsupported.
31
+ 6. Pass through both the vendor output and actual producer category. `published/pending-producer` means the pinned configured automation attempt must finish successfully before completion; do not rewrite the asset after the job or invent a successful future outcome. A User publisher does not require a producer workflow run. Only after accepted publication may the canonical lifecycle owner retry `complete`; pending proof preserves ownership and state and names the Verify/evidence action. Capture actual terminal readback/usage acceptedAt afterward, not as a circular publication prerequisite. A required pending-state journey artifact is immutable Phase-A proof captured before completion; the later actual terminal readback is a separate Phase-B supplement.
26
32
 
27
33
  ## Rules
28
34