@codyswann/lisa 4.64.0 → 4.64.2

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 (112) hide show
  1. package/dist/core/instruction-files-migration.d.ts +2 -1
  2. package/dist/core/instruction-files-migration.d.ts.map +1 -1
  3. package/dist/core/instruction-files-migration.js +5 -1
  4. package/dist/core/instruction-files-migration.js.map +1 -1
  5. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  6. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  7. package/dist/core/upstream-evidence-manifest.js +11 -10
  8. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  9. package/package.json +4 -4
  10. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  12. package/plugins/lisa/.codex-plugin/skills/lisa-design-intake/SKILL.md +1 -1
  13. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +3 -1
  14. package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +2 -2
  15. package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +9 -3
  16. package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +2 -1
  17. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
  18. package/plugins/lisa/rules/eager/tool-access-gate.md +13 -11
  19. package/plugins/lisa/rules/reference/design-source-of-truth.md +32 -10
  20. package/plugins/lisa/rules/reference/tool-access-gate.md +31 -38
  21. package/plugins/lisa/scripts/design-source-gate.mjs +35 -13
  22. package/plugins/lisa/skills/lisa-design-intake/SKILL.md +1 -1
  23. package/plugins/lisa/skills/lisa-implement/SKILL.md +3 -1
  24. package/plugins/lisa/skills/lisa-quality-review/SKILL.md +2 -2
  25. package/plugins/lisa/skills/lisa-review-local/SKILL.md +9 -3
  26. package/plugins/lisa/skills/lisa-tdd-implementation/SKILL.md +2 -1
  27. package/plugins/lisa/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
  28. package/plugins/lisa-agy/plugin.json +1 -1
  29. package/plugins/lisa-agy/scripts/design-source-gate.mjs +35 -13
  30. package/plugins/lisa-agy/skills/lisa-design-intake/SKILL.md +1 -1
  31. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +3 -1
  32. package/plugins/lisa-agy/skills/lisa-quality-review/SKILL.md +2 -2
  33. package/plugins/lisa-agy/skills/lisa-review-local/SKILL.md +9 -3
  34. package/plugins/lisa-agy/skills/lisa-tdd-implementation/SKILL.md +2 -1
  35. package/plugins/lisa-agy/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
  36. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  39. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-copilot/rules/eager/tool-access-gate.md +13 -11
  43. package/plugins/lisa-copilot/rules/reference/design-source-of-truth.md +32 -10
  44. package/plugins/lisa-copilot/rules/reference/tool-access-gate.md +31 -38
  45. package/plugins/lisa-copilot/scripts/design-source-gate.mjs +35 -13
  46. package/plugins/lisa-copilot/skills/lisa-design-intake/SKILL.md +1 -1
  47. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +3 -1
  48. package/plugins/lisa-copilot/skills/lisa-quality-review/SKILL.md +2 -2
  49. package/plugins/lisa-copilot/skills/lisa-review-local/SKILL.md +9 -3
  50. package/plugins/lisa-copilot/skills/lisa-tdd-implementation/SKILL.md +2 -1
  51. package/plugins/lisa-copilot/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
  52. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-cursor/rules/design-source-of-truth-reference.mdc +32 -10
  54. package/plugins/lisa-cursor/rules/tool-access-gate-reference.mdc +31 -38
  55. package/plugins/lisa-cursor/rules/tool-access-gate.mdc +13 -11
  56. package/plugins/lisa-cursor/scripts/design-source-gate.mjs +35 -13
  57. package/plugins/lisa-cursor/skills/lisa-design-intake/SKILL.md +1 -1
  58. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +3 -1
  59. package/plugins/lisa-cursor/skills/lisa-quality-review/SKILL.md +2 -2
  60. package/plugins/lisa-cursor/skills/lisa-review-local/SKILL.md +9 -3
  61. package/plugins/lisa-cursor/skills/lisa-tdd-implementation/SKILL.md +2 -1
  62. package/plugins/lisa-cursor/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
  63. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-expo-agy/plugin.json +1 -1
  66. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  71. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  76. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  81. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  86. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-rails-agy/plugin.json +1 -1
  91. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  96. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  100. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  101. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  103. package/plugins/src/base/rules/eager/tool-access-gate.md +13 -11
  104. package/plugins/src/base/rules/reference/design-source-of-truth.md +32 -10
  105. package/plugins/src/base/rules/reference/tool-access-gate.md +31 -38
  106. package/plugins/src/base/scripts/design-source-gate.mjs +35 -13
  107. package/plugins/src/base/skills/lisa-design-intake/SKILL.md +1 -1
  108. package/plugins/src/base/skills/lisa-implement/SKILL.md +3 -1
  109. package/plugins/src/base/skills/lisa-quality-review/SKILL.md +2 -2
  110. package/plugins/src/base/skills/lisa-review-local/SKILL.md +9 -3
  111. package/plugins/src/base/skills/lisa-tdd-implementation/SKILL.md +2 -1
  112. package/plugins/src/base/skills/lisa-tracker-source-artifacts/SKILL.md +3 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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.64.0",
3
+ "version": "4.64.2",
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,21 +1,23 @@
1
1
  # Tool Access Gate (load-bearing)
2
2
 
3
+ - If you can't reach something you need, such as a repository, a secret, an API, or a connector, say exactly what's missing in your first message and stop. Don't substitute, mock, or guess.
4
+
5
+ If the missing access is discovered after work begins, say exactly what's
6
+ missing in your next message and stop.
7
+
3
8
  Only take on work you can finish. Before implementation starts — and again the
4
9
  moment a new requirement surfaces mid-flow — enumerate every external tool the
5
10
  work item needs (implementation, proof command, remote verification: AWS CLI,
6
11
  Figma, Jam, Sentry, SonarCloud, PostHog, device/browser harnesses, databases,
7
12
  deploy targets, …) and **prove access with a cheap read-only probe**, routing
8
- through the matching `*-access` skill where one exists. Presence on PATH is not
9
- access; a probe failure counts only after exhausting documented credential
10
- sources.
13
+ through the matching `*-access` skill where one exists. Resolve credentials through the documented access path before probing;
14
+ presence on PATH is not access. If that path or the probe cannot provide the
15
+ required access, report the gap and stop.
11
16
 
12
- If a required tool is inaccessible: **break out — never work around it.** Post
13
- an "Access Needed" comment on the work item (plain-English summary, the exact
14
- credential/role/env var to grant, and the probe that must pass), transition it
15
- to the configured blocked state with the `human_needed` marker, and write a
16
- `blocked` verification verdict. Substituting weaker verification, mocking the
17
- inaccessible system, guessing at tool contents, or narrowing scope to dodge the
18
- gap are all forbidden.
17
+ The message must name the missing resource, the operation it blocks, and any
18
+ known access requirement, without exposing secret values. Substituting weaker
19
+ verification, mocking the inaccessible system, guessing at its contents, or
20
+ narrowing scope to dodge the gap are all forbidden.
19
21
 
20
- Full contract (probe table, comment format, resume path):
22
+ Full contract (probe table, blocker report, resume path):
21
23
  [reference/tool-access-gate.md](../reference/tool-access-gate.md).
@@ -1,18 +1,41 @@
1
1
  # Design Source of Truth
2
2
 
3
3
  > Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
4
- > section below is the former eager head, preserved verbatim; the full
4
+ > section below is the former eager head, maintained with the full
5
5
  > contract follows it. Reachable on demand via [the rule index](../eager/00-rule-index.md).
6
6
 
7
7
  ## Design Source of Truth (load-bearing)
8
8
 
9
- **Figma is the design source of truth, and every UI surface a change touches declares where its design came from.** A changed UI surface that neither cites a Figma node nor carries the designated marker is a contract violation — and so is a surface whose declaration the gate cannot resolve.
9
+ **When enabled, Figma is the design source of truth, and every UI surface a change touches declares where its design came from.** A changed UI surface that neither cites a Figma node nor carries the designated marker is a contract violation — and so is a surface whose declaration the gate cannot resolve.
10
10
 
11
11
  **One vendor-neutral contract, cited by** `lisa-implement`, `lisa-tdd-implementation`, `lisa-review-local`, `lisa-quality-review`, and `lisa-tracker-source-artifacts` (the `leaf-only-lifecycle` / `repo-scope-split` precedent: one shared slug, never divergent per-skill prose).
12
12
 
13
+ ## Explicit project opt-out
14
+
15
+ A project with **no design source at all** may set this in `.lisa.config.json`:
16
+
17
+ ```json
18
+ { "designSource": { "enabled": false } }
19
+ ```
20
+
21
+ Only `designSource.enabled` set to boolean `false` opts out. Absent, true, and
22
+ invalid values retain the default enforcement. The explicit configuration is
23
+ the auditable record; it replaces per-file exception markers for this project.
24
+ The gate exits 0 with `SKIPPED: designSource.enabled=false` before resolving the
25
+ diff. JSON output reports `verdict: "SKIPPED"`, the config key in `reasons`, and
26
+ zero judged surfaces. A skip does not claim that surfaces passed inspection.
27
+
28
+ When opted out, the five consuming skills omit the design-source step from
29
+ plans, tickets, teammate instructions, and review; they do not ask for markers,
30
+ Figma nodes, or Figma access for this obligation. All declaration, sync-back,
31
+ and fail-closed requirements below apply only when enabled. Host design-system
32
+ rules, `design-value-binding`, and `bdd-e2e-coverage` remain independent and
33
+ unchanged. A project that has Figma must still not use `exclude` to hide its UI
34
+ tree from this contract.
35
+
13
36
  ## Membership
14
37
 
15
- Membership is **surface, not repo name or file extension**: a file is in scope the moment a change makes it render something user-observable — a screen, component, layout, style token, visual state, or markup a user reads. Barrels, pure-logic modules, tests, stories, generated output, and vendored code are out. Projects narrow or widen the default detection through `designSource.include` / `designSource.exclude` in `.lisa.config.json`; they never turn the obligation off.
38
+ Membership is **surface, not repo name or file extension**: a file is in scope the moment a change makes it render something user-observable — a screen, component, layout, style token, visual state, or markup a user reads. Barrels, pure-logic modules, tests, stories, generated output, and vendored code are out. Projects narrow or widen the default detection through `designSource.include` / `designSource.exclude` in `.lisa.config.json`; those filters never turn the obligation off. Only the explicit project opt-out above does.
16
39
 
17
40
  ## The two declarations
18
41
 
@@ -39,7 +62,7 @@ Projects that carry their own design-system rules (`figma-design-system`, `desig
39
62
 
40
63
  ## Bootstrap and degradation
41
64
 
42
- Adoption never demands a retroactive backfill: the gate judges **only the surfaces this change touched**. Pre-existing unannotated UI is burndown, recorded and worked down, not this work item's blocker. If a project has no Figma at all, that is not an exemption — every changed surface carries the marker, and the resulting exception list is the honest record of how much of the product lives outside its design source. Behavior obligations for the same surfaces are unchanged and still governed by `bdd-e2e-coverage`.
65
+ Adoption never demands a retroactive backfill: the gate judges **only the surfaces this change touched**. Pre-existing unannotated UI is burndown, recorded and worked down, not this work item's blocker. A project with no design source may use the explicit project opt-out above; otherwise every changed surface still needs a declaration. Behavior obligations for the same surfaces are unchanged and still governed by `bdd-e2e-coverage`.
43
66
 
44
67
  ---
45
68
 
@@ -188,7 +211,7 @@ Two consequences worth stating plainly:
188
211
  node design-source-gate.mjs --base=origin/main [--head=HEAD] [--figma-access] [--json]
189
212
  ```
190
213
 
191
- Exit `0` = PASS, `1` = FAIL, `2` = usage error. It classifies every changed file into one status:
214
+ Exit `0` = PASS or explicit SKIPPED, `1` = FAIL, `2` = usage error. When enabled, it classifies every changed file into one status:
192
215
 
193
216
  | Status | Verdict | Meaning |
194
217
  |---|---|---|
@@ -231,8 +254,7 @@ so a repository with hundreds of unannotated legacy components can adopt the con
231
254
  and be green on Tuesday. Pre-existing unannotated UI is **burndown**: recorded, worked down
232
255
  opportunistically as files are touched, never treated as the current work item's blocker.
233
256
 
234
- A project with no Figma at all is not exempt. Every changed surface carries the marker, and the
235
- resulting exception list is the honest, mounting record of how much of the product lives outside its
236
- design source — which is far more useful than an exemption flag that makes the question disappear.
237
- Deleting or excluding a surface to make the gate green is a violation of the same kind as deleting a
238
- BDD scenario to improve coverage: mark it, do not drop it.
257
+ A project with no design source may opt out explicitly using `designSource.enabled: false`.
258
+ Without that explicit opt-out, every changed surface still declares its source. In an enabled
259
+ project, deleting or excluding a surface to make the gate green is a violation of the same kind as
260
+ deleting a BDD scenario to improve coverage: mark it, do not drop it.
@@ -1,9 +1,14 @@
1
1
  # Tool Access Gate
2
2
 
3
+ - If you can't reach something you need, such as a repository, a secret, an API, or a connector, say exactly what's missing in your first message and stop. Don't substitute, mock, or guess.
4
+
5
+ If the missing access is discovered after work begins, say exactly what's
6
+ missing in your next message and stop.
7
+
3
8
  A flow may only take on work it can actually finish. If completing a work item —
4
9
  including its empirical verification — requires an external tool or system the
5
- agent cannot access, the flow must **break out and report the missing access on
6
- the work item**, never work around it. This is the flow-side arm of the factory
10
+ agent cannot access, the flow must **tell the user exactly what access is missing and stop**, never
11
+ work around it. This is the flow-side arm of the factory
7
12
  contract: intake validates that the factory has "the tooling *and provable
8
13
  access to that tooling*"; this gate re-proves that promise at execution time and
9
14
  enforces it for tools discovered mid-flow.
@@ -31,7 +36,8 @@ enforces it for tools discovered mid-flow.
31
36
  environment.
32
37
  2. **Continuously** — the moment a previously unknown tool requirement surfaces
33
38
  mid-flow (e.g. verification turns out to need CloudWatch log capture), probe
34
- it right then and record the new tool + probe result in the same places the
39
+ it right then. If access is unavailable, report it and stop. Otherwise, record
40
+ the new tool + probe result in the same places the
35
41
  preflight wrote to (the plan/tracker artifact and the affected tasks'
36
42
  `metadata.required_access`) before continuing. Discovery timing changes
37
43
  nothing about the protocol.
@@ -62,44 +68,31 @@ Example probes:
62
68
  | Deploy target | reach the target environment with the credentials the verify step will use |
63
69
  | Device/browser harness | the harness's own doctor/smoke entry (e.g. `playwright --version` plus a trivial headless launch) |
64
70
 
65
- A probe failure only counts **after exhausting the documented credential
66
- sources** (the same order the `verification` rule mandates): project e2e
67
- config/fixtures, `.lisa.config.local.json` and environment variables, then
68
- documented work-item credentials (e.g. `Sign-in Required`). Missing access you
69
- could have resolved from those sources is not a blocker — resolve it and
70
- proceed.
71
+ Resolve credentials through the documented sources before probing: project
72
+ e2e config/fixtures, `.lisa.config.local.json` and environment variables, then
73
+ documented work-item credentials (e.g. `Sign-in Required`). If the documented
74
+ access path or probe cannot provide the required access, report the gap and
75
+ stop. Do not continue exploring substitute sources after confirming the gap.
71
76
 
72
- Record the enumeration and probe results in the flow's plan/tracker artifact
77
+ Record successful probes in the flow's plan/tracker artifact
73
78
  (and task `metadata.required_access` where the flow's task contract carries
74
79
  it), so the verifier can confirm the gate ran.
75
80
 
76
81
  ## On failure: break out, never work around
77
82
 
78
- When a required tool fails its probe:
79
-
80
- 1. **Stop the affected work immediately.** Do not start (or continue)
81
- implementation whose completion condition cannot be proven.
82
- 2. **Update the work item with an "Access Needed" comment** containing, for
83
- each missing tool:
84
- - a one-sentence plain-English summary a non-technical operator can act on
85
- ("Lisa needs read access to the app's AWS logs to prove this fix works");
86
- - the tool and the operation it is needed for (which acceptance criterion /
87
- verification step);
88
- - the exact access to grant: env var name, credential/role/permission, or
89
- account invitation required;
90
- - the probe command that must pass once access is granted.
91
- 3. **Transition the work item to the configured blocked state** and apply the
92
- configured `human_needed` / needs-human marker — missing access is a
93
- **human-only blocker** (someone must provision credentials or grant access);
94
- do not fabricate a build-ready ticket for it.
95
- 4. **Release the verification gate honestly**: write the verdict with
96
- `status: "blocked"`, and mark each acceptance criterion whose proof depends
97
- on the missing tool as `status: "blocked"` with the missing-access
98
- diagnosis as its `evidence`; unaffected criteria keep their real
99
- `pass`/`fail` result.
100
- 5. **Resume only when the probe passes.** When access is granted, re-run the
101
- recorded probe before continuing; `repair-intake` re-validates blocked items
102
- whose blockers cleared.
83
+ When required access is unavailable, tell the user and stop. Use the first
84
+ message if the gap is already known, or the next message if it is discovered
85
+ mid-task. The message must state:
86
+
87
+ - the exact resource that cannot be reached and the operation it blocks;
88
+ - the observed failure and, if known, the credential name, role, permission, or
89
+ invitation needed — never secret values, and never a guessed diagnosis;
90
+ - the read-only probe that must pass before work can resume.
91
+
92
+ Do not substitute, mock, guess, or continue other tasks as a workaround.
93
+ Reporting does not depend on access to a tracker, and it does not require
94
+ creating a new ticket. Resume after the required access is available and its
95
+ probe passes.
103
96
 
104
97
  ### Forbidden workarounds
105
98
 
@@ -116,6 +109,6 @@ None of the following ever substitutes for missing access:
116
109
  ticket points at).
117
110
  - Silently narrowing scope so the inaccessible part is "out of scope".
118
111
 
119
- If a *partial* set of tasks is unaffected by the missing access, those tasks may
120
- complete, but the work item as a whole must not be marked terminal-done while
121
- any acceptance criterion's proof is blocked on access.
112
+ Keep results already obtained, but stop further work until the required access
113
+ is available. An inaccessible tracker does not prevent reporting the blocker
114
+ to the user. Do not claim blocked acceptance criteria have passed.