@codyswann/lisa 2.223.2 → 2.224.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 (107) hide show
  1. package/all/copy-contents/gitignore +3 -0
  2. package/package.json +1 -1
  3. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +13 -3
  6. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +17 -5
  7. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +13 -5
  8. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +24 -10
  9. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +12 -7
  10. package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +54 -3
  11. package/plugins/lisa/rules/reference/config-resolution.md +8 -0
  12. package/plugins/lisa/scripts/automation-status-expected-fleet.mjs +40 -10
  13. package/plugins/lisa/scripts/queue-contract-resolution.mjs +73 -4
  14. package/plugins/lisa/scripts/queue-status-build-readers.mjs +62 -10
  15. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +13 -3
  16. package/plugins/lisa/skills/lisa-intake/SKILL.md +17 -5
  17. package/plugins/lisa/skills/lisa-queue-status/SKILL.md +13 -5
  18. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +24 -10
  19. package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +12 -7
  20. package/plugins/lisa/skills/lisa-setup-github/SKILL.md +54 -3
  21. package/plugins/lisa-agy/plugin.json +1 -1
  22. package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +40 -10
  23. package/plugins/lisa-agy/scripts/queue-contract-resolution.mjs +73 -4
  24. package/plugins/lisa-agy/scripts/queue-status-build-readers.mjs +62 -10
  25. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +13 -3
  26. package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +17 -5
  27. package/plugins/lisa-agy/skills/lisa-queue-status/SKILL.md +13 -5
  28. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +24 -10
  29. package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +12 -7
  30. package/plugins/lisa-agy/skills/lisa-setup-github/SKILL.md +54 -3
  31. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  34. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-copilot/rules/reference/config-resolution.md +8 -0
  38. package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +40 -10
  39. package/plugins/lisa-copilot/scripts/queue-contract-resolution.mjs +73 -4
  40. package/plugins/lisa-copilot/scripts/queue-status-build-readers.mjs +62 -10
  41. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +13 -3
  42. package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +17 -5
  43. package/plugins/lisa-copilot/skills/lisa-queue-status/SKILL.md +13 -5
  44. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +24 -10
  45. package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +12 -7
  46. package/plugins/lisa-copilot/skills/lisa-setup-github/SKILL.md +54 -3
  47. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +8 -0
  49. package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +40 -10
  50. package/plugins/lisa-cursor/scripts/queue-contract-resolution.mjs +73 -4
  51. package/plugins/lisa-cursor/scripts/queue-status-build-readers.mjs +62 -10
  52. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +13 -3
  53. package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +17 -5
  54. package/plugins/lisa-cursor/skills/lisa-queue-status/SKILL.md +13 -5
  55. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +24 -10
  56. package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +12 -7
  57. package/plugins/lisa-cursor/skills/lisa-setup-github/SKILL.md +54 -3
  58. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-expo-agy/plugin.json +1 -1
  61. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  71. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  76. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  81. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails-agy/plugin.json +1 -1
  86. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  91. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  96. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/src/base/rules/reference/config-resolution.md +8 -0
  99. package/plugins/src/base/scripts/automation-status-expected-fleet.mjs +40 -10
  100. package/plugins/src/base/scripts/queue-contract-resolution.mjs +73 -4
  101. package/plugins/src/base/scripts/queue-status-build-readers.mjs +62 -10
  102. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +13 -3
  103. package/plugins/src/base/skills/lisa-intake/SKILL.md +17 -5
  104. package/plugins/src/base/skills/lisa-queue-status/SKILL.md +13 -5
  105. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +24 -10
  106. package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +12 -7
  107. package/plugins/src/base/skills/lisa-setup-github/SKILL.md +54 -3
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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": "2.223.2",
3
+ "version": "2.224.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"
@@ -272,6 +272,7 @@ Each vendor section is **conditionally required**: required only when that vendo
272
272
  |-------|---------------|-------|
273
273
  | `github.org` | `tracker = "github"` or `source = "github"` or any `github-*` skill is invoked | GitHub organization or user name. |
274
274
  | `github.repo` | same as above | GitHub repository name. |
275
+ | `github.queueRepo` | no | Optional GitHub **build** queue repository, distinct from this repo's identity and PRD source. Store the canonical `owner/repo`. A short repo name is accepted at runtime and normalized to `github.org`. Explicit GitHub repo/URL arguments always win; otherwise GitHub build intake, build repair, build queue status, and scheduled ticket commands use this value, falling back to `github.org/github.repo` when absent. This never changes `repo:<name>` scoping, PRD intake, or automation naming, which remain tied to `repo` / `github.repo`. |
275
276
  | `github.projects.v2.owner.kind` | GitHub Project coordination is enabled | Owner type for the shared ProjectV2. Supported values are `organization` and `user`. |
276
277
  | `github.projects.v2.owner.slug` | GitHub Project coordination is enabled | Owner login for the shared ProjectV2. In v1 it MUST match the tracked repository namespace (`github.org`); cross-namespace coordination is rejected. |
277
278
  | `github.projects.v2.number` | GitHub Project coordination is enabled | Human-facing ProjectV2 number from the GitHub UI / URL. Later utilities resolve the opaque node id from this owner + number pair. |
@@ -285,6 +286,13 @@ Each vendor section is **conditionally required**: required only when that vendo
285
286
 
286
287
  When `tracker = "github"` AND `source = "github"` (self-host), both reads and writes hit the same GitHub repo. Label namespaces are kept separate so the two flows don't collide — see "Self-host edge case" below.
287
288
 
289
+ When `github.queueRepo` points at an umbrella repository, build-queue **scans** happen there while the
290
+ current repository's identity remains `github.org/github.repo`. Resolve a GitHub queue in this
291
+ order for a build-mode scan: explicit `owner/repo` or GitHub URL argument, merged-config `github.queueRepo`, then
292
+ `github.org/github.repo`. Queue status must show both identity and queue; build counts and claims
293
+ remain filtered to `repo:<github.repo>`. Setup writes the canonical `owner/repo` form and omits the
294
+ key when the queue is the identity repo.
295
+
288
296
  `github.projects.v2` is optional. When absent, GitHub issue / PR writes remain repository-local exactly as they work today. When present, the shared Project is a coordination view layered on top of real issues and pull requests; it does not replace lifecycle labels, comments, dependencies, or native issue / PR state as Lisa's durable source of truth.
289
297
 
290
298
  When `github.projects.v2` is present, later setup/doctor and writer preflight validation MUST read the referenced Project's owner + access level before any membership write depends on it. The validation contract is:
@@ -10,6 +10,7 @@
10
10
 
11
11
  import {
12
12
  resolveBuildQueueArgument,
13
+ resolveGithubQueueRepoRef,
13
14
  resolveGithubRepoRef,
14
15
  resolvePrdQueueArgument,
15
16
  resolvePrdSource,
@@ -119,9 +120,32 @@ export function resolveExpectedAutomationFleet(input = {}) {
119
120
 
120
121
  const tracker = config.tracker;
121
122
  const source = resolvePrdSource(config);
122
- const prdQueue = resolvePrdQueueArgument(config, source);
123
- const buildQueue = resolveBuildQueueArgument(config, tracker);
124
- const repairQueue = resolveRepairQueueArgument(config, source, tracker);
123
+ const explicitGithubIdentity = `${identity.owner}/${identity.repo}`;
124
+ const githubQueue =
125
+ tracker === "github"
126
+ ? resolveGithubQueueRepoRef(config, {
127
+ gitRemoteUrl: input.gitRemoteUrl,
128
+ })
129
+ : null;
130
+ const explicitGithubQueue = githubQueue
131
+ ? `${githubQueue.owner}/${githubQueue.repo}`
132
+ : undefined;
133
+ const prdQueue =
134
+ source === "github"
135
+ ? `${explicitGithubIdentity} intake_mode=prd`
136
+ : resolvePrdQueueArgument(config, source);
137
+ const buildQueue = resolveBuildQueueArgument(config, tracker, {
138
+ explicitQueue: tracker === "github" ? explicitGithubQueue : undefined,
139
+ gitRemoteUrl: input.gitRemoteUrl,
140
+ });
141
+ const repairQueue = resolveRepairQueueArgument(
142
+ config,
143
+ source,
144
+ tracker,
145
+ explicitGithubIdentity,
146
+ explicitGithubQueue,
147
+ buildQueue
148
+ );
125
149
 
126
150
  const expected = [
127
151
  createExpectedEntry(
@@ -237,10 +261,17 @@ function createUnsupportedEntry(identity, id, reason) {
237
261
  * @param {string | undefined} tracker
238
262
  * @returns {string}
239
263
  */
240
- function resolveRepairQueueArgument(config, source, tracker) {
264
+ function resolveRepairQueueArgument(
265
+ config,
266
+ source,
267
+ tracker,
268
+ explicitGithubIdentity,
269
+ explicitGithubQueue,
270
+ resolvedBuildQueue
271
+ ) {
241
272
  if (tracker === "github" && source === "github") {
242
273
  requireGithubRepo(config);
243
- return "github intake_mode=both";
274
+ return `${explicitGithubIdentity} intake_mode=both build_queue=${explicitGithubQueue}`;
244
275
  }
245
276
 
246
277
  if (tracker === "linear" && source === "linear") {
@@ -260,13 +291,12 @@ function resolveRepairQueueArgument(config, source, tracker) {
260
291
 
261
292
  if (tracker === "github" && source === undefined) {
262
293
  requireGithubRepo(config);
263
- return "github intake_mode=both";
294
+ return `${explicitGithubIdentity} intake_mode=both build_queue=${explicitGithubQueue}`;
264
295
  }
265
296
 
266
- const buildQueue = resolveBuildQueueArgument(config, tracker);
267
- return buildQueue.includes("intake_mode=")
268
- ? buildQueue
269
- : `${buildQueue} intake_mode=build`;
297
+ return resolvedBuildQueue.includes("intake_mode=")
298
+ ? resolvedBuildQueue
299
+ : `${resolvedBuildQueue} intake_mode=build`;
270
300
  }
271
301
 
272
302
  /**
@@ -173,12 +173,17 @@ export function resolvePrdQueueArgument(
173
173
  */
174
174
  export function resolveBuildQueueArgument(
175
175
  config = {},
176
- tracker = resolveBuildTracker(config)
176
+ tracker = resolveBuildTracker(config),
177
+ options = {}
177
178
  ) {
178
179
  switch (tracker) {
179
- case "github":
180
- requireGithubRepo(config);
180
+ case "github": {
181
+ const queue = resolveGithubQueueRepoRef(config, options);
182
+ if (options.explicitQueue || config.github?.queueRepo) {
183
+ return `${queue.owner}/${queue.repo} intake_mode=build`;
184
+ }
181
185
  return "github intake_mode=build";
186
+ }
182
187
  case "linear":
183
188
  requireLinearWorkspace(config);
184
189
  return "linear";
@@ -340,6 +345,14 @@ export function resolveQueueContract(input = {}) {
340
345
  const source = resolvePrdSource(config);
341
346
  const tracker = resolveBuildTracker(config);
342
347
 
348
+ const githubIdentity = resolveGithubRepoRef(config, input.gitRemoteUrl);
349
+ const githubQueue =
350
+ tracker === "github"
351
+ ? resolveGithubQueueRepoRef(config, {
352
+ gitRemoteUrl: input.gitRemoteUrl,
353
+ })
354
+ : null;
355
+
343
356
  return {
344
357
  currentRepo: resolveCurrentRepo(input),
345
358
  source,
@@ -349,7 +362,15 @@ export function resolveQueueContract(input = {}) {
349
362
  ...resolvePrdLifecycleRoles(config, source),
350
363
  },
351
364
  buildQueue: {
352
- argument: resolveBuildQueueArgument(config, tracker),
365
+ argument: resolveBuildQueueArgument(config, tracker, {
366
+ gitRemoteUrl: input.gitRemoteUrl,
367
+ }),
368
+ ...(tracker === "github"
369
+ ? {
370
+ identityRepo: `${githubIdentity.owner}/${githubIdentity.repo}`,
371
+ queueRepo: `${githubQueue.owner}/${githubQueue.repo}`,
372
+ }
373
+ : {}),
353
374
  ...resolveBuildLifecycleRoles(config, tracker),
354
375
  },
355
376
  };
@@ -408,6 +429,54 @@ export function resolveGithubRepoRef(config = {}, gitRemoteUrl) {
408
429
  return null;
409
430
  }
410
431
 
432
+ /**
433
+ * Resolve the GitHub queue without changing the repository identity used
434
+ * for automation names and `repo:<name>` claim scoping. An explicit invocation
435
+ * target wins, followed by `github.queueRepo`, then the identity repo.
436
+ *
437
+ * `github.queueRepo` may be a short repo name (normalized to the identity
438
+ * owner) or an `owner/repo` reference. Cross-owner queues therefore remain
439
+ * explicit while the common same-organization umbrella layout stays concise.
440
+ *
441
+ * @param {Record<string, any>} config
442
+ * @param {{ readonly explicitQueue?: string, readonly gitRemoteUrl?: string }} [options]
443
+ * @returns {{ readonly owner: string, readonly repo: string }}
444
+ */
445
+ export function resolveGithubQueueRepoRef(config = {}, options = {}) {
446
+ const identity = resolveGithubRepoRef(config, options.gitRemoteUrl);
447
+ if (!identity) {
448
+ throw new Error(
449
+ "Unable to resolve the GitHub repository identity: github.org/github.repo or a GitHub origin remote is required."
450
+ );
451
+ }
452
+
453
+ const configured = options.explicitQueue ?? config.github?.queueRepo;
454
+ if (configured === undefined || configured === null || configured === "") {
455
+ return identity;
456
+ }
457
+ if (typeof configured !== "string") {
458
+ throw new Error(
459
+ "Unable to resolve the GitHub queue: github.queueRepo must be a repo name or owner/repo."
460
+ );
461
+ }
462
+
463
+ const value = configured
464
+ .trim()
465
+ .replace(/^https:\/\/github\.com\//i, "")
466
+ .replace(/\.git$/i, "");
467
+ const parts = value.split("/").filter(Boolean);
468
+ if (parts.length === 1) {
469
+ return { owner: identity.owner, repo: parts[0] };
470
+ }
471
+ if (parts.length === 2) {
472
+ return { owner: parts[0], repo: parts[1] };
473
+ }
474
+
475
+ throw new Error(
476
+ "Unable to resolve the GitHub queue: github.queueRepo must be a repo name or owner/repo."
477
+ );
478
+ }
479
+
411
480
  /**
412
481
  * @param {string | undefined} gitRemoteUrl
413
482
  * @returns {string | null}