@codyswann/lisa 2.104.5 → 2.104.6

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.104.5",
85
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -216,7 +216,8 @@ export function resolvePrdLifecycleRoles(
216
216
  kind: "labels",
217
217
  roles: resolveObjectRoles(
218
218
  config.github?.labels?.prd,
219
- DEFAULT_GITHUB_LINEAR_PRD_ROLES
219
+ DEFAULT_GITHUB_LINEAR_PRD_ROLES,
220
+ { allowNull: false }
220
221
  ),
221
222
  rollup: {
222
223
  closeOnShipped: Boolean(
@@ -230,7 +231,8 @@ export function resolvePrdLifecycleRoles(
230
231
  kind: "labels",
231
232
  roles: resolveObjectRoles(
232
233
  config.linear?.labels?.prd,
233
- DEFAULT_GITHUB_LINEAR_PRD_ROLES
234
+ DEFAULT_GITHUB_LINEAR_PRD_ROLES,
235
+ { allowNull: false }
234
236
  ),
235
237
  rollup: {
236
238
  closeOnShipped: Boolean(
@@ -245,7 +247,8 @@ export function resolvePrdLifecycleRoles(
245
247
  statusProperty: config.notion?.statusProperty || "Status",
246
248
  roles: resolveObjectRoles(
247
249
  config.notion?.values,
248
- DEFAULT_NOTION_PRD_ROLES
250
+ DEFAULT_NOTION_PRD_ROLES,
251
+ { allowNull: false }
249
252
  ),
250
253
  rollup: {
251
254
  closeOnShipped: Boolean(
@@ -259,7 +262,8 @@ export function resolvePrdLifecycleRoles(
259
262
  kind: "parent-pages",
260
263
  roles: resolveObjectRoles(
261
264
  config.confluence?.parents,
262
- DEFAULT_CONFLUENCE_PARENT_ROLES
265
+ DEFAULT_CONFLUENCE_PARENT_ROLES,
266
+ { allowNull: true }
263
267
  ),
264
268
  rollup: {
265
269
  closeOnShipped: Boolean(
@@ -374,13 +378,24 @@ export function resolveQueueContract(input = {}) {
374
378
  /**
375
379
  * @param {Record<string, any> | undefined} values
376
380
  * @param {Record<string, any>} defaults
381
+ * @param {{ readonly allowNull?: boolean }} [options]
377
382
  * @returns {Record<string, any>}
378
383
  */
379
- function resolveObjectRoles(values, defaults) {
380
- return {
381
- ...defaults,
382
- ...(values ?? {}),
383
- };
384
+ function resolveObjectRoles(values, defaults, options = {}) {
385
+ const resolved = { ...defaults };
386
+
387
+ for (const [key, value] of Object.entries(values ?? {})) {
388
+ if (typeof value === "string" && value.trim().length > 0) {
389
+ resolved[key] = value;
390
+ continue;
391
+ }
392
+
393
+ if (options.allowNull === true && value === null) {
394
+ resolved[key] = value;
395
+ }
396
+ }
397
+
398
+ return resolved;
384
399
  }
385
400
 
386
401
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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.104.5",
3
+ "version": "2.104.6",
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"
@@ -216,7 +216,8 @@ export function resolvePrdLifecycleRoles(
216
216
  kind: "labels",
217
217
  roles: resolveObjectRoles(
218
218
  config.github?.labels?.prd,
219
- DEFAULT_GITHUB_LINEAR_PRD_ROLES
219
+ DEFAULT_GITHUB_LINEAR_PRD_ROLES,
220
+ { allowNull: false }
220
221
  ),
221
222
  rollup: {
222
223
  closeOnShipped: Boolean(
@@ -230,7 +231,8 @@ export function resolvePrdLifecycleRoles(
230
231
  kind: "labels",
231
232
  roles: resolveObjectRoles(
232
233
  config.linear?.labels?.prd,
233
- DEFAULT_GITHUB_LINEAR_PRD_ROLES
234
+ DEFAULT_GITHUB_LINEAR_PRD_ROLES,
235
+ { allowNull: false }
234
236
  ),
235
237
  rollup: {
236
238
  closeOnShipped: Boolean(
@@ -245,7 +247,8 @@ export function resolvePrdLifecycleRoles(
245
247
  statusProperty: config.notion?.statusProperty || "Status",
246
248
  roles: resolveObjectRoles(
247
249
  config.notion?.values,
248
- DEFAULT_NOTION_PRD_ROLES
250
+ DEFAULT_NOTION_PRD_ROLES,
251
+ { allowNull: false }
249
252
  ),
250
253
  rollup: {
251
254
  closeOnShipped: Boolean(
@@ -259,7 +262,8 @@ export function resolvePrdLifecycleRoles(
259
262
  kind: "parent-pages",
260
263
  roles: resolveObjectRoles(
261
264
  config.confluence?.parents,
262
- DEFAULT_CONFLUENCE_PARENT_ROLES
265
+ DEFAULT_CONFLUENCE_PARENT_ROLES,
266
+ { allowNull: true }
263
267
  ),
264
268
  rollup: {
265
269
  closeOnShipped: Boolean(
@@ -374,13 +378,24 @@ export function resolveQueueContract(input = {}) {
374
378
  /**
375
379
  * @param {Record<string, any> | undefined} values
376
380
  * @param {Record<string, any>} defaults
381
+ * @param {{ readonly allowNull?: boolean }} [options]
377
382
  * @returns {Record<string, any>}
378
383
  */
379
- function resolveObjectRoles(values, defaults) {
380
- return {
381
- ...defaults,
382
- ...(values ?? {}),
383
- };
384
+ function resolveObjectRoles(values, defaults, options = {}) {
385
+ const resolved = { ...defaults };
386
+
387
+ for (const [key, value] of Object.entries(values ?? {})) {
388
+ if (typeof value === "string" && value.trim().length > 0) {
389
+ resolved[key] = value;
390
+ continue;
391
+ }
392
+
393
+ if (options.allowNull === true && value === null) {
394
+ resolved[key] = value;
395
+ }
396
+ }
397
+
398
+ return resolved;
384
399
  }
385
400
 
386
401
  /**