@codyswann/lisa 2.116.2 → 2.117.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 (77) hide show
  1. package/dist/codex/hooks-installer.js +60 -16
  2. package/dist/codex/hooks-installer.js.map +1 -1
  3. package/dist/codex/scripts/inject-rules.sh +14 -2
  4. package/package.json +3 -2
  5. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa/hooks/inject-rules.sh +14 -3
  8. package/plugins/lisa/rules/eager/base-rules.md +70 -0
  9. package/plugins/lisa/rules/eager/coding-philosophy.md +27 -0
  10. package/plugins/lisa/rules/eager/config-resolution.md +28 -0
  11. package/plugins/lisa/rules/eager/documentation-source-paths.md +13 -0
  12. package/plugins/lisa/rules/eager/empirical-inquiry.md +22 -0
  13. package/plugins/lisa/rules/eager/intent-routing.md +18 -0
  14. package/plugins/lisa/rules/eager/leaf-only-lifecycle.md +39 -0
  15. package/plugins/lisa/rules/eager/prd-lifecycle-rollup.md +31 -0
  16. package/plugins/lisa/rules/eager/repo-scope-split.md +39 -0
  17. package/plugins/lisa/rules/eager/security-audit-handling.md +29 -0
  18. package/plugins/lisa/rules/eager/usage-accounting.md +28 -0
  19. package/plugins/lisa/rules/eager/verification.md +21 -0
  20. package/plugins/lisa/rules/eager/wiki-knowledge-source.md +16 -0
  21. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  37. package/plugins/src/base/hooks/inject-rules.sh +14 -3
  38. package/plugins/src/base/rules/eager/base-rules.md +70 -0
  39. package/plugins/src/base/rules/eager/coding-philosophy.md +27 -0
  40. package/plugins/src/base/rules/eager/config-resolution.md +28 -0
  41. package/plugins/src/base/rules/eager/documentation-source-paths.md +13 -0
  42. package/plugins/src/base/rules/eager/empirical-inquiry.md +22 -0
  43. package/plugins/src/base/rules/eager/intent-routing.md +18 -0
  44. package/plugins/src/base/rules/eager/leaf-only-lifecycle.md +39 -0
  45. package/plugins/src/base/rules/eager/prd-lifecycle-rollup.md +31 -0
  46. package/plugins/src/base/rules/eager/repo-scope-split.md +39 -0
  47. package/plugins/src/base/rules/eager/security-audit-handling.md +29 -0
  48. package/plugins/src/base/rules/eager/usage-accounting.md +28 -0
  49. package/plugins/src/base/rules/eager/verification.md +21 -0
  50. package/plugins/src/base/rules/eager/wiki-knowledge-source.md +16 -0
  51. package/scripts/check-rules-pairing.sh +91 -0
  52. /package/plugins/lisa/rules/{base-rules.md → reference/base-rules.md} +0 -0
  53. /package/plugins/lisa/rules/{coding-philosophy.md → reference/coding-philosophy.md} +0 -0
  54. /package/plugins/lisa/rules/{config-resolution.md → reference/config-resolution.md} +0 -0
  55. /package/plugins/lisa/rules/{documentation-source-paths.md → reference/documentation-source-paths.md} +0 -0
  56. /package/plugins/lisa/rules/{empirical-inquiry.md → reference/empirical-inquiry.md} +0 -0
  57. /package/plugins/lisa/rules/{intent-routing.md → reference/intent-routing.md} +0 -0
  58. /package/plugins/lisa/rules/{leaf-only-lifecycle.md → reference/leaf-only-lifecycle.md} +0 -0
  59. /package/plugins/lisa/rules/{prd-lifecycle-rollup.md → reference/prd-lifecycle-rollup.md} +0 -0
  60. /package/plugins/lisa/rules/{repo-scope-split.md → reference/repo-scope-split.md} +0 -0
  61. /package/plugins/lisa/rules/{security-audit-handling.md → reference/security-audit-handling.md} +0 -0
  62. /package/plugins/lisa/rules/{usage-accounting.md → reference/usage-accounting.md} +0 -0
  63. /package/plugins/lisa/rules/{verification.md → reference/verification.md} +0 -0
  64. /package/plugins/lisa/rules/{wiki-knowledge-source.md → reference/wiki-knowledge-source.md} +0 -0
  65. /package/plugins/src/base/rules/{base-rules.md → reference/base-rules.md} +0 -0
  66. /package/plugins/src/base/rules/{coding-philosophy.md → reference/coding-philosophy.md} +0 -0
  67. /package/plugins/src/base/rules/{config-resolution.md → reference/config-resolution.md} +0 -0
  68. /package/plugins/src/base/rules/{documentation-source-paths.md → reference/documentation-source-paths.md} +0 -0
  69. /package/plugins/src/base/rules/{empirical-inquiry.md → reference/empirical-inquiry.md} +0 -0
  70. /package/plugins/src/base/rules/{intent-routing.md → reference/intent-routing.md} +0 -0
  71. /package/plugins/src/base/rules/{leaf-only-lifecycle.md → reference/leaf-only-lifecycle.md} +0 -0
  72. /package/plugins/src/base/rules/{prd-lifecycle-rollup.md → reference/prd-lifecycle-rollup.md} +0 -0
  73. /package/plugins/src/base/rules/{repo-scope-split.md → reference/repo-scope-split.md} +0 -0
  74. /package/plugins/src/base/rules/{security-audit-handling.md → reference/security-audit-handling.md} +0 -0
  75. /package/plugins/src/base/rules/{usage-accounting.md → reference/usage-accounting.md} +0 -0
  76. /package/plugins/src/base/rules/{verification.md → reference/verification.md} +0 -0
  77. /package/plugins/src/base/rules/{wiki-knowledge-source.md → reference/wiki-knowledge-source.md} +0 -0
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env bash
2
+ # Fails if any plugin's rules/eager/X.md is missing its rules/reference/X.md
3
+ # pair (or vice versa). The eager/reference split documents the contract that
4
+ # every eager head points at a reference body for the long-form detail; an
5
+ # unpaired file means either a head without a body (broken breadcrumb) or a
6
+ # body without a head (orphaned, never injected).
7
+ #
8
+ # Bootstrap files are exempt: rules/eager/00-bootstrap.md (and any other file
9
+ # matching rules/eager/00-*.md) is allowed to have no reference pair. The
10
+ # leading "00-" prefix marks files that are eager-only by design.
11
+ #
12
+ # Skip rule: a rule may opt out of pairing by listing its basename in
13
+ # rules/.pair-exempt — one filename per line, comments start with `#`. Use
14
+ # sparingly; the default expectation is that every eager file pairs.
15
+ set -euo pipefail
16
+
17
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
18
+ ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
19
+ cd "$ROOT_DIR"
20
+
21
+ failed=0
22
+
23
+ check_plugin() {
24
+ local rules_dir="$1"
25
+ local eager_dir="$rules_dir/eager"
26
+ local reference_dir="$rules_dir/reference"
27
+
28
+ # Skip plugins that haven't adopted the split yet (no eager/ subdir).
29
+ [ -d "$eager_dir" ] || return 0
30
+
31
+ # Build the opt-out list, if present.
32
+ local exempt_file="$rules_dir/.pair-exempt"
33
+ local exempt_pattern=""
34
+ if [ -f "$exempt_file" ]; then
35
+ exempt_pattern="$(grep -v '^[[:space:]]*#' "$exempt_file" | grep -v '^[[:space:]]*$' || true)"
36
+ fi
37
+
38
+ # Every eager/X.md (except 00-bootstrap-style files and explicit exemptions)
39
+ # must have a reference/X.md pair.
40
+ while IFS= read -r eager_file; do
41
+ local base
42
+ base="$(basename "$eager_file")"
43
+ # Built-in exemption for bootstrap files.
44
+ case "$base" in
45
+ 00-*) continue ;;
46
+ esac
47
+ # User-declared exemptions.
48
+ if [ -n "$exempt_pattern" ] && echo "$exempt_pattern" | grep -qxF "$base"; then
49
+ continue
50
+ fi
51
+ if [ ! -f "$reference_dir/$base" ]; then
52
+ echo "✗ Missing reference body for eager rule: $eager_file" >&2
53
+ echo " Expected: $reference_dir/$base" >&2
54
+ failed=1
55
+ fi
56
+ done < <(find "$eager_dir" -maxdepth 1 -type f -name '*.md' | sort)
57
+
58
+ # Every reference/X.md must have an eager/X.md pair (catch orphans on the
59
+ # other side: a reference body with no breadcrumb pointing to it is dead).
60
+ if [ -d "$reference_dir" ]; then
61
+ while IFS= read -r ref_file; do
62
+ local base
63
+ base="$(basename "$ref_file")"
64
+ if [ -n "$exempt_pattern" ] && echo "$exempt_pattern" | grep -qxF "$base"; then
65
+ continue
66
+ fi
67
+ if [ ! -f "$eager_dir/$base" ]; then
68
+ echo "✗ Orphaned reference body (no eager head): $ref_file" >&2
69
+ echo " Expected: $eager_dir/$base" >&2
70
+ failed=1
71
+ fi
72
+ done < <(find "$reference_dir" -maxdepth 1 -type f -name '*.md' | sort)
73
+ fi
74
+ }
75
+
76
+ # Check every plugins/*/rules and plugins/src/*/rules directory.
77
+ while IFS= read -r rules_dir; do
78
+ check_plugin "$rules_dir"
79
+ done < <(find "$ROOT_DIR/plugins" -type d -name rules | sort)
80
+
81
+ if [ "$failed" -ne 0 ]; then
82
+ echo "" >&2
83
+ echo " Every rules/eager/X.md must have a paired rules/reference/X.md" >&2
84
+ echo " (and vice versa) so the eager head's breadcrumb to the full" >&2
85
+ echo " reference body resolves. To exempt a file, either name it" >&2
86
+ echo " 00-*.md (bootstrap convention) or list its basename in" >&2
87
+ echo " <plugin>/rules/.pair-exempt (one per line)." >&2
88
+ exit 1
89
+ fi
90
+
91
+ echo "✓ Every eager rule has its paired reference body (and vice versa)."