@codyswann/lisa 4.11.2 → 4.12.0

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 (123) hide show
  1. package/all/copy-contents/.gitattributes +4 -0
  2. package/dist/core/learnings-merge-driver.d.ts.map +1 -1
  3. package/dist/core/learnings-merge-driver.js +15 -0
  4. package/dist/core/learnings-merge-driver.js.map +1 -1
  5. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  6. package/dist/core/upstream-evidence-manifest.js +30 -9
  7. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  8. package/dist/sync/lifecycle-defaults.d.ts +1 -0
  9. package/dist/sync/lifecycle-defaults.d.ts.map +1 -1
  10. package/dist/sync/lifecycle-defaults.js +1 -0
  11. package/dist/sync/lifecycle-defaults.js.map +1 -1
  12. package/dist/sync/registry.d.ts.map +1 -1
  13. package/dist/sync/registry.js +5 -2
  14. package/dist/sync/registry.js.map +1 -1
  15. package/package.json +2 -1
  16. package/plugins/lisa/.claude-plugin/plugin.json +10 -1
  17. package/plugins/lisa/.codex-plugin/hooks.json +9 -0
  18. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +8 -2
  20. package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +1 -1
  21. package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +1 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +31 -1
  23. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +1 -1
  24. package/plugins/lisa/hooks/failure-signature-index.mjs +482 -0
  25. package/plugins/lisa/hooks/failure-signature-index.sh +26 -0
  26. package/plugins/lisa/rules/eager/leaf-only-lifecycle.md +11 -0
  27. package/plugins/lisa/rules/reference/config-resolution.md +7 -1
  28. package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +21 -0
  29. package/plugins/lisa/scripts/rollup-blocker-classification.mjs +592 -0
  30. package/plugins/lisa/skills/lisa-github-sync/SKILL.md +8 -2
  31. package/plugins/lisa/skills/lisa-jira-sync/SKILL.md +1 -1
  32. package/plugins/lisa/skills/lisa-linear-sync/SKILL.md +1 -1
  33. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +31 -1
  34. package/plugins/lisa/skills/lisa-tracker-sync/SKILL.md +1 -1
  35. package/plugins/lisa-agy/plugin.json +1 -1
  36. package/plugins/lisa-agy/scripts/rollup-blocker-classification.mjs +592 -0
  37. package/plugins/lisa-agy/skills/lisa-github-sync/SKILL.md +8 -2
  38. package/plugins/lisa-agy/skills/lisa-jira-sync/SKILL.md +1 -1
  39. package/plugins/lisa-agy/skills/lisa-linear-sync/SKILL.md +1 -1
  40. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +31 -1
  41. package/plugins/lisa-agy/skills/lisa-tracker-sync/SKILL.md +1 -1
  42. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  45. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-copilot/.claude-plugin/plugin.json +10 -1
  48. package/plugins/lisa-copilot/hooks/failure-signature-index.mjs +482 -0
  49. package/plugins/lisa-copilot/hooks/failure-signature-index.sh +26 -0
  50. package/plugins/lisa-copilot/rules/eager/leaf-only-lifecycle.md +11 -0
  51. package/plugins/lisa-copilot/rules/reference/config-resolution.md +7 -1
  52. package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +21 -0
  53. package/plugins/lisa-copilot/scripts/rollup-blocker-classification.mjs +592 -0
  54. package/plugins/lisa-copilot/skills/lisa-github-sync/SKILL.md +8 -2
  55. package/plugins/lisa-copilot/skills/lisa-jira-sync/SKILL.md +1 -1
  56. package/plugins/lisa-copilot/skills/lisa-linear-sync/SKILL.md +1 -1
  57. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +31 -1
  58. package/plugins/lisa-copilot/skills/lisa-tracker-sync/SKILL.md +1 -1
  59. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-cursor/hooks/failure-signature-index.mjs +482 -0
  61. package/plugins/lisa-cursor/hooks/failure-signature-index.sh +26 -0
  62. package/plugins/lisa-cursor/hooks/hooks.json +4 -0
  63. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +7 -1
  64. package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +21 -0
  65. package/plugins/lisa-cursor/rules/leaf-only-lifecycle.mdc +11 -0
  66. package/plugins/lisa-cursor/scripts/rollup-blocker-classification.mjs +592 -0
  67. package/plugins/lisa-cursor/skills/lisa-github-sync/SKILL.md +8 -2
  68. package/plugins/lisa-cursor/skills/lisa-jira-sync/SKILL.md +1 -1
  69. package/plugins/lisa-cursor/skills/lisa-linear-sync/SKILL.md +1 -1
  70. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +31 -1
  71. package/plugins/lisa-cursor/skills/lisa-tracker-sync/SKILL.md +1 -1
  72. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-expo-agy/plugin.json +1 -1
  75. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  80. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  85. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  89. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  90. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  94. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  95. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  99. package/plugins/lisa-rails-agy/plugin.json +1 -1
  100. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  104. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  105. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  109. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  110. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  112. package/plugins/src/base/.claude-plugin/plugin.json +10 -1
  113. package/plugins/src/base/hooks/failure-signature-index.mjs +482 -0
  114. package/plugins/src/base/hooks/failure-signature-index.sh +26 -0
  115. package/plugins/src/base/rules/eager/leaf-only-lifecycle.md +11 -0
  116. package/plugins/src/base/rules/reference/config-resolution.md +7 -1
  117. package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +21 -0
  118. package/plugins/src/base/scripts/rollup-blocker-classification.mjs +592 -0
  119. package/plugins/src/base/skills/lisa-github-sync/SKILL.md +8 -2
  120. package/plugins/src/base/skills/lisa-jira-sync/SKILL.md +1 -1
  121. package/plugins/src/base/skills/lisa-linear-sync/SKILL.md +1 -1
  122. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +31 -1
  123. package/plugins/src/base/skills/lisa-tracker-sync/SKILL.md +1 -1
@@ -125,7 +125,7 @@ When the caller passes `--rollup`, this skill **derives a parent/container's wor
125
125
  | else any child has **started** (`In Progress` / `In Review`, or shipped to an env while a sibling has not) | `claimed` | `In Progress` |
126
126
  | else (children exist, none started) | — | unchanged — parent keeps its non-ready container state |
127
127
 
128
- - **Blocked dominates** — one blocked child surfaces `Blocked` on the parent even while siblings progress.
128
+ - **Blocked dominates** — one blocked child surfaces `Blocked` on the parent even while siblings progress. It never says *which* child or *which kind* of hold; run `scripts/rollup-blocker-classification.mjs` over the resolved child graph and carry its per-class report — blocking leaf, path, and who must act — into the rollup note. A non-zero exit means it classified nothing; that is a failure to report, never an all-clear. See `leaf-only-lifecycle` → **Classifying a hold**.
129
129
  - **Least-advanced env wins** — the parent reaches an env only when every required child has reached at least that env; it never sits ahead of its laggard child. Native completion (moving the workflow `state` to Done) fires only when the resolved env is the production `Done`, never at `On Dev`/`On Stg`.
130
130
  - **"Required" children only** — won't-do / optional (e.g. `Canceled`) children do not hold the parent open.
131
131
  - **Recursive** — a Project reaches an env only when its Issues have themselves rolled up to at least that env. Evaluate bottom-up.
@@ -687,11 +687,41 @@ left in a status it should not carry, including a stale build-ready `ready`).
687
687
  them (e.g. all `On Stg` → `On Stg`); else any child started → `claimed`; else unchanged.
688
688
  Optional / won't-do / not-planned children are terminal-but-dropped and do not hold the parent
689
689
  open.
690
+ 2a. **When the derived state is `blocked`, classify the holds before writing anything.** A bare
691
+ `blocked` on a container is a single bit, and it cannot tell a hold that waits on an external
692
+ event from one that waits on a person rewriting an acceptance criterion — the second never
693
+ clears on its own, so rendering them alike lets it accumulate silently (`leaf-only-lifecycle` →
694
+ **Classifying a hold**; #3045). Feed the resolved child graph to the shared classifier:
695
+
696
+ ```bash
697
+ ROLLUP_DIR="$(mktemp -d)"
698
+ # children[]: { ref, state, labels[], blockedBy[{ref, open}], children[] } — the graph
699
+ # step 1 already resolved, nested as deep as it was read. The script probes nothing.
700
+ jq -n --slurpfile g "$ROLLUP_DIR/graph.json" \
701
+ '{container: $g[0].container, children: $g[0].children, readError: $g[0].readError}' \
702
+ > "$ROLLUP_DIR/input.json"
703
+
704
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/rollup-blocker-classification.mjs" \
705
+ --input="$ROLLUP_DIR/input.json" --since="<last recorded fingerprint>"
706
+ ```
707
+
708
+ It **exits non-zero and classifies nothing** when the tracker could not be read, the container
709
+ has no children, or no child was readable. That is a repair failure to report, never an
710
+ all-clear: do not fall through to "no blocked children" on a non-zero exit. On success its
711
+ report names, per class, the blocking leaf, the path to it, and **who must act** — those lines
712
+ are what goes in the rollup note, verbatim. Never set the `spec_defect` marker yourself and
713
+ never infer a class from prose; a hold with nothing recorded classifies `unknown`, and the
714
+ report already asks a person to decide.
715
+
690
716
  3. **If the derived state differs from the parent's current state, apply it** via the vendor's
691
717
  lifecycle write (JIRA transition, GitHub/Linear label swap keeping exactly one `status:*`),
692
718
  removing any conflicting stale build lifecycle role — **including a stale `ready`** the parent
693
719
  should never carry. Post an idempotent `[lisa-repair-intake]` rollup note naming the derived
694
- state and the child tally (honor the backoff window + fingerprint).
720
+ state and the child tally (honor the backoff window + fingerprint). **When the derived state is
721
+ `blocked`, the note carries the classifier's per-class report** — the blocking leaf, its path,
722
+ and its actor — so an operator never descends the tree by hand to find out which item and which
723
+ kind. Use the classifier's `change.summary` as the dedupe test: an unchanged verdict has nothing
724
+ new to say and the note is **not** re-posted.
695
725
  4. **Perform native closure only at the true terminal `done`.** When — and only when — the derived
696
726
  env is the production/terminal value, finalize through the provider-native mechanism (GitHub
697
727
  `gh issue close --reason completed`, Linear move to Done state, JIRA resolved/closed verified at
@@ -38,7 +38,7 @@ The state machine (first match wins, evaluated over the **required** leaves only
38
38
  | else any leaf has **started** (claimed or in review, or shipped while a sibling has not) | active / in-progress | `claimed` (or `review` where supported) |
39
39
  | else (leaves exist, none started) | unchanged | — |
40
40
 
41
- - **Blocked dominates** — one blocked leaf surfaces blocked on the parent even while others progress.
41
+ - **Blocked dominates** — one blocked leaf surfaces blocked on the parent even while others progress. It never says *which* child or *which kind* of hold; run `scripts/rollup-blocker-classification.mjs` over the resolved child graph and carry its per-class report — blocking leaf, path, and who must act — into the rollup note. A non-zero exit means it classified nothing; that is a failure to report, never an all-clear. See `leaf-only-lifecycle` → **Classifying a hold**.
42
42
  - **Least-advanced env wins** — a parent reaches an env only once all required leaves have reached at least that env (all `On Stg` → `On Stg`; mixed dev/staging → the dev value). Native terminal closure fires only at the production `done`, never at an intermediate env.
43
43
  - **The parent never carries `ready`** — `ready` is a human "claim this leaf" signal; rollup only moves a parent between non-ready container states.
44
44
  - **Rollup is recursive** — an Epic rolls up from its Stories, each of which rolls up from its own leaves. Evaluate bottom-up.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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.11.2",
3
+ "version": "4.12.0",
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,7 +1,7 @@
1
1
  {
2
2
  "name": "lisa",
3
3
  "version": "1.0.0",
4
- "description": "Universal governance \u2014 agents, skills, commands, hooks, and rules for all projects",
4
+ "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
7
7
  },
@@ -63,6 +63,15 @@
63
63
  }
64
64
  ]
65
65
  },
66
+ {
67
+ "matcher": "Bash",
68
+ "hooks": [
69
+ {
70
+ "type": "command",
71
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/failure-signature-index.sh"
72
+ }
73
+ ]
74
+ },
66
75
  {
67
76
  "matcher": "Edit|Write|NotebookEdit|Bash",
68
77
  "hooks": [