@codyswann/lisa 2.77.1 → 2.78.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.
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "lodash": ">=4.18.1"
83
83
  },
84
84
  "name": "@codyswann/lisa",
85
- "version": "2.77.1",
85
+ "version": "2.78.0",
86
86
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
87
87
  "main": "dist/index.js",
88
88
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.77.1",
3
+ "version": "2.78.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.77.1",
3
+ "version": "2.78.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -429,6 +429,36 @@ Doctor must validate config in three layers:
429
429
  Doctor's severity rule is simple: unusable merged config is `FAIL`; locality drift with a still
430
430
  usable merged config is `WARN`.
431
431
 
432
+ ### Doctor vendor preflight
433
+
434
+ Once doctor can resolve the merged `tracker` and optional `source`, it must run a read-only vendor
435
+ preflight for those configured vendors only.
436
+
437
+ 1. **Audit only the configured vendors**
438
+ - Always audit the merged `tracker`.
439
+ - Audit `source` when present and when it is not already covered by the tracker check.
440
+ - Every other vendor is a doctor `SKIP`, not an implicit pass.
441
+ 2. **Read-capable substrate requirement**
442
+ - `github` requires `gh` CLI, a passing `gh auth status`, and read access to the configured
443
+ repo (`github.org` + `github.repo`).
444
+ - `jira` / `confluence` must reuse the `atlassian-access` substrate ladder. Doctor passes when
445
+ at least one supported read-capable substrate (`acli`, Atlassian MCP, or validated curl/API
446
+ token) can prove visibility to the configured `atlassian.cloudId` and target scope.
447
+ - `linear` passes when either the Linear MCP or a validated API-key probe can read the
448
+ configured workspace; tracker mode also requires visibility to `linear.teamKey`.
449
+ - `notion` passes when either the Notion MCP identity matches `notion.workspaceId` or a valid
450
+ internal-integration token does, and the configured `notion.prdDatabaseId` is readable.
451
+ 3. **Observed-fact discipline**
452
+ - Missing executable / MCP availability and failed auth/scope probes must be reported
453
+ separately.
454
+ - Preserve the exact probe failure text or status code when a read attempt fails; doctor should
455
+ not collapse repo-not-found, wrong-workspace, and unauthenticated cases into one generic
456
+ readiness error.
457
+ 4. **Severity**
458
+ - No read-capable substrate for the configured vendor, or a configured target that remains
459
+ unreadable after all supported probes, is a doctor `FAIL`.
460
+ - A reachable vendor with only auxiliary-substrate degradation is a doctor `WARN`.
461
+
432
462
  ## Skill mapping
433
463
 
434
464
  The shim → vendor mapping is fixed:
@@ -104,6 +104,95 @@ this order:
104
104
  Locality findings are advisory unless the merged config is unusable. Missing shared keys after the
105
105
  merge are `FAIL`; shared keys that exist only locally are `WARN`.
106
106
 
107
+ ### Minimum tracker/source preflight checks
108
+
109
+ After config readiness passes far enough to resolve the merged `tracker` and optional `source`,
110
+ doctor must perform read-only preflight checks for the configured vendors only. It does not probe
111
+ every vendor Lisa supports.
112
+
113
+ 1. **Scope the audit to configured vendors**
114
+ - Audit the merged `tracker`.
115
+ - Audit the merged `source` only when present and distinct from the tracker.
116
+ - Report every non-configured vendor as `SKIP` rather than pretending it was checked.
117
+ 2. **Prove a readable substrate exists**
118
+ - `tracker=github` or `source=github`: require `gh` CLI availability, a passing `gh auth status`,
119
+ and a read probe against the configured repo such as `gh repo view <org>/<repo>`.
120
+ - `tracker=jira`, `source=jira`, or `source=confluence`: follow the `atlassian-access`
121
+ substrate ladder and prove at least one read-capable path can see the configured
122
+ `atlassian.cloudId` and vendor scope. Acceptable substrates are `acli`, Atlassian MCP, or the
123
+ validated API-token/curl path documented by `config-resolution`.
124
+ - `tracker=linear` or `source=linear`: require either readable Linear MCP access or a valid
125
+ personal API-key probe against the configured workspace. When Linear is the tracker, doctor
126
+ must also prove the configured `linear.teamKey` is visible.
127
+ - `source=notion`: require either a Notion MCP identity match for `notion.workspaceId` or a
128
+ valid internal-integration token probe, plus read visibility to `notion.prdDatabaseId`.
129
+ 3. **Separate missing tooling from missing auth or scope**
130
+ - Missing executable / MCP substrate availability is a distinct observed fact, not the same as
131
+ "auth failed."
132
+ - When a probe runs and fails, preserve the exact read-only failure text or HTTP/GraphQL status
133
+ in the observed output so the operator can distinguish wrong workspace/site/repo from missing
134
+ credentials.
135
+ 4. **Severity ladder**
136
+ - `PASS` when at least one supported read-only substrate proves the configured vendor is
137
+ reachable with the required scope.
138
+ - `WARN` when the configured vendor is reachable, but an additional optional substrate is
139
+ unavailable and later Lisa flows would need to fall back.
140
+ - `FAIL` when no supported substrate can prove read access for the configured tracker/source, or
141
+ when the configured vendor target is unreadable from the current runtime.
142
+
143
+ ### Minimum GitHub Project coordination checks
144
+
145
+ When `github.projects.v2` is configured, doctor must run one additional read-only coordination
146
+ check instead of treating the config block as implicitly ready.
147
+
148
+ 1. **Delegate through the shared chokepoint**
149
+ - Call `lisa:github-project-v2` in read-only resolution mode:
150
+
151
+ ```text
152
+ operation: resolve-project
153
+ ```
154
+
155
+ - Do not inline ad-hoc Project GraphQL in doctor. Setup, doctor, writers, and linked-PR flows
156
+ must all read the same owner/access contract from the shared utility.
157
+ 2. **Preserve exact namespace + access failures**
158
+ - Enforce the v1 namespace rule exactly as documented by the shared utility. If
159
+ `github.projects.v2.owner.slug` does not match `github.org`, report:
160
+
161
+ ```yaml
162
+ code: project_namespace_mismatch
163
+ message: "github.projects.v2.owner.slug must match github.org in v1"
164
+ remediation: "Use a Project owned by <github.org> or remove github.projects.v2."
165
+ ```
166
+
167
+ - For owner-access or GraphQL failures, preserve the exact GitHub / GraphQL failure text in the
168
+ observed output. Examples include missing Project, `Resource not accessible by integration`,
169
+ unsupported owner kind, or a wrong owner/number pair.
170
+ 3. **Report exact remediation paths**
171
+ - Doctor must make the next operator action explicit. At minimum, say whether they need to:
172
+ 1. choose a Project owned by the tracked repo namespace,
173
+ 2. grant the token Project read/write access,
174
+ 3. correct the configured Project number/owner, or
175
+ 4. remove `github.projects.v2` when coordination is not required.
176
+ 4. **Map shared utility outcomes into doctor severity**
177
+ - `required: false` => doctor `WARN`. Repository-local GitHub issue/PR flows remain usable while
178
+ Project coordination is degraded.
179
+ - `required: true` => doctor `FAIL`. The same Project validation failure blocks Lisa readiness
180
+ because coordination was configured as required.
181
+
182
+ Good output examples:
183
+
184
+ ```text
185
+ WARN github.projects.v2: Resource not accessible by integration
186
+ Observed: exact GitHub / GraphQL failure text preserved from resolve-project.
187
+ Remediation: grant the token Project read/write access or remove github.projects.v2.required.
188
+ Repository-local GitHub issue/PR flows remain usable; Project coordination is disabled.
189
+ ```
190
+
191
+ ```text
192
+ FAIL github.projects.v2: github.projects.v2.owner.slug must match github.org in v1
193
+ Remediation: use a Project owned by CodySwannGT or remove github.projects.v2.
194
+ ```
195
+
107
196
  ## Output contract
108
197
 
109
198
  The final report must:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.77.1",
3
+ "version": "2.78.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.77.1",
3
+ "version": "2.78.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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-harper-fabric",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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-nestjs",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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-openclaw",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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-rails",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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-typescript",
3
- "version": "2.77.1",
3
+ "version": "2.78.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint 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.77.1",
3
+ "version": "2.78.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-wiki",
3
- "version": "2.77.1",
3
+ "version": "2.78.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.77.1",
3
+ "version": "2.78.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"
@@ -429,6 +429,36 @@ Doctor must validate config in three layers:
429
429
  Doctor's severity rule is simple: unusable merged config is `FAIL`; locality drift with a still
430
430
  usable merged config is `WARN`.
431
431
 
432
+ ### Doctor vendor preflight
433
+
434
+ Once doctor can resolve the merged `tracker` and optional `source`, it must run a read-only vendor
435
+ preflight for those configured vendors only.
436
+
437
+ 1. **Audit only the configured vendors**
438
+ - Always audit the merged `tracker`.
439
+ - Audit `source` when present and when it is not already covered by the tracker check.
440
+ - Every other vendor is a doctor `SKIP`, not an implicit pass.
441
+ 2. **Read-capable substrate requirement**
442
+ - `github` requires `gh` CLI, a passing `gh auth status`, and read access to the configured
443
+ repo (`github.org` + `github.repo`).
444
+ - `jira` / `confluence` must reuse the `atlassian-access` substrate ladder. Doctor passes when
445
+ at least one supported read-capable substrate (`acli`, Atlassian MCP, or validated curl/API
446
+ token) can prove visibility to the configured `atlassian.cloudId` and target scope.
447
+ - `linear` passes when either the Linear MCP or a validated API-key probe can read the
448
+ configured workspace; tracker mode also requires visibility to `linear.teamKey`.
449
+ - `notion` passes when either the Notion MCP identity matches `notion.workspaceId` or a valid
450
+ internal-integration token does, and the configured `notion.prdDatabaseId` is readable.
451
+ 3. **Observed-fact discipline**
452
+ - Missing executable / MCP availability and failed auth/scope probes must be reported
453
+ separately.
454
+ - Preserve the exact probe failure text or status code when a read attempt fails; doctor should
455
+ not collapse repo-not-found, wrong-workspace, and unauthenticated cases into one generic
456
+ readiness error.
457
+ 4. **Severity**
458
+ - No read-capable substrate for the configured vendor, or a configured target that remains
459
+ unreadable after all supported probes, is a doctor `FAIL`.
460
+ - A reachable vendor with only auxiliary-substrate degradation is a doctor `WARN`.
461
+
432
462
  ## Skill mapping
433
463
 
434
464
  The shim → vendor mapping is fixed:
@@ -104,6 +104,95 @@ this order:
104
104
  Locality findings are advisory unless the merged config is unusable. Missing shared keys after the
105
105
  merge are `FAIL`; shared keys that exist only locally are `WARN`.
106
106
 
107
+ ### Minimum tracker/source preflight checks
108
+
109
+ After config readiness passes far enough to resolve the merged `tracker` and optional `source`,
110
+ doctor must perform read-only preflight checks for the configured vendors only. It does not probe
111
+ every vendor Lisa supports.
112
+
113
+ 1. **Scope the audit to configured vendors**
114
+ - Audit the merged `tracker`.
115
+ - Audit the merged `source` only when present and distinct from the tracker.
116
+ - Report every non-configured vendor as `SKIP` rather than pretending it was checked.
117
+ 2. **Prove a readable substrate exists**
118
+ - `tracker=github` or `source=github`: require `gh` CLI availability, a passing `gh auth status`,
119
+ and a read probe against the configured repo such as `gh repo view <org>/<repo>`.
120
+ - `tracker=jira`, `source=jira`, or `source=confluence`: follow the `atlassian-access`
121
+ substrate ladder and prove at least one read-capable path can see the configured
122
+ `atlassian.cloudId` and vendor scope. Acceptable substrates are `acli`, Atlassian MCP, or the
123
+ validated API-token/curl path documented by `config-resolution`.
124
+ - `tracker=linear` or `source=linear`: require either readable Linear MCP access or a valid
125
+ personal API-key probe against the configured workspace. When Linear is the tracker, doctor
126
+ must also prove the configured `linear.teamKey` is visible.
127
+ - `source=notion`: require either a Notion MCP identity match for `notion.workspaceId` or a
128
+ valid internal-integration token probe, plus read visibility to `notion.prdDatabaseId`.
129
+ 3. **Separate missing tooling from missing auth or scope**
130
+ - Missing executable / MCP substrate availability is a distinct observed fact, not the same as
131
+ "auth failed."
132
+ - When a probe runs and fails, preserve the exact read-only failure text or HTTP/GraphQL status
133
+ in the observed output so the operator can distinguish wrong workspace/site/repo from missing
134
+ credentials.
135
+ 4. **Severity ladder**
136
+ - `PASS` when at least one supported read-only substrate proves the configured vendor is
137
+ reachable with the required scope.
138
+ - `WARN` when the configured vendor is reachable, but an additional optional substrate is
139
+ unavailable and later Lisa flows would need to fall back.
140
+ - `FAIL` when no supported substrate can prove read access for the configured tracker/source, or
141
+ when the configured vendor target is unreadable from the current runtime.
142
+
143
+ ### Minimum GitHub Project coordination checks
144
+
145
+ When `github.projects.v2` is configured, doctor must run one additional read-only coordination
146
+ check instead of treating the config block as implicitly ready.
147
+
148
+ 1. **Delegate through the shared chokepoint**
149
+ - Call `lisa:github-project-v2` in read-only resolution mode:
150
+
151
+ ```text
152
+ operation: resolve-project
153
+ ```
154
+
155
+ - Do not inline ad-hoc Project GraphQL in doctor. Setup, doctor, writers, and linked-PR flows
156
+ must all read the same owner/access contract from the shared utility.
157
+ 2. **Preserve exact namespace + access failures**
158
+ - Enforce the v1 namespace rule exactly as documented by the shared utility. If
159
+ `github.projects.v2.owner.slug` does not match `github.org`, report:
160
+
161
+ ```yaml
162
+ code: project_namespace_mismatch
163
+ message: "github.projects.v2.owner.slug must match github.org in v1"
164
+ remediation: "Use a Project owned by <github.org> or remove github.projects.v2."
165
+ ```
166
+
167
+ - For owner-access or GraphQL failures, preserve the exact GitHub / GraphQL failure text in the
168
+ observed output. Examples include missing Project, `Resource not accessible by integration`,
169
+ unsupported owner kind, or a wrong owner/number pair.
170
+ 3. **Report exact remediation paths**
171
+ - Doctor must make the next operator action explicit. At minimum, say whether they need to:
172
+ 1. choose a Project owned by the tracked repo namespace,
173
+ 2. grant the token Project read/write access,
174
+ 3. correct the configured Project number/owner, or
175
+ 4. remove `github.projects.v2` when coordination is not required.
176
+ 4. **Map shared utility outcomes into doctor severity**
177
+ - `required: false` => doctor `WARN`. Repository-local GitHub issue/PR flows remain usable while
178
+ Project coordination is degraded.
179
+ - `required: true` => doctor `FAIL`. The same Project validation failure blocks Lisa readiness
180
+ because coordination was configured as required.
181
+
182
+ Good output examples:
183
+
184
+ ```text
185
+ WARN github.projects.v2: Resource not accessible by integration
186
+ Observed: exact GitHub / GraphQL failure text preserved from resolve-project.
187
+ Remediation: grant the token Project read/write access or remove github.projects.v2.required.
188
+ Repository-local GitHub issue/PR flows remain usable; Project coordination is disabled.
189
+ ```
190
+
191
+ ```text
192
+ FAIL github.projects.v2: github.projects.v2.owner.slug must match github.org in v1
193
+ Remediation: use a Project owned by CodySwannGT or remove github.projects.v2.
194
+ ```
195
+
107
196
  ## Output contract
108
197
 
109
198
  The final report must: