@codyswann/lisa 1.16.0 → 1.18.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/all/copy-overwrite/.claude/hooks/track-plan-sessions.sh +9 -3
- package/all/copy-overwrite/.claude/rules/lisa.md +37 -0
- package/all/copy-overwrite/.claude/rules/plan.md +51 -1
- package/nestjs/copy-overwrite/eslint.slow.config.ts +103 -0
- package/nestjs/copy-overwrite/tsconfig.json +1 -1
- package/package.json +1 -1
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
# Marker files: $PLANS_DIR/.active-plan-<session-id> contain the absolute path to the
|
|
16
16
|
# active plan file. Stale markers (>24h) are cleaned up on each invocation.
|
|
17
17
|
#
|
|
18
|
+
# Dedup: Session ID dedup is scoped to the ## Sessions section only, not the entire
|
|
19
|
+
# file. This prevents false positives when session IDs appear elsewhere in plan content
|
|
20
|
+
# (e.g., scratchpad directory paths like /private/tmp/claude-501/.../SESSION_ID/...).
|
|
21
|
+
#
|
|
18
22
|
# Debug logging: All key decisions are logged to $PLANS_DIR/.track-plan-debug.log for
|
|
19
23
|
# diagnostics if session IDs land in the wrong plan file.
|
|
20
24
|
#
|
|
@@ -123,9 +127,11 @@ if [[ ! -f "$PLAN_FILE" ]]; then
|
|
|
123
127
|
exit 0
|
|
124
128
|
fi
|
|
125
129
|
|
|
126
|
-
# Check if session ID already exists in the
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
# Check if session ID already exists in the ## Sessions section (dedup)
|
|
131
|
+
# Only search within the Sessions section to avoid false positives from session IDs
|
|
132
|
+
# appearing in plan content (e.g., scratchpad paths contain session IDs)
|
|
133
|
+
if sed -n '/^## Sessions$/,$p' "$PLAN_FILE" 2>/dev/null | grep -qF "$SESSION_ID"; then
|
|
134
|
+
log_debug "dedup: session ID already in $PLAN_FILE sessions section (resolved via $RESOLUTION_METHOD), skipping write"
|
|
129
135
|
exit 0
|
|
130
136
|
fi
|
|
131
137
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Lisa-Managed Files
|
|
2
|
+
|
|
3
|
+
The following files are managed by Lisa and will be overwritten on every `lisa` run. Never edit them directly. Where a local override exists, edit that instead.
|
|
4
|
+
|
|
5
|
+
## Files with local overrides (edit the override, not the managed file)
|
|
6
|
+
|
|
7
|
+
| Managed File (do not edit) | Local Override (edit this instead) |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `eslint.config.ts` | `eslint.config.local.ts` |
|
|
10
|
+
| `jest.config.ts` | `jest.config.local.ts` |
|
|
11
|
+
| `tsconfig.json` | `tsconfig.local.json` |
|
|
12
|
+
| `eslint.ignore.config.json` | `eslint.config.local.ts` |
|
|
13
|
+
| `eslint.thresholds.json` | Edit directly (create-only, Lisa won't overwrite) |
|
|
14
|
+
| `jest.thresholds.json` | Edit directly (create-only, Lisa won't overwrite) |
|
|
15
|
+
| `.claude/rules/coding-philosophy.md` | `.claude/rules/PROJECT_RULES.md` |
|
|
16
|
+
| `.claude/rules/plan.md` | `.claude/rules/PROJECT_RULES.md` |
|
|
17
|
+
| `.claude/rules/verfication.md` | `.claude/rules/PROJECT_RULES.md` |
|
|
18
|
+
|
|
19
|
+
## Files and directories with NO local override (do not edit at all)
|
|
20
|
+
|
|
21
|
+
- `CLAUDE.md`, `HUMAN.md`, `.safety-net.json`
|
|
22
|
+
- `.prettierrc.json`, `.prettierignore`, `.lintstagedrc.json`, `.versionrc`, `.nvmrc`
|
|
23
|
+
- `.yamllint`, `.gitleaksignore`, `commitlint.config.cjs`, `sgconfig.yml`, `knip.json`
|
|
24
|
+
- `eslint.base.ts`, `eslint.typescript.ts`, `eslint.expo.ts`, `eslint.nestjs.ts`, `eslint.cdk.ts`, `eslint.slow.config.ts`
|
|
25
|
+
- `jest.base.ts`, `jest.typescript.ts`, `jest.expo.ts`, `jest.nestjs.ts`, `jest.cdk.ts`
|
|
26
|
+
- `tsconfig.base.json`, `tsconfig.typescript.json`, `tsconfig.expo.json`, `tsconfig.nestjs.json`, `tsconfig.cdk.json`
|
|
27
|
+
- `tsconfig.eslint.json`, `tsconfig.build.json`, `tsconfig.spec.json`
|
|
28
|
+
- `eslint-plugin-code-organization/*`, `eslint-plugin-component-structure/*`, `eslint-plugin-ui-standards/*`
|
|
29
|
+
- `.claude/settings.json`, `.claude/hooks/*`, `.claude/skills/*`, `.claude/commands/*`, `.claude/agents/*`
|
|
30
|
+
- `.claude/README.md`, `.claude/REFERENCE.md`
|
|
31
|
+
- `.github/workflows/quality.yml`, `.github/workflows/release.yml`, `.github/workflows/claude.yml`
|
|
32
|
+
- `.github/workflows/build.yml`, `.github/workflows/lighthouse.yml` (Expo)
|
|
33
|
+
- `.github/workflows/load-test.yml`, `.github/workflows/zap-baseline.yml` (NestJS)
|
|
34
|
+
- `.github/dependabot.yml`, `.github/GITHUB_ACTIONS.md`, `.github/k6/*`
|
|
35
|
+
- `lighthouserc.js`, `.mcp.json`, `.easignore.extra` (Expo)
|
|
36
|
+
- `scripts/zap-baseline.sh`, `.zap/*`
|
|
37
|
+
- `ast-grep/*`
|
|
@@ -10,7 +10,7 @@ When making a plan:
|
|
|
10
10
|
- Always make sure you understand the correct versions of third party libraries
|
|
11
11
|
- Always save the plan with a name befitting the actual plan contents
|
|
12
12
|
- Always look for code that can be reused for implementation
|
|
13
|
-
- The plan MUST
|
|
13
|
+
- The plan MUST include written instructions to create a task list using TaskCreate for each task (following the Task Creation Specification below). The list should contain items related to the plan and specify that subagents should handle as many in parallel as possible. The following should always be included in the task list
|
|
14
14
|
- update/add/remove tests, containing the tests that need to get updated, added or removed
|
|
15
15
|
- update/add/remove documentation (jsdocs, markdown files, etc), containing the documentation that need to get updated, added or removed
|
|
16
16
|
- archive the plan (to be completed after all other tasks have been completed). This task should explcitly say to:
|
|
@@ -27,3 +27,53 @@ When making a plan:
|
|
|
27
27
|
- If referencing a ticket (jira, linear, etc), always add a comment to the ticket with the finalized plan
|
|
28
28
|
- The `## Sessions` section in plan files is auto-maintained by the `track-plan-sessions.sh` hook — do not manually edit it
|
|
29
29
|
|
|
30
|
+
## Task Creation Specification
|
|
31
|
+
|
|
32
|
+
When plans include TaskCreate instructions, each task must use this format:
|
|
33
|
+
|
|
34
|
+
### Parameters
|
|
35
|
+
|
|
36
|
+
- **subject**: Imperative form (e.g., "Add logout button to header")
|
|
37
|
+
- **activeForm**: Present continuous form (e.g., "Adding logout button to header")
|
|
38
|
+
|
|
39
|
+
### Description Template
|
|
40
|
+
|
|
41
|
+
Every task description must be a markdown document with these sections:
|
|
42
|
+
|
|
43
|
+
**Type:** Bug | Task | Epic | Story
|
|
44
|
+
|
|
45
|
+
**Description:** Clear description based on type (Bug: symptoms/root cause; Story: Gherkin Given/When/Then; Task: clear goal; Epic: goal with sub-tasks)
|
|
46
|
+
|
|
47
|
+
**Acceptance Criteria:** Checkbox list of completion criteria
|
|
48
|
+
|
|
49
|
+
**Relevant Research:** Code references, patterns, architecture constraints extracted from research
|
|
50
|
+
|
|
51
|
+
**Skills to Invoke:** `/coding-philosophy` is always required, plus other applicable skills
|
|
52
|
+
|
|
53
|
+
**Implementation Details:** Files to modify, functions to implement, edge cases
|
|
54
|
+
|
|
55
|
+
**Testing Requirements:** Unit tests (with `describe/it` structure), Integration tests, E2E tests (or "N/A")
|
|
56
|
+
|
|
57
|
+
**Verification:** Every task MUST have empirical verification (see `verfication.md` for types). Include: verification type, proof command, and expected output.
|
|
58
|
+
|
|
59
|
+
**Learnings:** On task completion, use `TaskUpdate` to save discoveries: `metadata: { learnings: ["Learning 1", ...] }`
|
|
60
|
+
|
|
61
|
+
### Metadata
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"plan": "<plan-name>",
|
|
66
|
+
"type": "bug|task|epic|story",
|
|
67
|
+
"skills": ["/coding-philosophy", ...],
|
|
68
|
+
"verification": {
|
|
69
|
+
"type": "test|ui-recording|test-coverage|api-test|manual-check|documentation",
|
|
70
|
+
"command": "the proof command",
|
|
71
|
+
"expected": "what success looks like"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Task Sizing
|
|
77
|
+
|
|
78
|
+
Each task must be small enough to have a **single, specific verification**. Ask: "Can I prove this is done with ONE command?" Split tasks that require multiple verifications.
|
|
79
|
+
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is managed by Lisa.
|
|
3
|
+
* Do not edit directly — changes will be overwritten on the next `lisa` run.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* ESLint 9 Flat Config - Slow Rules Only (NestJS)
|
|
8
|
+
*
|
|
9
|
+
* This configuration runs ONLY slow linting rules that are disabled in the
|
|
10
|
+
* main eslint.config.ts for performance. Run this periodically via `lint:slow`
|
|
11
|
+
* rather than on every lint pass.
|
|
12
|
+
*
|
|
13
|
+
* Rules included:
|
|
14
|
+
* - import/namespace - Type checks all namespace imports (slow)
|
|
15
|
+
* - import/no-cycle - Detects circular dependencies (very slow)
|
|
16
|
+
*
|
|
17
|
+
* NestJS-specific adjustments:
|
|
18
|
+
* - sonarjs/deprecation disabled (NestJS ecosystem APIs evolve frequently)
|
|
19
|
+
* - import/no-cycle disabled for *.module.ts (NestJS forwardRef pattern)
|
|
20
|
+
*
|
|
21
|
+
* @see https://github.com/import-js/eslint-plugin-import
|
|
22
|
+
* @module eslint.slow.config
|
|
23
|
+
*/
|
|
24
|
+
import importPlugin from "eslint-plugin-import";
|
|
25
|
+
import sonarjsPlugin from "eslint-plugin-sonarjs";
|
|
26
|
+
import tseslint from "typescript-eslint";
|
|
27
|
+
|
|
28
|
+
import ignoreConfig from "./eslint.ignore.config.json" with { type: "json" };
|
|
29
|
+
|
|
30
|
+
const ignorePatterns = ignoreConfig.ignores || [];
|
|
31
|
+
|
|
32
|
+
// Get the TypeScript flat config from the import plugin
|
|
33
|
+
const importTypescriptConfig = importPlugin.flatConfigs.typescript;
|
|
34
|
+
|
|
35
|
+
export default [
|
|
36
|
+
// Use same ignores as main config, plus ignore all non-TS files
|
|
37
|
+
// This prevents errors from inline eslint directives in JS files
|
|
38
|
+
// that reference rules not loaded in this minimal config
|
|
39
|
+
// Also ignore template files in type-specific directories that don't have tsconfig
|
|
40
|
+
{
|
|
41
|
+
ignores: [
|
|
42
|
+
...ignorePatterns,
|
|
43
|
+
"**/*.js",
|
|
44
|
+
"**/*.mjs",
|
|
45
|
+
"**/*.cjs",
|
|
46
|
+
"**/*.jsx",
|
|
47
|
+
"**/__tests__/**",
|
|
48
|
+
"cdk/**",
|
|
49
|
+
"expo/**",
|
|
50
|
+
"nestjs/**",
|
|
51
|
+
"typescript/**",
|
|
52
|
+
"npm-package/**",
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
// TypeScript files - slow import rules only
|
|
57
|
+
{
|
|
58
|
+
files: ["**/*.ts", "**/*.tsx"],
|
|
59
|
+
linterOptions: {
|
|
60
|
+
// Ignore inline eslint-disable comments since they reference rules
|
|
61
|
+
// from the main config that aren't loaded in this minimal config
|
|
62
|
+
noInlineConfig: true,
|
|
63
|
+
},
|
|
64
|
+
languageOptions: {
|
|
65
|
+
parser: tseslint.parser,
|
|
66
|
+
parserOptions: {
|
|
67
|
+
project: "tsconfig.eslint.json",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
plugins: {
|
|
71
|
+
...(importTypescriptConfig?.plugins ?? {}),
|
|
72
|
+
sonarjs: sonarjsPlugin,
|
|
73
|
+
},
|
|
74
|
+
settings: {
|
|
75
|
+
...(importTypescriptConfig?.settings ?? {}),
|
|
76
|
+
"import/resolver": {
|
|
77
|
+
...((importTypescriptConfig?.settings?.["import/resolver"] as Record<
|
|
78
|
+
string,
|
|
79
|
+
unknown
|
|
80
|
+
>) ?? {}),
|
|
81
|
+
typescript: true,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
rules: {
|
|
85
|
+
// ONLY slow rules - everything else runs in the main config
|
|
86
|
+
"import/namespace": "error",
|
|
87
|
+
"import/no-cycle": "error",
|
|
88
|
+
|
|
89
|
+
// NestJS ecosystem APIs evolve frequently with deprecation notices
|
|
90
|
+
// that are not immediately actionable (e.g., OpenAI SDK, MCP SDK)
|
|
91
|
+
"sonarjs/deprecation": "off",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
// NestJS module files use forwardRef() to handle circular dependencies
|
|
96
|
+
// at runtime. ESLint's import/no-cycle doesn't understand this pattern.
|
|
97
|
+
{
|
|
98
|
+
files: ["**/*.module.ts"],
|
|
99
|
+
rules: {
|
|
100
|
+
"import/no-cycle": "off",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
];
|
package/package.json
CHANGED
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
},
|
|
86
86
|
"resolutions": {},
|
|
87
87
|
"name": "@codyswann/lisa",
|
|
88
|
-
"version": "1.
|
|
88
|
+
"version": "1.18.0",
|
|
89
89
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
90
90
|
"main": "dist/index.js",
|
|
91
91
|
"bin": {
|